# HG changeset patch # User Boris Feld # Date 1539115321 -7200 # Node ID 59a870a4ad6ee47266990f97bc57a4b8a28b42ae # Parent 5e5c8f2a1eb5f050a7d13b6f1b6a21fbc2fd1b65 changegroup: refactor emitrevision to use a `deltamode` argument This new argument gathers the semantic of `sendfulltext` and `deltaprevious` in a single value. We are about to introduce a new type of constraints. Avoiding yet another argument sounds like a plus. diff -r 5e5c8f2a1eb5 -r 59a870a4ad6e mercurial/repository.py --- a/mercurial/repository.py Tue Oct 23 21:11:13 2018 +0900 +++ b/mercurial/repository.py Tue Oct 09 22:02:01 2018 +0200 @@ -39,6 +39,10 @@ REVISION_FLAGS_KNOWN = ( REVISION_FLAG_CENSORED | REVISION_FLAG_ELLIPSIS | REVISION_FLAG_EXTSTORED) +CG_DELTAMODE_STD = b'default' +CG_DELTAMODE_PREV = b'previous' +CG_DELTAMODE_FULL = b'fulltext' + class ipeerconnection(interfaceutil.Interface): """Represents a "connection" to a repository. diff -r 5e5c8f2a1eb5 -r 59a870a4ad6e mercurial/revlog.py --- a/mercurial/revlog.py Tue Oct 23 21:11:13 2018 +0900 +++ b/mercurial/revlog.py Tue Oct 09 22:02:01 2018 +0200 @@ -2213,6 +2213,12 @@ if nodesorder is None and not self._generaldelta: nodesorder = 'storage' + deltamode = repository.CG_DELTAMODE_STD + if deltaprevious: + deltamode = repository.CG_DELTAMODE_PREV + elif not self._storedeltachains: + deltamode = repository.CG_DELTAMODE_FULL + return storageutil.emitrevisions( self, nodes, nodesorder, revlogrevisiondelta, deltaparentfn=self.deltaparent, @@ -2220,10 +2226,9 @@ rawsizefn=self.rawsize, revdifffn=self.revdiff, flagsfn=self.flags, - sendfulltext=not self._storedeltachains, + deltamode=deltamode, revisiondata=revisiondata, - assumehaveparentrevisions=assumehaveparentrevisions, - deltaprevious=deltaprevious) + assumehaveparentrevisions=assumehaveparentrevisions) DELTAREUSEALWAYS = 'always' DELTAREUSESAMEREVS = 'samerevs' diff -r 5e5c8f2a1eb5 -r 59a870a4ad6e mercurial/utils/storageutil.py --- a/mercurial/utils/storageutil.py Tue Oct 23 21:11:13 2018 +0900 +++ b/mercurial/utils/storageutil.py Tue Oct 09 22:02:01 2018 +0200 @@ -22,6 +22,7 @@ error, mdiff, pycompat, + repository, ) _nullhash = hashlib.sha1(nullid) @@ -269,9 +270,8 @@ def emitrevisions(store, nodes, nodesorder, resultcls, deltaparentfn=None, candeltafn=None, rawsizefn=None, revdifffn=None, flagsfn=None, - sendfulltext=False, - revisiondata=False, assumehaveparentrevisions=False, - deltaprevious=False): + deltamode=repository.CG_DELTAMODE_STD, + revisiondata=False, assumehaveparentrevisions=False): """Generic implementation of ifiledata.emitrevisions(). Emitting revision data is subtly complex. This function attempts to @@ -322,14 +322,17 @@ Callable receiving a revision number and returns the integer flags value for it. If not defined, flags value will be 0. - ``sendfulltext`` + ``deltamode`` + constaint on delta to be sent: + * CG_DELTAMODE_STD - normal mode, try to reuse storage deltas, + * CG_DELTAMODE_PREV - only delta against "prev", + * CG_DELTAMODE_FULL - only issue full snapshot. + Whether to send fulltext revisions instead of deltas, if allowed. ``nodesorder`` ``revisiondata`` ``assumehaveparentrevisions`` - ``deltaprevious`` - See ``ifiledata.emitrevisions()`` interface documentation. """ fnode = store.node @@ -345,7 +348,7 @@ prevrev = None - if deltaprevious or assumehaveparentrevisions: + if deltamode == repository.CG_DELTAMODE_PREV or assumehaveparentrevisions: prevrev = store.parentrevs(revs[0])[0] # Set of revs available to delta against. @@ -364,11 +367,11 @@ deltaparentrev = nullrev # Forced delta against previous mode. - if deltaprevious: + if deltamode == repository.CG_DELTAMODE_PREV: baserev = prevrev # We're instructed to send fulltext. Honor that. - elif sendfulltext: + elif deltamode == repository.CG_DELTAMODE_FULL: baserev = nullrev # There is a delta in storage. We try to use that because it @@ -427,7 +430,8 @@ baserevisionsize = len(store.revision(baserev, raw=True)) - elif baserev == nullrev and not deltaprevious: + elif (baserev == nullrev + and deltamode != repository.CG_DELTAMODE_PREV): revision = store.revision(node, raw=True) available.add(rev) else: