mercurial/context.py
changeset 37532 8475c9bf096d
parent 37504 901e749ca0e1
child 37676 1764527af92e
equal deleted inserted replaced
37531:6639ac97ec3b 37532:8475c9bf096d
   375         for l in r:
   375         for l in r:
   376             l.sort()
   376             l.sort()
   377 
   377 
   378         return r
   378         return r
   379 
   379 
       
   380 def changectxdeprecwarn(repo):
       
   381     # changectx's constructor will soon lose support for these forms of
       
   382     # changeids:
       
   383     #  * stringinfied ints
       
   384     #  * bookmarks, tags, branches, and other namespace identifiers
       
   385     #  * hex nodeid prefixes
       
   386     #
       
   387     # Depending on your use case, replace repo[x] by one of these:
       
   388     #  * If you want to support general revsets, use scmutil.revsingle(x)
       
   389     #  * If you know that "x" is a stringified int, use repo[int(x)]
       
   390     #  * If you know that "x" is a bookmark, use repo._bookmarks.changectx(x)
       
   391     #  * If you know that "x" is a tag, use repo[repo.tags()[x]]
       
   392     #  * If you know that "x" is a branch or in some other namespace,
       
   393     #    use the appropriate mechanism for that namespace
       
   394     #  * If you know that "x" is a hex nodeid prefix, use
       
   395     #    repo[scmutil.resolvepartialhexnodeid(repo, x)]
       
   396     #  * If "x" is a string that can be any of the above, but you don't want
       
   397     #    to allow general revsets (perhaps because "x" may come from a remote
       
   398     #    user and the revset may be too costly), use scmutil.revsymbol(repo, x)
       
   399     #  * If "x" can be a mix of the above, you'll have to figure it out
       
   400     #    yourself
       
   401     repo.ui.deprecwarn("changectx.__init__ is getting more limited, see source "
       
   402                        "for details", "4.6")
       
   403 
   380 class changectx(basectx):
   404 class changectx(basectx):
   381     """A changecontext object makes access to data related to a particular
   405     """A changecontext object makes access to data related to a particular
   382     changeset convenient. It represents a read-only context already present in
   406     changeset convenient. It represents a read-only context already present in
   383     the repo."""
   407     the repo."""
   384     def __init__(self, repo, changeid='.'):
   408     def __init__(self, repo, changeid='.'):
   424                     r += l
   448                     r += l
   425                 if r < 0 or r >= l and r != wdirrev:
   449                 if r < 0 or r >= l and r != wdirrev:
   426                     raise ValueError
   450                     raise ValueError
   427                 self._rev = r
   451                 self._rev = r
   428                 self._node = repo.changelog.node(r)
   452                 self._node = repo.changelog.node(r)
       
   453                 changectxdeprecwarn(repo)
   429                 return
   454                 return
   430             except error.FilteredIndexError:
   455             except error.FilteredIndexError:
   431                 raise
   456                 raise
   432             except (ValueError, OverflowError, IndexError):
   457             except (ValueError, OverflowError, IndexError):
   433                 pass
   458                 pass
   444 
   469 
   445             # lookup bookmarks through the name interface
   470             # lookup bookmarks through the name interface
   446             try:
   471             try:
   447                 self._node = repo.names.singlenode(repo, changeid)
   472                 self._node = repo.names.singlenode(repo, changeid)
   448                 self._rev = repo.changelog.rev(self._node)
   473                 self._rev = repo.changelog.rev(self._node)
       
   474                 changectxdeprecwarn(repo)
   449                 return
   475                 return
   450             except KeyError:
   476             except KeyError:
   451                 pass
   477                 pass
   452 
   478 
   453             self._node = scmutil.resolvepartialhexnodeid(repo, changeid)
   479             self._node = scmutil.resolvepartialhexnodeid(repo, changeid)
   454             if self._node is not None:
   480             if self._node is not None:
   455                 self._rev = repo.changelog.rev(self._node)
   481                 self._rev = repo.changelog.rev(self._node)
       
   482                 changectxdeprecwarn(repo)
   456                 return
   483                 return
   457 
   484 
   458             # lookup failed
   485             # lookup failed
   459             # check if it might have come from damaged dirstate
   486             # check if it might have come from damaged dirstate
   460             #
   487             #