##// END OF EJS Templates
branching: merge stable into default
Raphaël Gomès -
r52207:7e6aae03 merge default
parent child Browse files
Show More
@@ -254,3 +254,4 b' c083d9776cb2fb6056715b2988d1ea48055f3162'
254 27055614b68538576fb0439007009acf93fe0a49 0 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
@@ -270,3 +270,4 b' c083d9776cb2fb6056715b2988d1ea48055f3162'
270 27055614b68538576fb0439007009acf93fe0a49 6.6rc0
270 27055614b68538576fb0439007009acf93fe0a49 6.6rc0
271 26c57e7a0890b96e2c473b394de380d6753c9230 6.6
271 26c57e7a0890b96e2c473b394de380d6753c9230 6.6
272 71bd09bebbe36a09569cbfb388f371433360056b 6.6.1
272 71bd09bebbe36a09569cbfb388f371433360056b 6.6.1
273 136902b3a95db38854ebaf5198a627641065c2ea 6.6.2
@@ -6,6 +6,10 b''
6 # GNU General Public License version 2 or any later version.
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 from mercurial import (
13 from mercurial import (
10 bundle2,
14 bundle2,
11 error,
15 error,
@@ -82,20 +86,38 b' def narrow_widen('
82 # work around ''.split(',') => ['']
86 # work around ''.split(',') => ['']
83 return data.split(b',') if data else []
87 return data.split(b',') if data else []
84
88
85 oldincludes = splitpaths(oldincludes)
89 oldincludes = set(splitpaths(oldincludes))
86 newincludes = splitpaths(newincludes)
90 newincludes = set(splitpaths(newincludes))
87 oldexcludes = splitpaths(oldexcludes)
91 oldexcludes = set(splitpaths(oldexcludes))
88 newexcludes = splitpaths(newexcludes)
92 newexcludes = set(splitpaths(newexcludes))
89
93
90 # enforce narrow acl if set
94 # enforce narrow acl if set
91 if repo.ui.has_section(exchange._NARROWACL_SECTION):
95 if repo.ui.has_section(exchange._NARROWACL_SECTION):
92 exchange.applynarrowacl(repo, {'includepats': newincludes})
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 # validate the patterns
116 # validate the patterns
95 narrowspec.validatepatterns(set(oldincludes))
117 narrowspec.validatepatterns(oldincludes)
96 narrowspec.validatepatterns(set(newincludes))
118 narrowspec.validatepatterns(newincludes)
97 narrowspec.validatepatterns(set(oldexcludes))
119 narrowspec.validatepatterns(oldexcludes)
98 narrowspec.validatepatterns(set(newexcludes))
120 narrowspec.validatepatterns(newexcludes)
99
121
100 common = wireprototypes.decodelist(commonheads)
122 common = wireprototypes.decodelist(commonheads)
101 known = wireprototypes.decodelist(known)
123 known = wireprototypes.decodelist(known)
@@ -1593,13 +1593,13 b' def bundle(ui, repo, fname, *dests, **op'
1593 _(b'packed bundles cannot be produced by "hg bundle"'),
1593 _(b'packed bundles cannot be produced by "hg bundle"'),
1594 hint=_(b"use 'hg debugcreatestreamclonebundle'"),
1594 hint=_(b"use 'hg debugcreatestreamclonebundle'"),
1595 )
1595 )
1596
1596 base_opt = opts.get('base')
1597 if opts.get('all'):
1597 if opts.get('all'):
1598 if dests:
1598 if dests:
1599 raise error.InputError(
1599 raise error.InputError(
1600 _(b"--all is incompatible with specifying destinations")
1600 _(b"--all is incompatible with specifying destinations")
1601 )
1601 )
1602 if opts.get('base'):
1602 if base_opt:
1603 ui.warn(_(b"ignoring --base because --all was specified\n"))
1603 ui.warn(_(b"ignoring --base because --all was specified\n"))
1604 if opts.get('exact'):
1604 if opts.get('exact'):
1605 ui.warn(_(b"ignoring --exact because --all was specified\n"))
1605 ui.warn(_(b"ignoring --exact because --all was specified\n"))
@@ -1609,19 +1609,24 b' def bundle(ui, repo, fname, *dests, **op'
1609 raise error.InputError(
1609 raise error.InputError(
1610 _(b"--exact is incompatible with specifying destinations")
1610 _(b"--exact is incompatible with specifying destinations")
1611 )
1611 )
1612 if opts.get('base'):
1612 if base_opt:
1613 ui.warn(_(b"ignoring --base because --exact was specified\n"))
1613 ui.warn(_(b"ignoring --base because --exact was specified\n"))
1614 base = repo.revs(b'parents(%ld) - %ld', revs, revs)
1614 base = repo.revs(b'parents(%ld) - %ld', revs, revs)
1615 if not base:
1615 if not base:
1616 base = [nullrev]
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 else:
1622 else:
1618 base = logcmdutil.revrange(repo, opts.get('base'))
1623 base = None
1619 if cgversion not in changegroup.supportedoutgoingversions(repo):
1624 if cgversion not in changegroup.supportedoutgoingversions(repo):
1620 raise error.Abort(
1625 raise error.Abort(
1621 _(b"repository does not support bundle version %s") % cgversion
1626 _(b"repository does not support bundle version %s") % cgversion
1622 )
1627 )
1623
1628
1624 if base:
1629 if base is not None:
1625 if dests:
1630 if dests:
1626 raise error.InputError(
1631 raise error.InputError(
1627 _(b"--base is incompatible with specifying destinations")
1632 _(b"--base is incompatible with specifying destinations")
@@ -202,6 +202,13 b' class bytestr(bytes):'
202 >>> bytestr(bytesable())
202 >>> bytestr(bytesable())
203 'bytes'
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 There's no implicit conversion from non-ascii str as its encoding is
212 There's no implicit conversion from non-ascii str as its encoding is
206 unknown:
213 unknown:
207
214
@@ -251,10 +258,9 b' class bytestr(bytes):'
251 def __new__(cls: Type[_Tbytestr], s: object = b'') -> _Tbytestr:
258 def __new__(cls: Type[_Tbytestr], s: object = b'') -> _Tbytestr:
252 if isinstance(s, bytestr):
259 if isinstance(s, bytestr):
253 return s
260 return s
254 if not isinstance(
261 if not isinstance(s, (bytes, bytearray)) and (
255 s, (bytes, bytearray)
262 isinstance(s, type)
256 ) and not builtins.hasattr( # hasattr-py3-only
263 or not builtins.hasattr(s, u'__bytes__') # hasattr-py3-only
257 s, u'__bytes__'
258 ):
264 ):
259 s = str(s).encode('ascii')
265 s = str(s).encode('ascii')
260 return bytes.__new__(cls, s)
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 = Mercurial 6.6.1 =
10 = Mercurial 6.6.1 =
2
11
3 The first two patches fix aborted transactions that could happen since 6.6.
12 The first two patches fix aborted transactions that could happen since 6.6.
@@ -140,6 +140,10 b' should fail'
140 $ hg -R test bundle --base 2 --all test-bundle-all-2.hg
140 $ hg -R test bundle --base 2 --all test-bundle-all-2.hg
141 ignoring --base because --all was specified
141 ignoring --base because --all was specified
142 9 changesets found
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 $ hg -R test bundle --base 3 -r tip test-bundle-should-fail.hg
147 $ hg -R test bundle --base 3 -r tip test-bundle-should-fail.hg
144 1 changesets found
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 $ . "$TESTDIR/narrow-library.sh"
2 $ . "$TESTDIR/narrow-library.sh"
3
3
4 $ hg init master
4 $ hg init master
@@ -11,7 +11,9 b' Make a narrow clone then archive it'
11 > done
11 > done
12 $ cat >> .hg/hgrc << EOF
12 $ cat >> .hg/hgrc << EOF
13 > [narrowacl]
13 > [narrowacl]
14 > default.includes=f1 f2
14 > default.includes=*
15 > default.excludes=f2 f3
16 > test.excludes=f3
15 > EOF
17 > EOF
16 $ hg serve -a localhost -p $HGPORT1 -d --pid-file=hg.pid
18 $ hg serve -a localhost -p $HGPORT1 -d --pid-file=hg.pid
17 $ cat hg.pid >> "$DAEMON_PIDS"
19 $ cat hg.pid >> "$DAEMON_PIDS"
@@ -37,43 +39,37 b' Requirements should contain narrowhg'
37 $ hg debugrequires -R narrowclone1 | grep narrowhg
39 $ hg debugrequires -R narrowclone1 | grep narrowhg
38 narrowhg-experimental
40 narrowhg-experimental
39
41
40 NarrowHG should track f1 and f2
42 NarrowHG should exclude f3.
41 $ hg -R narrowclone1 tracked
43 $ hg -R narrowclone1 tracked
42 I path:f1
44 I path:.
43 I path:f2
45 X path:f3
44
46
45 Narrow should not be able to widen to include f3
47 Narrow should not be able to widen to include f3
46 $ hg -R narrowclone1 tracked --addinclude f3
48 $ hg -R narrowclone1 tracked --addinclude f3
47 comparing with http://localhost:$HGPORT1/
49 comparing with http://localhost:$HGPORT1/
48 searching for changes
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 [255]
68 [255]
51 $ ls -A -1 narrowclone1 | sort
69 $ ls -A -1 narrowclone1 | sort
52 .hg
70 .hg
53 f1
71 f1
54 f2
72 f2
55 $ hg -R narrowclone1 tracked
73 $ hg -R narrowclone1 tracked
56 I path:f1
74 I path:.
57 I path:f2
75 X path:f3
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
General Comments 0
You need to be logged in to leave comments. Login now