Show More
@@ -254,3 +254,4 b' c083d9776cb2fb6056715b2988d1ea48055f3162' | |||
|
254 | 254 | 27055614b68538576fb0439007009acf93fe0a49 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmVKXukZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVg5UDACTnRyxApQMQLaRX9khRB6E5XkSJqpR3wqXr5yMLaqgaUGzUUaupA8zTjWoIDM730V1hWliWinQGD/3XA7qUQ31VALRQq8PlvzMEkSz0NB2IDBU6uHdhNAkZQeYm7qJwpzCIuPs/diVm97oUJr0+Y7KJKV7ZxUtZ1bEBHq/FUgyVnLkVQJdb1p28ECIKQ8SS7XY5C8rdYGa1fHYpsLAfTbAunVOEl6Phi3Y3ZqNgcet8WAP+6MwXpgf6ye9O1p2HSaM4BFq2d8AizksjSCuVTTRtuCkpcLDGCtvb6dOJxb4TpMyaYWXerolEGF3ZJsaVgOi/bH7aDsoJP0I5IJnmxiyVjOvOUDd5o3nn0SElsp45r0udGlos5r6tW+kZ9OBBH8nv3AcFxuGD8YFPB3AMRcqIBG1tNLa02bOAaF+uFKVB+YGWHowZtC+SdN2XZ1tp7BD/3CQo+PrpZzEDdVs9S30wef5k+2Nrj2/8tOF/XULy1BRxQV+k2PTlE1/mTaEY60= |
|
255 | 255 | 26c57e7a0890b96e2c473b394de380d6753c9230 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmVcykAZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVoGeC/0Uvynfd4xJMSa3ef4lOrw3l0PsOMzLwcITC5b4SlMfo8sHDq1Vr169z/IvI/FhJ8LmK/Spg7OK6TkqJ33fOmpnKZji8oCstM8q0P6xZh55RIE4St8Px/TuC99HvB41sPgcBDQf/dfvXqUKHImxH5C21p93AkvdCie9sdeYzy23VSn1URBBRkfToB6U7QDvktiKE4Hy/mJolNd0FlTOrRiD7K4bzstaLZP8kO1gJQPCPBjqN8glXN/arebcdu8zD7sE22JZA87pJljY7Wy3P6O1zRol2qDPCBshK2zDbrljyOaKR10ciHUBJV0V11nK6xIZ4XE2N4xes3fYlBNsudHXvLutCv40e1VDVjRe2X6ayRZCnKkYI0s4oTl9oFo5olrsfeC5+b/exqB8oTCCqmMFdz3/QFO7/pQ3xck2XaWucG+o3R/y91t6Uy+5LPtIOsR5IevvPIiebpQgIMJkOIRrz5j59U+MafTSGfaDel/niPISQPWZ9T0ORS6q9uNRHCo= |
|
256 | 256 | 71bd09bebbe36a09569cbfb388f371433360056b 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmVxxyYZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVrr4C/9UvrFMEo1DOzFP6RpGDnRUEl6ejUBy2cjQ1HXCLZV8zYQxpBK9dMqoLwjv1FKgIwCXEJCWs0qedCZgJ0fd5xZnVPIfb6FzziWYhK3MNUAAzb2ptXrYNUpCGpPyLmaC8YinP+3XmGLkUA4en5Ff1C5aVxQfUgb/FXJQjseBlRXpPxasOs3zKYN1xJXJsJzapqeEI5NJNrjIbwvbFCCr/uPe7FgT65kvcn4SSuGUO2Bg9jMPKiWritJQ83Mdzzw0eJGsKduF2ZTo4R4h1C2z0VdGWtNLg5nXaJT1ZxcsvjJDIfWA/Ds/b/EiMzPL5pHk230/kBbyu/1Q6A+Riy2J1zQLSt5FeRssOEXZD4jCQ/Xs9zptttFTDu7rorcSE+tis8GybGvFgX7JzTcBout6/QfUovpaXuu3IUwaS1U0gaTxKbjnEXZqVY1w4RkdUnhEm42RBlMsa9/TBbgkFacvWMi70VDDATJMPh7dQSi1fylSiYD2HEySAnaBxXU5aPfefbQ= |
|
257 | 136902b3a95db38854ebaf5198a627641065c2ea 0 iQHNBAABCgA3FiEEH2b4zfZU6QXBHaBhoR4BzQ4F2VYFAmWgHCIZHGFscGhhcmVAcmFwaGFlbGdvbWVzLmRldgAKCRChHgHNDgXZVtVFDACX0F3mxc9xtIlaQaze8z9LnTg0dluNZiuM2C74o9jdVW5Jq+jhF7HjiGxRr2D5a/RhaPHg3bgRSf3Pjm0js9XSE0D9+HHZW3t29M37ShgknA2g9N1kADXkrg5frdOHYfa9tqhyWp78Vupydkh08iK4/5Prb/EPrDF3+GXwOJcIJ7xo4aQ7MVjwAzQkbUjzVqDd4x4HCRsT1jzUetnzuPXB6nWXcM521wbQjD9s4PceaAFPNyYXnckuSaNribSyCU6t3IqgMSxIr73khijc3+yCFHyTznEa3fNI7gp1VJygi69Ukt18YWJOG/dm0GGHvKunQUKcYFAAX2FY7NnQAqI/zqUDyg2vHE3ufy/F2tmNbpOnVuOz2/YYlIcTSF4llyt80IB89WrfdwTZqNUfZcwPgFG8ajW5v/jHvic5DZSxvDfmCvNIxhtOoz8BVZMXi3DzDOMbT20D9leCcBwmHoFYNAZC/z4QwkrXFgrbFiy27Sj5LqFqO1hlY3NVpk01F2w= |
@@ -270,3 +270,4 b' c083d9776cb2fb6056715b2988d1ea48055f3162' | |||
|
270 | 270 | 27055614b68538576fb0439007009acf93fe0a49 6.6rc0 |
|
271 | 271 | 26c57e7a0890b96e2c473b394de380d6753c9230 6.6 |
|
272 | 272 | 71bd09bebbe36a09569cbfb388f371433360056b 6.6.1 |
|
273 | 136902b3a95db38854ebaf5198a627641065c2ea 6.6.2 |
@@ -6,6 +6,10 b'' | |||
|
6 | 6 | # GNU General Public License version 2 or any later version. |
|
7 | 7 | |
|
8 | 8 | |
|
9 | from mercurial.i18n import _ | |
|
10 | ||
|
11 | from mercurial.utils import stringutil | |
|
12 | ||
|
9 | 13 | from mercurial import ( |
|
10 | 14 | bundle2, |
|
11 | 15 | error, |
@@ -82,20 +86,38 b' def narrow_widen(' | |||
|
82 | 86 | # work around ''.split(',') => [''] |
|
83 | 87 | return data.split(b',') if data else [] |
|
84 | 88 | |
|
85 | oldincludes = splitpaths(oldincludes) | |
|
86 | newincludes = splitpaths(newincludes) | |
|
87 | oldexcludes = splitpaths(oldexcludes) | |
|
88 | newexcludes = splitpaths(newexcludes) | |
|
89 | oldincludes = set(splitpaths(oldincludes)) | |
|
90 | newincludes = set(splitpaths(newincludes)) | |
|
91 | oldexcludes = set(splitpaths(oldexcludes)) | |
|
92 | newexcludes = set(splitpaths(newexcludes)) | |
|
89 | 93 | |
|
90 | 94 | # enforce narrow acl if set |
|
91 | 95 | if repo.ui.has_section(exchange._NARROWACL_SECTION): |
|
92 |
exchange.applynarrowacl( |
|
|
96 | kwargs = exchange.applynarrowacl( | |
|
97 | repo, {'includepats': newincludes, 'excludepats': newexcludes} | |
|
98 | ) | |
|
99 | newincludes = kwargs['includepats'] | |
|
100 | requiredexcludes = kwargs['excludepats'] - newexcludes | |
|
101 | if requiredexcludes: | |
|
102 | # XXX: The below code to get the username was copied from exchange.py, | |
|
103 | # where it is noted that this is technically a layering violation for | |
|
104 | # assuming the existence of HTTP. Using it anyway to make the error | |
|
105 | # message consistent with the error message for invalid includes. | |
|
106 | ui = repo.ui | |
|
107 | username = ui.shortuser( | |
|
108 | ui.environ.get(b'REMOTE_USER') or ui.username() | |
|
109 | ) | |
|
110 | raise error.Abort( | |
|
111 | _(b"The following excludes cannot be removed for %s: %s") | |
|
112 | % (username, stringutil.pprint(list(requiredexcludes))) | |
|
113 | ) | |
|
114 | newexcludes = kwargs['excludepats'] | |
|
93 | 115 | |
|
94 | 116 | # validate the patterns |
|
95 |
narrowspec.validatepatterns( |
|
|
96 |
narrowspec.validatepatterns( |
|
|
97 |
narrowspec.validatepatterns( |
|
|
98 |
narrowspec.validatepatterns( |
|
|
117 | narrowspec.validatepatterns(oldincludes) | |
|
118 | narrowspec.validatepatterns(newincludes) | |
|
119 | narrowspec.validatepatterns(oldexcludes) | |
|
120 | narrowspec.validatepatterns(newexcludes) | |
|
99 | 121 | |
|
100 | 122 | common = wireprototypes.decodelist(commonheads) |
|
101 | 123 | known = wireprototypes.decodelist(known) |
@@ -1593,13 +1593,13 b' def bundle(ui, repo, fname, *dests, **op' | |||
|
1593 | 1593 | _(b'packed bundles cannot be produced by "hg bundle"'), |
|
1594 | 1594 | hint=_(b"use 'hg debugcreatestreamclonebundle'"), |
|
1595 | 1595 | ) |
|
1596 | ||
|
1596 | base_opt = opts.get('base') | |
|
1597 | 1597 | if opts.get('all'): |
|
1598 | 1598 | if dests: |
|
1599 | 1599 | raise error.InputError( |
|
1600 | 1600 | _(b"--all is incompatible with specifying destinations") |
|
1601 | 1601 | ) |
|
1602 |
if |
|
|
1602 | if base_opt: | |
|
1603 | 1603 | ui.warn(_(b"ignoring --base because --all was specified\n")) |
|
1604 | 1604 | if opts.get('exact'): |
|
1605 | 1605 | ui.warn(_(b"ignoring --exact because --all was specified\n")) |
@@ -1609,19 +1609,24 b' def bundle(ui, repo, fname, *dests, **op' | |||
|
1609 | 1609 | raise error.InputError( |
|
1610 | 1610 | _(b"--exact is incompatible with specifying destinations") |
|
1611 | 1611 | ) |
|
1612 |
if |
|
|
1612 | if base_opt: | |
|
1613 | 1613 | ui.warn(_(b"ignoring --base because --exact was specified\n")) |
|
1614 | 1614 | base = repo.revs(b'parents(%ld) - %ld', revs, revs) |
|
1615 | 1615 | if not base: |
|
1616 | 1616 | base = [nullrev] |
|
1617 | elif base_opt: | |
|
1618 | base = logcmdutil.revrange(repo, base_opt) | |
|
1619 | if not base: | |
|
1620 | # base specified, but nothing was selected | |
|
1621 | base = [nullrev] | |
|
1617 | 1622 | else: |
|
1618 | base = logcmdutil.revrange(repo, opts.get('base')) | |
|
1623 | base = None | |
|
1619 | 1624 | if cgversion not in changegroup.supportedoutgoingversions(repo): |
|
1620 | 1625 | raise error.Abort( |
|
1621 | 1626 | _(b"repository does not support bundle version %s") % cgversion |
|
1622 | 1627 | ) |
|
1623 | 1628 | |
|
1624 | if base: | |
|
1629 | if base is not None: | |
|
1625 | 1630 | if dests: |
|
1626 | 1631 | raise error.InputError( |
|
1627 | 1632 | _(b"--base is incompatible with specifying destinations") |
@@ -202,6 +202,13 b' class bytestr(bytes):' | |||
|
202 | 202 | >>> bytestr(bytesable()) |
|
203 | 203 | 'bytes' |
|
204 | 204 | |
|
205 | ...unless the argument is the bytes *type* itself: it gets a | |
|
206 | __bytes__() method in Python 3.11, which cannot be used as in an instance | |
|
207 | of bytes: | |
|
208 | ||
|
209 | >>> bytestr(bytes) | |
|
210 | "<class 'bytes'>" | |
|
211 | ||
|
205 | 212 | There's no implicit conversion from non-ascii str as its encoding is |
|
206 | 213 | unknown: |
|
207 | 214 | |
@@ -251,10 +258,9 b' class bytestr(bytes):' | |||
|
251 | 258 | def __new__(cls: Type[_Tbytestr], s: object = b'') -> _Tbytestr: |
|
252 | 259 | if isinstance(s, bytestr): |
|
253 | 260 | return s |
|
254 | if not isinstance( | |
|
255 | s, (bytes, bytearray) | |
|
256 |
|
|
|
257 | s, u'__bytes__' | |
|
261 | if not isinstance(s, (bytes, bytearray)) and ( | |
|
262 | isinstance(s, type) | |
|
263 | or not builtins.hasattr(s, u'__bytes__') # hasattr-py3-only | |
|
258 | 264 | ): |
|
259 | 265 | s = str(s).encode('ascii') |
|
260 | 266 | return bytes.__new__(cls, s) |
@@ -1,3 +1,12 b'' | |||
|
1 | = Mercurial 6.6.2 = | |
|
2 | ||
|
3 | * histedit: remove superfluous echo() and endwin() calls (issue6859) | |
|
4 | * persistent-nodemap: avoid writing nodemap for empty revlog | |
|
5 | * persistent-nodemap: respect the mmap setting when refreshing data | |
|
6 | * bundle: do not detect --base argument that match nothing as lack of argument | |
|
7 | * narrow: prevent removal of ACL-defined excludes | |
|
8 | * pycompat: fix bytestr(bytes) in Python 3.11 | |
|
9 | ||
|
1 | 10 | = Mercurial 6.6.1 = |
|
2 | 11 | |
|
3 | 12 | The first two patches fix aborted transactions that could happen since 6.6. |
@@ -140,6 +140,10 b' should fail' | |||
|
140 | 140 | $ hg -R test bundle --base 2 --all test-bundle-all-2.hg |
|
141 | 141 | ignoring --base because --all was specified |
|
142 | 142 | 9 changesets found |
|
143 | $ hg -R test bundle --base 3-3 -r tip test-base-match-nothing-with-dest.hg --config paths.default=$TESTTMP/test-3 | |
|
144 | 5 changesets found | |
|
145 | $ hg -R test bundle --base 3-3 -r tip test-base-match-nothing-no-dest.hg | |
|
146 | 5 changesets found | |
|
143 | 147 | $ hg -R test bundle --base 3 -r tip test-bundle-should-fail.hg |
|
144 | 148 | 1 changesets found |
|
145 | 149 |
@@ -1,4 +1,4 b'' | |||
|
1 | Make a narrow clone then archive it | |
|
1 | Test exclusion-based ACL enforcement | |
|
2 | 2 | $ . "$TESTDIR/narrow-library.sh" |
|
3 | 3 | |
|
4 | 4 | $ hg init master |
@@ -11,7 +11,9 b' Make a narrow clone then archive it' | |||
|
11 | 11 | > done |
|
12 | 12 | $ cat >> .hg/hgrc << EOF |
|
13 | 13 | > [narrowacl] |
|
14 |
> default.includes= |
|
|
14 | > default.includes=* | |
|
15 | > default.excludes=f2 f3 | |
|
16 | > test.excludes=f3 | |
|
15 | 17 | > EOF |
|
16 | 18 | $ hg serve -a localhost -p $HGPORT1 -d --pid-file=hg.pid |
|
17 | 19 | $ cat hg.pid >> "$DAEMON_PIDS" |
@@ -37,43 +39,37 b' Requirements should contain narrowhg' | |||
|
37 | 39 | $ hg debugrequires -R narrowclone1 | grep narrowhg |
|
38 | 40 | narrowhg-experimental |
|
39 | 41 | |
|
40 |
NarrowHG should |
|
|
42 | NarrowHG should exclude f3. | |
|
41 | 43 | $ hg -R narrowclone1 tracked |
|
42 |
I path: |
|
|
43 |
|
|
|
44 | I path:. | |
|
45 | X path:f3 | |
|
44 | 46 | |
|
45 | 47 | Narrow should not be able to widen to include f3 |
|
46 | 48 | $ hg -R narrowclone1 tracked --addinclude f3 |
|
47 | 49 | comparing with http://localhost:$HGPORT1/ |
|
48 | 50 | searching for changes |
|
49 | abort: The following includes are not accessible for test: ['path:f3'] | |
|
51 | adding changesets | |
|
52 | adding manifests | |
|
53 | adding file changes | |
|
54 | $ ls -A -1 narrowclone1 | sort | |
|
55 | .hg | |
|
56 | f1 | |
|
57 | f2 | |
|
58 | $ hg -R narrowclone1 tracked | |
|
59 | I path:. | |
|
60 | X path:f3 | |
|
61 | ||
|
62 | ||
|
63 | Narrow should not be able to remove the exclusion for f3 | |
|
64 | $ hg -R narrowclone1 tracked --removeexclude f3 | |
|
65 | comparing with http://localhost:$HGPORT1/ | |
|
66 | searching for changes | |
|
67 | abort: The following excludes cannot be removed for test: ['path:f3'] | |
|
50 | 68 | [255] |
|
51 | 69 | $ ls -A -1 narrowclone1 | sort |
|
52 | 70 | .hg |
|
53 | 71 | f1 |
|
54 | 72 | f2 |
|
55 | 73 | $ hg -R narrowclone1 tracked |
|
56 |
I path: |
|
|
57 |
|
|
|
58 | ||
|
59 | Narrow should allow widen to include f2 | |
|
60 | $ hg -R narrowclone1 tracked --removeinclude f2 > /dev/null | |
|
61 | $ hg -R narrowclone1 tracked | |
|
62 | I path:f1 | |
|
63 | $ ls -A -1 narrowclone1 | sort | |
|
64 | .hg | |
|
65 | f1 | |
|
66 | $ hg -R narrowclone1 tracked --addinclude f2 | |
|
67 | comparing with http://localhost:$HGPORT1/ | |
|
68 | searching for changes | |
|
69 | adding changesets | |
|
70 | adding manifests | |
|
71 | adding file changes | |
|
72 | added 0 changesets with 1 changes to 1 files | |
|
73 | $ hg -R narrowclone1 tracked | |
|
74 | I path:f1 | |
|
75 | I path:f2 | |
|
76 | $ ls -A -1 narrowclone1 | sort | |
|
77 | .hg | |
|
78 | f1 | |
|
79 | f2 | |
|
74 | I path:. | |
|
75 | X path:f3 |
General Comments 0
You need to be logged in to leave comments.
Login now