##// END OF EJS Templates
phabricator: warn if unable to amend, instead of aborting after posting...
phabricator: warn if unable to amend, instead of aborting after posting There was a divergence in behavior here between obsolete and strip based amending. I first noticed the abort when testing outside of the test harness, but then had trouble recreating it here after reverting the code changes. It turns out, strip based amend was successfully amending the public commit after it was posted! It looks like the protection is in the `commit --amend` command, not in the underlying code that it calls. I considered doing a preflight check and aborting. But the locks are only acquired at the end, if amending, and this is too large a section of code to be wrapped in a maybe-it's-held-or-not context manager for my tastes. Additionally, some people do post-push reviews, and amending is the default behavior, so they shouldn't see a misleading error message. The lack of a 'Differential Revision' entry in the commit message breaks a {phabreview} test, so it had to be partially conditionalized.

File last commit:

r39743:5abc47d4 default
r41198:0101a35d default
Show More
test-contrib.t
175 lines | 3.8 KiB | text/troff | Tads3Lexer
Set vars:
$ CONTRIBDIR="$TESTDIR/../contrib"
Test simplemerge command:
$ cp "$CONTRIBDIR/simplemerge" .
$ echo base > base
$ echo local > local
$ cat base >> local
$ cp local orig
$ cat base > other
$ echo other >> other
changing local directly
$ "$PYTHON" simplemerge local base other && echo "merge succeeded"
merge succeeded
$ cat local
local
base
other
$ cp orig local
printing to stdout
$ "$PYTHON" simplemerge -p local base other
local
base
other
local:
$ cat local
local
base
conflicts
$ cp base conflict-local
$ cp other conflict-other
$ echo not other >> conflict-local
$ echo end >> conflict-local
$ echo end >> conflict-other
$ "$PYTHON" simplemerge -p conflict-local base conflict-other
base
<<<<<<< conflict-local
not other
=======
other
>>>>>>> conflict-other
end
[1]
1 label
$ "$PYTHON" simplemerge -p -L foo conflict-local base conflict-other
base
<<<<<<< foo
not other
=======
other
>>>>>>> conflict-other
end
[1]
2 labels
$ "$PYTHON" simplemerge -p -L foo -L bar conflict-local base conflict-other
base
<<<<<<< foo
not other
=======
other
>>>>>>> bar
end
[1]
3 labels
$ "$PYTHON" simplemerge -p -L foo -L bar -L base conflict-local base conflict-other
base
<<<<<<< foo
not other
end
||||||| base
=======
other
end
>>>>>>> bar
[1]
too many labels
$ "$PYTHON" simplemerge -p -L foo -L bar -L baz -L buz conflict-local base conflict-other
abort: can only specify three labels.
[255]
binary file
$ "$PYTHON" -c "f = open('binary-local', 'w'); f.write('\x00'); f.close()"
$ cat orig >> binary-local
$ "$PYTHON" simplemerge -p binary-local base other
warning: binary-local looks like a binary file.
[1]
binary file --text
$ "$PYTHON" simplemerge -a -p binary-local base other 2>&1
warning: binary-local looks like a binary file.
\x00local (esc)
base
other
help
$ "$PYTHON" simplemerge --help
simplemerge [OPTS] LOCAL BASE OTHER
Simple three-way file merge utility with a minimal feature set.
Apply to LOCAL the changes necessary to go from BASE to OTHER.
By default, LOCAL is overwritten with the results of this operation.
options:
-L --label labels to use on conflict markers
-a --text treat all files as text
-p --print print results instead of overwriting LOCAL
--no-minimal no effect (DEPRECATED)
-h --help display help and exit
-q --quiet suppress output
wrong number of arguments
$ "$PYTHON" simplemerge
simplemerge: wrong number of arguments
simplemerge [OPTS] LOCAL BASE OTHER
Simple three-way file merge utility with a minimal feature set.
Apply to LOCAL the changes necessary to go from BASE to OTHER.
By default, LOCAL is overwritten with the results of this operation.
options:
-L --label labels to use on conflict markers
-a --text treat all files as text
-p --print print results instead of overwriting LOCAL
--no-minimal no effect (DEPRECATED)
-h --help display help and exit
-q --quiet suppress output
[1]
bad option
$ "$PYTHON" simplemerge --foo -p local base other
simplemerge: option --foo not recognized
simplemerge [OPTS] LOCAL BASE OTHER
Simple three-way file merge utility with a minimal feature set.
Apply to LOCAL the changes necessary to go from BASE to OTHER.
By default, LOCAL is overwritten with the results of this operation.
options:
-L --label labels to use on conflict markers
-a --text treat all files as text
-p --print print results instead of overwriting LOCAL
--no-minimal no effect (DEPRECATED)
-h --help display help and exit
-q --quiet suppress output
[1]