The logic of this is that when a "git-diff | git-apply" succeeds, the patch
is reported as unmodified. If the the above operation fails and the command
falls back to a three-way merge, the patch will be reported as modified.
Signed-off-by: Catalin Marinas <catalin.marinas@gmail.com>
tree to the state before the operation. Conflicts raised during the
push operation have to be fixed and the 'resolved' command run.
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',
options = [make_option('-a', '--all',
help = 'push all the unapplied patches',
print 'Pushing patch "%s"...' % p,
sys.stdout.flush()
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)'
if crt_series.empty_patch(p):
print 'done (empty patch)'
+ elif modified:
+ print 'done (modified)'
else:
print 'done'
print_crt_patch()
else:
print 'done'
print_crt_patch()
top = patch.get_top()
ex = None
top = patch.get_top()
ex = None
# top != bottom always since we have a commit for each patch
if head == bottom:
# 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):
# 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)
# merge can fail but the patch needs to be pushed
try:
git.merge(bottom, head, top)
else:
raise StackException, str(ex)
else:
raise StackException, str(ex)
def undo_push(self):
name = self.get_current()
assert(name)
def undo_push(self):
name = self.get_current()
assert(name)