Mercurial > hg
view tests/test-narrow-expanddirstate.t @ 46531:d46885119f90
test-copies: don't use empty file for "same content" cases
For main case (using filelog or sidedata), this lead to the following hash
change.
Changesets:
- 01c2f5eabdc4ce2bdee42b5f86311955e6c8f573 → 319179230cc87769ab3a861ebffe7a534ebb3d85
- 01c2f5eabdc4 → 319179230cc8
- c72365ee036fca4fb27fd745459bfb6ea1ac6993 → 6cbc9c2b7b391dd738603173717c601648d3735f
- c72365ee036f → 6cbc9c2b7b39
File revision for `f`:
- 0dd616bc7ab1a111921d95d76f69cda5c2ac539c → cedeacc5bf5d9b9be4d7f8394d33a5349bb29c6e
- 0dd616bc7ab1 → cedeacc5bf5d
- eb806e34ef6be4c264effd5933d31004ad15a793 → ffb76cd765422a18759a335d8a81fa2bd455be6b
- eb806e34ef6b → ffb76cd76542
- 6da5a2eecb9c833f830b67a4972366d49a9a142c → 08d1ff5926fbd0285cdeb044cbe8ab651687e86a
- 6da5a2eecb9c → 08d1ff5926fb
File revision for `d`:
- 7bded9d9da1f7bf9bf7cbfb24fe1e6ccf68ec440 → ba177bbb45ea930ee48469a55d40224537bd57a9
For the "extra in changeset" case we get the following change for file `d`:
- 68d5bca9df0577b6bc2ea30ca724e13ead60da81 → b894de5c94aadcb4894ea7c358389819c27fbcce
- 68d5bca9df05 → b894de5c94aa
- b80de5d138758541c5f05265ad144ab9fa86d1db → 56647659eff080e06e45c18ea9e848836dadea71
- b80de5d13875 → 56647659eff0
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 22 Feb 2021 18:48:45 +0100 |
parents | 44a51c1c8e17 |
children | 28d5e05c139a |
line wrap: on
line source
$ . "$TESTDIR/narrow-library.sh" $ hg init master $ cd master $ mkdir inside $ echo inside > inside/f1 $ mkdir outside $ echo outside > outside/f2 $ mkdir patchdir $ echo patch_this > patchdir/f3 $ hg ci -Aqm 'initial' $ cd .. $ hg clone --narrow ssh://user@dummy/master narrow --include inside requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files new changesets dff6a2a6d433 updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd narrow $ mkdir outside $ echo other_contents > outside/f2 $ hg tracked | grep outside [1] $ hg files | grep outside [1] $ hg status `hg status` did not add outside. $ hg tracked | grep outside [1] $ hg files | grep outside [1] Unfortunately this is not really a candidate for adding to narrowhg proper, since it depends on some other source for providing the manifests (when using treemanifests) and file contents. Something like a virtual filesystem and/or remotefilelog. We want to be useful when not using those systems, so we do not have this method available in narrowhg proper at the moment. $ cat > "$TESTTMP/expand_extension.py" <<EOF > import os > import sys > > from mercurial import encoding > from mercurial import extensions > from mercurial import localrepo > from mercurial import match as matchmod > from mercurial import narrowspec > from mercurial import patch > from mercurial import util as hgutil > > narrowspecexpanded = False > def expandnarrowspec(ui, repo, newincludes=None): > if not newincludes: > return > if getattr(repo, '_narrowspecexpanded', False): > return > repo._narrowspecexpanded = True > import sys > newincludes = set([newincludes]) > includes, excludes = repo.narrowpats > currentmatcher = narrowspec.match(repo.root, includes, excludes) > includes = includes | newincludes > if not repo.currenttransaction(): > ui.develwarn(b'expandnarrowspec called outside of transaction!') > repo.setnarrowpats(includes, excludes) > narrowspec.copytoworkingcopy(repo) > newmatcher = narrowspec.match(repo.root, includes, excludes) > added = matchmod.differencematcher(newmatcher, currentmatcher) > for f in repo[b'.'].manifest().walk(added): > repo.dirstate.normallookup(f) > > def reposetup(ui, repo): > class expandingrepo(repo.__class__): > def narrowmatch(self, *args, **kwargs): > with repo.wlock(), repo.lock(), repo.transaction( > b'expandnarrowspec'): > expandnarrowspec(ui, repo, > encoding.environ.get(b'DIRSTATEINCLUDES')) > return super(expandingrepo, self).narrowmatch(*args, **kwargs) > repo.__class__ = expandingrepo > > def extsetup(unused_ui): > def overridepatch(orig, ui, repo, *args, **kwargs): > with repo.wlock(): > expandnarrowspec(ui, repo, encoding.environ.get(b'PATCHINCLUDES')) > return orig(ui, repo, *args, **kwargs) > > extensions.wrapfunction(patch, b'patch', overridepatch) > EOF $ cat >> ".hg/hgrc" <<EOF > [extensions] > expand_extension = $TESTTMP/expand_extension.py > EOF Since we do not have the ability to rely on a virtual filesystem or remotefilelog in the test, we just fake it by copying the data from the 'master' repo. $ cp -a ../master/.hg/store/data/* .hg/store/data Do that for patchdir as well. $ cp -a ../master/patchdir . `hg status` will now add outside, but not patchdir. $ DIRSTATEINCLUDES=path:outside hg status M outside/f2 $ hg tracked | grep outside I path:outside $ hg files | grep outside > /dev/null $ hg tracked | grep patchdir [1] $ hg files | grep patchdir [1] Get rid of the modification to outside/f2. $ hg update -C . 1 files updated, 0 files merged, 0 files removed, 0 files unresolved This patch will not apply cleanly at the moment, so `hg import` will break $ cat > "$TESTTMP/foo.patch" <<EOF > --- patchdir/f3 > +++ patchdir/f3 > @@ -1,1 +1,1 @@ > -this should be "patch_this", but its not, so patch fails > +this text is irrelevant > EOF $ PATCHINCLUDES=path:patchdir hg import -p0 -e "$TESTTMP/foo.patch" -m ignored applying $TESTTMP/foo.patch patching file patchdir/f3 Hunk #1 FAILED at 0 1 out of 1 hunks FAILED -- saving rejects to file patchdir/f3.rej abort: patch failed to apply [255] $ hg tracked | grep patchdir [1] $ hg files | grep patchdir > /dev/null [1] Let's make it apply cleanly and see that it *did* expand properly $ cat > "$TESTTMP/foo.patch" <<EOF > --- patchdir/f3 > +++ patchdir/f3 > @@ -1,1 +1,1 @@ > -patch_this > +patched_this > EOF $ PATCHINCLUDES=path:patchdir hg import -p0 -e "$TESTTMP/foo.patch" -m message applying $TESTTMP/foo.patch $ cat patchdir/f3 patched_this $ hg tracked | grep patchdir I path:patchdir $ hg files | grep patchdir > /dev/null