benchmarking/repos/hg.py (57 lines of code) (raw):

#!/usr/bin/env python ############################################################################## # Copyright 2017-present, Facebook, Inc. # All rights reserved. # # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. ############################################################################## from __future__ import absolute_import, division, print_function, unicode_literals from utils.subprocess_with_logger import processRun from .repo_base import RepoBase class HGRepo(RepoBase): def __init__(self, dir): super(HGRepo, self).__init__(dir) def _run(self, cmd, *args): hg = ["hg"] if self.dir: hg.append("-R") hg.append(self.dir) hg.append(cmd) hg.extend(args) return "\n".join(processRun(hg)[0]) def pull(self, *args): return self._run("update", args[0]) def checkout(self, *args): self._run("update", *args) def getCurrentCommitHash(self): commit = self.getCommitHash(None) if commit[-1] == "+": commit = commit[:-1] return self.getCommitHash(commit) def getCommitHash(self, commit): if commit: output = self._run("log", "--template", "<START>{node}<END>", "-r", commit) else: output = self._run("log", "-l", "1", "--template", "<START>{node}<END>") start = output.index("<START>") + len("<START>") end = output.index("<END>") return output[start:end] def getCommitTime(self, commit): t = self._run("log", "--template", "<START>{date}<END>", "-r", commit).strip() start = t.index("<START>") + len("<START>") end = t.index("<END>") return int(float(t[start:end])) def getNextCommitHash(self, commit, step): self.pull(commit) res = self._run("next", str(step)) if res is None: return commit res = res.split("\n") if len(res) > 0 and res[0].strip() == "reached head commit": # Not yet have step commits return commit return self.getCurrentCommitHash() def getCommitsInRange(self, start_date, end_date): sdate = start_date.strftime("%Y-%m-%d %H:%M:%S") # edate = end_date.strftime("%Y-%m-%d %H:%M:%S") output = self._run( "log", "-r", 'children(first(reverse(::.) & date("<' + sdate + '")))', "--template", "{node}:{date}\\n", ).strip() return output def getPriorCommits(self, commit, num): # do not support prior commits return None