##// END OF EJS Templates
rebase: also include commit of collapsed commits in single transaction...
rebase: also include commit of collapsed commits in single transaction When rebase.singletransaction is set, we still used to create a second transaction when committing with --collapse. It's simpler to create a single transaction. Note that in the affected .t file, the test that uses --collapse still appears to create two transactions (it prints "rebase status stored" twice). However, only a single transaction is actually created and the second printout comes from cmdutil.commitforceeditor() that explicitly calls tr.writepending(). Also note the that we now roll back any commits if the user closes the commit message editor with an error code (or leaves the message empty). That might be unfortunate, but it's consistent with how we behave in the --no-collapse case (if the user passed --edit). If we want to change that, I think it should be done consistently in a separate patch. Differential Revision: https://phab.mercurial-scm.org/D2728

File last commit:

r36489:c28b6d60 default
r36945:17a744c5 default
Show More
narrowrepo.py
86 lines | 3.2 KiB | text/x-python | PythonLexer
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 # narrowrepo.py - repository which supports narrow revlogs, lazy loading
#
# Copyright 2017 Google, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from __future__ import absolute_import
from mercurial import (
bundlerepo,
Martin von Zweigbergk
narrow: move requirement constant to core...
r36482 changegroup,
Gregory Szorc
hg: move share._getsrcrepo into core...
r36177 hg,
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 localrepo,
Gregory Szorc
narrowspec: move module into core...
r36178 narrowspec,
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 scmutil,
)
from . import (
narrowrevlog,
)
def wrappostshare(orig, sourcerepo, destrepo, **kwargs):
orig(sourcerepo, destrepo, **kwargs)
Martin von Zweigbergk
narrow: move requirement constant to core...
r36482 if changegroup.NARROW_REQUIREMENT in sourcerepo.requirements:
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 with destrepo.wlock():
with destrepo.vfs('shared', 'a') as fp:
fp.write(narrowspec.FILENAME + '\n')
def unsharenarrowspec(orig, ui, repo, repopath):
Martin von Zweigbergk
narrow: move requirement constant to core...
r36482 if (changegroup.NARROW_REQUIREMENT in repo.requirements
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 and repo.path == repopath and repo.shared()):
Gregory Szorc
hg: move share._getsrcrepo into core...
r36177 srcrepo = hg.sharedreposource(repo)
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 with srcrepo.vfs(narrowspec.FILENAME) as f:
spec = f.read()
with repo.vfs(narrowspec.FILENAME, 'w') as f:
f.write(spec)
return orig(ui, repo, repopath)
Martin von Zweigbergk
narrow: move checking for narrow requirement into _narrowmatch()...
r36484 def wraprepo(repo):
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 """Enables narrow clone functionality on a single local repository."""
cacheprop = localrepo.storecache
if isinstance(repo, bundlerepo.bundlerepository):
# We have to use a different caching property decorator for
# bundlerepo because storecache blows up in strange ways on a
# bundlerepo. Fortunately, there's no risk of data changing in
# a bundlerepo.
cacheprop = lambda name: localrepo.unfilteredpropertycache
class narrowrepository(repo.__class__):
def _constructmanifest(self):
manifest = super(narrowrepository, self)._constructmanifest()
narrowrevlog.makenarrowmanifestrevlog(manifest, repo)
return manifest
@cacheprop('00manifest.i')
def manifestlog(self):
mfl = super(narrowrepository, self).manifestlog
narrowrevlog.makenarrowmanifestlog(mfl, self)
return mfl
def file(self, f):
fl = super(narrowrepository, self).file(f)
narrowrevlog.makenarrowfilelog(fl, self.narrowmatch())
return fl
# I'm not sure this is the right place to do this filter.
# context._manifestmatches() would probably be better, or perhaps
# move it to a later place, in case some of the callers do want to know
# which directories changed. This seems to work for now, though.
def status(self, *args, **kwargs):
s = super(narrowrepository, self).status(*args, **kwargs)
narrowmatch = self.narrowmatch()
Augie Fackler
narrowrepo: filter() is a generator on py3, wrap in list()...
r36173 modified = list(filter(narrowmatch, s.modified))
added = list(filter(narrowmatch, s.added))
removed = list(filter(narrowmatch, s.removed))
deleted = list(filter(narrowmatch, s.deleted))
unknown = list(filter(narrowmatch, s.unknown))
ignored = list(filter(narrowmatch, s.ignored))
clean = list(filter(narrowmatch, s.clean))
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 return scmutil.status(modified, added, removed, deleted, unknown,
ignored, clean)
repo.__class__ = narrowrepository