##// END OF EJS Templates
merge with stable
Martin von Zweigbergk -
r45379:fd3b94f1 merge default
parent child Browse files
Show More
@@ -160,7 +160,10 b' shopt -s extglob'
160 if [[ -n "$aliashg" ]]; then
160 if [[ -n "$aliashg" ]]; then
161 aliashg=${aliashg#"alias $hg='"}
161 aliashg=${aliashg#"alias $hg='"}
162 aliashg=${aliashg%"'"}
162 aliashg=${aliashg%"'"}
163 hg=$aliashg
163 # `source`d aliases break completion, so ignore them
164 if [[ "${aliashg:0:7}" != "source " ]]; then
165 hg=$aliashg
166 fi
164 fi
167 fi
165
168
166 COMPREPLY=()
169 COMPREPLY=()
@@ -97,9 +97,18 b' class LazyFinder(object):'
97 def __setattr__(self, name, value):
97 def __setattr__(self, name, value):
98 return setattr(object.__getattribute__(self, "_finder"), name, value)
98 return setattr(object.__getattribute__(self, "_finder"), name, value)
99
99
100 def find_spec(self, *args, **kwargs):
100 def find_spec(self, fullname, path, target=None):
101 finder = object.__getattribute__(self, "_finder")
101 finder = object.__getattribute__(self, "_finder")
102 spec = finder.find_spec(*args, **kwargs)
102 try:
103 find_spec = finder.find_spec
104 except AttributeError:
105 loader = finder.find_module(fullname, path)
106 if loader is None:
107 spec = None
108 else:
109 spec = importlib.util.spec_from_loader(fullname, loader)
110 else:
111 spec = find_spec(fullname, path, target)
103
112
104 # Lazy loader requires exec_module().
113 # Lazy loader requires exec_module().
105 if (
114 if (
@@ -53,7 +53,7 b' def convert_to_git_user(authormap, user,'
53
53
54 def convert_to_git_date(date):
54 def convert_to_git_date(date):
55 timestamp, utcoff = date
55 timestamp, utcoff = date
56 tzsign = b"+" if utcoff < 0 else b"-"
56 tzsign = b"+" if utcoff <= 0 else b"-"
57 if utcoff % 60 != 0:
57 if utcoff % 60 != 0:
58 raise error.Abort(
58 raise error.Abort(
59 _(b"UTC offset in %b is not an integer number of seconds") % (date,)
59 _(b"UTC offset in %b is not an integer number of seconds") % (date,)
@@ -80,7 +80,7 b' def export_commit(ui, repo, rev, marks, '
80 ctx = repo[rev]
80 ctx = repo[rev]
81 revid = ctx.hex()
81 revid = ctx.hex()
82 if revid in marks:
82 if revid in marks:
83 ui.warn(_(b"warning: revision %s already exported, skipped\n") % revid)
83 ui.debug(b"warning: revision %s already exported, skipped\n" % revid)
84 return
84 return
85 parents = [p for p in ctx.parents() if p.rev() != nullrev]
85 parents = [p for p in ctx.parents() if p.rev() != nullrev]
86 for p in parents:
86 for p in parents:
@@ -667,7 +667,7 b' def overridestatus('
667
667
668 class poststatus(object):
668 class poststatus(object):
669 def __init__(self, startclock):
669 def __init__(self, startclock):
670 self._startclock = startclock
670 self._startclock = pycompat.sysbytes(startclock)
671
671
672 def __call__(self, wctx, status):
672 def __call__(self, wctx, status):
673 clock = wctx.repo()._fsmonitorstate.getlastclock() or self._startclock
673 clock = wctx.repo()._fsmonitorstate.getlastclock() or self._startclock
@@ -754,7 +754,8 b' def updatefromremote(ui, repo, remotemar'
754 if changed:
754 if changed:
755 tr = trfunc()
755 tr = trfunc()
756 changes = []
756 changes = []
757 for b, node, writer, msg in sorted(changed):
757 key = lambda t: (t[0], t[1] or b'')
758 for b, node, writer, msg in sorted(changed, key=key):
758 changes.append((b, node))
759 changes.append((b, node))
759 writer(msg)
760 writer(msg)
760 localmarks.applychanges(repo, tr, changes)
761 localmarks.applychanges(repo, tr, changes)
@@ -103,6 +103,13 b' class dirstate(object):'
103 # raises an exception).
103 # raises an exception).
104 self._cwd
104 self._cwd
105
105
106 def prefetch_parents(self):
107 """make sure the parents are loaded
108
109 Used to avoid a race condition.
110 """
111 self._pl
112
106 @contextlib.contextmanager
113 @contextlib.contextmanager
107 def parentchange(self):
114 def parentchange(self):
108 '''Context manager for handling dirstate parents.
115 '''Context manager for handling dirstate parents.
@@ -1748,10 +1755,23 b' if rustmod is not None:'
1748
1755
1749 @propertycache
1756 @propertycache
1750 def _rustmap(self):
1757 def _rustmap(self):
1751 self._rustmap = rustmod.DirstateMap(self._root)
1758 """
1759 Fills the Dirstatemap when called.
1760 Use `self._inner_rustmap` if reading the dirstate is not necessary.
1761 """
1762 self._rustmap = self._inner_rustmap
1752 self.read()
1763 self.read()
1753 return self._rustmap
1764 return self._rustmap
1754
1765
1766 @propertycache
1767 def _inner_rustmap(self):
1768 """
1769 Does not fill the Dirstatemap when called. This allows for
1770 optimizations where only setting/getting the parents is needed.
1771 """
1772 self._inner_rustmap = rustmod.DirstateMap(self._root)
1773 return self._inner_rustmap
1774
1755 @property
1775 @property
1756 def copymap(self):
1776 def copymap(self):
1757 return self._rustmap.copymap()
1777 return self._rustmap.copymap()
@@ -1761,6 +1781,7 b' if rustmod is not None:'
1761
1781
1762 def clear(self):
1782 def clear(self):
1763 self._rustmap.clear()
1783 self._rustmap.clear()
1784 self._inner_rustmap.clear()
1764 self.setparents(nullid, nullid)
1785 self.setparents(nullid, nullid)
1765 util.clearcachedproperty(self, b"_dirs")
1786 util.clearcachedproperty(self, b"_dirs")
1766 util.clearcachedproperty(self, b"_alldirs")
1787 util.clearcachedproperty(self, b"_alldirs")
@@ -1817,7 +1838,7 b' if rustmod is not None:'
1817 st = b''
1838 st = b''
1818
1839
1819 try:
1840 try:
1820 self._parents = self._rustmap.parents(st)
1841 self._parents = self._inner_rustmap.parents(st)
1821 except ValueError:
1842 except ValueError:
1822 raise error.Abort(
1843 raise error.Abort(
1823 _(b'working directory state appears damaged!')
1844 _(b'working directory state appears damaged!')
@@ -210,7 +210,7 b' def _allhooks(ui):'
210 # in that section uses "_fromuntrusted" as its command.
210 # in that section uses "_fromuntrusted" as its command.
211 untrustedhooks = _hookitems(ui, _untrusted=True)
211 untrustedhooks = _hookitems(ui, _untrusted=True)
212 for name, value in untrustedhooks.items():
212 for name, value in untrustedhooks.items():
213 trustedvalue = hooks.get(name, (None, None, name, _fromuntrusted))
213 trustedvalue = hooks.get(name, ((), (), name, _fromuntrusted))
214 if value != trustedvalue:
214 if value != trustedvalue:
215 (lp, lo, lk, lv) = trustedvalue
215 (lp, lo, lk, lv) = trustedvalue
216 hooks[name] = (lp, lo, lk, _fromuntrusted)
216 hooks[name] = (lp, lo, lk, _fromuntrusted)
@@ -226,7 +226,7 b' def _hookitems(ui, _untrusted=False):'
226 continue
226 continue
227
227
228 priority = ui.configint(b'hooks', b'priority.%s' % name, 0)
228 priority = ui.configint(b'hooks', b'priority.%s' % name, 0)
229 hooks[name] = (-priority, len(hooks), name, cmd)
229 hooks[name] = ((-priority,), (len(hooks),), name, cmd)
230 return hooks
230 return hooks
231
231
232
232
@@ -1456,6 +1456,8 b' class localrepository(object):'
1456
1456
1457 @storecache(b'00changelog.i')
1457 @storecache(b'00changelog.i')
1458 def changelog(self):
1458 def changelog(self):
1459 # load dirstate before changelog to avoid race see issue6303
1460 self.dirstate.prefetch_parents()
1459 return self.store.changelog(txnutil.mayhavepending(self.root))
1461 return self.store.changelog(txnutil.mayhavepending(self.root))
1460
1462
1461 @storecache(b'00manifest.i')
1463 @storecache(b'00manifest.i')
@@ -1455,18 +1455,29 b' class manifestfulltextcache(util.lrucach'
1455 if not self._dirty or self._opener is None:
1455 if not self._dirty or self._opener is None:
1456 return
1456 return
1457 # rotate backwards to the first used node
1457 # rotate backwards to the first used node
1458 with self._opener(
1458 try:
1459 self._file, b'w', atomictemp=True, checkambig=True
1459 with self._opener(
1460 ) as fp:
1460 self._file, b'w', atomictemp=True, checkambig=True
1461 node = self._head.prev
1461 ) as fp:
1462 while True:
1462 node = self._head.prev
1463 if node.key in self._cache:
1463 while True:
1464 fp.write(node.key)
1464 if node.key in self._cache:
1465 fp.write(struct.pack(b'>L', len(node.value)))
1465 fp.write(node.key)
1466 fp.write(node.value)
1466 fp.write(struct.pack(b'>L', len(node.value)))
1467 if node is self._head:
1467 fp.write(node.value)
1468 break
1468 if node is self._head:
1469 node = node.prev
1469 break
1470 node = node.prev
1471 except IOError:
1472 # We could not write the cache (eg: permission error)
1473 # the content can be missing.
1474 #
1475 # We could try harder and see if we could recreate a wcache
1476 # directory were we coudl write too.
1477 #
1478 # XXX the error pass silently, having some way to issue an error
1479 # log `ui.log` would be nice.
1480 pass
1470
1481
1471 def __len__(self):
1482 def __len__(self):
1472 if not self._read:
1483 if not self._read:
@@ -225,7 +225,7 b' def _generic_start_transaction(handler, '
225
225
226 def _generic_proxytunnel(self):
226 def _generic_proxytunnel(self):
227 proxyheaders = {
227 proxyheaders = {
228 x: self.headers[x]
228 pycompat.bytestr(x): pycompat.bytestr(self.headers[x])
229 for x in self.headers
229 for x in self.headers
230 if x.lower().startswith('proxy-')
230 if x.lower().startswith('proxy-')
231 }
231 }
@@ -16,6 +16,7 b' import os'
16 import signal
16 import signal
17 import subprocess
17 import subprocess
18 import sys
18 import sys
19 import threading
19 import time
20 import time
20
21
21 from ..i18n import _
22 from ..i18n import _
@@ -604,6 +605,15 b' else:'
604 pid = os.fork()
605 pid = os.fork()
605 if pid:
606 if pid:
606 if not ensurestart:
607 if not ensurestart:
608 # Even though we're not waiting on the child process,
609 # we still must call waitpid() on it at some point so
610 # it's not a zombie/defunct. This is especially relevant for
611 # chg since the parent process won't die anytime soon.
612 # We use a thread to make the overhead tiny.
613 def _do_wait():
614 os.waitpid(pid, 0)
615
616 threading.Thread(target=_do_wait, daemon=True).start()
607 return
617 return
608 # Parent process
618 # Parent process
609 (_pid, status) = os.waitpid(pid, 0)
619 (_pid, status) = os.waitpid(pid, 0)
@@ -391,7 +391,7 b' def find_pullbundle(repo, proto, opts, c'
391 res = exchange.filterclonebundleentries(repo, res)
391 res = exchange.filterclonebundleentries(repo, res)
392 if not res:
392 if not res:
393 return None
393 return None
394 cl = repo.changelog
394 cl = repo.unfiltered().changelog
395 heads_anc = cl.ancestors([cl.rev(rev) for rev in heads], inclusive=True)
395 heads_anc = cl.ancestors([cl.rev(rev) for rev in heads], inclusive=True)
396 common_anc = cl.ancestors([cl.rev(rev) for rev in common], inclusive=True)
396 common_anc = cl.ancestors([cl.rev(rev) for rev in common], inclusive=True)
397 compformats = clientcompressionsupport(proto)
397 compformats = clientcompressionsupport(proto)
1 NO CONTENT: file copied from relnotes/next to relnotes/5.4
NO CONTENT: file copied from relnotes/next to relnotes/5.4
@@ -1,93 +1,11 b''
1 == New Features ==
1 == New Features ==
2
2
3 * `hg purge`/`hg clean` can now delete ignored files instead of
4 untracked files, with the new -i flag.
5
6 * `hg pull` now has a `--confirm` flag to prompt before applying changes.
7 Config option `pull.confirm` is also added for that.
8
9 * `hg log` now defaults to using an '%' symbol for commits involved
10 in unresolved merge conflicts. That includes unresolved conflicts
11 caused by e.g. `hg update --merge` and `hg graft`. '@' still takes
12 precedence, so what used to be marked '@' still is.
13
14 * New `conflictlocal()` and `conflictother()` revsets return the
15 commits that are being merged, when there are conflicts. Also works
16 for conflicts caused by e.g. `hg graft`.
17
18 * `hg copy --forget` can be used to unmark a file as copied.
19
20 * The `format.revlog-compression` configuration entry now accept a list. The
21 first available option will be used. for example setting::
22
23 [format]
24 revlog-compression=zstd, zlib
25
26 Will use `zstd` compression for new repositories is available, and will
27 simply fall back to `zlib` if not.
28
29 * `hg debugmergestate` output is now templated, which may be useful
30 e.g. for IDEs that want to help the user resolve merge conflicts.
31
32
3
33 == New Experimental Features ==
4 == New Experimental Features ==
34
5
35 * `hg copy` now supports a `--at-rev` argument to mark files as
36 copied in the specified commit. It only works with `--after` for
37 now (i.e., it's only useful for marking files copied using non-hg
38 `cp` as copied).
39
40 * Use `hg copy --forget --at-rev REV` to unmark already committed
41 copies.
42
43 == Bug Fixes ==
44
45 * Fix server exception when concurrent pushes delete the same bookmark
46
47 * Prevent pushes of divergent bookmarks (foo@remote)
48
49 * The push error "remote repository changed while pushing - please
50 try again" now only happens when a concurrent push changed related
51 heads (instead of when a concurrent pushed any revision).
52
53
6
54 == Backwards Compatibility Changes ==
7 == Backwards Compatibility Changes ==
55
8
56 * When `hg rebase` pauses for merge conflict resolution, the working
57 copy will no longer have the rebased node as a second parent. You
58 can use the new `conflictparents()` revset for finding the other
59 parent during a conflict.
60
61 * `hg rebase` now accepts repeated `--source` and `--base`
62 arguments. For example, `hg rebase --source 'A + B'` is equivalent
63 to `hg rebase --source A --source B`. This is a
64 backwards-incompatible change because it will break overriding an
65 alias `myrebase = rebase --source A` by `hg myrebase --source B`
66 (it will now rebase `(A + B)::` instead of `B::`).
67
68 * `hg recover` does not verify the validity of the whole repository
69 anymore. You can pass `--verify` or call `hg verify` if necessary.
70
71 * `hg debugmergestate` output format changed. Let us know if that is
72 causing you problems and we'll roll it back.
73
74 * Resolved merge conflicts are now cleared by `hg commit` even if the
75 working copy has no changes.
76
77
9
78 == Internal API Changes ==
10 == Internal API Changes ==
79
11
80 * The deprecated `ui.progress()` has now been deleted. Please use
81 `ui.makeprogress()` instead.
82
83 * `hg.merge()` now takes a `ctx` instead of the previous `repo` and
84 `node` arguments.
85
86 * `hg.merge()` has lost its `abort` argument. Please call
87 `hg.abortmerge()` directly instead.
88
89 * `hg.merge()` has lost its `mergeforce` argument. It should have
90 only ever been called with the same value as the `force` argument.
91
92 * The `*others` argument of `cmdutil.check_incompatible_arguments()`
93 changed from being varargs argument to being a single collection.
@@ -366,6 +366,10 b' fn re_matcher('
366 let pattern_string = unsafe { String::from_utf8_unchecked(escaped_bytes) };
366 let pattern_string = unsafe { String::from_utf8_unchecked(escaped_bytes) };
367 let re = regex::bytes::RegexBuilder::new(&pattern_string)
367 let re = regex::bytes::RegexBuilder::new(&pattern_string)
368 .unicode(false)
368 .unicode(false)
369 // Big repos with big `.hgignore` will hit the default limit and
370 // incur a significant performance hit. One repo's `hg status` hit
371 // multiple *minutes*.
372 .dfa_size_limit(50 * (1 << 20))
369 .build()
373 .build()
370 .map_err(|e| PatternError::UnsupportedSyntax(e.to_string()))?;
374 .map_err(|e| PatternError::UnsupportedSyntax(e.to_string()))?;
371
375
@@ -13,7 +13,7 b' import os'
13 # bug link: https://bugs.python.org/issue25270
13 # bug link: https://bugs.python.org/issue25270
14 supportedpy = ','.join(
14 supportedpy = ','.join(
15 [
15 [
16 '>=2.7',
16 '>=2.7.4',
17 '!=3.0.*',
17 '!=3.0.*',
18 '!=3.1.*',
18 '!=3.1.*',
19 '!=3.2.*',
19 '!=3.2.*',
@@ -54,7 +54,7 b' else:'
54 # should have a chance of getting a 4.2 release, and when we ratchet
54 # should have a chance of getting a 4.2 release, and when we ratchet
55 # the version requirement forward again hopefully everyone will get
55 # the version requirement forward again hopefully everyone will get
56 # something that works for them.
56 # something that works for them.
57 if sys.version_info < (2, 7, 0, 'final'):
57 if sys.version_info < (2, 7, 4, 'final'):
58 pip_message = (
58 pip_message = (
59 'This may be due to an out of date pip. '
59 'This may be due to an out of date pip. '
60 'Make sure you have pip >= 9.0.1.'
60 'Make sure you have pip >= 9.0.1.'
@@ -74,7 +74,7 b" if sys.version_info < (2, 7, 0, 'final')"
74 except Exception:
74 except Exception:
75 pass
75 pass
76 error = """
76 error = """
77 Mercurial does not support Python older than 2.7.
77 Mercurial does not support Python older than 2.7.4.
78 Python {py} detected.
78 Python {py} detected.
79 {pip}
79 {pip}
80 """.format(
80 """.format(
@@ -10,7 +10,7 b''
10 $ hg up -r 10
10 $ hg up -r 10
11 13 files updated, 0 files merged, 0 files removed, 0 files unresolved
11 13 files updated, 0 files merged, 0 files removed, 0 files unresolved
12 $ hg rm nf10
12 $ hg rm nf10
13 $ hg commit -u debugbuilddag --date 'Thu Jan 01 00:00:12 1970 +0000' -m r12
13 $ hg commit -u debugbuilddag --date 'Thu Jan 01 02:30:12 1970 +0230' -m r12
14 created new head
14 created new head
15 $ hg up -r 11
15 $ hg up -r 11
16 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
16 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -20,20 +20,20 b''
20 $ hg commit -m debugbuilddag --date 'Thu Jan 01 00:00:13 1970 +0000'
20 $ hg commit -m debugbuilddag --date 'Thu Jan 01 00:00:13 1970 +0000'
21
21
22 $ hg log -G
22 $ hg log -G
23 @ changeset: 13:e5c379648af4
23 @ changeset: 13:5544befcb7ce
24 |\ branch: both
24 |\ branch: both
25 | | tag: tip
25 | | tag: tip
26 | | parent: 11:2cbd52c10e88
26 | | parent: 11:2cbd52c10e88
27 | | parent: 12:4f31c9604af6
27 | | parent: 12:66d0c21243be
28 | | user: test
28 | | user: test
29 | | date: Thu Jan 01 00:00:13 1970 +0000
29 | | date: Thu Jan 01 00:00:13 1970 +0000
30 | | summary: debugbuilddag
30 | | summary: debugbuilddag
31 | |
31 | |
32 | o changeset: 12:4f31c9604af6
32 | o changeset: 12:66d0c21243be
33 | | branch: both
33 | | branch: both
34 | | parent: 10:9220596cb068
34 | | parent: 10:9220596cb068
35 | | user: debugbuilddag
35 | | user: debugbuilddag
36 | | date: Thu Jan 01 00:00:12 1970 +0000
36 | | date: Thu Jan 01 02:30:12 1970 +0230
37 | | summary: r12
37 | | summary: r12
38 | |
38 | |
39 o | changeset: 11:2cbd52c10e88
39 o | changeset: 11:2cbd52c10e88
@@ -150,7 +150,7 b''
150
150
151 commit refs/heads/default
151 commit refs/heads/default
152 mark :3
152 mark :3
153 committer "debugbuilddag" <debugbuilddag> 0 -0000
153 committer "debugbuilddag" <debugbuilddag> 0 +0000
154 data 2
154 data 2
155 r0
155 r0
156 M 644 :1 mf
156 M 644 :1 mf
@@ -197,7 +197,7 b''
197
197
198 commit refs/heads/default
198 commit refs/heads/default
199 mark :7
199 mark :7
200 committer "debugbuilddag" <debugbuilddag> 1 -0000
200 committer "debugbuilddag" <debugbuilddag> 1 +0000
201 data 2
201 data 2
202 r1
202 r1
203 from :3
203 from :3
@@ -245,7 +245,7 b''
245
245
246 commit refs/heads/name1
246 commit refs/heads/name1
247 mark :11
247 mark :11
248 committer "debugbuilddag" <debugbuilddag> 2 -0000
248 committer "debugbuilddag" <debugbuilddag> 2 +0000
249 data 2
249 data 2
250 r2
250 r2
251 from :7
251 from :7
@@ -293,7 +293,7 b''
293
293
294 commit refs/heads/name1
294 commit refs/heads/name1
295 mark :15
295 mark :15
296 committer "debugbuilddag" <debugbuilddag> 3 -0000
296 committer "debugbuilddag" <debugbuilddag> 3 +0000
297 data 2
297 data 2
298 r3
298 r3
299 from :11
299 from :11
@@ -341,7 +341,7 b''
341
341
342 commit refs/heads/name1
342 commit refs/heads/name1
343 mark :19
343 mark :19
344 committer "debugbuilddag" <debugbuilddag> 4 -0000
344 committer "debugbuilddag" <debugbuilddag> 4 +0000
345 data 2
345 data 2
346 r4
346 r4
347 from :15
347 from :15
@@ -389,7 +389,7 b''
389
389
390 commit refs/heads/name2
390 commit refs/heads/name2
391 mark :23
391 mark :23
392 committer "debugbuilddag" <debugbuilddag> 5 -0000
392 committer "debugbuilddag" <debugbuilddag> 5 +0000
393 data 2
393 data 2
394 r5
394 r5
395 from :7
395 from :7
@@ -437,7 +437,7 b''
437
437
438 commit refs/heads/name2
438 commit refs/heads/name2
439 mark :27
439 mark :27
440 committer "debugbuilddag" <debugbuilddag> 6 -0000
440 committer "debugbuilddag" <debugbuilddag> 6 +0000
441 data 2
441 data 2
442 r6
442 r6
443 from :23
443 from :23
@@ -485,7 +485,7 b''
485
485
486 commit refs/heads/name2
486 commit refs/heads/name2
487 mark :31
487 mark :31
488 committer "debugbuilddag" <debugbuilddag> 7 -0000
488 committer "debugbuilddag" <debugbuilddag> 7 +0000
489 data 2
489 data 2
490 r7
490 r7
491 from :27
491 from :27
@@ -533,7 +533,7 b''
533
533
534 commit refs/heads/name2
534 commit refs/heads/name2
535 mark :35
535 mark :35
536 committer "debugbuilddag" <debugbuilddag> 8 -0000
536 committer "debugbuilddag" <debugbuilddag> 8 +0000
537 data 2
537 data 2
538 r8
538 r8
539 from :31
539 from :31
@@ -581,7 +581,7 b''
581
581
582 commit refs/heads/both
582 commit refs/heads/both
583 mark :39
583 mark :39
584 committer "debugbuilddag" <debugbuilddag> 9 -0000
584 committer "debugbuilddag" <debugbuilddag> 9 +0000
585 data 2
585 data 2
586 r9
586 r9
587 from :35
587 from :35
@@ -633,7 +633,7 b''
633
633
634 commit refs/heads/both
634 commit refs/heads/both
635 mark :43
635 mark :43
636 committer "debugbuilddag" <debugbuilddag> 10 -0000
636 committer "debugbuilddag" <debugbuilddag> 10 +0000
637 data 3
637 data 3
638 r10
638 r10
639 from :39
639 from :39
@@ -681,7 +681,7 b''
681
681
682 commit refs/heads/both
682 commit refs/heads/both
683 mark :47
683 mark :47
684 committer "debugbuilddag" <debugbuilddag> 11 -0000
684 committer "debugbuilddag" <debugbuilddag> 11 +0000
685 data 3
685 data 3
686 r11
686 r11
687 from :43
687 from :43
@@ -691,7 +691,7 b''
691
691
692 commit refs/heads/both
692 commit refs/heads/both
693 mark :48
693 mark :48
694 committer "debugbuilddag" <debugbuilddag> 12 -0000
694 committer "debugbuilddag" <debugbuilddag> 12 +0230
695 data 3
695 data 3
696 r12
696 r12
697 from :43
697 from :43
@@ -699,7 +699,7 b''
699
699
700 commit refs/heads/both
700 commit refs/heads/both
701 mark :49
701 mark :49
702 committer "test" <test> 13 -0000
702 committer "test" <test> 13 +0000
703 data 13
703 data 13
704 debugbuilddag
704 debugbuilddag
705 from :47
705 from :47
@@ -754,8 +754,8 b''
754 33fbc651630ffa7ccbebfe4eb91320a873e7291c
754 33fbc651630ffa7ccbebfe4eb91320a873e7291c
755 868d828870663d075cdcff502d26cf8445ce068e
755 868d828870663d075cdcff502d26cf8445ce068e
756 2cbd52c10e88ce604402dc83a869ec4f07765b3d
756 2cbd52c10e88ce604402dc83a869ec4f07765b3d
757 4f31c9604af676986343d775b05695f535e8db5e
757 66d0c21243be072f82ced64aa730ab0367252451
758 e5c379648af4c9fa3b5546ab7ee6e61a36082830
758 5544befcb7ce4a558ed9e19909e16af574a2a3c6
759
759
760 $ hg fastexport --export-marks fastexport.marks2 -r 0
760 $ hg fastexport --export-marks fastexport.marks2 -r 0
761 blob
761 blob
@@ -793,7 +793,7 b''
793
793
794 commit refs/heads/default
794 commit refs/heads/default
795 mark :3
795 mark :3
796 committer "debugbuilddag" <debugbuilddag> 0 -0000
796 committer "debugbuilddag" <debugbuilddag> 0 +0000
797 data 2
797 data 2
798 r0
798 r0
799 M 644 :1 mf
799 M 644 :1 mf
@@ -845,7 +845,7 b''
845
845
846 commit refs/heads/default
846 commit refs/heads/default
847 mark :7
847 mark :7
848 committer "debugbuilddag" <debugbuilddag> 1 -0000
848 committer "debugbuilddag" <debugbuilddag> 1 +0000
849 data 2
849 data 2
850 r1
850 r1
851 from :3
851 from :3
@@ -861,5 +861,5 b''
861 data 4
861 data 4
862 foo
862 foo
863
863
864 abort: Unable to parse user into person and email for revision 4f71ca786403919cd16669d94ff7cd1c09437a44
864 abort: Unable to parse user into person and email for revision 65a3f69b9b519de73d755472c1ab05990ab8a7f7
865 [255]
865 [255]
@@ -36,6 +36,8 b' Test pullbundle functionality'
36 $ cat <<EOF > .hg/hgrc
36 $ cat <<EOF > .hg/hgrc
37 > [server]
37 > [server]
38 > pullbundle = True
38 > pullbundle = True
39 > [experimental]
40 > evolution = True
39 > [extensions]
41 > [extensions]
40 > blackbox =
42 > blackbox =
41 > EOF
43 > EOF
@@ -185,3 +187,24 b' Test recovery from misconfigured server '
185 * sending pullbundle "0.hg" (glob)
187 * sending pullbundle "0.hg" (glob)
186 * sending pullbundle "0.hg" (glob)
188 * sending pullbundle "0.hg" (glob)
187 $ rm repo/.hg/blackbox.log
189 $ rm repo/.hg/blackbox.log
190
191 Test processing when nodes used in the pullbundle.manifest end up being hidden
192
193 $ hg --repo repo debugobsolete ed1b79f46b9a29f5a6efa59cf12fcfca43bead5a
194 1 new obsolescence markers
195 obsoleted 1 changesets
196 $ hg serve --repo repo --config server.view=visible -p $HGPORT -d --pid-file=hg.pid -E errors.log
197 $ cat hg.pid >> $DAEMON_PIDS
198 $ hg clone http://localhost:$HGPORT repo-obs
199 requesting all changes
200 adding changesets
201 adding manifests
202 adding file changes
203 adding changesets
204 adding manifests
205 adding file changes
206 added 2 changesets with 2 changes to 2 files
207 new changesets bbd179dfa0a7:effea6de0384
208 updating to branch default
209 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
210 $ killdaemons.py
@@ -233,6 +233,7 b' List of files accessed over HTTP:'
233 /.hg/cache/hgtagsfnodes1
233 /.hg/cache/hgtagsfnodes1
234 /.hg/cache/rbc-names-v1
234 /.hg/cache/rbc-names-v1
235 /.hg/cache/rbc-revs-v1
235 /.hg/cache/rbc-revs-v1
236 /.hg/dirstate
236 /.hg/requires
237 /.hg/requires
237 /.hg/store/00changelog.i
238 /.hg/store/00changelog.i
238 /.hg/store/00manifest.i
239 /.hg/store/00manifest.i
@@ -250,6 +251,7 b' List of files accessed over HTTP:'
250 /remote-with-names/.hg/cache/rbc-names-v1
251 /remote-with-names/.hg/cache/rbc-names-v1
251 /remote-with-names/.hg/cache/rbc-revs-v1
252 /remote-with-names/.hg/cache/rbc-revs-v1
252 /remote-with-names/.hg/cache/tags2-served
253 /remote-with-names/.hg/cache/tags2-served
254 /remote-with-names/.hg/dirstate
253 /remote-with-names/.hg/localtags
255 /remote-with-names/.hg/localtags
254 /remote-with-names/.hg/requires
256 /remote-with-names/.hg/requires
255 /remote-with-names/.hg/store/00changelog.i
257 /remote-with-names/.hg/store/00changelog.i
@@ -266,6 +268,7 b' List of files accessed over HTTP:'
266 /remote/.hg/cache/rbc-names-v1
268 /remote/.hg/cache/rbc-names-v1
267 /remote/.hg/cache/rbc-revs-v1
269 /remote/.hg/cache/rbc-revs-v1
268 /remote/.hg/cache/tags2-served
270 /remote/.hg/cache/tags2-served
271 /remote/.hg/dirstate
269 /remote/.hg/localtags
272 /remote/.hg/localtags
270 /remote/.hg/requires
273 /remote/.hg/requires
271 /remote/.hg/store/00changelog.i
274 /remote/.hg/store/00changelog.i
@@ -278,6 +281,7 b' List of files accessed over HTTP:'
278 /remote/.hg/store/data/~2ehgtags.i (py37 !)
281 /remote/.hg/store/data/~2ehgtags.i (py37 !)
279 /remotempty/.hg/bookmarks
282 /remotempty/.hg/bookmarks
280 /remotempty/.hg/bookmarks.current
283 /remotempty/.hg/bookmarks.current
284 /remotempty/.hg/dirstate
281 /remotempty/.hg/requires
285 /remotempty/.hg/requires
282 /remotempty/.hg/store/00changelog.i
286 /remotempty/.hg/store/00changelog.i
283 /remotempty/.hg/store/00manifest.i
287 /remotempty/.hg/store/00manifest.i
@@ -286,6 +290,7 b' List of files accessed over HTTP:'
286 /sub/.hg/cache/hgtagsfnodes1
290 /sub/.hg/cache/hgtagsfnodes1
287 /sub/.hg/cache/rbc-names-v1
291 /sub/.hg/cache/rbc-names-v1
288 /sub/.hg/cache/rbc-revs-v1
292 /sub/.hg/cache/rbc-revs-v1
293 /sub/.hg/dirstate
289 /sub/.hg/requires
294 /sub/.hg/requires
290 /sub/.hg/store/00changelog.i
295 /sub/.hg/store/00changelog.i
291 /sub/.hg/store/00manifest.i
296 /sub/.hg/store/00manifest.i
@@ -1,4 +1,4 b''
1 #!/bin/bash
1 #!/bin/sh
2 #
2 #
3 # wait up to TIMEOUT seconds until a WAIT_ON_FILE is created.
3 # wait up to TIMEOUT seconds until a WAIT_ON_FILE is created.
4 #
4 #
@@ -11,9 +11,12 b' fi'
11
11
12 timer="$1"
12 timer="$1"
13
13
14 # if the test timeout have been extended, explicitly extend the provided timer
14 # Scale the timeout to match the sleep steps below, i.e. 1/0.02.
15 timer=$(( 50 * $timer ))
16 # If the test timeout have been extended, also scale the timer relative
17 # to the normal timing.
15 if [ "$HGTEST_TIMEOUT_DEFAULT" -lt "$HGTEST_TIMEOUT" ]; then
18 if [ "$HGTEST_TIMEOUT_DEFAULT" -lt "$HGTEST_TIMEOUT" ]; then
16 timer=$(( ( 100 * $timer * $HGTEST_TIMEOUT) / $HGTEST_TIMEOUT_DEFAULT ))
19 timer=$(( ( $timer * $HGTEST_TIMEOUT) / $HGTEST_TIMEOUT_DEFAULT ))
17 fi
20 fi
18
21
19 wait_on="$2"
22 wait_on="$2"
@@ -22,15 +25,13 b' if [ $# -eq 3 ]; then'
22 create="$3"
25 create="$3"
23 fi
26 fi
24
27
25 if [ -n "$create" ];
28 if [ -n "$create" ]; then
26 then
27 touch "$create"
29 touch "$create"
28 create=""
30 create=""
29 fi
31 fi
30 while [ "$timer" -gt 0 ] && [ ! -f "$wait_on" ];
32 while [ "$timer" -gt 0 ] && [ ! -f "$wait_on" ]; do
31 do
32 timer=$(( $timer - 1))
33 timer=$(( $timer - 1))
33 sleep 0.01
34 sleep 0.02
34 done
35 done
35 if [ "$timer" -le 0 ]; then
36 if [ "$timer" -le 0 ]; then
36 echo "file not created after $1 seconds: $wait_on" >&2
37 echo "file not created after $1 seconds: $wait_on" >&2
General Comments 0
You need to be logged in to leave comments. Login now