) % (tree, parents, self.author, self.committer, self.message)
@classmethod
def parse(cls, repository, s):
- cd = cls()
+ cd = cls(parents = [])
lines = list(s.splitlines(True))
for i in xrange(len(lines)):
line = lines[i].strip()
class MergeException(exception.StgException):
pass
+class MergeConflictException(MergeException):
+ pass
+
class Index(RunWithEnv):
def __init__(self, repository, filename):
self.__repository = repository
assert isinstance(ours, Tree)
assert isinstance(theirs, Tree)
try:
- self.run(['git', 'merge-recursive', base.sha1, '--', ours.sha1,
- theirs.sha1],
- env = { 'GITHEAD_%s' % base.sha1: 'ancestor',
- 'GITHEAD_%s' % ours.sha1: 'current',
- 'GITHEAD_%s' % theirs.sha1: 'patched'}
- ).cwd(self.__worktree.directory).discard_output()
+ r = self.run(['git', 'merge-recursive', base.sha1, '--', ours.sha1,
+ theirs.sha1],
+ env = { 'GITHEAD_%s' % base.sha1: 'ancestor',
+ 'GITHEAD_%s' % ours.sha1: 'current',
+ 'GITHEAD_%s' % theirs.sha1: 'patched'}
+ ).cwd(self.__worktree.directory)
+ r.discard_output()
except run.RunException, e:
- raise MergeException('Index/worktree dirty')
+ if r.exitcode == 1:
+ raise MergeConflictException()
+ else:
+ raise MergeException('Index/worktree dirty')
def changed_files(self):
return self.run(['git', 'diff-files', '--name-only']).output_lines()
def update_index(self, files):