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, |
|
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. |
|
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, ( |
|
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 |
|
|
1464 | if node.key in self._cache: | |
1465 |
fp.write( |
|
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 |
|
|
1468 | if node is self._head: | |
1469 |
|
|
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, |
|
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 0 |
|
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: |
|
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: |
|
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: |
|
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 0 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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/ |
|
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=$(( ( |
|
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.0 |
|
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