D4882: obsolete: fixed ValueError when stored note contains more than 1 ':' char (issue5783)
Zharaskhan (Zharaskhan)
phabricator at mercurial-scm.org
Thu Oct 4 22:56:49 UTC 2018
Zharaskhan created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
The newer version of `amend -n 'Some some'` accepts
containing more than 1 ':' char.
The information contained in this note 'Testing::Obstore'
gives ValueError, because we are trying to store more than 2 values
in key and value
The test changes demonstates the bug and it's fix.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D4882
AFFECTED FILES
mercurial/obsolete.py
tests/test-obsolete.t
CHANGE DETAILS
diff --git a/tests/test-obsolete.t b/tests/test-obsolete.t
--- a/tests/test-obsolete.t
+++ b/tests/test-obsolete.t
@@ -1631,189 +1631,9 @@
$ touch b.cpp
$ hg add b.cpp
$ hg commit -m 'Add b.cpp'
- ** Unknown exception encountered with possibly-broken third-party extension testextension
- ** which supports versions unknown of Mercurial.
- ** Please disable testextension and try your action again.
- ** If that fixes the bug please report it to the extension author.
- ** Python 2.7.10 (default, Oct 6 2017, 22:29:07) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)]
- ** Mercurial Distributed SCM (version 4.7.2+1250-a72bf685f2dd+20181005)
- ** Extensions loaded: testextension
- Traceback (most recent call last):
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/bin/hg", line 43, in <module>
- dispatch.run()
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 93, in run
- status = dispatch(req)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 217, in dispatch
- ret = _runcatch(req) or 0
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 359, in _runcatch
- return _callcatch(ui, _runcatchfunc)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 367, in _callcatch
- return scmutil.callcatch(ui, func)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/scmutil.py", line 166, in callcatch
- return func()
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 350, in _runcatchfunc
- return _dispatch(req)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 987, in _dispatch
- cmdpats, cmdoptions)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 733, in runcommand
- ret = _runcommand(ui, options, cmd, d)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 996, in _runcommand
- return cmdfunc()
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 984, in <lambda>
- d = lambda: util.checksignature(func)(ui, *args, **strcmdopt)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/util.py", line 1644, in check
- return func(*args, **kwargs)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/commands.py", line 1616, in commit
- return _docommit(ui, repo, *pats, **opts)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/commands.py", line 1638, in _docommit
- bheads = repo.branchheads(branch)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/localrepo.py", line 2679, in branchheads
- branches = self.branchmap()
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/localrepo.py", line 1478, in branchmap
- branchmap.updatecache(self)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/branchmap.py", line 104, in updatecache
- cl = repo.changelog
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/repoview.py", line 219, in changelog
- revs = filterrevs(unfi, self.filtername, self._visibilityexceptions)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/repoview.py", line 158, in filterrevs
- repo.filteredrevcache[filtername] = func(repo.unfiltered())
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/repoview.py", line 77, in computehidden
- hidden = hideablerevs(repo)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/repoview.py", line 31, in hideablerevs
- obsoletes = obsolete.getrevs(repo, 'obsolete')
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 846, in getrevs
- repo.obsstore.caches[name] = cachefuncs[name](repo)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 876, in _computeobsoleteset
- isobs = repo.obsstore.successors.__contains__
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/util.py", line 1528, in __get__
- result = self.func(obj)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 688, in successors
- _addsuccessors(successors, self._all)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/util.py", line 1528, in __get__
- result = self.func(obj)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 681, in _all
- markers = list(markers)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 216, in _fm0readmarkers
- metadata = _fm0decodemeta(metadata)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 281, in _fm0decodemeta
- key, value = l.split(':')
- ValueError: too many values to unpack
- [1]
$ echo 'Hello' > b.cpp
$ hg amend -n 'Testing::Obsstore2' --config extensions.amend=
- ** Unknown exception encountered with possibly-broken third-party extension testextension
- ** which supports versions unknown of Mercurial.
- ** Please disable testextension and try your action again.
- ** If that fixes the bug please report it to the extension author.
- ** Python 2.7.10 (default, Oct 6 2017, 22:29:07) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)]
- ** Mercurial Distributed SCM (version 4.7.2+1250-a72bf685f2dd+20181005)
- ** Extensions loaded: testextension, amend
- Traceback (most recent call last):
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/bin/hg", line 43, in <module>
- dispatch.run()
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 93, in run
- status = dispatch(req)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 217, in dispatch
- ret = _runcatch(req) or 0
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 359, in _runcatch
- return _callcatch(ui, _runcatchfunc)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 367, in _callcatch
- return scmutil.callcatch(ui, func)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/scmutil.py", line 166, in callcatch
- return func()
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 350, in _runcatchfunc
- return _dispatch(req)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 987, in _dispatch
- cmdpats, cmdoptions)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 733, in runcommand
- ret = _runcommand(ui, options, cmd, d)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 996, in _runcommand
- return cmdfunc()
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 984, in <lambda>
- d = lambda: util.checksignature(func)(ui, *args, **strcmdopt)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/util.py", line 1644, in check
- return func(*args, **kwargs)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/hgext/amend.py", line 55, in amend
- opts['message'] = opts.get('message') or repo['.'].description()
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/context.py", line 448, in description
- return self._changeset.description
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/util.py", line 1528, in __get__
- result = self.func(obj)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/context.py", line 406, in _changeset
- return self._repo.changelog.changelogrevision(self.rev())
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/repoview.py", line 219, in changelog
- revs = filterrevs(unfi, self.filtername, self._visibilityexceptions)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/repoview.py", line 158, in filterrevs
- repo.filteredrevcache[filtername] = func(repo.unfiltered())
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/repoview.py", line 77, in computehidden
- hidden = hideablerevs(repo)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/repoview.py", line 31, in hideablerevs
- obsoletes = obsolete.getrevs(repo, 'obsolete')
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 846, in getrevs
- repo.obsstore.caches[name] = cachefuncs[name](repo)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 876, in _computeobsoleteset
- isobs = repo.obsstore.successors.__contains__
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/util.py", line 1528, in __get__
- result = self.func(obj)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 688, in successors
- _addsuccessors(successors, self._all)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/util.py", line 1528, in __get__
- result = self.func(obj)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 681, in _all
- markers = list(markers)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 216, in _fm0readmarkers
- metadata = _fm0decodemeta(metadata)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 281, in _fm0decodemeta
- key, value = l.split(':')
- ValueError: too many values to unpack
- [1]
$ hg debugobsolete
- ** Unknown exception encountered with possibly-broken third-party extension testextension
- ** which supports versions unknown of Mercurial.
- ** Please disable testextension and try your action again.
- ** If that fixes the bug please report it to the extension author.
- ** Python 2.7.10 (default, Oct 6 2017, 22:29:07) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)]
- ** Mercurial Distributed SCM (version 4.7.2+1250-a72bf685f2dd+20181005)
- ** Extensions loaded: testextension
- Traceback (most recent call last):
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/bin/hg", line 43, in <module>
- dispatch.run()
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 93, in run
- status = dispatch(req)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 217, in dispatch
- ret = _runcatch(req) or 0
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 359, in _runcatch
- return _callcatch(ui, _runcatchfunc)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 367, in _callcatch
- return scmutil.callcatch(ui, func)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/scmutil.py", line 166, in callcatch
- return func()
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 350, in _runcatchfunc
- return _dispatch(req)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 987, in _dispatch
- cmdpats, cmdoptions)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 733, in runcommand
- ret = _runcommand(ui, options, cmd, d)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 996, in _runcommand
- return cmdfunc()
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/dispatch.py", line 984, in <lambda>
- d = lambda: util.checksignature(func)(ui, *args, **strcmdopt)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/util.py", line 1644, in check
- return func(*args, **kwargs)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/debugcommands.py", line 1732, in debugobsolete
- for i, m in enumerate(markerstoiter):
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsutil.py", line 110, in getmarkers
- for markerdata in rawmarkers:
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 545, in __iter__
- return iter(self._all)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/util.py", line 1528, in __get__
- result = self.func(obj)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 681, in _all
- markers = list(markers)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 216, in _fm0readmarkers
- metadata = _fm0decodemeta(metadata)
- File "/private/var/folders/ld/f_mwccsd3js73c9t0m8qv9bw0000gn/T/hgtests.btJKhe/install/lib/python/mercurial/obsolete.py", line 281, in _fm0decodemeta
- key, value = l.split(':')
- ValueError: too many values to unpack
- [1]
+ d1b09fe3ad2b2a03e23a72f0c582e29a49570145 1a1a11184d2588af24e767e5335d5d9d07e8c550 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'Testing::Obsstore', 'operation': 'amend', 'user': 'test'}
+ 1bfd8e3868f641e048b6667cd672c68932f26d00 79959ca316d5b27ac6be1dd0cfd0843a5b5412eb 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '8', 'note': 'Testing::Obsstore2', 'operation': 'amend', 'user': 'test'}
$ cd ..
diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py
--- a/mercurial/obsolete.py
+++ b/mercurial/obsolete.py
@@ -278,7 +278,7 @@
d = {}
for l in data.split('\0'):
if l:
- key, value = l.split(':')
+ key, value = l.split(':', 1)
d[key] = value
return d
To: Zharaskhan, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list