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