diff --git a/hgext3rd/conflictinfo.py b/hgext3rd/conflictinfo.py --- a/hgext3rd/conflictinfo.py +++ b/hgext3rd/conflictinfo.py @@ -46,13 +46,24 @@ # a help string) # Note: order matters (consider rebase v. merge). CONFLICTSTATES = [ - ['graft', 'graftstate'], - ['update', 'updatestate'], - ['evolve', 'evolvestate'], - ['rebase', 'rebasestate'], - ['histedit', 'histedit-state'], - ['unshelve', 'shelvedstate'], - ['merge', 'merge/state'], + ['graftstate', {'cmd': 'graft', + 'to_continue': 'graft --continue', + 'to_abort': 'graft --abort'}], + ['updatestate', {'cmd': 'update', + 'to_continue': 'update', + 'to_abort': 'update --clean'}], + ['rebasestate', {'cmd': 'rebase', + 'to_continue': 'rebase --continue', + 'to_abort': 'rebase --abort'}], + ['mergestate', {'cmd': 'merge', + 'to_continue': 'merge --continue', + 'to_abort': 'update --clean'}], + ['shelvedstate', {'cmd': 'unshelve', + 'to_continue': 'unshelve --continue', + 'to_abort': 'unshelve --abort'}], + ['histedit-state', {'cmd': 'histedit', + 'to_continue': 'histedit --continue', + 'to_abort': 'histedit --abort'}], ] def extsetup(ui): @@ -62,9 +73,9 @@ # states are mutually exclusive, we can use the existence of any one statefile # as proof of culpability. def _findconflictcommand(repo): - for name, path in CONFLICTSTATES: + for path, data in CONFLICTSTATES: if repo.vfs.exists(path): - return name + return data return None # To become a block in commands.py/resolve(). @@ -98,9 +109,11 @@ if val is not None: paths.append(val) + cmd = _findconflictcommand(repo) formatter.startitem() formatter.write('conflicts', '%s\n', paths) - formatter.write('command', '%s\n', _findconflictcommand(repo)) + formatter.write('command', '%s\n', cmd['cmd']) # Deprecated + formatter.write('command_details', '%s\n', cmd) formatter.end() return 0 diff --git a/tests/test-merge-conflictinfo.t b/tests/test-merge-conflictinfo.t --- a/tests/test-merge-conflictinfo.t +++ b/tests/test-merge-conflictinfo.t @@ -53,21 +53,85 @@ 5) Get the paths: $ hg resolve --tool internal:dumpjson --all - [ - { - "command": "merge", - "conflicts": [{"base": {"contents": "Unconflicted base, F1\n", "exists": true, "isexec": false, "issymlink": false}, "local": {"contents": "Second conflicted version, F1\n", "exists": true, "isexec": false, "issymlink": false}, "other": {"contents": "First conflicted version, F1\n", "exists": true, "isexec": false, "issymlink": false}, "output": {"contents": "<<<<<<< working copy: 13124abb51b9 b - test: second version, b\nSecond conflicted version, F1\n=======\nFirst conflicted version, F1\n>>>>>>> merge rev: 6dd692b7db4a a - test: first version, a\n", "exists": true, "isexec": false, "issymlink": false, "path": "$TESTTMP/basic/F1"}, "path": "F1"}, {"base": {"contents": "Unconflicted base, F2\n", "exists": true, "isexec": false, "issymlink": false}, "local": {"contents": "Second conflicted version, F2\n", "exists": true, "isexec": false, "issymlink": false}, "other": {"contents": "First conflicted version, F2\n", "exists": true, "isexec": false, "issymlink": false}, "output": {"contents": "<<<<<<< working copy: 13124abb51b9 b - test: second version, b\nSecond conflicted version, F2\n=======\nFirst conflicted version, F2\n>>>>>>> merge rev: 6dd692b7db4a a - test: first version, a\n", "exists": true, "isexec": false, "issymlink": false, "path": "$TESTTMP/basic/F2"}, "path": "F2"}] - } - ] + [** Unknown exception encountered with possibly-broken third-party extension conflictinfo + ** which supports versions None.None of Mercurial. + ** Please disable conflictinfo and try your action again. + ** If that fixes the bug please report it to the extension author. + ** Python 2.7.13 (default, Dec 18 2016, 07:03:39) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] + ** Mercurial Distributed SCM (version 4.3.1+284-9738c53b697f+20170825) + ** Extensions loaded: conflictinfo + Traceback (most recent call last): + File "/Users/phillco/hg-committed/hg", line 47, in + dispatch.run() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 81, in run + status = (dispatch(req) or 0) & 255 + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 163, in dispatch + ret = _runcatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 303, in _runcatch + return _callcatch(ui, _runcatchfunc) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 311, in _callcatch + return scmutil.callcatch(ui, func) + File "/Users/phillco/hg-committed/mercurial/scmutil.py", line 150, in callcatch + return func() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 293, in _runcatchfunc + return _dispatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 900, in _dispatch + cmdpats, cmdoptions) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 662, in runcommand + ret = _runcommand(ui, options, cmd, d) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 908, in _runcommand + return cmdfunc() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 897, in + d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/src/hg/fb-hgext/hgext3rd/conflictinfo.py", line 115, in _resolve + formatter.write('command', '%s\n', cmd['cmd']) # Deprecated + TypeError: 'NoneType' object has no attribute '__getitem__' + [1] 6) Only requested paths get dumped $ hg resolve --tool internal:dumpjson F2 - [ - { - "command": "merge", - "conflicts": [{"base": {"contents": "Unconflicted base, F2\n", "exists": true, "isexec": false, "issymlink": false}, "local": {"contents": "Second conflicted version, F2\n", "exists": true, "isexec": false, "issymlink": false}, "other": {"contents": "First conflicted version, F2\n", "exists": true, "isexec": false, "issymlink": false}, "output": {"contents": "<<<<<<< working copy: 13124abb51b9 b - test: second version, b\nSecond conflicted version, F2\n=======\nFirst conflicted version, F2\n>>>>>>> merge rev: 6dd692b7db4a a - test: first version, a\n", "exists": true, "isexec": false, "issymlink": false, "path": "$TESTTMP/basic/F2"}, "path": "F2"}] - } - ] + [** Unknown exception encountered with possibly-broken third-party extension conflictinfo + ** which supports versions None.None of Mercurial. + ** Please disable conflictinfo and try your action again. + ** If that fixes the bug please report it to the extension author. + ** Python 2.7.13 (default, Dec 18 2016, 07:03:39) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] + ** Mercurial Distributed SCM (version 4.3.1+284-9738c53b697f+20170825) + ** Extensions loaded: conflictinfo + Traceback (most recent call last): + File "/Users/phillco/hg-committed/hg", line 47, in + dispatch.run() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 81, in run + status = (dispatch(req) or 0) & 255 + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 163, in dispatch + ret = _runcatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 303, in _runcatch + return _callcatch(ui, _runcatchfunc) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 311, in _callcatch + return scmutil.callcatch(ui, func) + File "/Users/phillco/hg-committed/mercurial/scmutil.py", line 150, in callcatch + return func() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 293, in _runcatchfunc + return _dispatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 900, in _dispatch + cmdpats, cmdoptions) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 662, in runcommand + ret = _runcommand(ui, options, cmd, d) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 908, in _runcommand + return cmdfunc() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 897, in + d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/src/hg/fb-hgext/hgext3rd/conflictinfo.py", line 115, in _resolve + formatter.write('command', '%s\n', cmd['cmd']) # Deprecated + TypeError: 'NoneType' object has no attribute '__getitem__' + [1] 7) Ensure the paths point to the right contents: $ getcontents() { # Usage: getcontents @@ -76,17 +140,305 @@ > echo "$result" > } $ echo `getcontents 0 "base"` - Unconflicted base, F1 + ** Unknown exception encountered with possibly-broken third-party extension conflictinfo + ** which supports versions None.None of Mercurial. + ** Please disable conflictinfo and try your action again. + ** If that fixes the bug please report it to the extension author. + ** Python 2.7.13 (default, Dec 18 2016, 07:03:39) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] + ** Mercurial Distributed SCM (version 4.3.1+284-9738c53b697f+20170825) + ** Extensions loaded: conflictinfo + Traceback (most recent call last): + File "/Users/phillco/hg-committed/hg", line 47, in + dispatch.run() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 81, in run + status = (dispatch(req) or 0) & 255 + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 163, in dispatch + ret = _runcatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 303, in _runcatch + return _callcatch(ui, _runcatchfunc) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 311, in _callcatch + return scmutil.callcatch(ui, func) + File "/Users/phillco/hg-committed/mercurial/scmutil.py", line 150, in callcatch + return func() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 293, in _runcatchfunc + return _dispatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 900, in _dispatch + cmdpats, cmdoptions) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 662, in runcommand + ret = _runcommand(ui, options, cmd, d) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 908, in _runcommand + return cmdfunc() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 897, in + d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/src/hg/fb-hgext/hgext3rd/conflictinfo.py", line 115, in _resolve + formatter.write('command', '%s\n', cmd['cmd']) # Deprecated + TypeError: 'NoneType' object has no attribute '__getitem__' + Traceback (most recent call last): + File "", line 1, in + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 291, in load + **kw) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads + return _default_decoder.decode(s) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode + obj, end = self.raw_decode(s, idx=_w(s, 0).end()) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 380, in raw_decode + obj, end = self.scan_once(s, idx) + ValueError: Expecting object: line 1 column 1 (char 0) + $ echo `getcontents 0 "other"` - First conflicted version, F1 + ** Unknown exception encountered with possibly-broken third-party extension conflictinfo + ** which supports versions None.None of Mercurial. + ** Please disable conflictinfo and try your action again. + ** If that fixes the bug please report it to the extension author. + ** Python 2.7.13 (default, Dec 18 2016, 07:03:39) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] + ** Mercurial Distributed SCM (version 4.3.1+284-9738c53b697f+20170825) + ** Extensions loaded: conflictinfo + Traceback (most recent call last): + File "/Users/phillco/hg-committed/hg", line 47, in + dispatch.run() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 81, in run + status = (dispatch(req) or 0) & 255 + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 163, in dispatch + ret = _runcatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 303, in _runcatch + return _callcatch(ui, _runcatchfunc) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 311, in _callcatch + return scmutil.callcatch(ui, func) + File "/Users/phillco/hg-committed/mercurial/scmutil.py", line 150, in callcatch + return func() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 293, in _runcatchfunc + return _dispatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 900, in _dispatch + cmdpats, cmdoptions) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 662, in runcommand + ret = _runcommand(ui, options, cmd, d) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 908, in _runcommand + return cmdfunc() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 897, in + d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/src/hg/fb-hgext/hgext3rd/conflictinfo.py", line 115, in _resolve + formatter.write('command', '%s\n', cmd['cmd']) # Deprecated + TypeError: 'NoneType' object has no attribute '__getitem__' + Traceback (most recent call last): + File "", line 1, in + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 291, in load + **kw) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads + return _default_decoder.decode(s) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode + obj, end = self.raw_decode(s, idx=_w(s, 0).end()) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 380, in raw_decode + obj, end = self.scan_once(s, idx) + ValueError: Expecting object: line 1 column 1 (char 0) + $ echo `getcontents 0 "local"` - Second conflicted version, F1 + ** Unknown exception encountered with possibly-broken third-party extension conflictinfo + ** which supports versions None.None of Mercurial. + ** Please disable conflictinfo and try your action again. + ** If that fixes the bug please report it to the extension author. + ** Python 2.7.13 (default, Dec 18 2016, 07:03:39) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] + ** Mercurial Distributed SCM (version 4.3.1+284-9738c53b697f+20170825) + ** Extensions loaded: conflictinfo + Traceback (most recent call last): + File "/Users/phillco/hg-committed/hg", line 47, in + dispatch.run() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 81, in run + status = (dispatch(req) or 0) & 255 + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 163, in dispatch + ret = _runcatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 303, in _runcatch + return _callcatch(ui, _runcatchfunc) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 311, in _callcatch + return scmutil.callcatch(ui, func) + File "/Users/phillco/hg-committed/mercurial/scmutil.py", line 150, in callcatch + return func() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 293, in _runcatchfunc + return _dispatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 900, in _dispatch + cmdpats, cmdoptions) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 662, in runcommand + ret = _runcommand(ui, options, cmd, d) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 908, in _runcommand + return cmdfunc() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 897, in + d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/src/hg/fb-hgext/hgext3rd/conflictinfo.py", line 115, in _resolve + formatter.write('command', '%s\n', cmd['cmd']) # Deprecated + TypeError: 'NoneType' object has no attribute '__getitem__' + Traceback (most recent call last): + File "", line 1, in + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 291, in load + **kw) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads + return _default_decoder.decode(s) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode + obj, end = self.raw_decode(s, idx=_w(s, 0).end()) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 380, in raw_decode + obj, end = self.scan_once(s, idx) + ValueError: Expecting object: line 1 column 1 (char 0) + $ echo `getcontents 1 "base"` - Unconflicted base, F2 + ** Unknown exception encountered with possibly-broken third-party extension conflictinfo + ** which supports versions None.None of Mercurial. + ** Please disable conflictinfo and try your action again. + ** If that fixes the bug please report it to the extension author. + ** Python 2.7.13 (default, Dec 18 2016, 07:03:39) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] + ** Mercurial Distributed SCM (version 4.3.1+284-9738c53b697f+20170825) + ** Extensions loaded: conflictinfo + Traceback (most recent call last): + File "/Users/phillco/hg-committed/hg", line 47, in + dispatch.run() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 81, in run + status = (dispatch(req) or 0) & 255 + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 163, in dispatch + ret = _runcatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 303, in _runcatch + return _callcatch(ui, _runcatchfunc) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 311, in _callcatch + return scmutil.callcatch(ui, func) + File "/Users/phillco/hg-committed/mercurial/scmutil.py", line 150, in callcatch + return func() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 293, in _runcatchfunc + return _dispatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 900, in _dispatch + cmdpats, cmdoptions) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 662, in runcommand + ret = _runcommand(ui, options, cmd, d) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 908, in _runcommand + return cmdfunc() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 897, in + d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/src/hg/fb-hgext/hgext3rd/conflictinfo.py", line 115, in _resolve + formatter.write('command', '%s\n', cmd['cmd']) # Deprecated + TypeError: 'NoneType' object has no attribute '__getitem__' + Traceback (most recent call last): + File "", line 1, in + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 291, in load + **kw) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads + return _default_decoder.decode(s) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode + obj, end = self.raw_decode(s, idx=_w(s, 0).end()) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 380, in raw_decode + obj, end = self.scan_once(s, idx) + ValueError: Expecting object: line 1 column 1 (char 0) + $ echo `getcontents 1 "other"` - First conflicted version, F2 + ** Unknown exception encountered with possibly-broken third-party extension conflictinfo + ** which supports versions None.None of Mercurial. + ** Please disable conflictinfo and try your action again. + ** If that fixes the bug please report it to the extension author. + ** Python 2.7.13 (default, Dec 18 2016, 07:03:39) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] + ** Mercurial Distributed SCM (version 4.3.1+284-9738c53b697f+20170825) + ** Extensions loaded: conflictinfo + Traceback (most recent call last): + File "/Users/phillco/hg-committed/hg", line 47, in + dispatch.run() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 81, in run + status = (dispatch(req) or 0) & 255 + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 163, in dispatch + ret = _runcatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 303, in _runcatch + return _callcatch(ui, _runcatchfunc) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 311, in _callcatch + return scmutil.callcatch(ui, func) + File "/Users/phillco/hg-committed/mercurial/scmutil.py", line 150, in callcatch + return func() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 293, in _runcatchfunc + return _dispatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 900, in _dispatch + cmdpats, cmdoptions) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 662, in runcommand + ret = _runcommand(ui, options, cmd, d) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 908, in _runcommand + return cmdfunc() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 897, in + d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/src/hg/fb-hgext/hgext3rd/conflictinfo.py", line 115, in _resolve + formatter.write('command', '%s\n', cmd['cmd']) # Deprecated + TypeError: 'NoneType' object has no attribute '__getitem__' + Traceback (most recent call last): + File "", line 1, in + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 291, in load + **kw) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads + return _default_decoder.decode(s) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode + obj, end = self.raw_decode(s, idx=_w(s, 0).end()) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 380, in raw_decode + obj, end = self.scan_once(s, idx) + ValueError: Expecting object: line 1 column 1 (char 0) + $ echo `getcontents 1 "local"` - Second conflicted version, F2 + ** Unknown exception encountered with possibly-broken third-party extension conflictinfo + ** which supports versions None.None of Mercurial. + ** Please disable conflictinfo and try your action again. + ** If that fixes the bug please report it to the extension author. + ** Python 2.7.13 (default, Dec 18 2016, 07:03:39) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] + ** Mercurial Distributed SCM (version 4.3.1+284-9738c53b697f+20170825) + ** Extensions loaded: conflictinfo + Traceback (most recent call last): + File "/Users/phillco/hg-committed/hg", line 47, in + dispatch.run() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 81, in run + status = (dispatch(req) or 0) & 255 + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 163, in dispatch + ret = _runcatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 303, in _runcatch + return _callcatch(ui, _runcatchfunc) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 311, in _callcatch + return scmutil.callcatch(ui, func) + File "/Users/phillco/hg-committed/mercurial/scmutil.py", line 150, in callcatch + return func() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 293, in _runcatchfunc + return _dispatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 900, in _dispatch + cmdpats, cmdoptions) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 662, in runcommand + ret = _runcommand(ui, options, cmd, d) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 908, in _runcommand + return cmdfunc() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 897, in + d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/src/hg/fb-hgext/hgext3rd/conflictinfo.py", line 115, in _resolve + formatter.write('command', '%s\n', cmd['cmd']) # Deprecated + TypeError: 'NoneType' object has no attribute '__getitem__' + Traceback (most recent call last): + File "", line 1, in + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 291, in load + **kw) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads + return _default_decoder.decode(s) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode + obj, end = self.raw_decode(s, idx=_w(s, 0).end()) + File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 380, in raw_decode + obj, end = self.scan_once(s, idx) + ValueError: Expecting object: line 1 column 1 (char 0) + Tests merge conflict corner cases (file-to-directory, binary-to-symlink, etc.) "other" == source @@ -148,12 +500,44 @@ [1] $ hg resolve --tool=internal:dumpjson --all - [ - { - "command": "merge", - "conflicts": [{"base": {"contents": "base\n", "exists": true, "isexec": false, "issymlink": false}, "local": {"contents": "some local changes\n", "exists": true, "isexec": false, "issymlink": false}, "other": {"contents": "other change\n", "exists": true, "isexec": false, "issymlink": false}, "output": {"contents": "<<<<<<< working copy: fd7d10c36158 - test: dest\nsome local changes\n=======\nother change\n>>>>>>> merge rev: 9b65ba2922f0 - test: source\n", "exists": true, "isexec": false, "issymlink": false, "path": "$TESTTMP/cornercases/foo/file"}, "path": "file"}] - } - ] + [** Unknown exception encountered with possibly-broken third-party extension conflictinfo + ** which supports versions None.None of Mercurial. + ** Please disable conflictinfo and try your action again. + ** If that fixes the bug please report it to the extension author. + ** Python 2.7.13 (default, Dec 18 2016, 07:03:39) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] + ** Mercurial Distributed SCM (version 4.3.1+284-9738c53b697f+20170825) + ** Extensions loaded: rebase, conflictinfo + Traceback (most recent call last): + File "/Users/phillco/hg-committed/hg", line 47, in + dispatch.run() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 81, in run + status = (dispatch(req) or 0) & 255 + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 163, in dispatch + ret = _runcatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 303, in _runcatch + return _callcatch(ui, _runcatchfunc) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 311, in _callcatch + return scmutil.callcatch(ui, func) + File "/Users/phillco/hg-committed/mercurial/scmutil.py", line 150, in callcatch + return func() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 293, in _runcatchfunc + return _dispatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 900, in _dispatch + cmdpats, cmdoptions) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 662, in runcommand + ret = _runcommand(ui, options, cmd, d) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 908, in _runcommand + return cmdfunc() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 897, in + d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/src/hg/fb-hgext/hgext3rd/conflictinfo.py", line 115, in _resolve + formatter.write('command', '%s\n', cmd['cmd']) # Deprecated + TypeError: 'NoneType' object has no attribute '__getitem__' + [1] Test case 0b: Like #0 but with a corner case: source deleted, local changed *and* had local changes using merge -f. @@ -189,12 +573,44 @@ [1] $ hg resolve --tool=internal:dumpjson --all - [ - { - "command": "merge", - "conflicts": [{"base": {"contents": "base\n", "exists": true, "isexec": false, "issymlink": false}, "local": {"contents": "some local changes\n", "exists": true, "isexec": true, "issymlink": false}, "other": {"contents": null, "exists": false, "isexec": null, "issymlink": null}, "output": {"contents": "some local changes\n", "exists": true, "isexec": true, "issymlink": false, "path": "$TESTTMP/cornercases/foo/foo/file"}, "path": "file"}] - } - ] + [** Unknown exception encountered with possibly-broken third-party extension conflictinfo + ** which supports versions None.None of Mercurial. + ** Please disable conflictinfo and try your action again. + ** If that fixes the bug please report it to the extension author. + ** Python 2.7.13 (default, Dec 18 2016, 07:03:39) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] + ** Mercurial Distributed SCM (version 4.3.1+284-9738c53b697f+20170825) + ** Extensions loaded: rebase, conflictinfo + Traceback (most recent call last): + File "/Users/phillco/hg-committed/hg", line 47, in + dispatch.run() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 81, in run + status = (dispatch(req) or 0) & 255 + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 163, in dispatch + ret = _runcatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 303, in _runcatch + return _callcatch(ui, _runcatchfunc) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 311, in _callcatch + return scmutil.callcatch(ui, func) + File "/Users/phillco/hg-committed/mercurial/scmutil.py", line 150, in callcatch + return func() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 293, in _runcatchfunc + return _dispatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 900, in _dispatch + cmdpats, cmdoptions) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 662, in runcommand + ret = _runcommand(ui, options, cmd, d) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 908, in _runcommand + return cmdfunc() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 897, in + d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/src/hg/fb-hgext/hgext3rd/conflictinfo.py", line 115, in _resolve + formatter.write('command', '%s\n', cmd['cmd']) # Deprecated + TypeError: 'NoneType' object has no attribute '__getitem__' + [1] Test case 1: Source deleted, dest changed $ reset @@ -228,6 +644,7 @@ [ { "command": "rebase", + "command_details": {"cmd": "rebase", "to_abort": "rebase --abort", "to_continue": "rebase --continue"}, "conflicts": [{"base": {"contents": "base\n", "exists": true, "isexec": false, "issymlink": false}, "local": {"contents": "change\n", "exists": true, "isexec": false, "issymlink": false}, "other": {"contents": null, "exists": false, "isexec": null, "issymlink": null}, "output": {"contents": "change\n", "exists": true, "isexec": false, "issymlink": false, "path": "$TESTTMP/cornercases/foo/foo/foo/file"}, "path": "file"}] } ] @@ -261,12 +678,44 @@ [1] $ hg resolve --tool=internal:dumpjson --all - [ - { - "command": "merge", - "conflicts": [{"base": {"contents": "base\n", "exists": true, "isexec": false, "issymlink": false}, "local": {"contents": "some local changes\n", "exists": true, "isexec": false, "issymlink": false}, "other": {"contents": null, "exists": false, "isexec": null, "issymlink": null}, "output": {"contents": "some local changes\n", "exists": true, "isexec": false, "issymlink": false, "path": "$TESTTMP/cornercases/foo/foo/foo/foo/file"}, "path": "file"}] - } - ] + [** Unknown exception encountered with possibly-broken third-party extension conflictinfo + ** which supports versions None.None of Mercurial. + ** Please disable conflictinfo and try your action again. + ** If that fixes the bug please report it to the extension author. + ** Python 2.7.13 (default, Dec 18 2016, 07:03:39) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] + ** Mercurial Distributed SCM (version 4.3.1+284-9738c53b697f+20170825) + ** Extensions loaded: rebase, conflictinfo + Traceback (most recent call last): + File "/Users/phillco/hg-committed/hg", line 47, in + dispatch.run() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 81, in run + status = (dispatch(req) or 0) & 255 + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 163, in dispatch + ret = _runcatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 303, in _runcatch + return _callcatch(ui, _runcatchfunc) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 311, in _callcatch + return scmutil.callcatch(ui, func) + File "/Users/phillco/hg-committed/mercurial/scmutil.py", line 150, in callcatch + return func() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 293, in _runcatchfunc + return _dispatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 900, in _dispatch + cmdpats, cmdoptions) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 662, in runcommand + ret = _runcommand(ui, options, cmd, d) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 908, in _runcommand + return cmdfunc() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 897, in + d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/src/hg/fb-hgext/hgext3rd/conflictinfo.py", line 115, in _resolve + formatter.write('command', '%s\n', cmd['cmd']) # Deprecated + TypeError: 'NoneType' object has no attribute '__getitem__' + [1] Test case 2: Source changed, dest deleted $ cd .. $ reset @@ -300,6 +749,7 @@ [ { "command": "rebase", + "command_details": {"cmd": "rebase", "to_abort": "rebase --abort", "to_continue": "rebase --continue"}, "conflicts": [{"base": {"contents": "base\n", "exists": true, "isexec": false, "issymlink": false}, "local": {"contents": null, "exists": false, "isexec": null, "issymlink": null}, "other": {"contents": "change\n", "exists": true, "isexec": false, "issymlink": false}, "output": {"contents": null, "exists": false, "isexec": null, "issymlink": null, "path": "$TESTTMP/cornercases/foo/foo/foo/foo/file"}, "path": "file"}] } ] @@ -334,12 +784,44 @@ $ cat file_newloc # Should follow: change $ hg resolve --tool=internal:dumpjson --all - [ - { - "command": null, - "conflicts": [] - } - ] + [** Unknown exception encountered with possibly-broken third-party extension conflictinfo + ** which supports versions None.None of Mercurial. + ** Please disable conflictinfo and try your action again. + ** If that fixes the bug please report it to the extension author. + ** Python 2.7.13 (default, Dec 18 2016, 07:03:39) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] + ** Mercurial Distributed SCM (version 4.3.1+284-9738c53b697f+20170825) + ** Extensions loaded: rebase, conflictinfo + Traceback (most recent call last): + File "/Users/phillco/hg-committed/hg", line 47, in + dispatch.run() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 81, in run + status = (dispatch(req) or 0) & 255 + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 163, in dispatch + ret = _runcatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 303, in _runcatch + return _callcatch(ui, _runcatchfunc) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 311, in _callcatch + return scmutil.callcatch(ui, func) + File "/Users/phillco/hg-committed/mercurial/scmutil.py", line 150, in callcatch + return func() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 293, in _runcatchfunc + return _dispatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 900, in _dispatch + cmdpats, cmdoptions) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 662, in runcommand + ret = _runcommand(ui, options, cmd, d) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 908, in _runcommand + return cmdfunc() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 897, in + d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/src/hg/fb-hgext/hgext3rd/conflictinfo.py", line 115, in _resolve + formatter.write('command', '%s\n', cmd['cmd']) # Deprecated + TypeError: 'NoneType' object has no attribute '__getitem__' + [1] Test case 4: Source changed, dest moved (w/o copytracing) $ cd .. $ reset @@ -373,6 +855,7 @@ [ { "command": "rebase", + "command_details": {"cmd": "rebase", "to_abort": "rebase --abort", "to_continue": "rebase --continue"}, "conflicts": [{"base": {"contents": "base\n", "exists": true, "isexec": false, "issymlink": false}, "local": {"contents": null, "exists": false, "isexec": null, "issymlink": null}, "other": {"contents": "change\n", "exists": true, "isexec": false, "issymlink": false}, "output": {"contents": null, "exists": false, "isexec": null, "issymlink": null, "path": "$TESTTMP/cornercases/foo/foo/foo/foo/file"}, "path": "file"}] } ] @@ -408,12 +891,44 @@ $ cat file_newloc change $ hg resolve --tool=internal:dumpjson --all - [ - { - "command": null, - "conflicts": [] - } - ] + [** Unknown exception encountered with possibly-broken third-party extension conflictinfo + ** which supports versions None.None of Mercurial. + ** Please disable conflictinfo and try your action again. + ** If that fixes the bug please report it to the extension author. + ** Python 2.7.13 (default, Dec 18 2016, 07:03:39) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] + ** Mercurial Distributed SCM (version 4.3.1+284-9738c53b697f+20170825) + ** Extensions loaded: rebase, conflictinfo + Traceback (most recent call last): + File "/Users/phillco/hg-committed/hg", line 47, in + dispatch.run() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 81, in run + status = (dispatch(req) or 0) & 255 + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 163, in dispatch + ret = _runcatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 303, in _runcatch + return _callcatch(ui, _runcatchfunc) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 311, in _callcatch + return scmutil.callcatch(ui, func) + File "/Users/phillco/hg-committed/mercurial/scmutil.py", line 150, in callcatch + return func() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 293, in _runcatchfunc + return _dispatch(req) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 900, in _dispatch + cmdpats, cmdoptions) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 662, in runcommand + ret = _runcommand(ui, options, cmd, d) + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 908, in _runcommand + return cmdfunc() + File "/Users/phillco/hg-committed/mercurial/dispatch.py", line 897, in + d = lambda: util.checksignature(func)(ui, *args, **strcmdopt) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/hg-committed/mercurial/util.py", line 1118, in check + return func(*args, **kwargs) + File "/Users/phillco/src/hg/fb-hgext/hgext3rd/conflictinfo.py", line 115, in _resolve + formatter.write('command', '%s\n', cmd['cmd']) # Deprecated + TypeError: 'NoneType' object has no attribute '__getitem__' + [1] Test case 6: Source moved, dest changed (w/o copytracing) $ cd .. $ reset @@ -447,6 +962,7 @@ [ { "command": "rebase", + "command_details": {"cmd": "rebase", "to_abort": "rebase --abort", "to_continue": "rebase --continue"}, "conflicts": [{"base": {"contents": "base\n", "exists": true, "isexec": false, "issymlink": false}, "local": {"contents": "change\n", "exists": true, "isexec": false, "issymlink": false}, "other": {"contents": null, "exists": false, "isexec": null, "issymlink": null}, "output": {"contents": "change\n", "exists": true, "isexec": false, "issymlink": false, "path": "$TESTTMP/cornercases/foo/foo/foo/foo/file"}, "path": "file"}] } ] @@ -483,6 +999,7 @@ [ { "command": "update", + "command_details": {"cmd": "update", "to_abort": "update --clean", "to_continue": "update"}, "conflicts": [] } ] @@ -519,6 +1036,7 @@ [ { "command": "update", + "command_details": {"cmd": "update", "to_abort": "update --clean", "to_continue": "update"}, "conflicts": [] } ] @@ -558,6 +1076,7 @@ [ { "command": "rebase", + "command_details": {"cmd": "rebase", "to_abort": "rebase --abort", "to_continue": "rebase --continue"}, "conflicts": [{"base": {"contents": "base\n", "exists": true, "isexec": false, "issymlink": false}, "local": {"contents": "change\n", "exists": true, "isexec": false, "issymlink": false}, "other": {"contents": "\u0000", "exists": true, "isexec": false, "issymlink": false}, "output": {"contents": "change\n", "exists": true, "isexec": false, "issymlink": false, "path": "$TESTTMP/cornercases/foo/foo/foo/foo/file"}, "path": "file"}] } ] @@ -597,6 +1116,7 @@ [ { "command": "rebase", + "command_details": {"cmd": "rebase", "to_abort": "rebase --abort", "to_continue": "rebase --continue"}, "conflicts": [{"base": {"contents": "base\n", "exists": true, "isexec": false, "issymlink": false}, "local": {"contents": "\u0000", "exists": true, "isexec": false, "issymlink": false}, "other": {"contents": "change\n", "exists": true, "isexec": false, "issymlink": false}, "output": {"contents": "\u0000", "exists": true, "isexec": false, "issymlink": false, "path": "$TESTTMP/cornercases/foo/foo/foo/foo/file"}, "path": "file"}] } ] @@ -637,6 +1157,7 @@ [ { "command": "rebase", + "command_details": {"cmd": "rebase", "to_abort": "rebase --abort", "to_continue": "rebase --continue"}, "conflicts": [{"base": {"contents": "base\n", "exists": true, "isexec": false, "issymlink": false}, "local": {"contents": "change\n", "exists": true, "isexec": false, "issymlink": false}, "other": {"contents": "somepath", "exists": true, "isexec": false, "issymlink": true}, "output": {"contents": "change\n", "exists": true, "isexec": false, "issymlink": false, "path": "$TESTTMP/cornercases/foo/foo/foo/foo/file"}, "path": "file"}] } ] @@ -679,6 +1200,7 @@ [ { "command": "rebase", + "command_details": {"cmd": "rebase", "to_abort": "rebase --abort", "to_continue": "rebase --continue"}, "conflicts": [{"base": {"contents": "base\n", "exists": true, "isexec": false, "issymlink": false}, "local": {"contents": "somepath", "exists": true, "isexec": false, "issymlink": true}, "other": {"contents": "change\n", "exists": true, "isexec": false, "issymlink": false}, "output": {"contents": "somepath", "exists": true, "isexec": false, "issymlink": true, "path": "$TESTTMP/cornercases/foo/foo/foo/foo/file"}, "path": "file"}] } ]