--- a/contrib/bash_completion Sun May 17 18:33:45 2020 -0400
+++ b/contrib/bash_completion Tue May 26 08:07:24 2020 -0700
@@ -160,7 +160,10 @@
if [[ -n "$aliashg" ]]; then
aliashg=${aliashg#"alias $hg='"}
aliashg=${aliashg%"'"}
- hg=$aliashg
+ # `source`d aliases break completion, so ignore them
+ if [[ "${aliashg:0:7}" != "source " ]]; then
+ hg=$aliashg
+ fi
fi
COMPREPLY=()
--- a/hgdemandimport/demandimportpy3.py Sun May 17 18:33:45 2020 -0400
+++ b/hgdemandimport/demandimportpy3.py Tue May 26 08:07:24 2020 -0700
@@ -97,9 +97,18 @@
def __setattr__(self, name, value):
return setattr(object.__getattribute__(self, "_finder"), name, value)
- def find_spec(self, *args, **kwargs):
+ def find_spec(self, fullname, path, target=None):
finder = object.__getattribute__(self, "_finder")
- spec = finder.find_spec(*args, **kwargs)
+ try:
+ find_spec = finder.find_spec
+ except AttributeError:
+ loader = finder.find_module(fullname, path)
+ if loader is None:
+ spec = None
+ else:
+ spec = importlib.util.spec_from_loader(fullname, loader)
+ else:
+ spec = find_spec(fullname, path, target)
# Lazy loader requires exec_module().
if (
--- a/hgext/fastexport.py Sun May 17 18:33:45 2020 -0400
+++ b/hgext/fastexport.py Tue May 26 08:07:24 2020 -0700
@@ -53,7 +53,7 @@
def convert_to_git_date(date):
timestamp, utcoff = date
- tzsign = b"+" if utcoff < 0 else b"-"
+ tzsign = b"+" if utcoff <= 0 else b"-"
if utcoff % 60 != 0:
raise error.Abort(
_(b"UTC offset in %b is not an integer number of seconds") % (date,)
@@ -80,7 +80,7 @@
ctx = repo[rev]
revid = ctx.hex()
if revid in marks:
- ui.warn(_(b"warning: revision %s already exported, skipped\n") % revid)
+ ui.debug(b"warning: revision %s already exported, skipped\n" % revid)
return
parents = [p for p in ctx.parents() if p.rev() != nullrev]
for p in parents:
--- a/hgext/fsmonitor/__init__.py Sun May 17 18:33:45 2020 -0400
+++ b/hgext/fsmonitor/__init__.py Tue May 26 08:07:24 2020 -0700
@@ -667,7 +667,7 @@
class poststatus(object):
def __init__(self, startclock):
- self._startclock = startclock
+ self._startclock = pycompat.sysbytes(startclock)
def __call__(self, wctx, status):
clock = wctx.repo()._fsmonitorstate.getlastclock() or self._startclock
--- a/mercurial/bookmarks.py Sun May 17 18:33:45 2020 -0400
+++ b/mercurial/bookmarks.py Tue May 26 08:07:24 2020 -0700
@@ -754,7 +754,8 @@
if changed:
tr = trfunc()
changes = []
- for b, node, writer, msg in sorted(changed):
+ key = lambda t: (t[0], t[1] or b'')
+ for b, node, writer, msg in sorted(changed, key=key):
changes.append((b, node))
writer(msg)
localmarks.applychanges(repo, tr, changes)
--- a/mercurial/dirstate.py Sun May 17 18:33:45 2020 -0400
+++ b/mercurial/dirstate.py Tue May 26 08:07:24 2020 -0700
@@ -103,6 +103,13 @@
# raises an exception).
self._cwd
+ def prefetch_parents(self):
+ """make sure the parents are loaded
+
+ Used to avoid a race condition.
+ """
+ self._pl
+
@contextlib.contextmanager
def parentchange(self):
'''Context manager for handling dirstate parents.
@@ -1748,10 +1755,23 @@
@propertycache
def _rustmap(self):
- self._rustmap = rustmod.DirstateMap(self._root)
+ """
+ Fills the Dirstatemap when called.
+ Use `self._inner_rustmap` if reading the dirstate is not necessary.
+ """
+ self._rustmap = self._inner_rustmap
self.read()
return self._rustmap
+ @propertycache
+ def _inner_rustmap(self):
+ """
+ Does not fill the Dirstatemap when called. This allows for
+ optimizations where only setting/getting the parents is needed.
+ """
+ self._inner_rustmap = rustmod.DirstateMap(self._root)
+ return self._inner_rustmap
+
@property
def copymap(self):
return self._rustmap.copymap()
@@ -1761,6 +1781,7 @@
def clear(self):
self._rustmap.clear()
+ self._inner_rustmap.clear()
self.setparents(nullid, nullid)
util.clearcachedproperty(self, b"_dirs")
util.clearcachedproperty(self, b"_alldirs")
@@ -1817,7 +1838,7 @@
st = b''
try:
- self._parents = self._rustmap.parents(st)
+ self._parents = self._inner_rustmap.parents(st)
except ValueError:
raise error.Abort(
_(b'working directory state appears damaged!')
--- a/mercurial/hook.py Sun May 17 18:33:45 2020 -0400
+++ b/mercurial/hook.py Tue May 26 08:07:24 2020 -0700
@@ -210,7 +210,7 @@
# in that section uses "_fromuntrusted" as its command.
untrustedhooks = _hookitems(ui, _untrusted=True)
for name, value in untrustedhooks.items():
- trustedvalue = hooks.get(name, (None, None, name, _fromuntrusted))
+ trustedvalue = hooks.get(name, ((), (), name, _fromuntrusted))
if value != trustedvalue:
(lp, lo, lk, lv) = trustedvalue
hooks[name] = (lp, lo, lk, _fromuntrusted)
@@ -226,7 +226,7 @@
continue
priority = ui.configint(b'hooks', b'priority.%s' % name, 0)
- hooks[name] = (-priority, len(hooks), name, cmd)
+ hooks[name] = ((-priority,), (len(hooks),), name, cmd)
return hooks
--- a/mercurial/localrepo.py Sun May 17 18:33:45 2020 -0400
+++ b/mercurial/localrepo.py Tue May 26 08:07:24 2020 -0700
@@ -1456,6 +1456,8 @@
@storecache(b'00changelog.i')
def changelog(self):
+ # load dirstate before changelog to avoid race see issue6303
+ self.dirstate.prefetch_parents()
return self.store.changelog(txnutil.mayhavepending(self.root))
@storecache(b'00manifest.i')
--- a/mercurial/manifest.py Sun May 17 18:33:45 2020 -0400
+++ b/mercurial/manifest.py Tue May 26 08:07:24 2020 -0700
@@ -1455,18 +1455,29 @@
if not self._dirty or self._opener is None:
return
# rotate backwards to the first used node
- with self._opener(
- self._file, b'w', atomictemp=True, checkambig=True
- ) as fp:
- node = self._head.prev
- while True:
- if node.key in self._cache:
- fp.write(node.key)
- fp.write(struct.pack(b'>L', len(node.value)))
- fp.write(node.value)
- if node is self._head:
- break
- node = node.prev
+ try:
+ with self._opener(
+ self._file, b'w', atomictemp=True, checkambig=True
+ ) as fp:
+ node = self._head.prev
+ while True:
+ if node.key in self._cache:
+ fp.write(node.key)
+ fp.write(struct.pack(b'>L', len(node.value)))
+ fp.write(node.value)
+ if node is self._head:
+ break
+ node = node.prev
+ except IOError:
+ # We could not write the cache (eg: permission error)
+ # the content can be missing.
+ #
+ # We could try harder and see if we could recreate a wcache
+ # directory were we coudl write too.
+ #
+ # XXX the error pass silently, having some way to issue an error
+ # log `ui.log` would be nice.
+ pass
def __len__(self):
if not self._read:
--- a/mercurial/url.py Sun May 17 18:33:45 2020 -0400
+++ b/mercurial/url.py Tue May 26 08:07:24 2020 -0700
@@ -225,7 +225,7 @@
def _generic_proxytunnel(self):
proxyheaders = {
- x: self.headers[x]
+ pycompat.bytestr(x): pycompat.bytestr(self.headers[x])
for x in self.headers
if x.lower().startswith('proxy-')
}
--- a/mercurial/utils/procutil.py Sun May 17 18:33:45 2020 -0400
+++ b/mercurial/utils/procutil.py Tue May 26 08:07:24 2020 -0700
@@ -16,6 +16,7 @@
import signal
import subprocess
import sys
+import threading
import time
from ..i18n import _
@@ -604,6 +605,15 @@
pid = os.fork()
if pid:
if not ensurestart:
+ # Even though we're not waiting on the child process,
+ # we still must call waitpid() on it at some point so
+ # it's not a zombie/defunct. This is especially relevant for
+ # chg since the parent process won't die anytime soon.
+ # We use a thread to make the overhead tiny.
+ def _do_wait():
+ os.waitpid(pid, 0)
+
+ threading.Thread(target=_do_wait, daemon=True).start()
return
# Parent process
(_pid, status) = os.waitpid(pid, 0)
--- a/mercurial/wireprotov1server.py Sun May 17 18:33:45 2020 -0400
+++ b/mercurial/wireprotov1server.py Tue May 26 08:07:24 2020 -0700
@@ -391,7 +391,7 @@
res = exchange.filterclonebundleentries(repo, res)
if not res:
return None
- cl = repo.changelog
+ cl = repo.unfiltered().changelog
heads_anc = cl.ancestors([cl.rev(rev) for rev in heads], inclusive=True)
common_anc = cl.ancestors([cl.rev(rev) for rev in common], inclusive=True)
compformats = clientcompressionsupport(proto)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/relnotes/5.4 Tue May 26 08:07:24 2020 -0700
@@ -0,0 +1,93 @@
+== New Features ==
+
+ * `hg purge`/`hg clean` can now delete ignored files instead of
+ untracked files, with the new -i flag.
+
+ * `hg pull` now has a `--confirm` flag to prompt before applying changes.
+ Config option `pull.confirm` is also added for that.
+
+ * `hg log` now defaults to using an '%' symbol for commits involved
+ in unresolved merge conflicts. That includes unresolved conflicts
+ caused by e.g. `hg update --merge` and `hg graft`. '@' still takes
+ precedence, so what used to be marked '@' still is.
+
+ * New `conflictlocal()` and `conflictother()` revsets return the
+ commits that are being merged, when there are conflicts. Also works
+ for conflicts caused by e.g. `hg graft`.
+
+ * `hg copy --forget` can be used to unmark a file as copied.
+
+ * The `format.revlog-compression` configuration entry now accept a list. The
+ first available option will be used. for example setting::
+
+ [format]
+ revlog-compression=zstd, zlib
+
+ Will use `zstd` compression for new repositories is available, and will
+ simply fall back to `zlib` if not.
+
+ * `hg debugmergestate` output is now templated, which may be useful
+ e.g. for IDEs that want to help the user resolve merge conflicts.
+
+
+== New Experimental Features ==
+
+ * `hg copy` now supports a `--at-rev` argument to mark files as
+ copied in the specified commit. It only works with `--after` for
+ now (i.e., it's only useful for marking files copied using non-hg
+ `cp` as copied).
+
+ * Use `hg copy --forget --at-rev REV` to unmark already committed
+ copies.
+
+== Bug Fixes ==
+
+ * Fix server exception when concurrent pushes delete the same bookmark
+
+ * Prevent pushes of divergent bookmarks (foo@remote)
+
+ * The push error "remote repository changed while pushing - please
+ try again" now only happens when a concurrent push changed related
+ heads (instead of when a concurrent pushed any revision).
+
+
+== Backwards Compatibility Changes ==
+
+ * When `hg rebase` pauses for merge conflict resolution, the working
+ copy will no longer have the rebased node as a second parent. You
+ can use the new `conflictparents()` revset for finding the other
+ parent during a conflict.
+
+ * `hg rebase` now accepts repeated `--source` and `--base`
+ arguments. For example, `hg rebase --source 'A + B'` is equivalent
+ to `hg rebase --source A --source B`. This is a
+ backwards-incompatible change because it will break overriding an
+ alias `myrebase = rebase --source A` by `hg myrebase --source B`
+ (it will now rebase `(A + B)::` instead of `B::`).
+
+ * `hg recover` does not verify the validity of the whole repository
+ anymore. You can pass `--verify` or call `hg verify` if necessary.
+
+ * `hg debugmergestate` output format changed. Let us know if that is
+ causing you problems and we'll roll it back.
+
+ * Resolved merge conflicts are now cleared by `hg commit` even if the
+ working copy has no changes.
+
+
+== Internal API Changes ==
+
+ * The deprecated `ui.progress()` has now been deleted. Please use
+ `ui.makeprogress()` instead.
+
+ * `hg.merge()` now takes a `ctx` instead of the previous `repo` and
+ `node` arguments.
+
+ * `hg.merge()` has lost its `abort` argument. Please call
+ `hg.abortmerge()` directly instead.
+
+ * `hg.merge()` has lost its `mergeforce` argument. It should have
+ only ever been called with the same value as the `force` argument.
+
+ * The `*others` argument of `cmdutil.check_incompatible_arguments()`
+ changed from being varargs argument to being a single collection.
--- a/relnotes/next Sun May 17 18:33:45 2020 -0400
+++ b/relnotes/next Tue May 26 08:07:24 2020 -0700
@@ -1,93 +1,11 @@
== New Features ==
- * `hg purge`/`hg clean` can now delete ignored files instead of
- untracked files, with the new -i flag.
-
- * `hg pull` now has a `--confirm` flag to prompt before applying changes.
- Config option `pull.confirm` is also added for that.
-
- * `hg log` now defaults to using an '%' symbol for commits involved
- in unresolved merge conflicts. That includes unresolved conflicts
- caused by e.g. `hg update --merge` and `hg graft`. '@' still takes
- precedence, so what used to be marked '@' still is.
-
- * New `conflictlocal()` and `conflictother()` revsets return the
- commits that are being merged, when there are conflicts. Also works
- for conflicts caused by e.g. `hg graft`.
-
- * `hg copy --forget` can be used to unmark a file as copied.
-
- * The `format.revlog-compression` configuration entry now accept a list. The
- first available option will be used. for example setting::
-
- [format]
- revlog-compression=zstd, zlib
-
- Will use `zstd` compression for new repositories is available, and will
- simply fall back to `zlib` if not.
-
- * `hg debugmergestate` output is now templated, which may be useful
- e.g. for IDEs that want to help the user resolve merge conflicts.
-
== New Experimental Features ==
- * `hg copy` now supports a `--at-rev` argument to mark files as
- copied in the specified commit. It only works with `--after` for
- now (i.e., it's only useful for marking files copied using non-hg
- `cp` as copied).
-
- * Use `hg copy --forget --at-rev REV` to unmark already committed
- copies.
-
-== Bug Fixes ==
-
- * Fix server exception when concurrent pushes delete the same bookmark
-
- * Prevent pushes of divergent bookmarks (foo@remote)
-
- * The push error "remote repository changed while pushing - please
- try again" now only happens when a concurrent push changed related
- heads (instead of when a concurrent pushed any revision).
-
== Backwards Compatibility Changes ==
- * When `hg rebase` pauses for merge conflict resolution, the working
- copy will no longer have the rebased node as a second parent. You
- can use the new `conflictparents()` revset for finding the other
- parent during a conflict.
-
- * `hg rebase` now accepts repeated `--source` and `--base`
- arguments. For example, `hg rebase --source 'A + B'` is equivalent
- to `hg rebase --source A --source B`. This is a
- backwards-incompatible change because it will break overriding an
- alias `myrebase = rebase --source A` by `hg myrebase --source B`
- (it will now rebase `(A + B)::` instead of `B::`).
-
- * `hg recover` does not verify the validity of the whole repository
- anymore. You can pass `--verify` or call `hg verify` if necessary.
-
- * `hg debugmergestate` output format changed. Let us know if that is
- causing you problems and we'll roll it back.
-
- * Resolved merge conflicts are now cleared by `hg commit` even if the
- working copy has no changes.
-
== Internal API Changes ==
- * The deprecated `ui.progress()` has now been deleted. Please use
- `ui.makeprogress()` instead.
-
- * `hg.merge()` now takes a `ctx` instead of the previous `repo` and
- `node` arguments.
-
- * `hg.merge()` has lost its `abort` argument. Please call
- `hg.abortmerge()` directly instead.
-
- * `hg.merge()` has lost its `mergeforce` argument. It should have
- only ever been called with the same value as the `force` argument.
-
- * The `*others` argument of `cmdutil.check_incompatible_arguments()`
- changed from being varargs argument to being a single collection.
--- a/rust/hg-core/src/matchers.rs Sun May 17 18:33:45 2020 -0400
+++ b/rust/hg-core/src/matchers.rs Tue May 26 08:07:24 2020 -0700
@@ -366,6 +366,10 @@
let pattern_string = unsafe { String::from_utf8_unchecked(escaped_bytes) };
let re = regex::bytes::RegexBuilder::new(&pattern_string)
.unicode(false)
+ // Big repos with big `.hgignore` will hit the default limit and
+ // incur a significant performance hit. One repo's `hg status` hit
+ // multiple *minutes*.
+ .dfa_size_limit(50 * (1 << 20))
.build()
.map_err(|e| PatternError::UnsupportedSyntax(e.to_string()))?;
--- a/setup.py Sun May 17 18:33:45 2020 -0400
+++ b/setup.py Tue May 26 08:07:24 2020 -0700
@@ -13,7 +13,7 @@
# bug link: https://bugs.python.org/issue25270
supportedpy = ','.join(
[
- '>=2.7',
+ '>=2.7.4',
'!=3.0.*',
'!=3.1.*',
'!=3.2.*',
@@ -54,7 +54,7 @@
# should have a chance of getting a 4.2 release, and when we ratchet
# the version requirement forward again hopefully everyone will get
# something that works for them.
-if sys.version_info < (2, 7, 0, 'final'):
+if sys.version_info < (2, 7, 4, 'final'):
pip_message = (
'This may be due to an out of date pip. '
'Make sure you have pip >= 9.0.1.'
@@ -74,7 +74,7 @@
except Exception:
pass
error = """
-Mercurial does not support Python older than 2.7.
+Mercurial does not support Python older than 2.7.4.
Python {py} detected.
{pip}
""".format(
--- a/tests/test-fastexport.t Sun May 17 18:33:45 2020 -0400
+++ b/tests/test-fastexport.t Tue May 26 08:07:24 2020 -0700
@@ -10,7 +10,7 @@
$ hg up -r 10
13 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg rm nf10
- $ hg commit -u debugbuilddag --date 'Thu Jan 01 00:00:12 1970 +0000' -m r12
+ $ hg commit -u debugbuilddag --date 'Thu Jan 01 02:30:12 1970 +0230' -m r12
created new head
$ hg up -r 11
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -20,20 +20,20 @@
$ hg commit -m debugbuilddag --date 'Thu Jan 01 00:00:13 1970 +0000'
$ hg log -G
- @ changeset: 13:e5c379648af4
+ @ changeset: 13:5544befcb7ce
|\ branch: both
| | tag: tip
| | parent: 11:2cbd52c10e88
- | | parent: 12:4f31c9604af6
+ | | parent: 12:66d0c21243be
| | user: test
| | date: Thu Jan 01 00:00:13 1970 +0000
| | summary: debugbuilddag
| |
- | o changeset: 12:4f31c9604af6
+ | o changeset: 12:66d0c21243be
| | branch: both
| | parent: 10:9220596cb068
| | user: debugbuilddag
- | | date: Thu Jan 01 00:00:12 1970 +0000
+ | | date: Thu Jan 01 02:30:12 1970 +0230
| | summary: r12
| |
o | changeset: 11:2cbd52c10e88
@@ -150,7 +150,7 @@
commit refs/heads/default
mark :3
- committer "debugbuilddag" <debugbuilddag> 0 -0000
+ committer "debugbuilddag" <debugbuilddag> 0 +0000
data 2
r0
M 644 :1 mf
@@ -197,7 +197,7 @@
commit refs/heads/default
mark :7
- committer "debugbuilddag" <debugbuilddag> 1 -0000
+ committer "debugbuilddag" <debugbuilddag> 1 +0000
data 2
r1
from :3
@@ -245,7 +245,7 @@
commit refs/heads/name1
mark :11
- committer "debugbuilddag" <debugbuilddag> 2 -0000
+ committer "debugbuilddag" <debugbuilddag> 2 +0000
data 2
r2
from :7
@@ -293,7 +293,7 @@
commit refs/heads/name1
mark :15
- committer "debugbuilddag" <debugbuilddag> 3 -0000
+ committer "debugbuilddag" <debugbuilddag> 3 +0000
data 2
r3
from :11
@@ -341,7 +341,7 @@
commit refs/heads/name1
mark :19
- committer "debugbuilddag" <debugbuilddag> 4 -0000
+ committer "debugbuilddag" <debugbuilddag> 4 +0000
data 2
r4
from :15
@@ -389,7 +389,7 @@
commit refs/heads/name2
mark :23
- committer "debugbuilddag" <debugbuilddag> 5 -0000
+ committer "debugbuilddag" <debugbuilddag> 5 +0000
data 2
r5
from :7
@@ -437,7 +437,7 @@
commit refs/heads/name2
mark :27
- committer "debugbuilddag" <debugbuilddag> 6 -0000
+ committer "debugbuilddag" <debugbuilddag> 6 +0000
data 2
r6
from :23
@@ -485,7 +485,7 @@
commit refs/heads/name2
mark :31
- committer "debugbuilddag" <debugbuilddag> 7 -0000
+ committer "debugbuilddag" <debugbuilddag> 7 +0000
data 2
r7
from :27
@@ -533,7 +533,7 @@
commit refs/heads/name2
mark :35
- committer "debugbuilddag" <debugbuilddag> 8 -0000
+ committer "debugbuilddag" <debugbuilddag> 8 +0000
data 2
r8
from :31
@@ -581,7 +581,7 @@
commit refs/heads/both
mark :39
- committer "debugbuilddag" <debugbuilddag> 9 -0000
+ committer "debugbuilddag" <debugbuilddag> 9 +0000
data 2
r9
from :35
@@ -633,7 +633,7 @@
commit refs/heads/both
mark :43
- committer "debugbuilddag" <debugbuilddag> 10 -0000
+ committer "debugbuilddag" <debugbuilddag> 10 +0000
data 3
r10
from :39
@@ -681,7 +681,7 @@
commit refs/heads/both
mark :47
- committer "debugbuilddag" <debugbuilddag> 11 -0000
+ committer "debugbuilddag" <debugbuilddag> 11 +0000
data 3
r11
from :43
@@ -691,7 +691,7 @@
commit refs/heads/both
mark :48
- committer "debugbuilddag" <debugbuilddag> 12 -0000
+ committer "debugbuilddag" <debugbuilddag> 12 +0230
data 3
r12
from :43
@@ -699,7 +699,7 @@
commit refs/heads/both
mark :49
- committer "test" <test> 13 -0000
+ committer "test" <test> 13 +0000
data 13
debugbuilddag
from :47
@@ -754,8 +754,8 @@
33fbc651630ffa7ccbebfe4eb91320a873e7291c
868d828870663d075cdcff502d26cf8445ce068e
2cbd52c10e88ce604402dc83a869ec4f07765b3d
- 4f31c9604af676986343d775b05695f535e8db5e
- e5c379648af4c9fa3b5546ab7ee6e61a36082830
+ 66d0c21243be072f82ced64aa730ab0367252451
+ 5544befcb7ce4a558ed9e19909e16af574a2a3c6
$ hg fastexport --export-marks fastexport.marks2 -r 0
blob
@@ -793,7 +793,7 @@
commit refs/heads/default
mark :3
- committer "debugbuilddag" <debugbuilddag> 0 -0000
+ committer "debugbuilddag" <debugbuilddag> 0 +0000
data 2
r0
M 644 :1 mf
@@ -845,7 +845,7 @@
commit refs/heads/default
mark :7
- committer "debugbuilddag" <debugbuilddag> 1 -0000
+ committer "debugbuilddag" <debugbuilddag> 1 +0000
data 2
r1
from :3
@@ -861,5 +861,5 @@
data 4
foo
- abort: Unable to parse user into person and email for revision 4f71ca786403919cd16669d94ff7cd1c09437a44
+ abort: Unable to parse user into person and email for revision 65a3f69b9b519de73d755472c1ab05990ab8a7f7
[255]
--- a/tests/test-pull-bundle.t Sun May 17 18:33:45 2020 -0400
+++ b/tests/test-pull-bundle.t Tue May 26 08:07:24 2020 -0700
@@ -36,6 +36,8 @@
$ cat <<EOF > .hg/hgrc
> [server]
> pullbundle = True
+ > [experimental]
+ > evolution = True
> [extensions]
> blackbox =
> EOF
@@ -185,3 +187,24 @@
* sending pullbundle "0.hg" (glob)
* sending pullbundle "0.hg" (glob)
$ rm repo/.hg/blackbox.log
+
+Test processing when nodes used in the pullbundle.manifest end up being hidden
+
+ $ hg --repo repo debugobsolete ed1b79f46b9a29f5a6efa59cf12fcfca43bead5a
+ 1 new obsolescence markers
+ obsoleted 1 changesets
+ $ hg serve --repo repo --config server.view=visible -p $HGPORT -d --pid-file=hg.pid -E errors.log
+ $ cat hg.pid >> $DAEMON_PIDS
+ $ hg clone http://localhost:$HGPORT repo-obs
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 2 changes to 2 files
+ new changesets bbd179dfa0a7:effea6de0384
+ updating to branch default
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ killdaemons.py
--- a/tests/test-static-http.t Sun May 17 18:33:45 2020 -0400
+++ b/tests/test-static-http.t Tue May 26 08:07:24 2020 -0700
@@ -233,6 +233,7 @@
/.hg/cache/hgtagsfnodes1
/.hg/cache/rbc-names-v1
/.hg/cache/rbc-revs-v1
+ /.hg/dirstate
/.hg/requires
/.hg/store/00changelog.i
/.hg/store/00manifest.i
@@ -250,6 +251,7 @@
/remote-with-names/.hg/cache/rbc-names-v1
/remote-with-names/.hg/cache/rbc-revs-v1
/remote-with-names/.hg/cache/tags2-served
+ /remote-with-names/.hg/dirstate
/remote-with-names/.hg/localtags
/remote-with-names/.hg/requires
/remote-with-names/.hg/store/00changelog.i
@@ -266,6 +268,7 @@
/remote/.hg/cache/rbc-names-v1
/remote/.hg/cache/rbc-revs-v1
/remote/.hg/cache/tags2-served
+ /remote/.hg/dirstate
/remote/.hg/localtags
/remote/.hg/requires
/remote/.hg/store/00changelog.i
@@ -278,6 +281,7 @@
/remote/.hg/store/data/~2ehgtags.i (py37 !)
/remotempty/.hg/bookmarks
/remotempty/.hg/bookmarks.current
+ /remotempty/.hg/dirstate
/remotempty/.hg/requires
/remotempty/.hg/store/00changelog.i
/remotempty/.hg/store/00manifest.i
@@ -286,6 +290,7 @@
/sub/.hg/cache/hgtagsfnodes1
/sub/.hg/cache/rbc-names-v1
/sub/.hg/cache/rbc-revs-v1
+ /sub/.hg/dirstate
/sub/.hg/requires
/sub/.hg/store/00changelog.i
/sub/.hg/store/00manifest.i
--- a/tests/testlib/wait-on-file Sun May 17 18:33:45 2020 -0400
+++ b/tests/testlib/wait-on-file Tue May 26 08:07:24 2020 -0700
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
#
# wait up to TIMEOUT seconds until a WAIT_ON_FILE is created.
#
@@ -11,9 +11,12 @@
timer="$1"
-# if the test timeout have been extended, explicitly extend the provided timer
+# Scale the timeout to match the sleep steps below, i.e. 1/0.02.
+timer=$(( 50 * $timer ))
+# If the test timeout have been extended, also scale the timer relative
+# to the normal timing.
if [ "$HGTEST_TIMEOUT_DEFAULT" -lt "$HGTEST_TIMEOUT" ]; then
- timer=$(( ( 100 * $timer * $HGTEST_TIMEOUT) / $HGTEST_TIMEOUT_DEFAULT ))
+ timer=$(( ( $timer * $HGTEST_TIMEOUT) / $HGTEST_TIMEOUT_DEFAULT ))
fi
wait_on="$2"
@@ -22,15 +25,13 @@
create="$3"
fi
-if [ -n "$create" ];
-then
+if [ -n "$create" ]; then
touch "$create"
create=""
fi
-while [ "$timer" -gt 0 ] && [ ! -f "$wait_on" ];
-do
+while [ "$timer" -gt 0 ] && [ ! -f "$wait_on" ]; do
timer=$(( $timer - 1))
- sleep 0.01
+ sleep 0.02
done
if [ "$timer" -le 0 ]; then
echo "file not created after $1 seconds: $wait_on" >&2