tree to the state before the operation. Conflicts raised during the
push operation have to be fixed and the 'resolved' command run.
-The 'push' command also notifies when the patch becomes empty after
-the merge operation (i.e. it was fully merged upstream)."""
+The command also notifies when the patch becomes empty (fully merged
+upstream) or is modified (three-way merged) by the 'push' operation."""
options = [make_option('-a', '--all',
help = 'push all the unapplied patches',
print 'Pushing patch "%s"...' % p,
sys.stdout.flush()
- crt_series.push_patch(p)
+ modified = crt_series.push_patch(p)
if crt_series.empty_patch(p):
print 'done (empty patch)'
+ elif modified:
+ print 'done (modified)'
else:
print 'done'
print_crt_patch()
top = patch.get_top()
ex = None
+ modified = False
# top != bottom always since we have a commit for each patch
if head == bottom:
# Try the fast applying first. If this fails, fall back to the
# three-way merge
if not git.apply_diff(bottom, top):
+ # if git.apply_diff() fails, the patch requires a diff3
+ # merge and can be reported as modified
+ modified = True
+
# merge can fail but the patch needs to be pushed
try:
git.merge(bottom, head, top)
else:
raise StackException, str(ex)
+ return modified
+
def undo_push(self):
name = self.get_current()
assert(name)