mirror of
https://github.com/mhagger/git-imerge.git
synced 2024-09-21 04:28:11 +03:00
Make incorporate_user_merge() return the blocked block that would be affected.
Raise NoManualMergeError if there was no manual merge ready to go. Raise NotABlockingCommitError if the manual merge was not blocking the frontier.
This commit is contained in:
parent
8c7b9dd2a6
commit
57763acf26
50
git-imerge
50
git-imerge
@ -1059,6 +1059,10 @@ class MergeFrontier(object):
|
||||
)
|
||||
|
||||
|
||||
class NoManualMergeError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class ManualMergeUnusableError(Exception):
|
||||
def __init__(self, msg, commit):
|
||||
Exception.__init__(self, 'Commit %s is not usable; %s' % (commit, msg))
|
||||
@ -1996,16 +2000,17 @@ def incorporate_user_merge(merge_state):
|
||||
"""If the user has done a merge for us, incorporate the results.
|
||||
|
||||
If reference refs/heads/imerge/NAME exists, try to incorporate it
|
||||
into merge_state, auto-fill if possible, and delete the reference.
|
||||
If the reference exists but cannot be used, raise a
|
||||
ManualMergeUnusableError. This function must be called with a
|
||||
clean work tree."""
|
||||
into merge_state, delete the reference, and return (i1,i2)
|
||||
corresponding to the merge. If the reference cannot be used,
|
||||
raise NoManualMergeError(). If the reference exists but cannot be
|
||||
used, raise a ManualMergeUnusableError. This function must be
|
||||
called with a clean work tree."""
|
||||
|
||||
refname = MergeState.get_scratch_refname(merge_state.name)
|
||||
try:
|
||||
commit = get_commit_sha1(refname)
|
||||
except ValueError:
|
||||
return False
|
||||
raise NoManualMergeError('There was no merge at %s!' % (refname,))
|
||||
|
||||
merge_frontier = MergeFrontier.map_known_frontier(merge_state)
|
||||
|
||||
@ -2033,11 +2038,8 @@ def incorporate_user_merge(merge_state):
|
||||
'-d', refname,
|
||||
])
|
||||
|
||||
try:
|
||||
merge_frontier.get_affected_blocker_block(i1, i2)
|
||||
return True
|
||||
except NotABlockingCommitError, e:
|
||||
return False
|
||||
# This might throw NotABlockingCommitError:
|
||||
return merge_frontier.get_affected_blocker_block(i1, i2)
|
||||
|
||||
|
||||
def choose_merge_name(name, default_to_unique=True):
|
||||
@ -2356,9 +2358,18 @@ def main(args):
|
||||
require_clean_work_tree('proceed')
|
||||
merge_state = read_merge_state(options.name)
|
||||
try:
|
||||
incorporate_user_merge(merge_state)
|
||||
unblocked_block = incorporate_user_merge(merge_state)
|
||||
sys.stderr.write(
|
||||
'Merge has been recorded for merge %d-%d.\n'
|
||||
% unblocked_block.get_original_indexes(1, 1)
|
||||
)
|
||||
except NoManualMergeError:
|
||||
pass
|
||||
except NotABlockingCommitError:
|
||||
raise Failure(str(e))
|
||||
except ManualMergeUnusableError, e:
|
||||
raise Failure(str(e))
|
||||
|
||||
try:
|
||||
merge_state.auto_complete_frontier()
|
||||
except FrontierBlockedError, e:
|
||||
@ -2369,15 +2380,18 @@ def main(args):
|
||||
require_clean_work_tree('proceed')
|
||||
merge_state = read_merge_state(options.name)
|
||||
try:
|
||||
if incorporate_user_merge(merge_state):
|
||||
sys.stderr.write('Merge has been recorded.\n')
|
||||
else:
|
||||
raise Failure(
|
||||
'There was no merge at %s!'
|
||||
% (MergeState.get_scratch_refname(merge_state.name),)
|
||||
)
|
||||
unblocked_block = incorporate_user_merge(merge_state)
|
||||
sys.stderr.write(
|
||||
'Merge has been recorded for merge %d-%d.\n'
|
||||
% unblocked_block.get_original_indexes(1, 1)
|
||||
)
|
||||
except NoManualMergeError, e:
|
||||
raise Failure(str(e))
|
||||
except NotABlockingCommitError:
|
||||
raise Failure(str(e))
|
||||
except ManualMergeUnusableError, e:
|
||||
raise Failure(str(e))
|
||||
|
||||
try:
|
||||
merge_state.auto_complete_frontier()
|
||||
except FrontierBlockedError, e:
|
||||
|
Loading…
Reference in New Issue
Block a user