import re
+
+class GitFailedException(Exception):
+ pass
+
+
def Strip(f):
def new_f(*args, **kwargs):
return f(*args, **kwargs).strip()
assert name
self.Git(MakeArgs(["branch -D", name]))
+ def GitReset(self, name):
+ assert name
+ self.Git(MakeArgs(["reset --hard", name]))
+
+ def GitRemotes(self):
+ return map(str.strip, self.Git(MakeArgs(["branch -r"])).splitlines())
+
def GitCheckout(self, name):
assert name
self.Git(MakeArgs(["checkout -f", name]))
assert branch_or_hash
self.Git(MakeArgs(["checkout -f", branch_or_hash, "--", name]))
+ def GitCheckoutFileSafe(self, name, branch_or_hash):
+ try:
+ self.GitCheckoutFile(name, branch_or_hash)
+ except GitFailedException: # pragma: no cover
+ # The file doesn't exist in that revision.
+ return False
+ return True
+
+ def GitChangedFiles(self, git_hash):
+ assert git_hash
+ try:
+ files = self.Git(MakeArgs(["diff --name-only",
+ git_hash,
+ "%s^" % git_hash]))
+ return map(str.strip, files.splitlines())
+ except GitFailedException: # pragma: no cover
+ # Git fails using "^" at branch roots.
+ return []
+
+
@Strip
def GitCurrentBranch(self):
for line in self.Git("status -s -b -uno").strip().splitlines():
if format:
args.append("--format=%s" % format)
if grep:
- args.append("--grep=\"%s\"" % grep)
+ args.append("--grep=\"%s\"" % grep.replace("\"", "\\\""))
if reverse:
args.append("--reverse")
if git_hash:
assert git_hash
return self.Git(MakeArgs(["log", "-1", "-p", git_hash]))
+ # TODO(machenbach): Unused? Remove.
def GitAdd(self, name):
assert name
self.Git(MakeArgs(["add", Quoted(name)]))
def GitSVNFetch(self):
self.Git("svn fetch")
+ # TODO(machenbach): Unused? Remove.
@Strip
def GitSVNLog(self):
return self.Git("svn log -1 --oneline")