Show More
@@ -1335,6 +1335,29 b' def followlines(repo, subset, x):' | |||
|
1335 | 1335 | return subset & rs |
|
1336 | 1336 | |
|
1337 | 1337 | |
|
1338 | @predicate(b'nodefromfile(path)') | |
|
1339 | def nodefromfile(repo, subset, x): | |
|
1340 | """ | |
|
1341 | An alias for ``::.`` (ancestors of the working directory's first parent). | |
|
1342 | If file pattern is specified, the histories of files matching given | |
|
1343 | pattern in the revision given by startrev are followed, including copies. | |
|
1344 | """ | |
|
1345 | path = getstring(x, _(b"nodefromfile require a file path")) | |
|
1346 | listed_rev = set() | |
|
1347 | try: | |
|
1348 | with pycompat.open(path, 'rb') as f: | |
|
1349 | for line in f: | |
|
1350 | n = line.strip() | |
|
1351 | rn = _node(repo, n) | |
|
1352 | if rn is not None: | |
|
1353 | listed_rev.add(rn) | |
|
1354 | except IOError as exc: | |
|
1355 | m = _(b'cannot open nodes file "%s": %s') | |
|
1356 | m %= (path, encoding.strtolocal(exc.strerror)) | |
|
1357 | raise error.Abort(m) | |
|
1358 | return subset & baseset(listed_rev) | |
|
1359 | ||
|
1360 | ||
|
1338 | 1361 | @predicate(b'all()', safe=True) |
|
1339 | 1362 | def getall(repo, subset, x): |
|
1340 | 1363 | """All changesets, the same as ``0:tip``.""" |
@@ -1697,13 +1720,9 b' def named(repo, subset, x):' | |||
|
1697 | 1720 | return subset & names |
|
1698 | 1721 | |
|
1699 | 1722 | |
|
1700 | @predicate(b'id(string)', safe=True) | |
|
1701 | def node_(repo, subset, x): | |
|
1702 | """Revision non-ambiguously specified by the given hex string prefix.""" | |
|
1703 | # i18n: "id" is a keyword | |
|
1704 | l = getargs(x, 1, 1, _(b"id requires one argument")) | |
|
1705 | # i18n: "id" is a keyword | |
|
1706 | n = getstring(l[0], _(b"id requires a string")) | |
|
1723 | def _node(repo, n): | |
|
1724 | """process a node input""" | |
|
1725 | rn = None | |
|
1707 | 1726 | if len(n) == 40: |
|
1708 | 1727 | try: |
|
1709 | 1728 | rn = repo.changelog.rev(bin(n)) |
@@ -1712,7 +1731,6 b' def node_(repo, subset, x):' | |||
|
1712 | 1731 | except (LookupError, TypeError): |
|
1713 | 1732 | rn = None |
|
1714 | 1733 | else: |
|
1715 | rn = None | |
|
1716 | 1734 | try: |
|
1717 | 1735 | pm = scmutil.resolvehexnodeidprefix(repo, n) |
|
1718 | 1736 | if pm is not None: |
@@ -1721,6 +1739,17 b' def node_(repo, subset, x):' | |||
|
1721 | 1739 | pass |
|
1722 | 1740 | except error.WdirUnsupported: |
|
1723 | 1741 | rn = wdirrev |
|
1742 | return rn | |
|
1743 | ||
|
1744 | ||
|
1745 | @predicate(b'id(string)', safe=True) | |
|
1746 | def node_(repo, subset, x): | |
|
1747 | """Revision non-ambiguously specified by the given hex string prefix.""" | |
|
1748 | # i18n: "id" is a keyword | |
|
1749 | l = getargs(x, 1, 1, _(b"id requires one argument")) | |
|
1750 | # i18n: "id" is a keyword | |
|
1751 | n = getstring(l[0], _(b"id requires a string")) | |
|
1752 | rn = _node(repo, n) | |
|
1724 | 1753 | |
|
1725 | 1754 | if rn is None: |
|
1726 | 1755 | return baseset() |
@@ -137,6 +137,7 b' Invalid :pushrev raises appropriately' | |||
|
137 | 137 | $ hg --config 'paths.default:pushrev=notdefined()' push |
|
138 | 138 | pushing to file:/*/$TESTTMP/pushurlsource/../pushurldest (glob) |
|
139 | 139 | hg: parse error: unknown identifier: notdefined |
|
140 | (did you mean nodefromfile?) | |
|
140 | 141 | [10] |
|
141 | 142 | |
|
142 | 143 | $ hg --config 'paths.default:pushrev=(' push |
@@ -3108,3 +3108,18 b" abort if the revset doesn't expect given" | |||
|
3108 | 3108 | $ log 'expectsize(0:2, :2)' |
|
3109 | 3109 | abort: revset size mismatch. expected between 0 and 2, got 3 |
|
3110 | 3110 | [255] |
|
3111 | ||
|
3112 | Test getting list of node from file | |
|
3113 | ||
|
3114 | $ hg log -r '0:2' -T '{node}\n' > some.nodes | |
|
3115 | $ hg log -r 'nodefromfile("some.nodes")' -T '{rev}\n' | |
|
3116 | 0 | |
|
3117 | 1 | |
|
3118 | 2 | |
|
3119 | $ hg log -r 'nodefromfile("missing-file")' -T '{rev}\n' | |
|
3120 | abort: cannot open nodes file "missing-file": $ENOENT$ | |
|
3121 | [255] | |
|
3122 | $ echo bad-node > bad.nodes | |
|
3123 | $ hg log -r 'nodefromfile("bad.nodes")' -T '{rev}\n' | |
|
3124 | $ echo abcdefabcdefabcdeabcdeabcdeabcdeabcdeabc > missing.nodes | |
|
3125 |
General Comments 0
You need to be logged in to leave comments.
Login now