##// END OF EJS Templates
ui: show prompt choice if input is not a tty but is forced to be interactive...
Mads Kiilerich -
r22589:9ab18a91 default
parent child Browse files
Show More
@@ -1,888 +1,892 b''
1 # ui.py - user interface bits for mercurial
1 # ui.py - user interface bits for mercurial
2 #
2 #
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
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 from i18n import _
8 from i18n import _
9 import errno, getpass, os, socket, sys, tempfile, traceback
9 import errno, getpass, os, socket, sys, tempfile, traceback
10 import config, scmutil, util, error, formatter
10 import config, scmutil, util, error, formatter
11 from node import hex
11 from node import hex
12
12
13 samplehgrcs = {
13 samplehgrcs = {
14 'user':
14 'user':
15 """# example user config (see "hg help config" for more info)
15 """# example user config (see "hg help config" for more info)
16 [ui]
16 [ui]
17 # name and email, e.g.
17 # name and email, e.g.
18 # username = Jane Doe <jdoe@example.com>
18 # username = Jane Doe <jdoe@example.com>
19 username =
19 username =
20
20
21 [extensions]
21 [extensions]
22 # uncomment these lines to enable some popular extensions
22 # uncomment these lines to enable some popular extensions
23 # (see "hg help extensions" for more info)
23 # (see "hg help extensions" for more info)
24 #
24 #
25 # pager =
25 # pager =
26 # progress =
26 # progress =
27 # color =""",
27 # color =""",
28
28
29 'local':
29 'local':
30 """# example repository config (see "hg help config" for more info)
30 """# example repository config (see "hg help config" for more info)
31 """,
31 """,
32
32
33 'global':
33 'global':
34 """# example system-wide hg config (see "hg help config" for more info)
34 """# example system-wide hg config (see "hg help config" for more info)
35
35
36 [extensions]
36 [extensions]
37 # uncomment these lines to enable some popular extensions
37 # uncomment these lines to enable some popular extensions
38 # (see "hg help extensions" for more info)
38 # (see "hg help extensions" for more info)
39 #
39 #
40 # blackbox =
40 # blackbox =
41 # progress =
41 # progress =
42 # color =
42 # color =
43 # pager =""",
43 # pager =""",
44 }
44 }
45
45
46 class ui(object):
46 class ui(object):
47 def __init__(self, src=None):
47 def __init__(self, src=None):
48 # _buffers: used for temporary capture of output
48 # _buffers: used for temporary capture of output
49 self._buffers = []
49 self._buffers = []
50 # _bufferstates: Should the temporary capture includes stderr
50 # _bufferstates: Should the temporary capture includes stderr
51 self._bufferstates = []
51 self._bufferstates = []
52 self.quiet = self.verbose = self.debugflag = self.tracebackflag = False
52 self.quiet = self.verbose = self.debugflag = self.tracebackflag = False
53 self._reportuntrusted = True
53 self._reportuntrusted = True
54 self._ocfg = config.config() # overlay
54 self._ocfg = config.config() # overlay
55 self._tcfg = config.config() # trusted
55 self._tcfg = config.config() # trusted
56 self._ucfg = config.config() # untrusted
56 self._ucfg = config.config() # untrusted
57 self._trustusers = set()
57 self._trustusers = set()
58 self._trustgroups = set()
58 self._trustgroups = set()
59 self.callhooks = True
59 self.callhooks = True
60
60
61 if src:
61 if src:
62 self.fout = src.fout
62 self.fout = src.fout
63 self.ferr = src.ferr
63 self.ferr = src.ferr
64 self.fin = src.fin
64 self.fin = src.fin
65
65
66 self._tcfg = src._tcfg.copy()
66 self._tcfg = src._tcfg.copy()
67 self._ucfg = src._ucfg.copy()
67 self._ucfg = src._ucfg.copy()
68 self._ocfg = src._ocfg.copy()
68 self._ocfg = src._ocfg.copy()
69 self._trustusers = src._trustusers.copy()
69 self._trustusers = src._trustusers.copy()
70 self._trustgroups = src._trustgroups.copy()
70 self._trustgroups = src._trustgroups.copy()
71 self.environ = src.environ
71 self.environ = src.environ
72 self.callhooks = src.callhooks
72 self.callhooks = src.callhooks
73 self.fixconfig()
73 self.fixconfig()
74 else:
74 else:
75 self.fout = sys.stdout
75 self.fout = sys.stdout
76 self.ferr = sys.stderr
76 self.ferr = sys.stderr
77 self.fin = sys.stdin
77 self.fin = sys.stdin
78
78
79 # shared read-only environment
79 # shared read-only environment
80 self.environ = os.environ
80 self.environ = os.environ
81 # we always trust global config files
81 # we always trust global config files
82 for f in scmutil.rcpath():
82 for f in scmutil.rcpath():
83 self.readconfig(f, trust=True)
83 self.readconfig(f, trust=True)
84
84
85 def copy(self):
85 def copy(self):
86 return self.__class__(self)
86 return self.__class__(self)
87
87
88 def formatter(self, topic, opts):
88 def formatter(self, topic, opts):
89 return formatter.formatter(self, topic, opts)
89 return formatter.formatter(self, topic, opts)
90
90
91 def _trusted(self, fp, f):
91 def _trusted(self, fp, f):
92 st = util.fstat(fp)
92 st = util.fstat(fp)
93 if util.isowner(st):
93 if util.isowner(st):
94 return True
94 return True
95
95
96 tusers, tgroups = self._trustusers, self._trustgroups
96 tusers, tgroups = self._trustusers, self._trustgroups
97 if '*' in tusers or '*' in tgroups:
97 if '*' in tusers or '*' in tgroups:
98 return True
98 return True
99
99
100 user = util.username(st.st_uid)
100 user = util.username(st.st_uid)
101 group = util.groupname(st.st_gid)
101 group = util.groupname(st.st_gid)
102 if user in tusers or group in tgroups or user == util.username():
102 if user in tusers or group in tgroups or user == util.username():
103 return True
103 return True
104
104
105 if self._reportuntrusted:
105 if self._reportuntrusted:
106 self.warn(_('not trusting file %s from untrusted '
106 self.warn(_('not trusting file %s from untrusted '
107 'user %s, group %s\n') % (f, user, group))
107 'user %s, group %s\n') % (f, user, group))
108 return False
108 return False
109
109
110 def readconfig(self, filename, root=None, trust=False,
110 def readconfig(self, filename, root=None, trust=False,
111 sections=None, remap=None):
111 sections=None, remap=None):
112 try:
112 try:
113 fp = open(filename)
113 fp = open(filename)
114 except IOError:
114 except IOError:
115 if not sections: # ignore unless we were looking for something
115 if not sections: # ignore unless we were looking for something
116 return
116 return
117 raise
117 raise
118
118
119 cfg = config.config()
119 cfg = config.config()
120 trusted = sections or trust or self._trusted(fp, filename)
120 trusted = sections or trust or self._trusted(fp, filename)
121
121
122 try:
122 try:
123 cfg.read(filename, fp, sections=sections, remap=remap)
123 cfg.read(filename, fp, sections=sections, remap=remap)
124 fp.close()
124 fp.close()
125 except error.ConfigError, inst:
125 except error.ConfigError, inst:
126 if trusted:
126 if trusted:
127 raise
127 raise
128 self.warn(_("ignored: %s\n") % str(inst))
128 self.warn(_("ignored: %s\n") % str(inst))
129
129
130 if self.plain():
130 if self.plain():
131 for k in ('debug', 'fallbackencoding', 'quiet', 'slash',
131 for k in ('debug', 'fallbackencoding', 'quiet', 'slash',
132 'logtemplate', 'style',
132 'logtemplate', 'style',
133 'traceback', 'verbose'):
133 'traceback', 'verbose'):
134 if k in cfg['ui']:
134 if k in cfg['ui']:
135 del cfg['ui'][k]
135 del cfg['ui'][k]
136 for k, v in cfg.items('defaults'):
136 for k, v in cfg.items('defaults'):
137 del cfg['defaults'][k]
137 del cfg['defaults'][k]
138 # Don't remove aliases from the configuration if in the exceptionlist
138 # Don't remove aliases from the configuration if in the exceptionlist
139 if self.plain('alias'):
139 if self.plain('alias'):
140 for k, v in cfg.items('alias'):
140 for k, v in cfg.items('alias'):
141 del cfg['alias'][k]
141 del cfg['alias'][k]
142
142
143 if trusted:
143 if trusted:
144 self._tcfg.update(cfg)
144 self._tcfg.update(cfg)
145 self._tcfg.update(self._ocfg)
145 self._tcfg.update(self._ocfg)
146 self._ucfg.update(cfg)
146 self._ucfg.update(cfg)
147 self._ucfg.update(self._ocfg)
147 self._ucfg.update(self._ocfg)
148
148
149 if root is None:
149 if root is None:
150 root = os.path.expanduser('~')
150 root = os.path.expanduser('~')
151 self.fixconfig(root=root)
151 self.fixconfig(root=root)
152
152
153 def fixconfig(self, root=None, section=None):
153 def fixconfig(self, root=None, section=None):
154 if section in (None, 'paths'):
154 if section in (None, 'paths'):
155 # expand vars and ~
155 # expand vars and ~
156 # translate paths relative to root (or home) into absolute paths
156 # translate paths relative to root (or home) into absolute paths
157 root = root or os.getcwd()
157 root = root or os.getcwd()
158 for c in self._tcfg, self._ucfg, self._ocfg:
158 for c in self._tcfg, self._ucfg, self._ocfg:
159 for n, p in c.items('paths'):
159 for n, p in c.items('paths'):
160 if not p:
160 if not p:
161 continue
161 continue
162 if '%%' in p:
162 if '%%' in p:
163 self.warn(_("(deprecated '%%' in path %s=%s from %s)\n")
163 self.warn(_("(deprecated '%%' in path %s=%s from %s)\n")
164 % (n, p, self.configsource('paths', n)))
164 % (n, p, self.configsource('paths', n)))
165 p = p.replace('%%', '%')
165 p = p.replace('%%', '%')
166 p = util.expandpath(p)
166 p = util.expandpath(p)
167 if not util.hasscheme(p) and not os.path.isabs(p):
167 if not util.hasscheme(p) and not os.path.isabs(p):
168 p = os.path.normpath(os.path.join(root, p))
168 p = os.path.normpath(os.path.join(root, p))
169 c.set("paths", n, p)
169 c.set("paths", n, p)
170
170
171 if section in (None, 'ui'):
171 if section in (None, 'ui'):
172 # update ui options
172 # update ui options
173 self.debugflag = self.configbool('ui', 'debug')
173 self.debugflag = self.configbool('ui', 'debug')
174 self.verbose = self.debugflag or self.configbool('ui', 'verbose')
174 self.verbose = self.debugflag or self.configbool('ui', 'verbose')
175 self.quiet = not self.debugflag and self.configbool('ui', 'quiet')
175 self.quiet = not self.debugflag and self.configbool('ui', 'quiet')
176 if self.verbose and self.quiet:
176 if self.verbose and self.quiet:
177 self.quiet = self.verbose = False
177 self.quiet = self.verbose = False
178 self._reportuntrusted = self.debugflag or self.configbool("ui",
178 self._reportuntrusted = self.debugflag or self.configbool("ui",
179 "report_untrusted", True)
179 "report_untrusted", True)
180 self.tracebackflag = self.configbool('ui', 'traceback', False)
180 self.tracebackflag = self.configbool('ui', 'traceback', False)
181
181
182 if section in (None, 'trusted'):
182 if section in (None, 'trusted'):
183 # update trust information
183 # update trust information
184 self._trustusers.update(self.configlist('trusted', 'users'))
184 self._trustusers.update(self.configlist('trusted', 'users'))
185 self._trustgroups.update(self.configlist('trusted', 'groups'))
185 self._trustgroups.update(self.configlist('trusted', 'groups'))
186
186
187 def backupconfig(self, section, item):
187 def backupconfig(self, section, item):
188 return (self._ocfg.backup(section, item),
188 return (self._ocfg.backup(section, item),
189 self._tcfg.backup(section, item),
189 self._tcfg.backup(section, item),
190 self._ucfg.backup(section, item),)
190 self._ucfg.backup(section, item),)
191 def restoreconfig(self, data):
191 def restoreconfig(self, data):
192 self._ocfg.restore(data[0])
192 self._ocfg.restore(data[0])
193 self._tcfg.restore(data[1])
193 self._tcfg.restore(data[1])
194 self._ucfg.restore(data[2])
194 self._ucfg.restore(data[2])
195
195
196 def setconfig(self, section, name, value, source=''):
196 def setconfig(self, section, name, value, source=''):
197 for cfg in (self._ocfg, self._tcfg, self._ucfg):
197 for cfg in (self._ocfg, self._tcfg, self._ucfg):
198 cfg.set(section, name, value, source)
198 cfg.set(section, name, value, source)
199 self.fixconfig(section=section)
199 self.fixconfig(section=section)
200
200
201 def _data(self, untrusted):
201 def _data(self, untrusted):
202 return untrusted and self._ucfg or self._tcfg
202 return untrusted and self._ucfg or self._tcfg
203
203
204 def configsource(self, section, name, untrusted=False):
204 def configsource(self, section, name, untrusted=False):
205 return self._data(untrusted).source(section, name) or 'none'
205 return self._data(untrusted).source(section, name) or 'none'
206
206
207 def config(self, section, name, default=None, untrusted=False):
207 def config(self, section, name, default=None, untrusted=False):
208 if isinstance(name, list):
208 if isinstance(name, list):
209 alternates = name
209 alternates = name
210 else:
210 else:
211 alternates = [name]
211 alternates = [name]
212
212
213 for n in alternates:
213 for n in alternates:
214 value = self._data(untrusted).get(section, n, None)
214 value = self._data(untrusted).get(section, n, None)
215 if value is not None:
215 if value is not None:
216 name = n
216 name = n
217 break
217 break
218 else:
218 else:
219 value = default
219 value = default
220
220
221 if self.debugflag and not untrusted and self._reportuntrusted:
221 if self.debugflag and not untrusted and self._reportuntrusted:
222 for n in alternates:
222 for n in alternates:
223 uvalue = self._ucfg.get(section, n)
223 uvalue = self._ucfg.get(section, n)
224 if uvalue is not None and uvalue != value:
224 if uvalue is not None and uvalue != value:
225 self.debug("ignoring untrusted configuration option "
225 self.debug("ignoring untrusted configuration option "
226 "%s.%s = %s\n" % (section, n, uvalue))
226 "%s.%s = %s\n" % (section, n, uvalue))
227 return value
227 return value
228
228
229 def configpath(self, section, name, default=None, untrusted=False):
229 def configpath(self, section, name, default=None, untrusted=False):
230 'get a path config item, expanded relative to repo root or config file'
230 'get a path config item, expanded relative to repo root or config file'
231 v = self.config(section, name, default, untrusted)
231 v = self.config(section, name, default, untrusted)
232 if v is None:
232 if v is None:
233 return None
233 return None
234 if not os.path.isabs(v) or "://" not in v:
234 if not os.path.isabs(v) or "://" not in v:
235 src = self.configsource(section, name, untrusted)
235 src = self.configsource(section, name, untrusted)
236 if ':' in src:
236 if ':' in src:
237 base = os.path.dirname(src.rsplit(':')[0])
237 base = os.path.dirname(src.rsplit(':')[0])
238 v = os.path.join(base, os.path.expanduser(v))
238 v = os.path.join(base, os.path.expanduser(v))
239 return v
239 return v
240
240
241 def configbool(self, section, name, default=False, untrusted=False):
241 def configbool(self, section, name, default=False, untrusted=False):
242 """parse a configuration element as a boolean
242 """parse a configuration element as a boolean
243
243
244 >>> u = ui(); s = 'foo'
244 >>> u = ui(); s = 'foo'
245 >>> u.setconfig(s, 'true', 'yes')
245 >>> u.setconfig(s, 'true', 'yes')
246 >>> u.configbool(s, 'true')
246 >>> u.configbool(s, 'true')
247 True
247 True
248 >>> u.setconfig(s, 'false', 'no')
248 >>> u.setconfig(s, 'false', 'no')
249 >>> u.configbool(s, 'false')
249 >>> u.configbool(s, 'false')
250 False
250 False
251 >>> u.configbool(s, 'unknown')
251 >>> u.configbool(s, 'unknown')
252 False
252 False
253 >>> u.configbool(s, 'unknown', True)
253 >>> u.configbool(s, 'unknown', True)
254 True
254 True
255 >>> u.setconfig(s, 'invalid', 'somevalue')
255 >>> u.setconfig(s, 'invalid', 'somevalue')
256 >>> u.configbool(s, 'invalid')
256 >>> u.configbool(s, 'invalid')
257 Traceback (most recent call last):
257 Traceback (most recent call last):
258 ...
258 ...
259 ConfigError: foo.invalid is not a boolean ('somevalue')
259 ConfigError: foo.invalid is not a boolean ('somevalue')
260 """
260 """
261
261
262 v = self.config(section, name, None, untrusted)
262 v = self.config(section, name, None, untrusted)
263 if v is None:
263 if v is None:
264 return default
264 return default
265 if isinstance(v, bool):
265 if isinstance(v, bool):
266 return v
266 return v
267 b = util.parsebool(v)
267 b = util.parsebool(v)
268 if b is None:
268 if b is None:
269 raise error.ConfigError(_("%s.%s is not a boolean ('%s')")
269 raise error.ConfigError(_("%s.%s is not a boolean ('%s')")
270 % (section, name, v))
270 % (section, name, v))
271 return b
271 return b
272
272
273 def configint(self, section, name, default=None, untrusted=False):
273 def configint(self, section, name, default=None, untrusted=False):
274 """parse a configuration element as an integer
274 """parse a configuration element as an integer
275
275
276 >>> u = ui(); s = 'foo'
276 >>> u = ui(); s = 'foo'
277 >>> u.setconfig(s, 'int1', '42')
277 >>> u.setconfig(s, 'int1', '42')
278 >>> u.configint(s, 'int1')
278 >>> u.configint(s, 'int1')
279 42
279 42
280 >>> u.setconfig(s, 'int2', '-42')
280 >>> u.setconfig(s, 'int2', '-42')
281 >>> u.configint(s, 'int2')
281 >>> u.configint(s, 'int2')
282 -42
282 -42
283 >>> u.configint(s, 'unknown', 7)
283 >>> u.configint(s, 'unknown', 7)
284 7
284 7
285 >>> u.setconfig(s, 'invalid', 'somevalue')
285 >>> u.setconfig(s, 'invalid', 'somevalue')
286 >>> u.configint(s, 'invalid')
286 >>> u.configint(s, 'invalid')
287 Traceback (most recent call last):
287 Traceback (most recent call last):
288 ...
288 ...
289 ConfigError: foo.invalid is not an integer ('somevalue')
289 ConfigError: foo.invalid is not an integer ('somevalue')
290 """
290 """
291
291
292 v = self.config(section, name, None, untrusted)
292 v = self.config(section, name, None, untrusted)
293 if v is None:
293 if v is None:
294 return default
294 return default
295 try:
295 try:
296 return int(v)
296 return int(v)
297 except ValueError:
297 except ValueError:
298 raise error.ConfigError(_("%s.%s is not an integer ('%s')")
298 raise error.ConfigError(_("%s.%s is not an integer ('%s')")
299 % (section, name, v))
299 % (section, name, v))
300
300
301 def configbytes(self, section, name, default=0, untrusted=False):
301 def configbytes(self, section, name, default=0, untrusted=False):
302 """parse a configuration element as a quantity in bytes
302 """parse a configuration element as a quantity in bytes
303
303
304 Units can be specified as b (bytes), k or kb (kilobytes), m or
304 Units can be specified as b (bytes), k or kb (kilobytes), m or
305 mb (megabytes), g or gb (gigabytes).
305 mb (megabytes), g or gb (gigabytes).
306
306
307 >>> u = ui(); s = 'foo'
307 >>> u = ui(); s = 'foo'
308 >>> u.setconfig(s, 'val1', '42')
308 >>> u.setconfig(s, 'val1', '42')
309 >>> u.configbytes(s, 'val1')
309 >>> u.configbytes(s, 'val1')
310 42
310 42
311 >>> u.setconfig(s, 'val2', '42.5 kb')
311 >>> u.setconfig(s, 'val2', '42.5 kb')
312 >>> u.configbytes(s, 'val2')
312 >>> u.configbytes(s, 'val2')
313 43520
313 43520
314 >>> u.configbytes(s, 'unknown', '7 MB')
314 >>> u.configbytes(s, 'unknown', '7 MB')
315 7340032
315 7340032
316 >>> u.setconfig(s, 'invalid', 'somevalue')
316 >>> u.setconfig(s, 'invalid', 'somevalue')
317 >>> u.configbytes(s, 'invalid')
317 >>> u.configbytes(s, 'invalid')
318 Traceback (most recent call last):
318 Traceback (most recent call last):
319 ...
319 ...
320 ConfigError: foo.invalid is not a byte quantity ('somevalue')
320 ConfigError: foo.invalid is not a byte quantity ('somevalue')
321 """
321 """
322
322
323 value = self.config(section, name)
323 value = self.config(section, name)
324 if value is None:
324 if value is None:
325 if not isinstance(default, str):
325 if not isinstance(default, str):
326 return default
326 return default
327 value = default
327 value = default
328 try:
328 try:
329 return util.sizetoint(value)
329 return util.sizetoint(value)
330 except error.ParseError:
330 except error.ParseError:
331 raise error.ConfigError(_("%s.%s is not a byte quantity ('%s')")
331 raise error.ConfigError(_("%s.%s is not a byte quantity ('%s')")
332 % (section, name, value))
332 % (section, name, value))
333
333
334 def configlist(self, section, name, default=None, untrusted=False):
334 def configlist(self, section, name, default=None, untrusted=False):
335 """parse a configuration element as a list of comma/space separated
335 """parse a configuration element as a list of comma/space separated
336 strings
336 strings
337
337
338 >>> u = ui(); s = 'foo'
338 >>> u = ui(); s = 'foo'
339 >>> u.setconfig(s, 'list1', 'this,is "a small" ,test')
339 >>> u.setconfig(s, 'list1', 'this,is "a small" ,test')
340 >>> u.configlist(s, 'list1')
340 >>> u.configlist(s, 'list1')
341 ['this', 'is', 'a small', 'test']
341 ['this', 'is', 'a small', 'test']
342 """
342 """
343
343
344 def _parse_plain(parts, s, offset):
344 def _parse_plain(parts, s, offset):
345 whitespace = False
345 whitespace = False
346 while offset < len(s) and (s[offset].isspace() or s[offset] == ','):
346 while offset < len(s) and (s[offset].isspace() or s[offset] == ','):
347 whitespace = True
347 whitespace = True
348 offset += 1
348 offset += 1
349 if offset >= len(s):
349 if offset >= len(s):
350 return None, parts, offset
350 return None, parts, offset
351 if whitespace:
351 if whitespace:
352 parts.append('')
352 parts.append('')
353 if s[offset] == '"' and not parts[-1]:
353 if s[offset] == '"' and not parts[-1]:
354 return _parse_quote, parts, offset + 1
354 return _parse_quote, parts, offset + 1
355 elif s[offset] == '"' and parts[-1][-1] == '\\':
355 elif s[offset] == '"' and parts[-1][-1] == '\\':
356 parts[-1] = parts[-1][:-1] + s[offset]
356 parts[-1] = parts[-1][:-1] + s[offset]
357 return _parse_plain, parts, offset + 1
357 return _parse_plain, parts, offset + 1
358 parts[-1] += s[offset]
358 parts[-1] += s[offset]
359 return _parse_plain, parts, offset + 1
359 return _parse_plain, parts, offset + 1
360
360
361 def _parse_quote(parts, s, offset):
361 def _parse_quote(parts, s, offset):
362 if offset < len(s) and s[offset] == '"': # ""
362 if offset < len(s) and s[offset] == '"': # ""
363 parts.append('')
363 parts.append('')
364 offset += 1
364 offset += 1
365 while offset < len(s) and (s[offset].isspace() or
365 while offset < len(s) and (s[offset].isspace() or
366 s[offset] == ','):
366 s[offset] == ','):
367 offset += 1
367 offset += 1
368 return _parse_plain, parts, offset
368 return _parse_plain, parts, offset
369
369
370 while offset < len(s) and s[offset] != '"':
370 while offset < len(s) and s[offset] != '"':
371 if (s[offset] == '\\' and offset + 1 < len(s)
371 if (s[offset] == '\\' and offset + 1 < len(s)
372 and s[offset + 1] == '"'):
372 and s[offset + 1] == '"'):
373 offset += 1
373 offset += 1
374 parts[-1] += '"'
374 parts[-1] += '"'
375 else:
375 else:
376 parts[-1] += s[offset]
376 parts[-1] += s[offset]
377 offset += 1
377 offset += 1
378
378
379 if offset >= len(s):
379 if offset >= len(s):
380 real_parts = _configlist(parts[-1])
380 real_parts = _configlist(parts[-1])
381 if not real_parts:
381 if not real_parts:
382 parts[-1] = '"'
382 parts[-1] = '"'
383 else:
383 else:
384 real_parts[0] = '"' + real_parts[0]
384 real_parts[0] = '"' + real_parts[0]
385 parts = parts[:-1]
385 parts = parts[:-1]
386 parts.extend(real_parts)
386 parts.extend(real_parts)
387 return None, parts, offset
387 return None, parts, offset
388
388
389 offset += 1
389 offset += 1
390 while offset < len(s) and s[offset] in [' ', ',']:
390 while offset < len(s) and s[offset] in [' ', ',']:
391 offset += 1
391 offset += 1
392
392
393 if offset < len(s):
393 if offset < len(s):
394 if offset + 1 == len(s) and s[offset] == '"':
394 if offset + 1 == len(s) and s[offset] == '"':
395 parts[-1] += '"'
395 parts[-1] += '"'
396 offset += 1
396 offset += 1
397 else:
397 else:
398 parts.append('')
398 parts.append('')
399 else:
399 else:
400 return None, parts, offset
400 return None, parts, offset
401
401
402 return _parse_plain, parts, offset
402 return _parse_plain, parts, offset
403
403
404 def _configlist(s):
404 def _configlist(s):
405 s = s.rstrip(' ,')
405 s = s.rstrip(' ,')
406 if not s:
406 if not s:
407 return []
407 return []
408 parser, parts, offset = _parse_plain, [''], 0
408 parser, parts, offset = _parse_plain, [''], 0
409 while parser:
409 while parser:
410 parser, parts, offset = parser(parts, s, offset)
410 parser, parts, offset = parser(parts, s, offset)
411 return parts
411 return parts
412
412
413 result = self.config(section, name, untrusted=untrusted)
413 result = self.config(section, name, untrusted=untrusted)
414 if result is None:
414 if result is None:
415 result = default or []
415 result = default or []
416 if isinstance(result, basestring):
416 if isinstance(result, basestring):
417 result = _configlist(result.lstrip(' ,\n'))
417 result = _configlist(result.lstrip(' ,\n'))
418 if result is None:
418 if result is None:
419 result = default or []
419 result = default or []
420 return result
420 return result
421
421
422 def has_section(self, section, untrusted=False):
422 def has_section(self, section, untrusted=False):
423 '''tell whether section exists in config.'''
423 '''tell whether section exists in config.'''
424 return section in self._data(untrusted)
424 return section in self._data(untrusted)
425
425
426 def configitems(self, section, untrusted=False):
426 def configitems(self, section, untrusted=False):
427 items = self._data(untrusted).items(section)
427 items = self._data(untrusted).items(section)
428 if self.debugflag and not untrusted and self._reportuntrusted:
428 if self.debugflag and not untrusted and self._reportuntrusted:
429 for k, v in self._ucfg.items(section):
429 for k, v in self._ucfg.items(section):
430 if self._tcfg.get(section, k) != v:
430 if self._tcfg.get(section, k) != v:
431 self.debug("ignoring untrusted configuration option "
431 self.debug("ignoring untrusted configuration option "
432 "%s.%s = %s\n" % (section, k, v))
432 "%s.%s = %s\n" % (section, k, v))
433 return items
433 return items
434
434
435 def walkconfig(self, untrusted=False):
435 def walkconfig(self, untrusted=False):
436 cfg = self._data(untrusted)
436 cfg = self._data(untrusted)
437 for section in cfg.sections():
437 for section in cfg.sections():
438 for name, value in self.configitems(section, untrusted):
438 for name, value in self.configitems(section, untrusted):
439 yield section, name, value
439 yield section, name, value
440
440
441 def plain(self, feature=None):
441 def plain(self, feature=None):
442 '''is plain mode active?
442 '''is plain mode active?
443
443
444 Plain mode means that all configuration variables which affect
444 Plain mode means that all configuration variables which affect
445 the behavior and output of Mercurial should be
445 the behavior and output of Mercurial should be
446 ignored. Additionally, the output should be stable,
446 ignored. Additionally, the output should be stable,
447 reproducible and suitable for use in scripts or applications.
447 reproducible and suitable for use in scripts or applications.
448
448
449 The only way to trigger plain mode is by setting either the
449 The only way to trigger plain mode is by setting either the
450 `HGPLAIN' or `HGPLAINEXCEPT' environment variables.
450 `HGPLAIN' or `HGPLAINEXCEPT' environment variables.
451
451
452 The return value can either be
452 The return value can either be
453 - False if HGPLAIN is not set, or feature is in HGPLAINEXCEPT
453 - False if HGPLAIN is not set, or feature is in HGPLAINEXCEPT
454 - True otherwise
454 - True otherwise
455 '''
455 '''
456 if 'HGPLAIN' not in os.environ and 'HGPLAINEXCEPT' not in os.environ:
456 if 'HGPLAIN' not in os.environ and 'HGPLAINEXCEPT' not in os.environ:
457 return False
457 return False
458 exceptions = os.environ.get('HGPLAINEXCEPT', '').strip().split(',')
458 exceptions = os.environ.get('HGPLAINEXCEPT', '').strip().split(',')
459 if feature and exceptions:
459 if feature and exceptions:
460 return feature not in exceptions
460 return feature not in exceptions
461 return True
461 return True
462
462
463 def username(self):
463 def username(self):
464 """Return default username to be used in commits.
464 """Return default username to be used in commits.
465
465
466 Searched in this order: $HGUSER, [ui] section of hgrcs, $EMAIL
466 Searched in this order: $HGUSER, [ui] section of hgrcs, $EMAIL
467 and stop searching if one of these is set.
467 and stop searching if one of these is set.
468 If not found and ui.askusername is True, ask the user, else use
468 If not found and ui.askusername is True, ask the user, else use
469 ($LOGNAME or $USER or $LNAME or $USERNAME) + "@full.hostname".
469 ($LOGNAME or $USER or $LNAME or $USERNAME) + "@full.hostname".
470 """
470 """
471 user = os.environ.get("HGUSER")
471 user = os.environ.get("HGUSER")
472 if user is None:
472 if user is None:
473 user = self.config("ui", ["username", "user"])
473 user = self.config("ui", ["username", "user"])
474 if user is not None:
474 if user is not None:
475 user = os.path.expandvars(user)
475 user = os.path.expandvars(user)
476 if user is None:
476 if user is None:
477 user = os.environ.get("EMAIL")
477 user = os.environ.get("EMAIL")
478 if user is None and self.configbool("ui", "askusername"):
478 if user is None and self.configbool("ui", "askusername"):
479 user = self.prompt(_("enter a commit username:"), default=None)
479 user = self.prompt(_("enter a commit username:"), default=None)
480 if user is None and not self.interactive():
480 if user is None and not self.interactive():
481 try:
481 try:
482 user = '%s@%s' % (util.getuser(), socket.getfqdn())
482 user = '%s@%s' % (util.getuser(), socket.getfqdn())
483 self.warn(_("no username found, using '%s' instead\n") % user)
483 self.warn(_("no username found, using '%s' instead\n") % user)
484 except KeyError:
484 except KeyError:
485 pass
485 pass
486 if not user:
486 if not user:
487 raise util.Abort(_('no username supplied'),
487 raise util.Abort(_('no username supplied'),
488 hint=_('use "hg config --edit" '
488 hint=_('use "hg config --edit" '
489 'to set your username'))
489 'to set your username'))
490 if "\n" in user:
490 if "\n" in user:
491 raise util.Abort(_("username %s contains a newline\n") % repr(user))
491 raise util.Abort(_("username %s contains a newline\n") % repr(user))
492 return user
492 return user
493
493
494 def shortuser(self, user):
494 def shortuser(self, user):
495 """Return a short representation of a user name or email address."""
495 """Return a short representation of a user name or email address."""
496 if not self.verbose:
496 if not self.verbose:
497 user = util.shortuser(user)
497 user = util.shortuser(user)
498 return user
498 return user
499
499
500 def expandpath(self, loc, default=None):
500 def expandpath(self, loc, default=None):
501 """Return repository location relative to cwd or from [paths]"""
501 """Return repository location relative to cwd or from [paths]"""
502 if util.hasscheme(loc) or os.path.isdir(os.path.join(loc, '.hg')):
502 if util.hasscheme(loc) or os.path.isdir(os.path.join(loc, '.hg')):
503 return loc
503 return loc
504
504
505 path = self.config('paths', loc)
505 path = self.config('paths', loc)
506 if not path and default is not None:
506 if not path and default is not None:
507 path = self.config('paths', default)
507 path = self.config('paths', default)
508 return path or loc
508 return path or loc
509
509
510 def pushbuffer(self, error=False):
510 def pushbuffer(self, error=False):
511 """install a buffer to capture standar output of the ui object
511 """install a buffer to capture standar output of the ui object
512
512
513 If error is True, the error output will be captured too."""
513 If error is True, the error output will be captured too."""
514 self._buffers.append([])
514 self._buffers.append([])
515 self._bufferstates.append(error)
515 self._bufferstates.append(error)
516
516
517 def popbuffer(self, labeled=False):
517 def popbuffer(self, labeled=False):
518 '''pop the last buffer and return the buffered output
518 '''pop the last buffer and return the buffered output
519
519
520 If labeled is True, any labels associated with buffered
520 If labeled is True, any labels associated with buffered
521 output will be handled. By default, this has no effect
521 output will be handled. By default, this has no effect
522 on the output returned, but extensions and GUI tools may
522 on the output returned, but extensions and GUI tools may
523 handle this argument and returned styled output. If output
523 handle this argument and returned styled output. If output
524 is being buffered so it can be captured and parsed or
524 is being buffered so it can be captured and parsed or
525 processed, labeled should not be set to True.
525 processed, labeled should not be set to True.
526 '''
526 '''
527 self._bufferstates.pop()
527 self._bufferstates.pop()
528 return "".join(self._buffers.pop())
528 return "".join(self._buffers.pop())
529
529
530 def write(self, *args, **opts):
530 def write(self, *args, **opts):
531 '''write args to output
531 '''write args to output
532
532
533 By default, this method simply writes to the buffer or stdout,
533 By default, this method simply writes to the buffer or stdout,
534 but extensions or GUI tools may override this method,
534 but extensions or GUI tools may override this method,
535 write_err(), popbuffer(), and label() to style output from
535 write_err(), popbuffer(), and label() to style output from
536 various parts of hg.
536 various parts of hg.
537
537
538 An optional keyword argument, "label", can be passed in.
538 An optional keyword argument, "label", can be passed in.
539 This should be a string containing label names separated by
539 This should be a string containing label names separated by
540 space. Label names take the form of "topic.type". For example,
540 space. Label names take the form of "topic.type". For example,
541 ui.debug() issues a label of "ui.debug".
541 ui.debug() issues a label of "ui.debug".
542
542
543 When labeling output for a specific command, a label of
543 When labeling output for a specific command, a label of
544 "cmdname.type" is recommended. For example, status issues
544 "cmdname.type" is recommended. For example, status issues
545 a label of "status.modified" for modified files.
545 a label of "status.modified" for modified files.
546 '''
546 '''
547 if self._buffers:
547 if self._buffers:
548 self._buffers[-1].extend([str(a) for a in args])
548 self._buffers[-1].extend([str(a) for a in args])
549 else:
549 else:
550 for a in args:
550 for a in args:
551 self.fout.write(str(a))
551 self.fout.write(str(a))
552
552
553 def write_err(self, *args, **opts):
553 def write_err(self, *args, **opts):
554 try:
554 try:
555 if self._bufferstates and self._bufferstates[-1]:
555 if self._bufferstates and self._bufferstates[-1]:
556 return self.write(*args, **opts)
556 return self.write(*args, **opts)
557 if not getattr(self.fout, 'closed', False):
557 if not getattr(self.fout, 'closed', False):
558 self.fout.flush()
558 self.fout.flush()
559 for a in args:
559 for a in args:
560 self.ferr.write(str(a))
560 self.ferr.write(str(a))
561 # stderr may be buffered under win32 when redirected to files,
561 # stderr may be buffered under win32 when redirected to files,
562 # including stdout.
562 # including stdout.
563 if not getattr(self.ferr, 'closed', False):
563 if not getattr(self.ferr, 'closed', False):
564 self.ferr.flush()
564 self.ferr.flush()
565 except IOError, inst:
565 except IOError, inst:
566 if inst.errno not in (errno.EPIPE, errno.EIO, errno.EBADF):
566 if inst.errno not in (errno.EPIPE, errno.EIO, errno.EBADF):
567 raise
567 raise
568
568
569 def flush(self):
569 def flush(self):
570 try: self.fout.flush()
570 try: self.fout.flush()
571 except (IOError, ValueError): pass
571 except (IOError, ValueError): pass
572 try: self.ferr.flush()
572 try: self.ferr.flush()
573 except (IOError, ValueError): pass
573 except (IOError, ValueError): pass
574
574
575 def _isatty(self, fh):
575 def _isatty(self, fh):
576 if self.configbool('ui', 'nontty', False):
576 if self.configbool('ui', 'nontty', False):
577 return False
577 return False
578 return util.isatty(fh)
578 return util.isatty(fh)
579
579
580 def interactive(self):
580 def interactive(self):
581 '''is interactive input allowed?
581 '''is interactive input allowed?
582
582
583 An interactive session is a session where input can be reasonably read
583 An interactive session is a session where input can be reasonably read
584 from `sys.stdin'. If this function returns false, any attempt to read
584 from `sys.stdin'. If this function returns false, any attempt to read
585 from stdin should fail with an error, unless a sensible default has been
585 from stdin should fail with an error, unless a sensible default has been
586 specified.
586 specified.
587
587
588 Interactiveness is triggered by the value of the `ui.interactive'
588 Interactiveness is triggered by the value of the `ui.interactive'
589 configuration variable or - if it is unset - when `sys.stdin' points
589 configuration variable or - if it is unset - when `sys.stdin' points
590 to a terminal device.
590 to a terminal device.
591
591
592 This function refers to input only; for output, see `ui.formatted()'.
592 This function refers to input only; for output, see `ui.formatted()'.
593 '''
593 '''
594 i = self.configbool("ui", "interactive", None)
594 i = self.configbool("ui", "interactive", None)
595 if i is None:
595 if i is None:
596 # some environments replace stdin without implementing isatty
596 # some environments replace stdin without implementing isatty
597 # usually those are non-interactive
597 # usually those are non-interactive
598 return self._isatty(self.fin)
598 return self._isatty(self.fin)
599
599
600 return i
600 return i
601
601
602 def termwidth(self):
602 def termwidth(self):
603 '''how wide is the terminal in columns?
603 '''how wide is the terminal in columns?
604 '''
604 '''
605 if 'COLUMNS' in os.environ:
605 if 'COLUMNS' in os.environ:
606 try:
606 try:
607 return int(os.environ['COLUMNS'])
607 return int(os.environ['COLUMNS'])
608 except ValueError:
608 except ValueError:
609 pass
609 pass
610 return util.termwidth()
610 return util.termwidth()
611
611
612 def formatted(self):
612 def formatted(self):
613 '''should formatted output be used?
613 '''should formatted output be used?
614
614
615 It is often desirable to format the output to suite the output medium.
615 It is often desirable to format the output to suite the output medium.
616 Examples of this are truncating long lines or colorizing messages.
616 Examples of this are truncating long lines or colorizing messages.
617 However, this is not often not desirable when piping output into other
617 However, this is not often not desirable when piping output into other
618 utilities, e.g. `grep'.
618 utilities, e.g. `grep'.
619
619
620 Formatted output is triggered by the value of the `ui.formatted'
620 Formatted output is triggered by the value of the `ui.formatted'
621 configuration variable or - if it is unset - when `sys.stdout' points
621 configuration variable or - if it is unset - when `sys.stdout' points
622 to a terminal device. Please note that `ui.formatted' should be
622 to a terminal device. Please note that `ui.formatted' should be
623 considered an implementation detail; it is not intended for use outside
623 considered an implementation detail; it is not intended for use outside
624 Mercurial or its extensions.
624 Mercurial or its extensions.
625
625
626 This function refers to output only; for input, see `ui.interactive()'.
626 This function refers to output only; for input, see `ui.interactive()'.
627 This function always returns false when in plain mode, see `ui.plain()'.
627 This function always returns false when in plain mode, see `ui.plain()'.
628 '''
628 '''
629 if self.plain():
629 if self.plain():
630 return False
630 return False
631
631
632 i = self.configbool("ui", "formatted", None)
632 i = self.configbool("ui", "formatted", None)
633 if i is None:
633 if i is None:
634 # some environments replace stdout without implementing isatty
634 # some environments replace stdout without implementing isatty
635 # usually those are non-interactive
635 # usually those are non-interactive
636 return self._isatty(self.fout)
636 return self._isatty(self.fout)
637
637
638 return i
638 return i
639
639
640 def _readline(self, prompt=''):
640 def _readline(self, prompt=''):
641 if self._isatty(self.fin):
641 if self._isatty(self.fin):
642 try:
642 try:
643 # magically add command line editing support, where
643 # magically add command line editing support, where
644 # available
644 # available
645 import readline
645 import readline
646 # force demandimport to really load the module
646 # force demandimport to really load the module
647 readline.read_history_file
647 readline.read_history_file
648 # windows sometimes raises something other than ImportError
648 # windows sometimes raises something other than ImportError
649 except Exception:
649 except Exception:
650 pass
650 pass
651
651
652 # call write() so output goes through subclassed implementation
652 # call write() so output goes through subclassed implementation
653 # e.g. color extension on Windows
653 # e.g. color extension on Windows
654 self.write(prompt)
654 self.write(prompt)
655
655
656 # instead of trying to emulate raw_input, swap (self.fin,
656 # instead of trying to emulate raw_input, swap (self.fin,
657 # self.fout) with (sys.stdin, sys.stdout)
657 # self.fout) with (sys.stdin, sys.stdout)
658 oldin = sys.stdin
658 oldin = sys.stdin
659 oldout = sys.stdout
659 oldout = sys.stdout
660 sys.stdin = self.fin
660 sys.stdin = self.fin
661 sys.stdout = self.fout
661 sys.stdout = self.fout
662 # prompt ' ' must exist; otherwise readline may delete entire line
662 # prompt ' ' must exist; otherwise readline may delete entire line
663 # - http://bugs.python.org/issue12833
663 # - http://bugs.python.org/issue12833
664 line = raw_input(' ')
664 line = raw_input(' ')
665 sys.stdin = oldin
665 sys.stdin = oldin
666 sys.stdout = oldout
666 sys.stdout = oldout
667
667
668 # When stdin is in binary mode on Windows, it can cause
668 # When stdin is in binary mode on Windows, it can cause
669 # raw_input() to emit an extra trailing carriage return
669 # raw_input() to emit an extra trailing carriage return
670 if os.linesep == '\r\n' and line and line[-1] == '\r':
670 if os.linesep == '\r\n' and line and line[-1] == '\r':
671 line = line[:-1]
671 line = line[:-1]
672 return line
672 return line
673
673
674 def prompt(self, msg, default="y"):
674 def prompt(self, msg, default="y"):
675 """Prompt user with msg, read response.
675 """Prompt user with msg, read response.
676 If ui is not interactive, the default is returned.
676 If ui is not interactive, the default is returned.
677 """
677 """
678 if not self.interactive():
678 if not self.interactive():
679 self.write(msg, ' ', default, "\n")
679 self.write(msg, ' ', default, "\n")
680 return default
680 return default
681 try:
681 try:
682 r = self._readline(self.label(msg, 'ui.prompt'))
682 r = self._readline(self.label(msg, 'ui.prompt'))
683 if not r:
683 if not r:
684 return default
684 r = default
685 # sometimes self.interactive disagrees with isatty,
686 # show default response
687 if not util.isatty(self.fin):
688 self.write(r, "\n")
685 return r
689 return r
686 except EOFError:
690 except EOFError:
687 raise util.Abort(_('response expected'))
691 raise util.Abort(_('response expected'))
688
692
689 @staticmethod
693 @staticmethod
690 def extractchoices(prompt):
694 def extractchoices(prompt):
691 """Extract prompt message and list of choices from specified prompt.
695 """Extract prompt message and list of choices from specified prompt.
692
696
693 This returns tuple "(message, choices)", and "choices" is the
697 This returns tuple "(message, choices)", and "choices" is the
694 list of tuple "(response character, text without &)".
698 list of tuple "(response character, text without &)".
695 """
699 """
696 parts = prompt.split('$$')
700 parts = prompt.split('$$')
697 msg = parts[0].rstrip(' ')
701 msg = parts[0].rstrip(' ')
698 choices = [p.strip(' ') for p in parts[1:]]
702 choices = [p.strip(' ') for p in parts[1:]]
699 return (msg,
703 return (msg,
700 [(s[s.index('&') + 1].lower(), s.replace('&', '', 1))
704 [(s[s.index('&') + 1].lower(), s.replace('&', '', 1))
701 for s in choices])
705 for s in choices])
702
706
703 def promptchoice(self, prompt, default=0):
707 def promptchoice(self, prompt, default=0):
704 """Prompt user with a message, read response, and ensure it matches
708 """Prompt user with a message, read response, and ensure it matches
705 one of the provided choices. The prompt is formatted as follows:
709 one of the provided choices. The prompt is formatted as follows:
706
710
707 "would you like fries with that (Yn)? $$ &Yes $$ &No"
711 "would you like fries with that (Yn)? $$ &Yes $$ &No"
708
712
709 The index of the choice is returned. Responses are case
713 The index of the choice is returned. Responses are case
710 insensitive. If ui is not interactive, the default is
714 insensitive. If ui is not interactive, the default is
711 returned.
715 returned.
712 """
716 """
713
717
714 msg, choices = self.extractchoices(prompt)
718 msg, choices = self.extractchoices(prompt)
715 resps = [r for r, t in choices]
719 resps = [r for r, t in choices]
716 while True:
720 while True:
717 r = self.prompt(msg, resps[default])
721 r = self.prompt(msg, resps[default])
718 if r.lower() in resps:
722 if r.lower() in resps:
719 return resps.index(r.lower())
723 return resps.index(r.lower())
720 self.write(_("unrecognized response\n"))
724 self.write(_("unrecognized response\n"))
721
725
722 def getpass(self, prompt=None, default=None):
726 def getpass(self, prompt=None, default=None):
723 if not self.interactive():
727 if not self.interactive():
724 return default
728 return default
725 try:
729 try:
726 self.write_err(self.label(prompt or _('password: '), 'ui.prompt'))
730 self.write_err(self.label(prompt or _('password: '), 'ui.prompt'))
727 # disable getpass() only if explicitly specified. it's still valid
731 # disable getpass() only if explicitly specified. it's still valid
728 # to interact with tty even if fin is not a tty.
732 # to interact with tty even if fin is not a tty.
729 if self.configbool('ui', 'nontty'):
733 if self.configbool('ui', 'nontty'):
730 return self.fin.readline().rstrip('\n')
734 return self.fin.readline().rstrip('\n')
731 else:
735 else:
732 return getpass.getpass('')
736 return getpass.getpass('')
733 except EOFError:
737 except EOFError:
734 raise util.Abort(_('response expected'))
738 raise util.Abort(_('response expected'))
735 def status(self, *msg, **opts):
739 def status(self, *msg, **opts):
736 '''write status message to output (if ui.quiet is False)
740 '''write status message to output (if ui.quiet is False)
737
741
738 This adds an output label of "ui.status".
742 This adds an output label of "ui.status".
739 '''
743 '''
740 if not self.quiet:
744 if not self.quiet:
741 opts['label'] = opts.get('label', '') + ' ui.status'
745 opts['label'] = opts.get('label', '') + ' ui.status'
742 self.write(*msg, **opts)
746 self.write(*msg, **opts)
743 def warn(self, *msg, **opts):
747 def warn(self, *msg, **opts):
744 '''write warning message to output (stderr)
748 '''write warning message to output (stderr)
745
749
746 This adds an output label of "ui.warning".
750 This adds an output label of "ui.warning".
747 '''
751 '''
748 opts['label'] = opts.get('label', '') + ' ui.warning'
752 opts['label'] = opts.get('label', '') + ' ui.warning'
749 self.write_err(*msg, **opts)
753 self.write_err(*msg, **opts)
750 def note(self, *msg, **opts):
754 def note(self, *msg, **opts):
751 '''write note to output (if ui.verbose is True)
755 '''write note to output (if ui.verbose is True)
752
756
753 This adds an output label of "ui.note".
757 This adds an output label of "ui.note".
754 '''
758 '''
755 if self.verbose:
759 if self.verbose:
756 opts['label'] = opts.get('label', '') + ' ui.note'
760 opts['label'] = opts.get('label', '') + ' ui.note'
757 self.write(*msg, **opts)
761 self.write(*msg, **opts)
758 def debug(self, *msg, **opts):
762 def debug(self, *msg, **opts):
759 '''write debug message to output (if ui.debugflag is True)
763 '''write debug message to output (if ui.debugflag is True)
760
764
761 This adds an output label of "ui.debug".
765 This adds an output label of "ui.debug".
762 '''
766 '''
763 if self.debugflag:
767 if self.debugflag:
764 opts['label'] = opts.get('label', '') + ' ui.debug'
768 opts['label'] = opts.get('label', '') + ' ui.debug'
765 self.write(*msg, **opts)
769 self.write(*msg, **opts)
766 def edit(self, text, user, extra={}, editform=None):
770 def edit(self, text, user, extra={}, editform=None):
767 (fd, name) = tempfile.mkstemp(prefix="hg-editor-", suffix=".txt",
771 (fd, name) = tempfile.mkstemp(prefix="hg-editor-", suffix=".txt",
768 text=True)
772 text=True)
769 try:
773 try:
770 f = os.fdopen(fd, "w")
774 f = os.fdopen(fd, "w")
771 f.write(text)
775 f.write(text)
772 f.close()
776 f.close()
773
777
774 environ = {'HGUSER': user}
778 environ = {'HGUSER': user}
775 if 'transplant_source' in extra:
779 if 'transplant_source' in extra:
776 environ.update({'HGREVISION': hex(extra['transplant_source'])})
780 environ.update({'HGREVISION': hex(extra['transplant_source'])})
777 for label in ('source', 'rebase_source'):
781 for label in ('source', 'rebase_source'):
778 if label in extra:
782 if label in extra:
779 environ.update({'HGREVISION': extra[label]})
783 environ.update({'HGREVISION': extra[label]})
780 break
784 break
781 if editform:
785 if editform:
782 environ.update({'HGEDITFORM': editform})
786 environ.update({'HGEDITFORM': editform})
783
787
784 editor = self.geteditor()
788 editor = self.geteditor()
785
789
786 util.system("%s \"%s\"" % (editor, name),
790 util.system("%s \"%s\"" % (editor, name),
787 environ=environ,
791 environ=environ,
788 onerr=util.Abort, errprefix=_("edit failed"),
792 onerr=util.Abort, errprefix=_("edit failed"),
789 out=self.fout)
793 out=self.fout)
790
794
791 f = open(name)
795 f = open(name)
792 t = f.read()
796 t = f.read()
793 f.close()
797 f.close()
794 finally:
798 finally:
795 os.unlink(name)
799 os.unlink(name)
796
800
797 return t
801 return t
798
802
799 def traceback(self, exc=None, force=False):
803 def traceback(self, exc=None, force=False):
800 '''print exception traceback if traceback printing enabled or forced.
804 '''print exception traceback if traceback printing enabled or forced.
801 only to call in exception handler. returns true if traceback
805 only to call in exception handler. returns true if traceback
802 printed.'''
806 printed.'''
803 if self.tracebackflag or force:
807 if self.tracebackflag or force:
804 if exc is None:
808 if exc is None:
805 exc = sys.exc_info()
809 exc = sys.exc_info()
806 cause = getattr(exc[1], 'cause', None)
810 cause = getattr(exc[1], 'cause', None)
807
811
808 if cause is not None:
812 if cause is not None:
809 causetb = traceback.format_tb(cause[2])
813 causetb = traceback.format_tb(cause[2])
810 exctb = traceback.format_tb(exc[2])
814 exctb = traceback.format_tb(exc[2])
811 exconly = traceback.format_exception_only(cause[0], cause[1])
815 exconly = traceback.format_exception_only(cause[0], cause[1])
812
816
813 # exclude frame where 'exc' was chained and rethrown from exctb
817 # exclude frame where 'exc' was chained and rethrown from exctb
814 self.write_err('Traceback (most recent call last):\n',
818 self.write_err('Traceback (most recent call last):\n',
815 ''.join(exctb[:-1]),
819 ''.join(exctb[:-1]),
816 ''.join(causetb),
820 ''.join(causetb),
817 ''.join(exconly))
821 ''.join(exconly))
818 else:
822 else:
819 traceback.print_exception(exc[0], exc[1], exc[2],
823 traceback.print_exception(exc[0], exc[1], exc[2],
820 file=self.ferr)
824 file=self.ferr)
821 return self.tracebackflag or force
825 return self.tracebackflag or force
822
826
823 def geteditor(self):
827 def geteditor(self):
824 '''return editor to use'''
828 '''return editor to use'''
825 if sys.platform == 'plan9':
829 if sys.platform == 'plan9':
826 # vi is the MIPS instruction simulator on Plan 9. We
830 # vi is the MIPS instruction simulator on Plan 9. We
827 # instead default to E to plumb commit messages to
831 # instead default to E to plumb commit messages to
828 # avoid confusion.
832 # avoid confusion.
829 editor = 'E'
833 editor = 'E'
830 else:
834 else:
831 editor = 'vi'
835 editor = 'vi'
832 return (os.environ.get("HGEDITOR") or
836 return (os.environ.get("HGEDITOR") or
833 self.config("ui", "editor") or
837 self.config("ui", "editor") or
834 os.environ.get("VISUAL") or
838 os.environ.get("VISUAL") or
835 os.environ.get("EDITOR", editor))
839 os.environ.get("EDITOR", editor))
836
840
837 def progress(self, topic, pos, item="", unit="", total=None):
841 def progress(self, topic, pos, item="", unit="", total=None):
838 '''show a progress message
842 '''show a progress message
839
843
840 With stock hg, this is simply a debug message that is hidden
844 With stock hg, this is simply a debug message that is hidden
841 by default, but with extensions or GUI tools it may be
845 by default, but with extensions or GUI tools it may be
842 visible. 'topic' is the current operation, 'item' is a
846 visible. 'topic' is the current operation, 'item' is a
843 non-numeric marker of the current position (i.e. the currently
847 non-numeric marker of the current position (i.e. the currently
844 in-process file), 'pos' is the current numeric position (i.e.
848 in-process file), 'pos' is the current numeric position (i.e.
845 revision, bytes, etc.), unit is a corresponding unit label,
849 revision, bytes, etc.), unit is a corresponding unit label,
846 and total is the highest expected pos.
850 and total is the highest expected pos.
847
851
848 Multiple nested topics may be active at a time.
852 Multiple nested topics may be active at a time.
849
853
850 All topics should be marked closed by setting pos to None at
854 All topics should be marked closed by setting pos to None at
851 termination.
855 termination.
852 '''
856 '''
853
857
854 if pos is None or not self.debugflag:
858 if pos is None or not self.debugflag:
855 return
859 return
856
860
857 if unit:
861 if unit:
858 unit = ' ' + unit
862 unit = ' ' + unit
859 if item:
863 if item:
860 item = ' ' + item
864 item = ' ' + item
861
865
862 if total:
866 if total:
863 pct = 100.0 * pos / total
867 pct = 100.0 * pos / total
864 self.debug('%s:%s %s/%s%s (%4.2f%%)\n'
868 self.debug('%s:%s %s/%s%s (%4.2f%%)\n'
865 % (topic, item, pos, total, unit, pct))
869 % (topic, item, pos, total, unit, pct))
866 else:
870 else:
867 self.debug('%s:%s %s%s\n' % (topic, item, pos, unit))
871 self.debug('%s:%s %s%s\n' % (topic, item, pos, unit))
868
872
869 def log(self, service, *msg, **opts):
873 def log(self, service, *msg, **opts):
870 '''hook for logging facility extensions
874 '''hook for logging facility extensions
871
875
872 service should be a readily-identifiable subsystem, which will
876 service should be a readily-identifiable subsystem, which will
873 allow filtering.
877 allow filtering.
874 message should be a newline-terminated string to log.
878 message should be a newline-terminated string to log.
875 '''
879 '''
876 pass
880 pass
877
881
878 def label(self, msg, label):
882 def label(self, msg, label):
879 '''style msg based on supplied label
883 '''style msg based on supplied label
880
884
881 Like ui.write(), this just returns msg unchanged, but extensions
885 Like ui.write(), this just returns msg unchanged, but extensions
882 and GUI tools can override it to allow styling output without
886 and GUI tools can override it to allow styling output without
883 writing it.
887 writing it.
884
888
885 ui.write(s, 'label') is equivalent to
889 ui.write(s, 'label') is equivalent to
886 ui.write(ui.label(s, 'label')).
890 ui.write(ui.label(s, 'label')).
887 '''
891 '''
888 return msg
892 return msg
@@ -1,202 +1,206 b''
1 Setup
1 Setup
2
2
3 $ echo "[color]" >> $HGRCPATH
3 $ echo "[color]" >> $HGRCPATH
4 $ echo "mode = ansi" >> $HGRCPATH
4 $ echo "mode = ansi" >> $HGRCPATH
5 $ echo "[extensions]" >> $HGRCPATH
5 $ echo "[extensions]" >> $HGRCPATH
6 $ echo "color=" >> $HGRCPATH
6 $ echo "color=" >> $HGRCPATH
7 $ hg init repo
7 $ hg init repo
8 $ cd repo
8 $ cd repo
9 $ cat > a <<EOF
9 $ cat > a <<EOF
10 > c
10 > c
11 > c
11 > c
12 > a
12 > a
13 > a
13 > a
14 > b
14 > b
15 > a
15 > a
16 > a
16 > a
17 > c
17 > c
18 > c
18 > c
19 > EOF
19 > EOF
20 $ hg ci -Am adda
20 $ hg ci -Am adda
21 adding a
21 adding a
22 $ cat > a <<EOF
22 $ cat > a <<EOF
23 > c
23 > c
24 > c
24 > c
25 > a
25 > a
26 > a
26 > a
27 > dd
27 > dd
28 > a
28 > a
29 > a
29 > a
30 > c
30 > c
31 > c
31 > c
32 > EOF
32 > EOF
33
33
34 default context
34 default context
35
35
36 $ hg diff --nodates --color=always
36 $ hg diff --nodates --color=always
37 \x1b[0;1mdiff -r cf9f4ba66af2 a\x1b[0m (esc)
37 \x1b[0;1mdiff -r cf9f4ba66af2 a\x1b[0m (esc)
38 \x1b[0;31;1m--- a/a\x1b[0m (esc)
38 \x1b[0;31;1m--- a/a\x1b[0m (esc)
39 \x1b[0;32;1m+++ b/a\x1b[0m (esc)
39 \x1b[0;32;1m+++ b/a\x1b[0m (esc)
40 \x1b[0;35m@@ -2,7 +2,7 @@\x1b[0m (esc)
40 \x1b[0;35m@@ -2,7 +2,7 @@\x1b[0m (esc)
41 c
41 c
42 a
42 a
43 a
43 a
44 \x1b[0;31m-b\x1b[0m (esc)
44 \x1b[0;31m-b\x1b[0m (esc)
45 \x1b[0;32m+dd\x1b[0m (esc)
45 \x1b[0;32m+dd\x1b[0m (esc)
46 a
46 a
47 a
47 a
48 c
48 c
49
49
50 --unified=2
50 --unified=2
51
51
52 $ hg diff --nodates -U 2 --color=always
52 $ hg diff --nodates -U 2 --color=always
53 \x1b[0;1mdiff -r cf9f4ba66af2 a\x1b[0m (esc)
53 \x1b[0;1mdiff -r cf9f4ba66af2 a\x1b[0m (esc)
54 \x1b[0;31;1m--- a/a\x1b[0m (esc)
54 \x1b[0;31;1m--- a/a\x1b[0m (esc)
55 \x1b[0;32;1m+++ b/a\x1b[0m (esc)
55 \x1b[0;32;1m+++ b/a\x1b[0m (esc)
56 \x1b[0;35m@@ -3,5 +3,5 @@\x1b[0m (esc)
56 \x1b[0;35m@@ -3,5 +3,5 @@\x1b[0m (esc)
57 a
57 a
58 a
58 a
59 \x1b[0;31m-b\x1b[0m (esc)
59 \x1b[0;31m-b\x1b[0m (esc)
60 \x1b[0;32m+dd\x1b[0m (esc)
60 \x1b[0;32m+dd\x1b[0m (esc)
61 a
61 a
62 a
62 a
63
63
64 diffstat
64 diffstat
65
65
66 $ hg diff --stat --color=always
66 $ hg diff --stat --color=always
67 a | 2 \x1b[0;32m+\x1b[0m\x1b[0;31m-\x1b[0m (esc)
67 a | 2 \x1b[0;32m+\x1b[0m\x1b[0;31m-\x1b[0m (esc)
68 1 files changed, 1 insertions(+), 1 deletions(-)
68 1 files changed, 1 insertions(+), 1 deletions(-)
69 $ echo "record=" >> $HGRCPATH
69 $ echo "record=" >> $HGRCPATH
70 $ echo "[ui]" >> $HGRCPATH
70 $ echo "[ui]" >> $HGRCPATH
71 $ echo "interactive=true" >> $HGRCPATH
71 $ echo "interactive=true" >> $HGRCPATH
72 $ echo "[diff]" >> $HGRCPATH
72 $ echo "[diff]" >> $HGRCPATH
73 $ echo "git=True" >> $HGRCPATH
73 $ echo "git=True" >> $HGRCPATH
74
74
75 #if execbit
75 #if execbit
76
76
77 record
77 record
78
78
79 $ chmod +x a
79 $ chmod +x a
80 $ hg record --color=always -m moda a <<EOF
80 $ hg record --color=always -m moda a <<EOF
81 > y
81 > y
82 > y
82 > y
83 > EOF
83 > EOF
84 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
84 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
85 \x1b[0;36;1mold mode 100644\x1b[0m (esc)
85 \x1b[0;36;1mold mode 100644\x1b[0m (esc)
86 \x1b[0;36;1mnew mode 100755\x1b[0m (esc)
86 \x1b[0;36;1mnew mode 100755\x1b[0m (esc)
87 1 hunks, 1 lines changed
87 1 hunks, 1 lines changed
88 \x1b[0;33mexamine changes to 'a'? [Ynesfdaq?]\x1b[0m (esc)
88 \x1b[0;33mexamine changes to 'a'? [Ynesfdaq?]\x1b[0m y (esc)
89
89 \x1b[0;35m@@ -2,7 +2,7 @@\x1b[0m (esc)
90 \x1b[0;35m@@ -2,7 +2,7 @@\x1b[0m (esc)
90 c
91 c
91 a
92 a
92 a
93 a
93 \x1b[0;31m-b\x1b[0m (esc)
94 \x1b[0;31m-b\x1b[0m (esc)
94 \x1b[0;32m+dd\x1b[0m (esc)
95 \x1b[0;32m+dd\x1b[0m (esc)
95 a
96 a
96 a
97 a
97 c
98 c
98 \x1b[0;33mrecord this change to 'a'? [Ynesfdaq?]\x1b[0m (esc)
99 \x1b[0;33mrecord this change to 'a'? [Ynesfdaq?]\x1b[0m y (esc)
100
99
101
100 $ echo "[extensions]" >> $HGRCPATH
102 $ echo "[extensions]" >> $HGRCPATH
101 $ echo "mq=" >> $HGRCPATH
103 $ echo "mq=" >> $HGRCPATH
102 $ hg rollback
104 $ hg rollback
103 repository tip rolled back to revision 0 (undo commit)
105 repository tip rolled back to revision 0 (undo commit)
104 working directory now based on revision 0
106 working directory now based on revision 0
105
107
106 qrecord
108 qrecord
107
109
108 $ hg qrecord --color=always -m moda patch <<EOF
110 $ hg qrecord --color=always -m moda patch <<EOF
109 > y
111 > y
110 > y
112 > y
111 > EOF
113 > EOF
112 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
114 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
113 \x1b[0;36;1mold mode 100644\x1b[0m (esc)
115 \x1b[0;36;1mold mode 100644\x1b[0m (esc)
114 \x1b[0;36;1mnew mode 100755\x1b[0m (esc)
116 \x1b[0;36;1mnew mode 100755\x1b[0m (esc)
115 1 hunks, 1 lines changed
117 1 hunks, 1 lines changed
116 \x1b[0;33mexamine changes to 'a'? [Ynesfdaq?]\x1b[0m (esc)
118 \x1b[0;33mexamine changes to 'a'? [Ynesfdaq?]\x1b[0m y (esc)
119
117 \x1b[0;35m@@ -2,7 +2,7 @@\x1b[0m (esc)
120 \x1b[0;35m@@ -2,7 +2,7 @@\x1b[0m (esc)
118 c
121 c
119 a
122 a
120 a
123 a
121 \x1b[0;31m-b\x1b[0m (esc)
124 \x1b[0;31m-b\x1b[0m (esc)
122 \x1b[0;32m+dd\x1b[0m (esc)
125 \x1b[0;32m+dd\x1b[0m (esc)
123 a
126 a
124 a
127 a
125 c
128 c
126 \x1b[0;33mrecord this change to 'a'? [Ynesfdaq?]\x1b[0m (esc)
129 \x1b[0;33mrecord this change to 'a'? [Ynesfdaq?]\x1b[0m y (esc)
130
127
131
128 $ hg qpop -a
132 $ hg qpop -a
129 popping patch
133 popping patch
130 patch queue now empty
134 patch queue now empty
131
135
132 #endif
136 #endif
133
137
134 issue3712: test colorization of subrepo diff
138 issue3712: test colorization of subrepo diff
135
139
136 $ hg init sub
140 $ hg init sub
137 $ echo b > sub/b
141 $ echo b > sub/b
138 $ hg -R sub commit -Am 'create sub'
142 $ hg -R sub commit -Am 'create sub'
139 adding b
143 adding b
140 $ echo 'sub = sub' > .hgsub
144 $ echo 'sub = sub' > .hgsub
141 $ hg add .hgsub
145 $ hg add .hgsub
142 $ hg commit -m 'add subrepo sub'
146 $ hg commit -m 'add subrepo sub'
143 $ echo aa >> a
147 $ echo aa >> a
144 $ echo bb >> sub/b
148 $ echo bb >> sub/b
145
149
146 $ hg diff --color=always -S
150 $ hg diff --color=always -S
147 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
151 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
148 \x1b[0;31;1m--- a/a\x1b[0m (esc)
152 \x1b[0;31;1m--- a/a\x1b[0m (esc)
149 \x1b[0;32;1m+++ b/a\x1b[0m (esc)
153 \x1b[0;32;1m+++ b/a\x1b[0m (esc)
150 \x1b[0;35m@@ -7,3 +7,4 @@\x1b[0m (esc)
154 \x1b[0;35m@@ -7,3 +7,4 @@\x1b[0m (esc)
151 a
155 a
152 c
156 c
153 c
157 c
154 \x1b[0;32m+aa\x1b[0m (esc)
158 \x1b[0;32m+aa\x1b[0m (esc)
155 \x1b[0;1mdiff --git a/sub/b b/sub/b\x1b[0m (esc)
159 \x1b[0;1mdiff --git a/sub/b b/sub/b\x1b[0m (esc)
156 \x1b[0;31;1m--- a/sub/b\x1b[0m (esc)
160 \x1b[0;31;1m--- a/sub/b\x1b[0m (esc)
157 \x1b[0;32;1m+++ b/sub/b\x1b[0m (esc)
161 \x1b[0;32;1m+++ b/sub/b\x1b[0m (esc)
158 \x1b[0;35m@@ -1,1 +1,2 @@\x1b[0m (esc)
162 \x1b[0;35m@@ -1,1 +1,2 @@\x1b[0m (esc)
159 b
163 b
160 \x1b[0;32m+bb\x1b[0m (esc)
164 \x1b[0;32m+bb\x1b[0m (esc)
161
165
162 test tabs
166 test tabs
163
167
164 $ cat >> a <<EOF
168 $ cat >> a <<EOF
165 > one tab
169 > one tab
166 > two tabs
170 > two tabs
167 > end tab
171 > end tab
168 > mid tab
172 > mid tab
169 > all tabs
173 > all tabs
170 > EOF
174 > EOF
171 $ hg diff --nodates --color=always
175 $ hg diff --nodates --color=always
172 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
176 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
173 \x1b[0;31;1m--- a/a\x1b[0m (esc)
177 \x1b[0;31;1m--- a/a\x1b[0m (esc)
174 \x1b[0;32;1m+++ b/a\x1b[0m (esc)
178 \x1b[0;32;1m+++ b/a\x1b[0m (esc)
175 \x1b[0;35m@@ -7,3 +7,9 @@\x1b[0m (esc)
179 \x1b[0;35m@@ -7,3 +7,9 @@\x1b[0m (esc)
176 a
180 a
177 c
181 c
178 c
182 c
179 \x1b[0;32m+aa\x1b[0m (esc)
183 \x1b[0;32m+aa\x1b[0m (esc)
180 \x1b[0;32m+\x1b[0m \x1b[0;32mone tab\x1b[0m (esc)
184 \x1b[0;32m+\x1b[0m \x1b[0;32mone tab\x1b[0m (esc)
181 \x1b[0;32m+\x1b[0m \x1b[0;32mtwo tabs\x1b[0m (esc)
185 \x1b[0;32m+\x1b[0m \x1b[0;32mtwo tabs\x1b[0m (esc)
182 \x1b[0;32m+end tab\x1b[0m\x1b[0;1;41m \x1b[0m (esc)
186 \x1b[0;32m+end tab\x1b[0m\x1b[0;1;41m \x1b[0m (esc)
183 \x1b[0;32m+mid\x1b[0m \x1b[0;32mtab\x1b[0m (esc)
187 \x1b[0;32m+mid\x1b[0m \x1b[0;32mtab\x1b[0m (esc)
184 \x1b[0;32m+\x1b[0m \x1b[0;32mall\x1b[0m \x1b[0;32mtabs\x1b[0m\x1b[0;1;41m \x1b[0m (esc)
188 \x1b[0;32m+\x1b[0m \x1b[0;32mall\x1b[0m \x1b[0;32mtabs\x1b[0m\x1b[0;1;41m \x1b[0m (esc)
185 $ echo "[color]" >> $HGRCPATH
189 $ echo "[color]" >> $HGRCPATH
186 $ echo "diff.tab = bold magenta" >> $HGRCPATH
190 $ echo "diff.tab = bold magenta" >> $HGRCPATH
187 $ hg diff --nodates --color=always
191 $ hg diff --nodates --color=always
188 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
192 \x1b[0;1mdiff --git a/a b/a\x1b[0m (esc)
189 \x1b[0;31;1m--- a/a\x1b[0m (esc)
193 \x1b[0;31;1m--- a/a\x1b[0m (esc)
190 \x1b[0;32;1m+++ b/a\x1b[0m (esc)
194 \x1b[0;32;1m+++ b/a\x1b[0m (esc)
191 \x1b[0;35m@@ -7,3 +7,9 @@\x1b[0m (esc)
195 \x1b[0;35m@@ -7,3 +7,9 @@\x1b[0m (esc)
192 a
196 a
193 c
197 c
194 c
198 c
195 \x1b[0;32m+aa\x1b[0m (esc)
199 \x1b[0;32m+aa\x1b[0m (esc)
196 \x1b[0;32m+\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mone tab\x1b[0m (esc)
200 \x1b[0;32m+\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mone tab\x1b[0m (esc)
197 \x1b[0;32m+\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mtwo tabs\x1b[0m (esc)
201 \x1b[0;32m+\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mtwo tabs\x1b[0m (esc)
198 \x1b[0;32m+end tab\x1b[0m\x1b[0;1;41m \x1b[0m (esc)
202 \x1b[0;32m+end tab\x1b[0m\x1b[0;1;41m \x1b[0m (esc)
199 \x1b[0;32m+mid\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mtab\x1b[0m (esc)
203 \x1b[0;32m+mid\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mtab\x1b[0m (esc)
200 \x1b[0;32m+\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mall\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mtabs\x1b[0m\x1b[0;1;41m \x1b[0m (esc)
204 \x1b[0;32m+\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mall\x1b[0m\x1b[0;1;35m \x1b[0m\x1b[0;32mtabs\x1b[0m\x1b[0;1;41m \x1b[0m (esc)
201
205
202 $ cd ..
206 $ cd ..
@@ -1,369 +1,381 b''
1
1
2 $ echo "[extensions]" >> $HGRCPATH
2 $ echo "[extensions]" >> $HGRCPATH
3 $ echo "largefiles =" >> $HGRCPATH
3 $ echo "largefiles =" >> $HGRCPATH
4
4
5 Create the repository outside $HOME since largefiles write to
5 Create the repository outside $HOME since largefiles write to
6 $HOME/.cache/largefiles.
6 $HOME/.cache/largefiles.
7
7
8 $ hg init test
8 $ hg init test
9 $ cd test
9 $ cd test
10 $ echo "root" > root
10 $ echo "root" > root
11 $ hg add root
11 $ hg add root
12 $ hg commit -m "Root commit"
12 $ hg commit -m "Root commit"
13
13
14 $ echo "large" > foo
14 $ echo "large" > foo
15 $ hg add --large foo
15 $ hg add --large foo
16 $ hg commit -m "Add foo as a largefile"
16 $ hg commit -m "Add foo as a largefile"
17
17
18 $ hg update -r 0
18 $ hg update -r 0
19 getting changed largefiles
19 getting changed largefiles
20 0 largefiles updated, 1 removed
20 0 largefiles updated, 1 removed
21 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
21 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
22
22
23 $ echo "normal" > foo
23 $ echo "normal" > foo
24 $ hg add foo
24 $ hg add foo
25 $ hg commit -m "Add foo as normal file"
25 $ hg commit -m "Add foo as normal file"
26 created new head
26 created new head
27
27
28 Normal file in the working copy, keeping the normal version:
28 Normal file in the working copy, keeping the normal version:
29
29
30 $ echo "n" | hg merge --config ui.interactive=Yes
30 $ echo "n" | hg merge --config ui.interactive=Yes
31 remote turned local normal file foo into a largefile
31 remote turned local normal file foo into a largefile
32 use (l)argefile or keep (n)ormal file? getting changed largefiles
32 use (l)argefile or keep (n)ormal file? n
33 getting changed largefiles
33 0 largefiles updated, 0 removed
34 0 largefiles updated, 0 removed
34 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
35 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
35 (branch merge, don't forget to commit)
36 (branch merge, don't forget to commit)
36
37
37 $ hg status
38 $ hg status
38 $ cat foo
39 $ cat foo
39 normal
40 normal
40
41
41 Normal file in the working copy, keeping the largefile version:
42 Normal file in the working copy, keeping the largefile version:
42
43
43 $ hg update -q -C
44 $ hg update -q -C
44 $ echo "l" | hg merge --config ui.interactive=Yes
45 $ echo "l" | hg merge --config ui.interactive=Yes
45 remote turned local normal file foo into a largefile
46 remote turned local normal file foo into a largefile
46 use (l)argefile or keep (n)ormal file? getting changed largefiles
47 use (l)argefile or keep (n)ormal file? l
48 getting changed largefiles
47 1 largefiles updated, 0 removed
49 1 largefiles updated, 0 removed
48 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
50 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
49 (branch merge, don't forget to commit)
51 (branch merge, don't forget to commit)
50
52
51 $ hg status
53 $ hg status
52 M foo
54 M foo
53
55
54 $ hg diff --nodates
56 $ hg diff --nodates
55 diff -r fa129ab6b5a7 .hglf/foo
57 diff -r fa129ab6b5a7 .hglf/foo
56 --- /dev/null
58 --- /dev/null
57 +++ b/.hglf/foo
59 +++ b/.hglf/foo
58 @@ -0,0 +1,1 @@
60 @@ -0,0 +1,1 @@
59 +7f7097b041ccf68cc5561e9600da4655d21c6d18
61 +7f7097b041ccf68cc5561e9600da4655d21c6d18
60 diff -r fa129ab6b5a7 foo
62 diff -r fa129ab6b5a7 foo
61 --- a/foo
63 --- a/foo
62 +++ /dev/null
64 +++ /dev/null
63 @@ -1,1 +0,0 @@
65 @@ -1,1 +0,0 @@
64 -normal
66 -normal
65
67
66 $ cat foo
68 $ cat foo
67 large
69 large
68
70
69 Largefile in the working copy, keeping the normal version:
71 Largefile in the working copy, keeping the normal version:
70
72
71 $ hg update -q -C -r 1
73 $ hg update -q -C -r 1
72 $ echo "n" | hg merge --config ui.interactive=Yes
74 $ echo "n" | hg merge --config ui.interactive=Yes
73 remote turned local largefile foo into a normal file
75 remote turned local largefile foo into a normal file
74 keep (l)argefile or use (n)ormal file? getting changed largefiles
76 keep (l)argefile or use (n)ormal file? n
77 getting changed largefiles
75 0 largefiles updated, 0 removed
78 0 largefiles updated, 0 removed
76 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
79 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
77 (branch merge, don't forget to commit)
80 (branch merge, don't forget to commit)
78
81
79 $ hg status
82 $ hg status
80 M foo
83 M foo
81
84
82 $ hg diff --nodates
85 $ hg diff --nodates
83 diff -r ff521236428a .hglf/foo
86 diff -r ff521236428a .hglf/foo
84 --- a/.hglf/foo
87 --- a/.hglf/foo
85 +++ /dev/null
88 +++ /dev/null
86 @@ -1,1 +0,0 @@
89 @@ -1,1 +0,0 @@
87 -7f7097b041ccf68cc5561e9600da4655d21c6d18
90 -7f7097b041ccf68cc5561e9600da4655d21c6d18
88 diff -r ff521236428a foo
91 diff -r ff521236428a foo
89 --- /dev/null
92 --- /dev/null
90 +++ b/foo
93 +++ b/foo
91 @@ -0,0 +1,1 @@
94 @@ -0,0 +1,1 @@
92 +normal
95 +normal
93
96
94 $ cat foo
97 $ cat foo
95 normal
98 normal
96
99
97 Largefile in the working copy, keeping the largefile version:
100 Largefile in the working copy, keeping the largefile version:
98
101
99 $ hg update -q -C -r 1
102 $ hg update -q -C -r 1
100 $ echo "l" | hg merge --config ui.interactive=Yes
103 $ echo "l" | hg merge --config ui.interactive=Yes
101 remote turned local largefile foo into a normal file
104 remote turned local largefile foo into a normal file
102 keep (l)argefile or use (n)ormal file? getting changed largefiles
105 keep (l)argefile or use (n)ormal file? l
106 getting changed largefiles
103 1 largefiles updated, 0 removed
107 1 largefiles updated, 0 removed
104 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
108 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
105 (branch merge, don't forget to commit)
109 (branch merge, don't forget to commit)
106
110
107 $ hg status
111 $ hg status
108
112
109 $ cat foo
113 $ cat foo
110 large
114 large
111
115
112 Whatever ... commit something so we can invoke merge when updating
116 Whatever ... commit something so we can invoke merge when updating
113
117
114 $ hg commit -m '3: Merge'
118 $ hg commit -m '3: Merge'
115
119
116 Updating from largefile to normal - no reason to prompt
120 Updating from largefile to normal - no reason to prompt
117
121
118 $ hg up -r 2
122 $ hg up -r 2
119 getting changed largefiles
123 getting changed largefiles
120 0 largefiles updated, 0 removed
124 0 largefiles updated, 0 removed
121 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
125 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
122 $ cat foo
126 $ cat foo
123 normal
127 normal
124
128
125 (the update above used to leave the working dir in a very weird state - clean it
129 (the update above used to leave the working dir in a very weird state - clean it
126 $ hg up -qr null
130 $ hg up -qr null
127 $ hg up -qr 2
131 $ hg up -qr 2
128 )
132 )
129
133
130 Updating from normal to largefile - no reason to prompt
134 Updating from normal to largefile - no reason to prompt
131
135
132 $ hg up -r 3
136 $ hg up -r 3
133 getting changed largefiles
137 getting changed largefiles
134 1 largefiles updated, 0 removed
138 1 largefiles updated, 0 removed
135 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
139 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
136 $ cat foo
140 $ cat foo
137 large
141 large
138
142
139 $ cd ..
143 $ cd ..
140
144
141
145
142 Systematic testing of merges involving largefiles:
146 Systematic testing of merges involving largefiles:
143
147
144 Ancestor: normal Parent: normal= Parent: large result: large
148 Ancestor: normal Parent: normal= Parent: large result: large
145 Ancestor: normal Parent: normal2 Parent: large result: ?
149 Ancestor: normal Parent: normal2 Parent: large result: ?
146 Ancestor: large Parent: large= Parent: normal result: normal
150 Ancestor: large Parent: large= Parent: normal result: normal
147 Ancestor: large Parent: large2 Parent: normal result: ?
151 Ancestor: large Parent: large2 Parent: normal result: ?
148
152
149 All cases should try merging both ways.
153 All cases should try merging both ways.
150 "=" means same file content.
154 "=" means same file content.
151
155
152 Prepare test repo:
156 Prepare test repo:
153
157
154 $ hg init merges
158 $ hg init merges
155 $ cd merges
159 $ cd merges
156 $ touch f1
160 $ touch f1
157 $ hg ci -Aqm "0-root" --config extensions.largefiles=!
161 $ hg ci -Aqm "0-root" --config extensions.largefiles=!
158
162
159 Ensure that .hg/largefiles isn't created before largefiles are added
163 Ensure that .hg/largefiles isn't created before largefiles are added
160 #if unix-permissions
164 #if unix-permissions
161 $ chmod 555 .hg
165 $ chmod 555 .hg
162 #endif
166 #endif
163 $ hg status
167 $ hg status
164 #if unix-permissions
168 #if unix-permissions
165 $ chmod 755 .hg
169 $ chmod 755 .hg
166 #endif
170 #endif
167
171
168 $ test -f .hg/largefiles
172 $ test -f .hg/largefiles
169 [1]
173 [1]
170
174
171 ancestor is "normal":
175 ancestor is "normal":
172 $ echo normal > f
176 $ echo normal > f
173 $ hg ci -Aqm "1-normal-ancestor"
177 $ hg ci -Aqm "1-normal-ancestor"
174 $ touch f2
178 $ touch f2
175 $ hg ci -Aqm "2-normal-unchanged"
179 $ hg ci -Aqm "2-normal-unchanged"
176 $ hg tag -l "normal="
180 $ hg tag -l "normal="
177 $ echo normal2 > f
181 $ echo normal2 > f
178 $ hg ci -m "3-normal2"
182 $ hg ci -m "3-normal2"
179 $ hg tag -l "normal2"
183 $ hg tag -l "normal2"
180 $ hg up -qr 1
184 $ hg up -qr 1
181 $ hg rm f
185 $ hg rm f
182 $ echo large > f
186 $ echo large > f
183 $ hg add --large f
187 $ hg add --large f
184 $ hg ci -qm "4-normal-to-large"
188 $ hg ci -qm "4-normal-to-large"
185 $ hg tag -l "large"
189 $ hg tag -l "large"
186
190
187 $ hg up -qr null
191 $ hg up -qr null
188
192
189 ancestor is "large":
193 ancestor is "large":
190 $ echo large > f
194 $ echo large > f
191 $ hg add --large f
195 $ hg add --large f
192 $ hg ci -qm "5-large-ancestor"
196 $ hg ci -qm "5-large-ancestor"
193 $ touch f2
197 $ touch f2
194 $ hg ci -Aqm "6-large-unchanged"
198 $ hg ci -Aqm "6-large-unchanged"
195 $ hg tag -l "large="
199 $ hg tag -l "large="
196 $ echo large2 > f
200 $ echo large2 > f
197 $ hg ci -m "7-large2"
201 $ hg ci -m "7-large2"
198 $ hg tag -l "large2"
202 $ hg tag -l "large2"
199 $ hg up -qr 5
203 $ hg up -qr 5
200 $ hg rm f
204 $ hg rm f
201 $ echo normal > f
205 $ echo normal > f
202 $ hg ci -qAm "8-large-to-normal"
206 $ hg ci -qAm "8-large-to-normal"
203 $ hg tag -l "normal"
207 $ hg tag -l "normal"
204
208
205 Ancestor: normal Parent: normal= Parent: large result: large
209 Ancestor: normal Parent: normal= Parent: large result: large
206
210
207 $ hg up -Cqr normal=
211 $ hg up -Cqr normal=
208 $ hg merge -r large
212 $ hg merge -r large
209 getting changed largefiles
213 getting changed largefiles
210 1 largefiles updated, 0 removed
214 1 largefiles updated, 0 removed
211 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
215 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
212 (branch merge, don't forget to commit)
216 (branch merge, don't forget to commit)
213 $ cat f
217 $ cat f
214 large
218 large
215
219
216 swap
220 swap
217
221
218 $ hg up -Cqr large
222 $ hg up -Cqr large
219 $ hg merge -r normal=
223 $ hg merge -r normal=
220 getting changed largefiles
224 getting changed largefiles
221 0 largefiles updated, 0 removed
225 0 largefiles updated, 0 removed
222 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
226 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
223 (branch merge, don't forget to commit)
227 (branch merge, don't forget to commit)
224 $ cat f
228 $ cat f
225 large
229 large
226
230
227 Ancestor: normal Parent: normal2 Parent: large result: ?
231 Ancestor: normal Parent: normal2 Parent: large result: ?
228 (annoying extra prompt ... but it do not do any serious harm)
232 (annoying extra prompt ... but it do not do any serious harm)
229
233
230 $ hg up -Cqr normal2
234 $ hg up -Cqr normal2
231 $ hg merge -r large
235 $ hg merge -r large
232 local changed f which remote deleted
236 local changed f which remote deleted
233 use (c)hanged version or (d)elete? c
237 use (c)hanged version or (d)elete? c
234 remote turned local normal file f into a largefile
238 remote turned local normal file f into a largefile
235 use (l)argefile or keep (n)ormal file? l
239 use (l)argefile or keep (n)ormal file? l
236 getting changed largefiles
240 getting changed largefiles
237 1 largefiles updated, 0 removed
241 1 largefiles updated, 0 removed
238 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
242 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
239 (branch merge, don't forget to commit)
243 (branch merge, don't forget to commit)
240 $ cat f
244 $ cat f
241 large
245 large
242
246
243 $ hg up -Cqr normal2
247 $ hg up -Cqr normal2
244 $ ( echo c; echo n ) | hg merge -r large --config ui.interactive=Yes
248 $ ( echo c; echo n ) | hg merge -r large --config ui.interactive=Yes
245 local changed f which remote deleted
249 local changed f which remote deleted
246 use (c)hanged version or (d)elete? remote turned local normal file f into a largefile
250 use (c)hanged version or (d)elete? c
247 use (l)argefile or keep (n)ormal file? getting changed largefiles
251 remote turned local normal file f into a largefile
252 use (l)argefile or keep (n)ormal file? n
253 getting changed largefiles
248 0 largefiles updated, 0 removed
254 0 largefiles updated, 0 removed
249 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
255 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
250 (branch merge, don't forget to commit)
256 (branch merge, don't forget to commit)
251 $ cat f
257 $ cat f
252 normal2
258 normal2
253
259
254 $ hg up -Cqr normal2
260 $ hg up -Cqr normal2
255 $ echo d | hg merge -r large --config ui.interactive=Yes
261 $ echo d | hg merge -r large --config ui.interactive=Yes
256 local changed f which remote deleted
262 local changed f which remote deleted
257 use (c)hanged version or (d)elete? getting changed largefiles
263 use (c)hanged version or (d)elete? d
264 getting changed largefiles
258 1 largefiles updated, 0 removed
265 1 largefiles updated, 0 removed
259 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
266 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
260 (branch merge, don't forget to commit)
267 (branch merge, don't forget to commit)
261 $ cat f
268 $ cat f
262 large
269 large
263
270
264 swap
271 swap
265
272
266 $ hg up -Cqr large
273 $ hg up -Cqr large
267 $ hg merge -r normal2
274 $ hg merge -r normal2
268 remote changed f which local deleted
275 remote changed f which local deleted
269 use (c)hanged version or leave (d)eleted? c
276 use (c)hanged version or leave (d)eleted? c
270 remote turned local largefile f into a normal file
277 remote turned local largefile f into a normal file
271 keep (l)argefile or use (n)ormal file? l
278 keep (l)argefile or use (n)ormal file? l
272 getting changed largefiles
279 getting changed largefiles
273 1 largefiles updated, 0 removed
280 1 largefiles updated, 0 removed
274 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
281 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
275 (branch merge, don't forget to commit)
282 (branch merge, don't forget to commit)
276 $ cat f
283 $ cat f
277 large
284 large
278
285
279 $ hg up -Cqr large
286 $ hg up -Cqr large
280 $ ( echo c; echo n ) | hg merge -r normal2 --config ui.interactive=Yes
287 $ ( echo c; echo n ) | hg merge -r normal2 --config ui.interactive=Yes
281 remote changed f which local deleted
288 remote changed f which local deleted
282 use (c)hanged version or leave (d)eleted? remote turned local largefile f into a normal file
289 use (c)hanged version or leave (d)eleted? c
283 keep (l)argefile or use (n)ormal file? getting changed largefiles
290 remote turned local largefile f into a normal file
291 keep (l)argefile or use (n)ormal file? n
292 getting changed largefiles
284 0 largefiles updated, 0 removed
293 0 largefiles updated, 0 removed
285 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
294 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
286 (branch merge, don't forget to commit)
295 (branch merge, don't forget to commit)
287 $ cat f
296 $ cat f
288 normal2
297 normal2
289
298
290 $ hg up -Cqr large
299 $ hg up -Cqr large
291 $ echo d | hg merge -r normal2 --config ui.interactive=Yes
300 $ echo d | hg merge -r normal2 --config ui.interactive=Yes
292 remote changed f which local deleted
301 remote changed f which local deleted
293 use (c)hanged version or leave (d)eleted? getting changed largefiles
302 use (c)hanged version or leave (d)eleted? d
303 getting changed largefiles
294 0 largefiles updated, 0 removed
304 0 largefiles updated, 0 removed
295 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
305 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
296 (branch merge, don't forget to commit)
306 (branch merge, don't forget to commit)
297 $ cat f
307 $ cat f
298 large
308 large
299
309
300 Ancestor: large Parent: large= Parent: normal result: normal
310 Ancestor: large Parent: large= Parent: normal result: normal
301
311
302 $ hg up -Cqr large=
312 $ hg up -Cqr large=
303 $ hg merge -r normal
313 $ hg merge -r normal
304 getting changed largefiles
314 getting changed largefiles
305 0 largefiles updated, 0 removed
315 0 largefiles updated, 0 removed
306 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
316 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
307 (branch merge, don't forget to commit)
317 (branch merge, don't forget to commit)
308 $ cat f
318 $ cat f
309 normal
319 normal
310
320
311 swap
321 swap
312
322
313 $ hg up -Cqr normal
323 $ hg up -Cqr normal
314 $ hg merge -r large=
324 $ hg merge -r large=
315 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
325 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
316 (branch merge, don't forget to commit)
326 (branch merge, don't forget to commit)
317 $ cat f
327 $ cat f
318 normal
328 normal
319
329
320 Ancestor: large Parent: large2 Parent: normal result: ?
330 Ancestor: large Parent: large2 Parent: normal result: ?
321 (annoying extra prompt ... but it do not do any serious harm)
331 (annoying extra prompt ... but it do not do any serious harm)
322
332
323 $ hg up -Cqr large2
333 $ hg up -Cqr large2
324 $ hg merge -r normal
334 $ hg merge -r normal
325 local changed .hglf/f which remote deleted
335 local changed .hglf/f which remote deleted
326 use (c)hanged version or (d)elete? c
336 use (c)hanged version or (d)elete? c
327 remote turned local largefile f into a normal file
337 remote turned local largefile f into a normal file
328 keep (l)argefile or use (n)ormal file? l
338 keep (l)argefile or use (n)ormal file? l
329 getting changed largefiles
339 getting changed largefiles
330 1 largefiles updated, 0 removed
340 1 largefiles updated, 0 removed
331 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
341 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
332 (branch merge, don't forget to commit)
342 (branch merge, don't forget to commit)
333 $ cat f
343 $ cat f
334 large2
344 large2
335
345
336 $ hg up -Cqr large2
346 $ hg up -Cqr large2
337 $ echo d | hg merge -r normal --config ui.interactive=Yes
347 $ echo d | hg merge -r normal --config ui.interactive=Yes
338 local changed .hglf/f which remote deleted
348 local changed .hglf/f which remote deleted
339 use (c)hanged version or (d)elete? getting changed largefiles
349 use (c)hanged version or (d)elete? d
350 getting changed largefiles
340 0 largefiles updated, 0 removed
351 0 largefiles updated, 0 removed
341 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
352 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
342 (branch merge, don't forget to commit)
353 (branch merge, don't forget to commit)
343 $ cat f
354 $ cat f
344 normal
355 normal
345
356
346 swap
357 swap
347
358
348 $ hg up -Cqr normal
359 $ hg up -Cqr normal
349 $ hg merge -r large2
360 $ hg merge -r large2
350 remote changed .hglf/f which local deleted
361 remote changed .hglf/f which local deleted
351 use (c)hanged version or leave (d)eleted? c
362 use (c)hanged version or leave (d)eleted? c
352 remote turned local normal file f into a largefile
363 remote turned local normal file f into a largefile
353 use (l)argefile or keep (n)ormal file? l
364 use (l)argefile or keep (n)ormal file? l
354 getting changed largefiles
365 getting changed largefiles
355 1 largefiles updated, 0 removed
366 1 largefiles updated, 0 removed
356 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
367 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
357 (branch merge, don't forget to commit)
368 (branch merge, don't forget to commit)
358 $ cat f
369 $ cat f
359 large2
370 large2
360
371
361 $ hg up -Cqr normal
372 $ hg up -Cqr normal
362 $ echo d | hg merge -r large2 --config ui.interactive=Yes
373 $ echo d | hg merge -r large2 --config ui.interactive=Yes
363 remote changed .hglf/f which local deleted
374 remote changed .hglf/f which local deleted
364 use (c)hanged version or leave (d)eleted? 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
375 use (c)hanged version or leave (d)eleted? d
376 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
365 (branch merge, don't forget to commit)
377 (branch merge, don't forget to commit)
366 $ cat f
378 $ cat f
367 normal
379 normal
368
380
369 $ cd ..
381 $ cd ..
@@ -1,1310 +1,1318 b''
1 $ cat <<EOF >> $HGRCPATH
1 $ cat <<EOF >> $HGRCPATH
2 > [extensions]
2 > [extensions]
3 > keyword =
3 > keyword =
4 > mq =
4 > mq =
5 > notify =
5 > notify =
6 > record =
6 > record =
7 > transplant =
7 > transplant =
8 > [ui]
8 > [ui]
9 > interactive = true
9 > interactive = true
10 > EOF
10 > EOF
11
11
12 hide outer repo
12 hide outer repo
13 $ hg init
13 $ hg init
14
14
15 Run kwdemo before [keyword] files are set up
15 Run kwdemo before [keyword] files are set up
16 as it would succeed without uisetup otherwise
16 as it would succeed without uisetup otherwise
17
17
18 $ hg --quiet kwdemo
18 $ hg --quiet kwdemo
19 [extensions]
19 [extensions]
20 keyword =
20 keyword =
21 [keyword]
21 [keyword]
22 demo.txt =
22 demo.txt =
23 [keywordset]
23 [keywordset]
24 svn = False
24 svn = False
25 [keywordmaps]
25 [keywordmaps]
26 Author = {author|user}
26 Author = {author|user}
27 Date = {date|utcdate}
27 Date = {date|utcdate}
28 Header = {root}/{file},v {node|short} {date|utcdate} {author|user}
28 Header = {root}/{file},v {node|short} {date|utcdate} {author|user}
29 Id = {file|basename},v {node|short} {date|utcdate} {author|user}
29 Id = {file|basename},v {node|short} {date|utcdate} {author|user}
30 RCSFile = {file|basename},v
30 RCSFile = {file|basename},v
31 RCSfile = {file|basename},v
31 RCSfile = {file|basename},v
32 Revision = {node|short}
32 Revision = {node|short}
33 Source = {root}/{file},v
33 Source = {root}/{file},v
34 $Author: test $
34 $Author: test $
35 $Date: ????/??/?? ??:??:?? $ (glob)
35 $Date: ????/??/?? ??:??:?? $ (glob)
36 $Header: */demo.txt,v ???????????? ????/??/?? ??:??:?? test $ (glob)
36 $Header: */demo.txt,v ???????????? ????/??/?? ??:??:?? test $ (glob)
37 $Id: demo.txt,v ???????????? ????/??/?? ??:??:?? test $ (glob)
37 $Id: demo.txt,v ???????????? ????/??/?? ??:??:?? test $ (glob)
38 $RCSFile: demo.txt,v $
38 $RCSFile: demo.txt,v $
39 $RCSfile: demo.txt,v $
39 $RCSfile: demo.txt,v $
40 $Revision: ???????????? $ (glob)
40 $Revision: ???????????? $ (glob)
41 $Source: */demo.txt,v $ (glob)
41 $Source: */demo.txt,v $ (glob)
42
42
43 $ hg --quiet kwdemo "Branch = {branches}"
43 $ hg --quiet kwdemo "Branch = {branches}"
44 [extensions]
44 [extensions]
45 keyword =
45 keyword =
46 [keyword]
46 [keyword]
47 demo.txt =
47 demo.txt =
48 [keywordset]
48 [keywordset]
49 svn = False
49 svn = False
50 [keywordmaps]
50 [keywordmaps]
51 Branch = {branches}
51 Branch = {branches}
52 $Branch: demobranch $
52 $Branch: demobranch $
53
53
54 $ cat <<EOF >> $HGRCPATH
54 $ cat <<EOF >> $HGRCPATH
55 > [keyword]
55 > [keyword]
56 > ** =
56 > ** =
57 > b = ignore
57 > b = ignore
58 > i = ignore
58 > i = ignore
59 > [hooks]
59 > [hooks]
60 > EOF
60 > EOF
61 $ cp $HGRCPATH $HGRCPATH.nohooks
61 $ cp $HGRCPATH $HGRCPATH.nohooks
62 > cat <<EOF >> $HGRCPATH
62 > cat <<EOF >> $HGRCPATH
63 > commit=
63 > commit=
64 > commit.test=cp a hooktest
64 > commit.test=cp a hooktest
65 > EOF
65 > EOF
66
66
67 $ hg init Test-bndl
67 $ hg init Test-bndl
68 $ cd Test-bndl
68 $ cd Test-bndl
69
69
70 kwshrink should exit silently in empty/invalid repo
70 kwshrink should exit silently in empty/invalid repo
71
71
72 $ hg kwshrink
72 $ hg kwshrink
73
73
74 Symlinks cannot be created on Windows.
74 Symlinks cannot be created on Windows.
75 A bundle to test this was made with:
75 A bundle to test this was made with:
76 hg init t
76 hg init t
77 cd t
77 cd t
78 echo a > a
78 echo a > a
79 ln -s a sym
79 ln -s a sym
80 hg add sym
80 hg add sym
81 hg ci -m addsym -u mercurial
81 hg ci -m addsym -u mercurial
82 hg bundle --base null ../test-keyword.hg
82 hg bundle --base null ../test-keyword.hg
83
83
84 $ hg pull -u "$TESTDIR"/bundles/test-keyword.hg
84 $ hg pull -u "$TESTDIR"/bundles/test-keyword.hg
85 pulling from *test-keyword.hg (glob)
85 pulling from *test-keyword.hg (glob)
86 requesting all changes
86 requesting all changes
87 adding changesets
87 adding changesets
88 adding manifests
88 adding manifests
89 adding file changes
89 adding file changes
90 added 1 changesets with 1 changes to 1 files
90 added 1 changesets with 1 changes to 1 files
91 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
91 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
92
92
93 $ echo 'expand $Id$' > a
93 $ echo 'expand $Id$' > a
94 $ echo 'do not process $Id:' >> a
94 $ echo 'do not process $Id:' >> a
95 $ echo 'xxx $' >> a
95 $ echo 'xxx $' >> a
96 $ echo 'ignore $Id$' > b
96 $ echo 'ignore $Id$' > b
97
97
98 Output files as they were created
98 Output files as they were created
99
99
100 $ cat a b
100 $ cat a b
101 expand $Id$
101 expand $Id$
102 do not process $Id:
102 do not process $Id:
103 xxx $
103 xxx $
104 ignore $Id$
104 ignore $Id$
105
105
106 no kwfiles
106 no kwfiles
107
107
108 $ hg kwfiles
108 $ hg kwfiles
109
109
110 untracked candidates
110 untracked candidates
111
111
112 $ hg -v kwfiles --unknown
112 $ hg -v kwfiles --unknown
113 k a
113 k a
114
114
115 Add files and check status
115 Add files and check status
116
116
117 $ hg addremove
117 $ hg addremove
118 adding a
118 adding a
119 adding b
119 adding b
120 $ hg status
120 $ hg status
121 A a
121 A a
122 A b
122 A b
123
123
124
124
125 Default keyword expansion including commit hook
125 Default keyword expansion including commit hook
126 Interrupted commit should not change state or run commit hook
126 Interrupted commit should not change state or run commit hook
127
127
128 $ hg --debug commit
128 $ hg --debug commit
129 abort: empty commit message
129 abort: empty commit message
130 [255]
130 [255]
131 $ hg status
131 $ hg status
132 A a
132 A a
133 A b
133 A b
134
134
135 Commit with several checks
135 Commit with several checks
136
136
137 $ hg --debug commit -mabsym -u 'User Name <user@example.com>'
137 $ hg --debug commit -mabsym -u 'User Name <user@example.com>'
138 a
138 a
139 b
139 b
140 overwriting a expanding keywords
140 overwriting a expanding keywords
141 running hook commit.test: cp a hooktest
141 running hook commit.test: cp a hooktest
142 committed changeset 1:ef63ca68695bc9495032c6fda1350c71e6d256e9
142 committed changeset 1:ef63ca68695bc9495032c6fda1350c71e6d256e9
143 $ hg status
143 $ hg status
144 ? hooktest
144 ? hooktest
145 $ hg debugrebuildstate
145 $ hg debugrebuildstate
146 $ hg --quiet identify
146 $ hg --quiet identify
147 ef63ca68695b
147 ef63ca68695b
148
148
149 cat files in working directory with keywords expanded
149 cat files in working directory with keywords expanded
150
150
151 $ cat a b
151 $ cat a b
152 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
152 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
153 do not process $Id:
153 do not process $Id:
154 xxx $
154 xxx $
155 ignore $Id$
155 ignore $Id$
156
156
157 hg cat files and symlink, no expansion
157 hg cat files and symlink, no expansion
158
158
159 $ hg cat sym a b && echo
159 $ hg cat sym a b && echo
160 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
160 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
161 do not process $Id:
161 do not process $Id:
162 xxx $
162 xxx $
163 ignore $Id$
163 ignore $Id$
164 a
164 a
165
165
166 $ diff a hooktest
166 $ diff a hooktest
167
167
168 $ cp $HGRCPATH.nohooks $HGRCPATH
168 $ cp $HGRCPATH.nohooks $HGRCPATH
169 $ rm hooktest
169 $ rm hooktest
170
170
171 hg status of kw-ignored binary file starting with '\1\n'
171 hg status of kw-ignored binary file starting with '\1\n'
172
172
173 >>> open("i", "wb").write("\1\nfoo")
173 >>> open("i", "wb").write("\1\nfoo")
174 $ hg -q commit -Am metasep i
174 $ hg -q commit -Am metasep i
175 $ hg status
175 $ hg status
176 >>> open("i", "wb").write("\1\nbar")
176 >>> open("i", "wb").write("\1\nbar")
177 $ hg status
177 $ hg status
178 M i
178 M i
179 $ hg -q commit -m "modify metasep" i
179 $ hg -q commit -m "modify metasep" i
180 $ hg status --rev 2:3
180 $ hg status --rev 2:3
181 M i
181 M i
182 $ touch empty
182 $ touch empty
183 $ hg -q commit -A -m "another file"
183 $ hg -q commit -A -m "another file"
184 $ hg status -A --rev 3:4 i
184 $ hg status -A --rev 3:4 i
185 C i
185 C i
186
186
187 $ hg -q strip -n 2
187 $ hg -q strip -n 2
188
188
189 Test hook execution
189 Test hook execution
190
190
191 bundle
191 bundle
192
192
193 $ hg bundle --base null ../kw.hg
193 $ hg bundle --base null ../kw.hg
194 2 changesets found
194 2 changesets found
195 $ cd ..
195 $ cd ..
196 $ hg init Test
196 $ hg init Test
197 $ cd Test
197 $ cd Test
198
198
199 Notify on pull to check whether keywords stay as is in email
199 Notify on pull to check whether keywords stay as is in email
200 ie. if patch.diff wrapper acts as it should
200 ie. if patch.diff wrapper acts as it should
201
201
202 $ cat <<EOF >> $HGRCPATH
202 $ cat <<EOF >> $HGRCPATH
203 > [hooks]
203 > [hooks]
204 > incoming.notify = python:hgext.notify.hook
204 > incoming.notify = python:hgext.notify.hook
205 > [notify]
205 > [notify]
206 > sources = pull
206 > sources = pull
207 > diffstat = False
207 > diffstat = False
208 > maxsubject = 15
208 > maxsubject = 15
209 > [reposubs]
209 > [reposubs]
210 > * = Test
210 > * = Test
211 > EOF
211 > EOF
212
212
213 Pull from bundle and trigger notify
213 Pull from bundle and trigger notify
214
214
215 $ hg pull -u ../kw.hg
215 $ hg pull -u ../kw.hg
216 pulling from ../kw.hg
216 pulling from ../kw.hg
217 requesting all changes
217 requesting all changes
218 adding changesets
218 adding changesets
219 adding manifests
219 adding manifests
220 adding file changes
220 adding file changes
221 added 2 changesets with 3 changes to 3 files
221 added 2 changesets with 3 changes to 3 files
222 Content-Type: text/plain; charset="us-ascii"
222 Content-Type: text/plain; charset="us-ascii"
223 MIME-Version: 1.0
223 MIME-Version: 1.0
224 Content-Transfer-Encoding: 7bit
224 Content-Transfer-Encoding: 7bit
225 Date: * (glob)
225 Date: * (glob)
226 Subject: changeset in...
226 Subject: changeset in...
227 From: mercurial
227 From: mercurial
228 X-Hg-Notification: changeset a2392c293916
228 X-Hg-Notification: changeset a2392c293916
229 Message-Id: <hg.a2392c293916*> (glob)
229 Message-Id: <hg.a2392c293916*> (glob)
230 To: Test
230 To: Test
231
231
232 changeset a2392c293916 in $TESTTMP/Test (glob)
232 changeset a2392c293916 in $TESTTMP/Test (glob)
233 details: $TESTTMP/Test?cmd=changeset;node=a2392c293916
233 details: $TESTTMP/Test?cmd=changeset;node=a2392c293916
234 description:
234 description:
235 addsym
235 addsym
236
236
237 diffs (6 lines):
237 diffs (6 lines):
238
238
239 diff -r 000000000000 -r a2392c293916 sym
239 diff -r 000000000000 -r a2392c293916 sym
240 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
240 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
241 +++ b/sym Sat Feb 09 20:25:47 2008 +0100
241 +++ b/sym Sat Feb 09 20:25:47 2008 +0100
242 @@ -0,0 +1,1 @@
242 @@ -0,0 +1,1 @@
243 +a
243 +a
244 \ No newline at end of file
244 \ No newline at end of file
245 Content-Type: text/plain; charset="us-ascii"
245 Content-Type: text/plain; charset="us-ascii"
246 MIME-Version: 1.0
246 MIME-Version: 1.0
247 Content-Transfer-Encoding: 7bit
247 Content-Transfer-Encoding: 7bit
248 Date:* (glob)
248 Date:* (glob)
249 Subject: changeset in...
249 Subject: changeset in...
250 From: User Name <user@example.com>
250 From: User Name <user@example.com>
251 X-Hg-Notification: changeset ef63ca68695b
251 X-Hg-Notification: changeset ef63ca68695b
252 Message-Id: <hg.ef63ca68695b*> (glob)
252 Message-Id: <hg.ef63ca68695b*> (glob)
253 To: Test
253 To: Test
254
254
255 changeset ef63ca68695b in $TESTTMP/Test (glob)
255 changeset ef63ca68695b in $TESTTMP/Test (glob)
256 details: $TESTTMP/Test?cmd=changeset;node=ef63ca68695b
256 details: $TESTTMP/Test?cmd=changeset;node=ef63ca68695b
257 description:
257 description:
258 absym
258 absym
259
259
260 diffs (12 lines):
260 diffs (12 lines):
261
261
262 diff -r a2392c293916 -r ef63ca68695b a
262 diff -r a2392c293916 -r ef63ca68695b a
263 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
263 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
264 +++ b/a Thu Jan 01 00:00:00 1970 +0000
264 +++ b/a Thu Jan 01 00:00:00 1970 +0000
265 @@ -0,0 +1,3 @@
265 @@ -0,0 +1,3 @@
266 +expand $Id$
266 +expand $Id$
267 +do not process $Id:
267 +do not process $Id:
268 +xxx $
268 +xxx $
269 diff -r a2392c293916 -r ef63ca68695b b
269 diff -r a2392c293916 -r ef63ca68695b b
270 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
270 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
271 +++ b/b Thu Jan 01 00:00:00 1970 +0000
271 +++ b/b Thu Jan 01 00:00:00 1970 +0000
272 @@ -0,0 +1,1 @@
272 @@ -0,0 +1,1 @@
273 +ignore $Id$
273 +ignore $Id$
274 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
274 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
275
275
276 $ cp $HGRCPATH.nohooks $HGRCPATH
276 $ cp $HGRCPATH.nohooks $HGRCPATH
277
277
278 Touch files and check with status
278 Touch files and check with status
279
279
280 $ touch a b
280 $ touch a b
281 $ hg status
281 $ hg status
282
282
283 Update and expand
283 Update and expand
284
284
285 $ rm sym a b
285 $ rm sym a b
286 $ hg update -C
286 $ hg update -C
287 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
287 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
288 $ cat a b
288 $ cat a b
289 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
289 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
290 do not process $Id:
290 do not process $Id:
291 xxx $
291 xxx $
292 ignore $Id$
292 ignore $Id$
293
293
294 Check whether expansion is filewise and file mode is preserved
294 Check whether expansion is filewise and file mode is preserved
295
295
296 $ echo '$Id$' > c
296 $ echo '$Id$' > c
297 $ echo 'tests for different changenodes' >> c
297 $ echo 'tests for different changenodes' >> c
298 #if unix-permissions
298 #if unix-permissions
299 $ chmod 600 c
299 $ chmod 600 c
300 $ ls -l c | cut -b 1-10
300 $ ls -l c | cut -b 1-10
301 -rw-------
301 -rw-------
302 #endif
302 #endif
303
303
304 commit file c
304 commit file c
305
305
306 $ hg commit -A -mcndiff -d '1 0' -u 'User Name <user@example.com>'
306 $ hg commit -A -mcndiff -d '1 0' -u 'User Name <user@example.com>'
307 adding c
307 adding c
308 #if unix-permissions
308 #if unix-permissions
309 $ ls -l c | cut -b 1-10
309 $ ls -l c | cut -b 1-10
310 -rw-------
310 -rw-------
311 #endif
311 #endif
312
312
313 force expansion
313 force expansion
314
314
315 $ hg -v kwexpand
315 $ hg -v kwexpand
316 overwriting a expanding keywords
316 overwriting a expanding keywords
317 overwriting c expanding keywords
317 overwriting c expanding keywords
318
318
319 compare changenodes in a and c
319 compare changenodes in a and c
320
320
321 $ cat a c
321 $ cat a c
322 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
322 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
323 do not process $Id:
323 do not process $Id:
324 xxx $
324 xxx $
325 $Id: c,v 40a904bbbe4c 1970/01/01 00:00:01 user $
325 $Id: c,v 40a904bbbe4c 1970/01/01 00:00:01 user $
326 tests for different changenodes
326 tests for different changenodes
327
327
328 record
328 record
329
329
330 $ echo '$Id$' > r
330 $ echo '$Id$' > r
331 $ hg add r
331 $ hg add r
332
332
333 record chunk
333 record chunk
334
334
335 >>> lines = open('a', 'rb').readlines()
335 >>> lines = open('a', 'rb').readlines()
336 >>> lines.insert(1, 'foo\n')
336 >>> lines.insert(1, 'foo\n')
337 >>> lines.append('bar\n')
337 >>> lines.append('bar\n')
338 >>> open('a', 'wb').writelines(lines)
338 >>> open('a', 'wb').writelines(lines)
339 $ hg record -d '10 1' -m rectest a<<EOF
339 $ hg record -d '10 1' -m rectest a<<EOF
340 > y
340 > y
341 > y
341 > y
342 > n
342 > n
343 > EOF
343 > EOF
344 diff --git a/a b/a
344 diff --git a/a b/a
345 2 hunks, 2 lines changed
345 2 hunks, 2 lines changed
346 examine changes to 'a'? [Ynesfdaq?]
346 examine changes to 'a'? [Ynesfdaq?] y
347
347 @@ -1,3 +1,4 @@
348 @@ -1,3 +1,4 @@
348 expand $Id$
349 expand $Id$
349 +foo
350 +foo
350 do not process $Id:
351 do not process $Id:
351 xxx $
352 xxx $
352 record change 1/2 to 'a'? [Ynesfdaq?]
353 record change 1/2 to 'a'? [Ynesfdaq?] y
354
353 @@ -2,2 +3,3 @@
355 @@ -2,2 +3,3 @@
354 do not process $Id:
356 do not process $Id:
355 xxx $
357 xxx $
356 +bar
358 +bar
357 record change 2/2 to 'a'? [Ynesfdaq?]
359 record change 2/2 to 'a'? [Ynesfdaq?] n
360
358
361
359 $ hg identify
362 $ hg identify
360 5f5eb23505c3+ tip
363 5f5eb23505c3+ tip
361 $ hg status
364 $ hg status
362 M a
365 M a
363 A r
366 A r
364
367
365 Cat modified file a
368 Cat modified file a
366
369
367 $ cat a
370 $ cat a
368 expand $Id: a,v 5f5eb23505c3 1970/01/01 00:00:10 test $
371 expand $Id: a,v 5f5eb23505c3 1970/01/01 00:00:10 test $
369 foo
372 foo
370 do not process $Id:
373 do not process $Id:
371 xxx $
374 xxx $
372 bar
375 bar
373
376
374 Diff remaining chunk
377 Diff remaining chunk
375
378
376 $ hg diff a
379 $ hg diff a
377 diff -r 5f5eb23505c3 a
380 diff -r 5f5eb23505c3 a
378 --- a/a Thu Jan 01 00:00:09 1970 -0000
381 --- a/a Thu Jan 01 00:00:09 1970 -0000
379 +++ b/a * (glob)
382 +++ b/a * (glob)
380 @@ -2,3 +2,4 @@
383 @@ -2,3 +2,4 @@
381 foo
384 foo
382 do not process $Id:
385 do not process $Id:
383 xxx $
386 xxx $
384 +bar
387 +bar
385
388
386 $ hg rollback
389 $ hg rollback
387 repository tip rolled back to revision 2 (undo commit)
390 repository tip rolled back to revision 2 (undo commit)
388 working directory now based on revision 2
391 working directory now based on revision 2
389
392
390 Record all chunks in file a
393 Record all chunks in file a
391
394
392 $ echo foo > msg
395 $ echo foo > msg
393
396
394 - do not use "hg record -m" here!
397 - do not use "hg record -m" here!
395
398
396 $ hg record -l msg -d '11 1' a<<EOF
399 $ hg record -l msg -d '11 1' a<<EOF
397 > y
400 > y
398 > y
401 > y
399 > y
402 > y
400 > EOF
403 > EOF
401 diff --git a/a b/a
404 diff --git a/a b/a
402 2 hunks, 2 lines changed
405 2 hunks, 2 lines changed
403 examine changes to 'a'? [Ynesfdaq?]
406 examine changes to 'a'? [Ynesfdaq?] y
407
404 @@ -1,3 +1,4 @@
408 @@ -1,3 +1,4 @@
405 expand $Id$
409 expand $Id$
406 +foo
410 +foo
407 do not process $Id:
411 do not process $Id:
408 xxx $
412 xxx $
409 record change 1/2 to 'a'? [Ynesfdaq?]
413 record change 1/2 to 'a'? [Ynesfdaq?] y
414
410 @@ -2,2 +3,3 @@
415 @@ -2,2 +3,3 @@
411 do not process $Id:
416 do not process $Id:
412 xxx $
417 xxx $
413 +bar
418 +bar
414 record change 2/2 to 'a'? [Ynesfdaq?]
419 record change 2/2 to 'a'? [Ynesfdaq?] y
420
415
421
416 File a should be clean
422 File a should be clean
417
423
418 $ hg status -A a
424 $ hg status -A a
419 C a
425 C a
420
426
421 rollback and revert expansion
427 rollback and revert expansion
422
428
423 $ cat a
429 $ cat a
424 expand $Id: a,v 78e0a02d76aa 1970/01/01 00:00:11 test $
430 expand $Id: a,v 78e0a02d76aa 1970/01/01 00:00:11 test $
425 foo
431 foo
426 do not process $Id:
432 do not process $Id:
427 xxx $
433 xxx $
428 bar
434 bar
429 $ hg --verbose rollback
435 $ hg --verbose rollback
430 repository tip rolled back to revision 2 (undo commit)
436 repository tip rolled back to revision 2 (undo commit)
431 working directory now based on revision 2
437 working directory now based on revision 2
432 overwriting a expanding keywords
438 overwriting a expanding keywords
433 $ hg status a
439 $ hg status a
434 M a
440 M a
435 $ cat a
441 $ cat a
436 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
442 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
437 foo
443 foo
438 do not process $Id:
444 do not process $Id:
439 xxx $
445 xxx $
440 bar
446 bar
441 $ echo '$Id$' > y
447 $ echo '$Id$' > y
442 $ echo '$Id$' > z
448 $ echo '$Id$' > z
443 $ hg add y
449 $ hg add y
444 $ hg commit -Am "rollback only" z
450 $ hg commit -Am "rollback only" z
445 $ cat z
451 $ cat z
446 $Id: z,v 45a5d3adce53 1970/01/01 00:00:00 test $
452 $Id: z,v 45a5d3adce53 1970/01/01 00:00:00 test $
447 $ hg --verbose rollback
453 $ hg --verbose rollback
448 repository tip rolled back to revision 2 (undo commit)
454 repository tip rolled back to revision 2 (undo commit)
449 working directory now based on revision 2
455 working directory now based on revision 2
450 overwriting z shrinking keywords
456 overwriting z shrinking keywords
451
457
452 Only z should be overwritten
458 Only z should be overwritten
453
459
454 $ hg status a y z
460 $ hg status a y z
455 M a
461 M a
456 A y
462 A y
457 A z
463 A z
458 $ cat z
464 $ cat z
459 $Id$
465 $Id$
460 $ hg forget y z
466 $ hg forget y z
461 $ rm y z
467 $ rm y z
462
468
463 record added file alone
469 record added file alone
464
470
465 $ hg -v record -l msg -d '12 2' r<<EOF
471 $ hg -v record -l msg -d '12 2' r<<EOF
466 > y
472 > y
467 > EOF
473 > EOF
468 diff --git a/r b/r
474 diff --git a/r b/r
469 new file mode 100644
475 new file mode 100644
470 examine changes to 'r'? [Ynesfdaq?]
476 examine changes to 'r'? [Ynesfdaq?] y
477
471 r
478 r
472 committed changeset 3:82a2f715724d
479 committed changeset 3:82a2f715724d
473 overwriting r expanding keywords
480 overwriting r expanding keywords
474 - status call required for dirstate.normallookup() check
481 - status call required for dirstate.normallookup() check
475 $ hg status r
482 $ hg status r
476 $ hg --verbose rollback
483 $ hg --verbose rollback
477 repository tip rolled back to revision 2 (undo commit)
484 repository tip rolled back to revision 2 (undo commit)
478 working directory now based on revision 2
485 working directory now based on revision 2
479 overwriting r shrinking keywords
486 overwriting r shrinking keywords
480 $ hg forget r
487 $ hg forget r
481 $ rm msg r
488 $ rm msg r
482 $ hg update -C
489 $ hg update -C
483 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
490 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
484
491
485 record added keyword ignored file
492 record added keyword ignored file
486
493
487 $ echo '$Id$' > i
494 $ echo '$Id$' > i
488 $ hg add i
495 $ hg add i
489 $ hg --verbose record -d '13 1' -m recignored<<EOF
496 $ hg --verbose record -d '13 1' -m recignored<<EOF
490 > y
497 > y
491 > EOF
498 > EOF
492 diff --git a/i b/i
499 diff --git a/i b/i
493 new file mode 100644
500 new file mode 100644
494 examine changes to 'i'? [Ynesfdaq?]
501 examine changes to 'i'? [Ynesfdaq?] y
502
495 i
503 i
496 committed changeset 3:9f40ceb5a072
504 committed changeset 3:9f40ceb5a072
497 $ cat i
505 $ cat i
498 $Id$
506 $Id$
499 $ hg -q rollback
507 $ hg -q rollback
500 $ hg forget i
508 $ hg forget i
501 $ rm i
509 $ rm i
502
510
503 amend
511 amend
504
512
505 $ echo amend >> a
513 $ echo amend >> a
506 $ echo amend >> b
514 $ echo amend >> b
507 $ hg -q commit -d '14 1' -m 'prepare amend'
515 $ hg -q commit -d '14 1' -m 'prepare amend'
508
516
509 $ hg --debug commit --amend -d '15 1' -m 'amend without changes' | grep keywords
517 $ hg --debug commit --amend -d '15 1' -m 'amend without changes' | grep keywords
510 overwriting a expanding keywords
518 overwriting a expanding keywords
511 $ hg -q id
519 $ hg -q id
512 67d8c481a6be
520 67d8c481a6be
513 $ head -1 a
521 $ head -1 a
514 expand $Id: a,v 67d8c481a6be 1970/01/01 00:00:15 test $
522 expand $Id: a,v 67d8c481a6be 1970/01/01 00:00:15 test $
515
523
516 $ hg -q strip -n tip
524 $ hg -q strip -n tip
517
525
518 Test patch queue repo
526 Test patch queue repo
519
527
520 $ hg init --mq
528 $ hg init --mq
521 $ hg qimport -r tip -n mqtest.diff
529 $ hg qimport -r tip -n mqtest.diff
522 $ hg commit --mq -m mqtest
530 $ hg commit --mq -m mqtest
523
531
524 Keywords should not be expanded in patch
532 Keywords should not be expanded in patch
525
533
526 $ cat .hg/patches/mqtest.diff
534 $ cat .hg/patches/mqtest.diff
527 # HG changeset patch
535 # HG changeset patch
528 # User User Name <user@example.com>
536 # User User Name <user@example.com>
529 # Date 1 0
537 # Date 1 0
530 # Thu Jan 01 00:00:01 1970 +0000
538 # Thu Jan 01 00:00:01 1970 +0000
531 # Node ID 40a904bbbe4cd4ab0a1f28411e35db26341a40ad
539 # Node ID 40a904bbbe4cd4ab0a1f28411e35db26341a40ad
532 # Parent ef63ca68695bc9495032c6fda1350c71e6d256e9
540 # Parent ef63ca68695bc9495032c6fda1350c71e6d256e9
533 cndiff
541 cndiff
534
542
535 diff -r ef63ca68695b -r 40a904bbbe4c c
543 diff -r ef63ca68695b -r 40a904bbbe4c c
536 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
544 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
537 +++ b/c Thu Jan 01 00:00:01 1970 +0000
545 +++ b/c Thu Jan 01 00:00:01 1970 +0000
538 @@ -0,0 +1,2 @@
546 @@ -0,0 +1,2 @@
539 +$Id$
547 +$Id$
540 +tests for different changenodes
548 +tests for different changenodes
541
549
542 $ hg qpop
550 $ hg qpop
543 popping mqtest.diff
551 popping mqtest.diff
544 patch queue now empty
552 patch queue now empty
545
553
546 qgoto, implying qpush, should expand
554 qgoto, implying qpush, should expand
547
555
548 $ hg qgoto mqtest.diff
556 $ hg qgoto mqtest.diff
549 applying mqtest.diff
557 applying mqtest.diff
550 now at: mqtest.diff
558 now at: mqtest.diff
551 $ cat c
559 $ cat c
552 $Id: c,v 40a904bbbe4c 1970/01/01 00:00:01 user $
560 $Id: c,v 40a904bbbe4c 1970/01/01 00:00:01 user $
553 tests for different changenodes
561 tests for different changenodes
554 $ hg cat c
562 $ hg cat c
555 $Id: c,v 40a904bbbe4c 1970/01/01 00:00:01 user $
563 $Id: c,v 40a904bbbe4c 1970/01/01 00:00:01 user $
556 tests for different changenodes
564 tests for different changenodes
557
565
558 Keywords should not be expanded in filelog
566 Keywords should not be expanded in filelog
559
567
560 $ hg --config 'extensions.keyword=!' cat c
568 $ hg --config 'extensions.keyword=!' cat c
561 $Id$
569 $Id$
562 tests for different changenodes
570 tests for different changenodes
563
571
564 qpop and move on
572 qpop and move on
565
573
566 $ hg qpop
574 $ hg qpop
567 popping mqtest.diff
575 popping mqtest.diff
568 patch queue now empty
576 patch queue now empty
569
577
570 Copy and show added kwfiles
578 Copy and show added kwfiles
571
579
572 $ hg cp a c
580 $ hg cp a c
573 $ hg kwfiles
581 $ hg kwfiles
574 a
582 a
575 c
583 c
576
584
577 Commit and show expansion in original and copy
585 Commit and show expansion in original and copy
578
586
579 $ hg --debug commit -ma2c -d '1 0' -u 'User Name <user@example.com>'
587 $ hg --debug commit -ma2c -d '1 0' -u 'User Name <user@example.com>'
580 invalid branchheads cache (served): tip differs
588 invalid branchheads cache (served): tip differs
581 c
589 c
582 c: copy a:0045e12f6c5791aac80ca6cbfd97709a88307292
590 c: copy a:0045e12f6c5791aac80ca6cbfd97709a88307292
583 invalid branchheads cache (served): tip differs
591 invalid branchheads cache (served): tip differs
584 overwriting c expanding keywords
592 overwriting c expanding keywords
585 committed changeset 2:25736cf2f5cbe41f6be4e6784ef6ecf9f3bbcc7d
593 committed changeset 2:25736cf2f5cbe41f6be4e6784ef6ecf9f3bbcc7d
586 $ cat a c
594 $ cat a c
587 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
595 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
588 do not process $Id:
596 do not process $Id:
589 xxx $
597 xxx $
590 expand $Id: c,v 25736cf2f5cb 1970/01/01 00:00:01 user $
598 expand $Id: c,v 25736cf2f5cb 1970/01/01 00:00:01 user $
591 do not process $Id:
599 do not process $Id:
592 xxx $
600 xxx $
593
601
594 Touch copied c and check its status
602 Touch copied c and check its status
595
603
596 $ touch c
604 $ touch c
597 $ hg status
605 $ hg status
598
606
599 Copy kwfile to keyword ignored file unexpanding keywords
607 Copy kwfile to keyword ignored file unexpanding keywords
600
608
601 $ hg --verbose copy a i
609 $ hg --verbose copy a i
602 copying a to i
610 copying a to i
603 overwriting i shrinking keywords
611 overwriting i shrinking keywords
604 $ head -n 1 i
612 $ head -n 1 i
605 expand $Id$
613 expand $Id$
606 $ hg forget i
614 $ hg forget i
607 $ rm i
615 $ rm i
608
616
609 Copy ignored file to ignored file: no overwriting
617 Copy ignored file to ignored file: no overwriting
610
618
611 $ hg --verbose copy b i
619 $ hg --verbose copy b i
612 copying b to i
620 copying b to i
613 $ hg forget i
621 $ hg forget i
614 $ rm i
622 $ rm i
615
623
616 cp symlink file; hg cp -A symlink file (part1)
624 cp symlink file; hg cp -A symlink file (part1)
617 - copied symlink points to kwfile: overwrite
625 - copied symlink points to kwfile: overwrite
618
626
619 #if symlink
627 #if symlink
620 $ cp sym i
628 $ cp sym i
621 $ ls -l i
629 $ ls -l i
622 -rw-r--r--* (glob)
630 -rw-r--r--* (glob)
623 $ head -1 i
631 $ head -1 i
624 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
632 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
625 $ hg copy --after --verbose sym i
633 $ hg copy --after --verbose sym i
626 copying sym to i
634 copying sym to i
627 overwriting i shrinking keywords
635 overwriting i shrinking keywords
628 $ head -1 i
636 $ head -1 i
629 expand $Id$
637 expand $Id$
630 $ hg forget i
638 $ hg forget i
631 $ rm i
639 $ rm i
632 #endif
640 #endif
633
641
634 Test different options of hg kwfiles
642 Test different options of hg kwfiles
635
643
636 $ hg kwfiles
644 $ hg kwfiles
637 a
645 a
638 c
646 c
639 $ hg -v kwfiles --ignore
647 $ hg -v kwfiles --ignore
640 I b
648 I b
641 I sym
649 I sym
642 $ hg kwfiles --all
650 $ hg kwfiles --all
643 K a
651 K a
644 K c
652 K c
645 I b
653 I b
646 I sym
654 I sym
647
655
648 Diff specific revision
656 Diff specific revision
649
657
650 $ hg diff --rev 1
658 $ hg diff --rev 1
651 diff -r ef63ca68695b c
659 diff -r ef63ca68695b c
652 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
660 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
653 +++ b/c * (glob)
661 +++ b/c * (glob)
654 @@ -0,0 +1,3 @@
662 @@ -0,0 +1,3 @@
655 +expand $Id$
663 +expand $Id$
656 +do not process $Id:
664 +do not process $Id:
657 +xxx $
665 +xxx $
658
666
659 Status after rollback:
667 Status after rollback:
660
668
661 $ hg rollback
669 $ hg rollback
662 repository tip rolled back to revision 1 (undo commit)
670 repository tip rolled back to revision 1 (undo commit)
663 working directory now based on revision 1
671 working directory now based on revision 1
664 $ hg status
672 $ hg status
665 A c
673 A c
666 $ hg update --clean
674 $ hg update --clean
667 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
675 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
668
676
669 #if symlink
677 #if symlink
670
678
671 cp symlink file; hg cp -A symlink file (part2)
679 cp symlink file; hg cp -A symlink file (part2)
672 - copied symlink points to kw ignored file: do not overwrite
680 - copied symlink points to kw ignored file: do not overwrite
673
681
674 $ cat a > i
682 $ cat a > i
675 $ ln -s i symignored
683 $ ln -s i symignored
676 $ hg commit -Am 'fake expansion in ignored and symlink' i symignored
684 $ hg commit -Am 'fake expansion in ignored and symlink' i symignored
677 $ cp symignored x
685 $ cp symignored x
678 $ hg copy --after --verbose symignored x
686 $ hg copy --after --verbose symignored x
679 copying symignored to x
687 copying symignored to x
680 $ head -n 1 x
688 $ head -n 1 x
681 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
689 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
682 $ hg forget x
690 $ hg forget x
683 $ rm x
691 $ rm x
684
692
685 $ hg rollback
693 $ hg rollback
686 repository tip rolled back to revision 1 (undo commit)
694 repository tip rolled back to revision 1 (undo commit)
687 working directory now based on revision 1
695 working directory now based on revision 1
688 $ hg update --clean
696 $ hg update --clean
689 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
697 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
690 $ rm i symignored
698 $ rm i symignored
691
699
692 #endif
700 #endif
693
701
694 Custom keywordmaps as argument to kwdemo
702 Custom keywordmaps as argument to kwdemo
695
703
696 $ hg --quiet kwdemo "Xinfo = {author}: {desc}"
704 $ hg --quiet kwdemo "Xinfo = {author}: {desc}"
697 [extensions]
705 [extensions]
698 keyword =
706 keyword =
699 [keyword]
707 [keyword]
700 ** =
708 ** =
701 b = ignore
709 b = ignore
702 demo.txt =
710 demo.txt =
703 i = ignore
711 i = ignore
704 [keywordset]
712 [keywordset]
705 svn = False
713 svn = False
706 [keywordmaps]
714 [keywordmaps]
707 Xinfo = {author}: {desc}
715 Xinfo = {author}: {desc}
708 $Xinfo: test: hg keyword configuration and expansion example $
716 $Xinfo: test: hg keyword configuration and expansion example $
709
717
710 Configure custom keywordmaps
718 Configure custom keywordmaps
711
719
712 $ cat <<EOF >>$HGRCPATH
720 $ cat <<EOF >>$HGRCPATH
713 > [keywordmaps]
721 > [keywordmaps]
714 > Id = {file} {node|short} {date|rfc822date} {author|user}
722 > Id = {file} {node|short} {date|rfc822date} {author|user}
715 > Xinfo = {author}: {desc}
723 > Xinfo = {author}: {desc}
716 > EOF
724 > EOF
717
725
718 Cat and hg cat files before custom expansion
726 Cat and hg cat files before custom expansion
719
727
720 $ cat a b
728 $ cat a b
721 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
729 expand $Id: a,v ef63ca68695b 1970/01/01 00:00:00 user $
722 do not process $Id:
730 do not process $Id:
723 xxx $
731 xxx $
724 ignore $Id$
732 ignore $Id$
725 $ hg cat sym a b && echo
733 $ hg cat sym a b && echo
726 expand $Id: a ef63ca68695b Thu, 01 Jan 1970 00:00:00 +0000 user $
734 expand $Id: a ef63ca68695b Thu, 01 Jan 1970 00:00:00 +0000 user $
727 do not process $Id:
735 do not process $Id:
728 xxx $
736 xxx $
729 ignore $Id$
737 ignore $Id$
730 a
738 a
731
739
732 Write custom keyword and prepare multi-line commit message
740 Write custom keyword and prepare multi-line commit message
733
741
734 $ echo '$Xinfo$' >> a
742 $ echo '$Xinfo$' >> a
735 $ cat <<EOF >> log
743 $ cat <<EOF >> log
736 > firstline
744 > firstline
737 > secondline
745 > secondline
738 > EOF
746 > EOF
739
747
740 Interrupted commit should not change state
748 Interrupted commit should not change state
741
749
742 $ hg commit
750 $ hg commit
743 abort: empty commit message
751 abort: empty commit message
744 [255]
752 [255]
745 $ hg status
753 $ hg status
746 M a
754 M a
747 ? c
755 ? c
748 ? log
756 ? log
749
757
750 Commit with multi-line message and custom expansion
758 Commit with multi-line message and custom expansion
751
759
752 |Note:
760 |Note:
753 |
761 |
754 | After the last rollback, the "served" branchheads cache became invalid, but
762 | After the last rollback, the "served" branchheads cache became invalid, but
755 | all changesets in the repo were public. For filtering this means:
763 | all changesets in the repo were public. For filtering this means:
756 | "immutable" == "served" == ΓΈ.
764 | "immutable" == "served" == ΓΈ.
757 |
765 |
758 | As the "served" cache is invalid, we fall back to the "immutable" cache. But
766 | As the "served" cache is invalid, we fall back to the "immutable" cache. But
759 | no update is needed between "immutable" and "served" and the "served" cache
767 | no update is needed between "immutable" and "served" and the "served" cache
760 | is not updated on disk. The on-disk version therefore stays invalid for some
768 | is not updated on disk. The on-disk version therefore stays invalid for some
761 | time. This explains why the "served" branchheads cache is detected as
769 | time. This explains why the "served" branchheads cache is detected as
762 | invalid here.
770 | invalid here.
763
771
764 $ hg --debug commit -l log -d '2 0' -u 'User Name <user@example.com>'
772 $ hg --debug commit -l log -d '2 0' -u 'User Name <user@example.com>'
765 invalid branchheads cache (served): tip differs
773 invalid branchheads cache (served): tip differs
766 a
774 a
767 invalid branchheads cache (served): tip differs
775 invalid branchheads cache (served): tip differs
768 overwriting a expanding keywords
776 overwriting a expanding keywords
769 committed changeset 2:bb948857c743469b22bbf51f7ec8112279ca5d83
777 committed changeset 2:bb948857c743469b22bbf51f7ec8112279ca5d83
770 $ rm log
778 $ rm log
771
779
772 Stat, verify and show custom expansion (firstline)
780 Stat, verify and show custom expansion (firstline)
773
781
774 $ hg status
782 $ hg status
775 ? c
783 ? c
776 $ hg verify
784 $ hg verify
777 checking changesets
785 checking changesets
778 checking manifests
786 checking manifests
779 crosschecking files in changesets and manifests
787 crosschecking files in changesets and manifests
780 checking files
788 checking files
781 3 files, 3 changesets, 4 total revisions
789 3 files, 3 changesets, 4 total revisions
782 $ cat a b
790 $ cat a b
783 expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $
791 expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $
784 do not process $Id:
792 do not process $Id:
785 xxx $
793 xxx $
786 $Xinfo: User Name <user@example.com>: firstline $
794 $Xinfo: User Name <user@example.com>: firstline $
787 ignore $Id$
795 ignore $Id$
788 $ hg cat sym a b && echo
796 $ hg cat sym a b && echo
789 expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $
797 expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $
790 do not process $Id:
798 do not process $Id:
791 xxx $
799 xxx $
792 $Xinfo: User Name <user@example.com>: firstline $
800 $Xinfo: User Name <user@example.com>: firstline $
793 ignore $Id$
801 ignore $Id$
794 a
802 a
795
803
796 annotate
804 annotate
797
805
798 $ hg annotate a
806 $ hg annotate a
799 1: expand $Id$
807 1: expand $Id$
800 1: do not process $Id:
808 1: do not process $Id:
801 1: xxx $
809 1: xxx $
802 2: $Xinfo$
810 2: $Xinfo$
803
811
804 remove with status checks
812 remove with status checks
805
813
806 $ hg debugrebuildstate
814 $ hg debugrebuildstate
807 $ hg remove a
815 $ hg remove a
808 $ hg --debug commit -m rma
816 $ hg --debug commit -m rma
809 committed changeset 3:d14c712653769de926994cf7fbb06c8fbd68f012
817 committed changeset 3:d14c712653769de926994cf7fbb06c8fbd68f012
810 $ hg status
818 $ hg status
811 ? c
819 ? c
812
820
813 Rollback, revert, and check expansion
821 Rollback, revert, and check expansion
814
822
815 $ hg rollback
823 $ hg rollback
816 repository tip rolled back to revision 2 (undo commit)
824 repository tip rolled back to revision 2 (undo commit)
817 working directory now based on revision 2
825 working directory now based on revision 2
818 $ hg status
826 $ hg status
819 R a
827 R a
820 ? c
828 ? c
821 $ hg revert --no-backup --rev tip a
829 $ hg revert --no-backup --rev tip a
822 $ cat a
830 $ cat a
823 expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $
831 expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $
824 do not process $Id:
832 do not process $Id:
825 xxx $
833 xxx $
826 $Xinfo: User Name <user@example.com>: firstline $
834 $Xinfo: User Name <user@example.com>: firstline $
827
835
828 Clone to test global and local configurations
836 Clone to test global and local configurations
829
837
830 $ cd ..
838 $ cd ..
831
839
832 Expansion in destination with global configuration
840 Expansion in destination with global configuration
833
841
834 $ hg --quiet clone Test globalconf
842 $ hg --quiet clone Test globalconf
835 $ cat globalconf/a
843 $ cat globalconf/a
836 expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $
844 expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $
837 do not process $Id:
845 do not process $Id:
838 xxx $
846 xxx $
839 $Xinfo: User Name <user@example.com>: firstline $
847 $Xinfo: User Name <user@example.com>: firstline $
840
848
841 No expansion in destination with local configuration in origin only
849 No expansion in destination with local configuration in origin only
842
850
843 $ hg --quiet --config 'keyword.**=ignore' clone Test localconf
851 $ hg --quiet --config 'keyword.**=ignore' clone Test localconf
844 $ cat localconf/a
852 $ cat localconf/a
845 expand $Id$
853 expand $Id$
846 do not process $Id:
854 do not process $Id:
847 xxx $
855 xxx $
848 $Xinfo$
856 $Xinfo$
849
857
850 Clone to test incoming
858 Clone to test incoming
851
859
852 $ hg clone -r1 Test Test-a
860 $ hg clone -r1 Test Test-a
853 adding changesets
861 adding changesets
854 adding manifests
862 adding manifests
855 adding file changes
863 adding file changes
856 added 2 changesets with 3 changes to 3 files
864 added 2 changesets with 3 changes to 3 files
857 updating to branch default
865 updating to branch default
858 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
866 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
859 $ cd Test-a
867 $ cd Test-a
860 $ cat <<EOF >> .hg/hgrc
868 $ cat <<EOF >> .hg/hgrc
861 > [paths]
869 > [paths]
862 > default = ../Test
870 > default = ../Test
863 > EOF
871 > EOF
864 $ hg incoming
872 $ hg incoming
865 comparing with $TESTTMP/Test (glob)
873 comparing with $TESTTMP/Test (glob)
866 searching for changes
874 searching for changes
867 changeset: 2:bb948857c743
875 changeset: 2:bb948857c743
868 tag: tip
876 tag: tip
869 user: User Name <user@example.com>
877 user: User Name <user@example.com>
870 date: Thu Jan 01 00:00:02 1970 +0000
878 date: Thu Jan 01 00:00:02 1970 +0000
871 summary: firstline
879 summary: firstline
872
880
873 Imported patch should not be rejected
881 Imported patch should not be rejected
874
882
875 >>> import re
883 >>> import re
876 >>> text = re.sub(r'(Id.*)', r'\1 rejecttest', open('a').read())
884 >>> text = re.sub(r'(Id.*)', r'\1 rejecttest', open('a').read())
877 >>> open('a', 'wb').write(text)
885 >>> open('a', 'wb').write(text)
878 $ hg --debug commit -m'rejects?' -d '3 0' -u 'User Name <user@example.com>'
886 $ hg --debug commit -m'rejects?' -d '3 0' -u 'User Name <user@example.com>'
879 a
887 a
880 overwriting a expanding keywords
888 overwriting a expanding keywords
881 committed changeset 2:85e279d709ffc28c9fdd1b868570985fc3d87082
889 committed changeset 2:85e279d709ffc28c9fdd1b868570985fc3d87082
882 $ hg export -o ../rejecttest.diff tip
890 $ hg export -o ../rejecttest.diff tip
883 $ cd ../Test
891 $ cd ../Test
884 $ hg import ../rejecttest.diff
892 $ hg import ../rejecttest.diff
885 applying ../rejecttest.diff
893 applying ../rejecttest.diff
886 $ cat a b
894 $ cat a b
887 expand $Id: a 4e0994474d25 Thu, 01 Jan 1970 00:00:03 +0000 user $ rejecttest
895 expand $Id: a 4e0994474d25 Thu, 01 Jan 1970 00:00:03 +0000 user $ rejecttest
888 do not process $Id: rejecttest
896 do not process $Id: rejecttest
889 xxx $
897 xxx $
890 $Xinfo: User Name <user@example.com>: rejects? $
898 $Xinfo: User Name <user@example.com>: rejects? $
891 ignore $Id$
899 ignore $Id$
892
900
893 $ hg rollback
901 $ hg rollback
894 repository tip rolled back to revision 2 (undo import)
902 repository tip rolled back to revision 2 (undo import)
895 working directory now based on revision 2
903 working directory now based on revision 2
896 $ hg update --clean
904 $ hg update --clean
897 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
905 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
898
906
899 kwexpand/kwshrink on selected files
907 kwexpand/kwshrink on selected files
900
908
901 $ mkdir x
909 $ mkdir x
902 $ hg copy a x/a
910 $ hg copy a x/a
903 $ hg --verbose kwshrink a
911 $ hg --verbose kwshrink a
904 overwriting a shrinking keywords
912 overwriting a shrinking keywords
905 - sleep required for dirstate.normal() check
913 - sleep required for dirstate.normal() check
906 $ sleep 1
914 $ sleep 1
907 $ hg status a
915 $ hg status a
908 $ hg --verbose kwexpand a
916 $ hg --verbose kwexpand a
909 overwriting a expanding keywords
917 overwriting a expanding keywords
910 $ hg status a
918 $ hg status a
911
919
912 kwexpand x/a should abort
920 kwexpand x/a should abort
913
921
914 $ hg --verbose kwexpand x/a
922 $ hg --verbose kwexpand x/a
915 abort: outstanding uncommitted changes
923 abort: outstanding uncommitted changes
916 [255]
924 [255]
917 $ cd x
925 $ cd x
918 $ hg --debug commit -m xa -d '3 0' -u 'User Name <user@example.com>'
926 $ hg --debug commit -m xa -d '3 0' -u 'User Name <user@example.com>'
919 x/a
927 x/a
920 x/a: copy a:779c764182ce5d43e2b1eb66ce06d7b47bfe342e
928 x/a: copy a:779c764182ce5d43e2b1eb66ce06d7b47bfe342e
921 overwriting x/a expanding keywords
929 overwriting x/a expanding keywords
922 committed changeset 3:b4560182a3f9a358179fd2d835c15e9da379c1e4
930 committed changeset 3:b4560182a3f9a358179fd2d835c15e9da379c1e4
923 $ cat a
931 $ cat a
924 expand $Id: x/a b4560182a3f9 Thu, 01 Jan 1970 00:00:03 +0000 user $
932 expand $Id: x/a b4560182a3f9 Thu, 01 Jan 1970 00:00:03 +0000 user $
925 do not process $Id:
933 do not process $Id:
926 xxx $
934 xxx $
927 $Xinfo: User Name <user@example.com>: xa $
935 $Xinfo: User Name <user@example.com>: xa $
928
936
929 kwshrink a inside directory x
937 kwshrink a inside directory x
930
938
931 $ hg --verbose kwshrink a
939 $ hg --verbose kwshrink a
932 overwriting x/a shrinking keywords
940 overwriting x/a shrinking keywords
933 $ cat a
941 $ cat a
934 expand $Id$
942 expand $Id$
935 do not process $Id:
943 do not process $Id:
936 xxx $
944 xxx $
937 $Xinfo$
945 $Xinfo$
938 $ cd ..
946 $ cd ..
939
947
940 kwexpand nonexistent
948 kwexpand nonexistent
941
949
942 $ hg kwexpand nonexistent
950 $ hg kwexpand nonexistent
943 nonexistent:* (glob)
951 nonexistent:* (glob)
944
952
945
953
946 #if serve
954 #if serve
947 hg serve
955 hg serve
948 - expand with hgweb file
956 - expand with hgweb file
949 - no expansion with hgweb annotate/changeset/filediff
957 - no expansion with hgweb annotate/changeset/filediff
950 - check errors
958 - check errors
951
959
952 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
960 $ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
953 $ cat hg.pid >> $DAEMON_PIDS
961 $ cat hg.pid >> $DAEMON_PIDS
954 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'file/tip/a/?style=raw'
962 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'file/tip/a/?style=raw'
955 200 Script output follows
963 200 Script output follows
956
964
957 expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $
965 expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $
958 do not process $Id:
966 do not process $Id:
959 xxx $
967 xxx $
960 $Xinfo: User Name <user@example.com>: firstline $
968 $Xinfo: User Name <user@example.com>: firstline $
961 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'annotate/tip/a/?style=raw'
969 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'annotate/tip/a/?style=raw'
962 200 Script output follows
970 200 Script output follows
963
971
964
972
965 user@1: expand $Id$
973 user@1: expand $Id$
966 user@1: do not process $Id:
974 user@1: do not process $Id:
967 user@1: xxx $
975 user@1: xxx $
968 user@2: $Xinfo$
976 user@2: $Xinfo$
969
977
970
978
971
979
972
980
973 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'rev/tip/?style=raw'
981 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'rev/tip/?style=raw'
974 200 Script output follows
982 200 Script output follows
975
983
976
984
977 # HG changeset patch
985 # HG changeset patch
978 # User User Name <user@example.com>
986 # User User Name <user@example.com>
979 # Date 3 0
987 # Date 3 0
980 # Node ID b4560182a3f9a358179fd2d835c15e9da379c1e4
988 # Node ID b4560182a3f9a358179fd2d835c15e9da379c1e4
981 # Parent bb948857c743469b22bbf51f7ec8112279ca5d83
989 # Parent bb948857c743469b22bbf51f7ec8112279ca5d83
982 xa
990 xa
983
991
984 diff -r bb948857c743 -r b4560182a3f9 x/a
992 diff -r bb948857c743 -r b4560182a3f9 x/a
985 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
993 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
986 +++ b/x/a Thu Jan 01 00:00:03 1970 +0000
994 +++ b/x/a Thu Jan 01 00:00:03 1970 +0000
987 @@ -0,0 +1,4 @@
995 @@ -0,0 +1,4 @@
988 +expand $Id$
996 +expand $Id$
989 +do not process $Id:
997 +do not process $Id:
990 +xxx $
998 +xxx $
991 +$Xinfo$
999 +$Xinfo$
992
1000
993 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'diff/bb948857c743/a?style=raw'
1001 $ "$TESTDIR/get-with-headers.py" localhost:$HGPORT 'diff/bb948857c743/a?style=raw'
994 200 Script output follows
1002 200 Script output follows
995
1003
996
1004
997 diff -r ef63ca68695b -r bb948857c743 a
1005 diff -r ef63ca68695b -r bb948857c743 a
998 --- a/a Thu Jan 01 00:00:00 1970 +0000
1006 --- a/a Thu Jan 01 00:00:00 1970 +0000
999 +++ b/a Thu Jan 01 00:00:02 1970 +0000
1007 +++ b/a Thu Jan 01 00:00:02 1970 +0000
1000 @@ -1,3 +1,4 @@
1008 @@ -1,3 +1,4 @@
1001 expand $Id$
1009 expand $Id$
1002 do not process $Id:
1010 do not process $Id:
1003 xxx $
1011 xxx $
1004 +$Xinfo$
1012 +$Xinfo$
1005
1013
1006
1014
1007
1015
1008
1016
1009 $ cat errors.log
1017 $ cat errors.log
1010 #endif
1018 #endif
1011
1019
1012 Prepare merge and resolve tests
1020 Prepare merge and resolve tests
1013
1021
1014 $ echo '$Id$' > m
1022 $ echo '$Id$' > m
1015 $ hg add m
1023 $ hg add m
1016 $ hg commit -m 4kw
1024 $ hg commit -m 4kw
1017 $ echo foo >> m
1025 $ echo foo >> m
1018 $ hg commit -m 5foo
1026 $ hg commit -m 5foo
1019
1027
1020 simplemerge
1028 simplemerge
1021
1029
1022 $ hg update 4
1030 $ hg update 4
1023 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1031 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1024 $ echo foo >> m
1032 $ echo foo >> m
1025 $ hg commit -m 6foo
1033 $ hg commit -m 6foo
1026 created new head
1034 created new head
1027 $ hg merge
1035 $ hg merge
1028 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1036 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
1029 (branch merge, don't forget to commit)
1037 (branch merge, don't forget to commit)
1030 $ hg commit -m simplemerge
1038 $ hg commit -m simplemerge
1031 $ cat m
1039 $ cat m
1032 $Id: m 27d48ee14f67 Thu, 01 Jan 1970 00:00:00 +0000 test $
1040 $Id: m 27d48ee14f67 Thu, 01 Jan 1970 00:00:00 +0000 test $
1033 foo
1041 foo
1034
1042
1035 conflict: keyword should stay outside conflict zone
1043 conflict: keyword should stay outside conflict zone
1036
1044
1037 $ hg update 4
1045 $ hg update 4
1038 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1046 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1039 $ echo bar >> m
1047 $ echo bar >> m
1040 $ hg commit -m 8bar
1048 $ hg commit -m 8bar
1041 created new head
1049 created new head
1042 $ hg merge
1050 $ hg merge
1043 merging m
1051 merging m
1044 warning: conflicts during merge.
1052 warning: conflicts during merge.
1045 merging m incomplete! (edit conflicts, then use 'hg resolve --mark')
1053 merging m incomplete! (edit conflicts, then use 'hg resolve --mark')
1046 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
1054 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
1047 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
1055 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
1048 [1]
1056 [1]
1049 $ cat m
1057 $ cat m
1050 $Id$
1058 $Id$
1051 <<<<<<< local: 88a80c8d172e - test: 8bar
1059 <<<<<<< local: 88a80c8d172e - test: 8bar
1052 bar
1060 bar
1053 =======
1061 =======
1054 foo
1062 foo
1055 >>>>>>> other: 85d2d2d732a5 - test: simplemerge
1063 >>>>>>> other: 85d2d2d732a5 - test: simplemerge
1056
1064
1057 resolve to local
1065 resolve to local
1058
1066
1059 $ HGMERGE=internal:local hg resolve -a
1067 $ HGMERGE=internal:local hg resolve -a
1060 (no more unresolved files)
1068 (no more unresolved files)
1061 $ hg commit -m localresolve
1069 $ hg commit -m localresolve
1062 $ cat m
1070 $ cat m
1063 $Id: m 800511b3a22d Thu, 01 Jan 1970 00:00:00 +0000 test $
1071 $Id: m 800511b3a22d Thu, 01 Jan 1970 00:00:00 +0000 test $
1064 bar
1072 bar
1065
1073
1066 Test restricted mode with transplant -b
1074 Test restricted mode with transplant -b
1067
1075
1068 $ hg update 6
1076 $ hg update 6
1069 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1077 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1070 $ hg branch foo
1078 $ hg branch foo
1071 marked working directory as branch foo
1079 marked working directory as branch foo
1072 (branches are permanent and global, did you want a bookmark?)
1080 (branches are permanent and global, did you want a bookmark?)
1073 $ mv a a.bak
1081 $ mv a a.bak
1074 $ echo foobranch > a
1082 $ echo foobranch > a
1075 $ cat a.bak >> a
1083 $ cat a.bak >> a
1076 $ rm a.bak
1084 $ rm a.bak
1077 $ hg commit -m 9foobranch
1085 $ hg commit -m 9foobranch
1078 $ hg update default
1086 $ hg update default
1079 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1087 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
1080 $ hg -y transplant -b foo tip
1088 $ hg -y transplant -b foo tip
1081 applying 4aa30d025d50
1089 applying 4aa30d025d50
1082 4aa30d025d50 transplanted to e00abbf63521
1090 4aa30d025d50 transplanted to e00abbf63521
1083
1091
1084 Expansion in changeset but not in file
1092 Expansion in changeset but not in file
1085
1093
1086 $ hg tip -p
1094 $ hg tip -p
1087 changeset: 11:e00abbf63521
1095 changeset: 11:e00abbf63521
1088 tag: tip
1096 tag: tip
1089 parent: 9:800511b3a22d
1097 parent: 9:800511b3a22d
1090 user: test
1098 user: test
1091 date: Thu Jan 01 00:00:00 1970 +0000
1099 date: Thu Jan 01 00:00:00 1970 +0000
1092 summary: 9foobranch
1100 summary: 9foobranch
1093
1101
1094 diff -r 800511b3a22d -r e00abbf63521 a
1102 diff -r 800511b3a22d -r e00abbf63521 a
1095 --- a/a Thu Jan 01 00:00:00 1970 +0000
1103 --- a/a Thu Jan 01 00:00:00 1970 +0000
1096 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1104 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1097 @@ -1,3 +1,4 @@
1105 @@ -1,3 +1,4 @@
1098 +foobranch
1106 +foobranch
1099 expand $Id$
1107 expand $Id$
1100 do not process $Id:
1108 do not process $Id:
1101 xxx $
1109 xxx $
1102
1110
1103 $ head -n 2 a
1111 $ head -n 2 a
1104 foobranch
1112 foobranch
1105 expand $Id: a e00abbf63521 Thu, 01 Jan 1970 00:00:00 +0000 test $
1113 expand $Id: a e00abbf63521 Thu, 01 Jan 1970 00:00:00 +0000 test $
1106
1114
1107 Turn off expansion
1115 Turn off expansion
1108
1116
1109 $ hg -q rollback
1117 $ hg -q rollback
1110 $ hg -q update -C
1118 $ hg -q update -C
1111
1119
1112 kwshrink with unknown file u
1120 kwshrink with unknown file u
1113
1121
1114 $ cp a u
1122 $ cp a u
1115 $ hg --verbose kwshrink
1123 $ hg --verbose kwshrink
1116 overwriting a shrinking keywords
1124 overwriting a shrinking keywords
1117 overwriting m shrinking keywords
1125 overwriting m shrinking keywords
1118 overwriting x/a shrinking keywords
1126 overwriting x/a shrinking keywords
1119
1127
1120 Keywords shrunk in working directory, but not yet disabled
1128 Keywords shrunk in working directory, but not yet disabled
1121 - cat shows unexpanded keywords
1129 - cat shows unexpanded keywords
1122 - hg cat shows expanded keywords
1130 - hg cat shows expanded keywords
1123
1131
1124 $ cat a b
1132 $ cat a b
1125 expand $Id$
1133 expand $Id$
1126 do not process $Id:
1134 do not process $Id:
1127 xxx $
1135 xxx $
1128 $Xinfo$
1136 $Xinfo$
1129 ignore $Id$
1137 ignore $Id$
1130 $ hg cat sym a b && echo
1138 $ hg cat sym a b && echo
1131 expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $
1139 expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $
1132 do not process $Id:
1140 do not process $Id:
1133 xxx $
1141 xxx $
1134 $Xinfo: User Name <user@example.com>: firstline $
1142 $Xinfo: User Name <user@example.com>: firstline $
1135 ignore $Id$
1143 ignore $Id$
1136 a
1144 a
1137
1145
1138 Now disable keyword expansion
1146 Now disable keyword expansion
1139
1147
1140 $ cp $HGRCPATH $HGRCPATH.backup
1148 $ cp $HGRCPATH $HGRCPATH.backup
1141 $ rm "$HGRCPATH"
1149 $ rm "$HGRCPATH"
1142 $ cat a b
1150 $ cat a b
1143 expand $Id$
1151 expand $Id$
1144 do not process $Id:
1152 do not process $Id:
1145 xxx $
1153 xxx $
1146 $Xinfo$
1154 $Xinfo$
1147 ignore $Id$
1155 ignore $Id$
1148 $ hg cat sym a b && echo
1156 $ hg cat sym a b && echo
1149 expand $Id$
1157 expand $Id$
1150 do not process $Id:
1158 do not process $Id:
1151 xxx $
1159 xxx $
1152 $Xinfo$
1160 $Xinfo$
1153 ignore $Id$
1161 ignore $Id$
1154 a
1162 a
1155
1163
1156 enable keyword expansion again
1164 enable keyword expansion again
1157
1165
1158 $ cat $HGRCPATH.backup >> $HGRCPATH
1166 $ cat $HGRCPATH.backup >> $HGRCPATH
1159
1167
1160 Test restricted mode with unshelve
1168 Test restricted mode with unshelve
1161
1169
1162 $ cat <<EOF >> $HGRCPATH
1170 $ cat <<EOF >> $HGRCPATH
1163 > [extensions]
1171 > [extensions]
1164 > shelve =
1172 > shelve =
1165 > EOF
1173 > EOF
1166
1174
1167 $ echo xxxx >> a
1175 $ echo xxxx >> a
1168 $ hg diff
1176 $ hg diff
1169 diff -r 800511b3a22d a
1177 diff -r 800511b3a22d a
1170 --- a/a Thu Jan 01 00:00:00 1970 +0000
1178 --- a/a Thu Jan 01 00:00:00 1970 +0000
1171 +++ b/a * (glob)
1179 +++ b/a * (glob)
1172 @@ -2,3 +2,4 @@
1180 @@ -2,3 +2,4 @@
1173 do not process $Id:
1181 do not process $Id:
1174 xxx $
1182 xxx $
1175 $Xinfo$
1183 $Xinfo$
1176 +xxxx
1184 +xxxx
1177 $ hg shelve -q --name tmp
1185 $ hg shelve -q --name tmp
1178 $ hg shelve --list --patch
1186 $ hg shelve --list --patch
1179 tmp (*) changes to 'localresolve' (glob)
1187 tmp (*) changes to 'localresolve' (glob)
1180
1188
1181 diff --git a/a b/a
1189 diff --git a/a b/a
1182 --- a/a
1190 --- a/a
1183 +++ b/a
1191 +++ b/a
1184 @@ -2,3 +2,4 @@
1192 @@ -2,3 +2,4 @@
1185 do not process $Id:
1193 do not process $Id:
1186 xxx $
1194 xxx $
1187 $Xinfo$
1195 $Xinfo$
1188 +xxxx
1196 +xxxx
1189
1197
1190 $ hg update -q -C 10
1198 $ hg update -q -C 10
1191 $ hg unshelve -q tmp
1199 $ hg unshelve -q tmp
1192 $ hg diff
1200 $ hg diff
1193 diff -r 4aa30d025d50 a
1201 diff -r 4aa30d025d50 a
1194 --- a/a Thu Jan 01 00:00:00 1970 +0000
1202 --- a/a Thu Jan 01 00:00:00 1970 +0000
1195 +++ b/a * (glob)
1203 +++ b/a * (glob)
1196 @@ -3,3 +3,4 @@
1204 @@ -3,3 +3,4 @@
1197 do not process $Id:
1205 do not process $Id:
1198 xxx $
1206 xxx $
1199 $Xinfo$
1207 $Xinfo$
1200 +xxxx
1208 +xxxx
1201
1209
1202 Test restricted mode with rebase
1210 Test restricted mode with rebase
1203
1211
1204 $ cat <<EOF >> $HGRCPATH
1212 $ cat <<EOF >> $HGRCPATH
1205 > [extensions]
1213 > [extensions]
1206 > rebase =
1214 > rebase =
1207 > EOF
1215 > EOF
1208
1216
1209 $ hg update -q -C 9
1217 $ hg update -q -C 9
1210
1218
1211 $ echo xxxx >> a
1219 $ echo xxxx >> a
1212 $ hg commit -m '#11'
1220 $ hg commit -m '#11'
1213 $ hg diff -c 11
1221 $ hg diff -c 11
1214 diff -r 800511b3a22d -r b07670694489 a
1222 diff -r 800511b3a22d -r b07670694489 a
1215 --- a/a Thu Jan 01 00:00:00 1970 +0000
1223 --- a/a Thu Jan 01 00:00:00 1970 +0000
1216 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1224 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1217 @@ -2,3 +2,4 @@
1225 @@ -2,3 +2,4 @@
1218 do not process $Id:
1226 do not process $Id:
1219 xxx $
1227 xxx $
1220 $Xinfo$
1228 $Xinfo$
1221 +xxxx
1229 +xxxx
1222
1230
1223 $ hg diff -c 10
1231 $ hg diff -c 10
1224 diff -r 27d48ee14f67 -r 4aa30d025d50 a
1232 diff -r 27d48ee14f67 -r 4aa30d025d50 a
1225 --- a/a Thu Jan 01 00:00:00 1970 +0000
1233 --- a/a Thu Jan 01 00:00:00 1970 +0000
1226 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1234 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1227 @@ -1,3 +1,4 @@
1235 @@ -1,3 +1,4 @@
1228 +foobranch
1236 +foobranch
1229 expand $Id$
1237 expand $Id$
1230 do not process $Id:
1238 do not process $Id:
1231 xxx $
1239 xxx $
1232
1240
1233 $ hg rebase -q -s 10 -d 11 --keep
1241 $ hg rebase -q -s 10 -d 11 --keep
1234 $ hg diff -r 9 -r 12 a
1242 $ hg diff -r 9 -r 12 a
1235 diff -r 800511b3a22d -r 1939b927726c a
1243 diff -r 800511b3a22d -r 1939b927726c a
1236 --- a/a Thu Jan 01 00:00:00 1970 +0000
1244 --- a/a Thu Jan 01 00:00:00 1970 +0000
1237 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1245 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1238 @@ -1,4 +1,6 @@
1246 @@ -1,4 +1,6 @@
1239 +foobranch
1247 +foobranch
1240 expand $Id$
1248 expand $Id$
1241 do not process $Id:
1249 do not process $Id:
1242 xxx $
1250 xxx $
1243 $Xinfo$
1251 $Xinfo$
1244 +xxxx
1252 +xxxx
1245
1253
1246 Test restricted mode with graft
1254 Test restricted mode with graft
1247
1255
1248 $ hg graft -q 10
1256 $ hg graft -q 10
1249 $ hg diff -r 9 -r 13 a
1257 $ hg diff -r 9 -r 13 a
1250 diff -r 800511b3a22d -r 01a68de1003a a
1258 diff -r 800511b3a22d -r 01a68de1003a a
1251 --- a/a Thu Jan 01 00:00:00 1970 +0000
1259 --- a/a Thu Jan 01 00:00:00 1970 +0000
1252 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1260 +++ b/a Thu Jan 01 00:00:00 1970 +0000
1253 @@ -1,4 +1,6 @@
1261 @@ -1,4 +1,6 @@
1254 +foobranch
1262 +foobranch
1255 expand $Id$
1263 expand $Id$
1256 do not process $Id:
1264 do not process $Id:
1257 xxx $
1265 xxx $
1258 $Xinfo$
1266 $Xinfo$
1259 +xxxx
1267 +xxxx
1260
1268
1261 Test restricted mode with backout
1269 Test restricted mode with backout
1262
1270
1263 $ hg backout -q 11
1271 $ hg backout -q 11
1264 $ hg diff a
1272 $ hg diff a
1265 diff -r 01a68de1003a a
1273 diff -r 01a68de1003a a
1266 --- a/a Thu Jan 01 00:00:00 1970 +0000
1274 --- a/a Thu Jan 01 00:00:00 1970 +0000
1267 +++ b/a * (glob)
1275 +++ b/a * (glob)
1268 @@ -3,4 +3,3 @@
1276 @@ -3,4 +3,3 @@
1269 do not process $Id:
1277 do not process $Id:
1270 xxx $
1278 xxx $
1271 $Xinfo$
1279 $Xinfo$
1272 -xxxx
1280 -xxxx
1273
1281
1274 Test restricted mode with histedit
1282 Test restricted mode with histedit
1275
1283
1276 $ cat <<EOF >> $HGRCPATH
1284 $ cat <<EOF >> $HGRCPATH
1277 > [extensions]
1285 > [extensions]
1278 > histedit =
1286 > histedit =
1279 > EOF
1287 > EOF
1280
1288
1281 $ hg commit -m 'backout #11'
1289 $ hg commit -m 'backout #11'
1282 $ hg histedit -q --command - 13 <<EOF
1290 $ hg histedit -q --command - 13 <<EOF
1283 > pick 49f5f2d940c3 14 backout #11
1291 > pick 49f5f2d940c3 14 backout #11
1284 > pick 01a68de1003a 13 9foobranch
1292 > pick 01a68de1003a 13 9foobranch
1285 > EOF
1293 > EOF
1286
1294
1287 Test restricted mode with fetch (with merge)
1295 Test restricted mode with fetch (with merge)
1288
1296
1289 $ cat <<EOF >> $HGRCPATH
1297 $ cat <<EOF >> $HGRCPATH
1290 > [extensions]
1298 > [extensions]
1291 > fetch =
1299 > fetch =
1292 > EOF
1300 > EOF
1293
1301
1294 $ hg clone -q -r 9 . ../fetch-merge
1302 $ hg clone -q -r 9 . ../fetch-merge
1295 $ cd ../fetch-merge
1303 $ cd ../fetch-merge
1296 $ hg -R ../Test export 10 | hg import -q -
1304 $ hg -R ../Test export 10 | hg import -q -
1297 $ hg fetch -q -r 11
1305 $ hg fetch -q -r 11
1298 $ hg diff -r 9 a
1306 $ hg diff -r 9 a
1299 diff -r 800511b3a22d a
1307 diff -r 800511b3a22d a
1300 --- a/a Thu Jan 01 00:00:00 1970 +0000
1308 --- a/a Thu Jan 01 00:00:00 1970 +0000
1301 +++ b/a * (glob)
1309 +++ b/a * (glob)
1302 @@ -1,4 +1,6 @@
1310 @@ -1,4 +1,6 @@
1303 +foobranch
1311 +foobranch
1304 expand $Id$
1312 expand $Id$
1305 do not process $Id:
1313 do not process $Id:
1306 xxx $
1314 xxx $
1307 $Xinfo$
1315 $Xinfo$
1308 +xxxx
1316 +xxxx
1309
1317
1310 $ cd ..
1318 $ cd ..
@@ -1,519 +1,527 b''
1 This file focuses mainly on updating largefiles in the working
1 This file focuses mainly on updating largefiles in the working
2 directory (and ".hg/largefiles/dirstate")
2 directory (and ".hg/largefiles/dirstate")
3
3
4 $ cat >> $HGRCPATH <<EOF
4 $ cat >> $HGRCPATH <<EOF
5 > [ui]
5 > [ui]
6 > merge = internal:fail
6 > merge = internal:fail
7 > [extensions]
7 > [extensions]
8 > largefiles =
8 > largefiles =
9 > EOF
9 > EOF
10
10
11 $ hg init repo
11 $ hg init repo
12 $ cd repo
12 $ cd repo
13
13
14 $ echo large1 > large1
14 $ echo large1 > large1
15 $ echo large2 > large2
15 $ echo large2 > large2
16 $ hg add --large large1 large2
16 $ hg add --large large1 large2
17 $ echo normal1 > normal1
17 $ echo normal1 > normal1
18 $ hg add normal1
18 $ hg add normal1
19 $ hg commit -m '#0'
19 $ hg commit -m '#0'
20 $ echo 'large1 in #1' > large1
20 $ echo 'large1 in #1' > large1
21 $ echo 'normal1 in #1' > normal1
21 $ echo 'normal1 in #1' > normal1
22 $ hg commit -m '#1'
22 $ hg commit -m '#1'
23 $ hg update -q -C 0
23 $ hg update -q -C 0
24 $ echo 'large2 in #2' > large2
24 $ echo 'large2 in #2' > large2
25 $ hg commit -m '#2'
25 $ hg commit -m '#2'
26 created new head
26 created new head
27
27
28 Test that "hg merge" updates largefiles from "other" correctly
28 Test that "hg merge" updates largefiles from "other" correctly
29
29
30 (getting largefiles from "other" normally)
30 (getting largefiles from "other" normally)
31
31
32 $ hg status -A large1
32 $ hg status -A large1
33 C large1
33 C large1
34 $ cat large1
34 $ cat large1
35 large1
35 large1
36 $ cat .hglf/large1
36 $ cat .hglf/large1
37 4669e532d5b2c093a78eca010077e708a071bb64
37 4669e532d5b2c093a78eca010077e708a071bb64
38 $ hg merge --config debug.dirstate.delaywrite=2
38 $ hg merge --config debug.dirstate.delaywrite=2
39 getting changed largefiles
39 getting changed largefiles
40 1 largefiles updated, 0 removed
40 1 largefiles updated, 0 removed
41 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
41 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
42 (branch merge, don't forget to commit)
42 (branch merge, don't forget to commit)
43 $ hg status -A large1
43 $ hg status -A large1
44 M large1
44 M large1
45 $ cat large1
45 $ cat large1
46 large1 in #1
46 large1 in #1
47 $ cat .hglf/large1
47 $ cat .hglf/large1
48 58e24f733a964da346e2407a2bee99d9001184f5
48 58e24f733a964da346e2407a2bee99d9001184f5
49 $ hg diff -c 1 --nodates .hglf/large1 | grep '^[+-][0-9a-z]'
49 $ hg diff -c 1 --nodates .hglf/large1 | grep '^[+-][0-9a-z]'
50 -4669e532d5b2c093a78eca010077e708a071bb64
50 -4669e532d5b2c093a78eca010077e708a071bb64
51 +58e24f733a964da346e2407a2bee99d9001184f5
51 +58e24f733a964da346e2407a2bee99d9001184f5
52
52
53 (getting largefiles from "other" via conflict prompt)
53 (getting largefiles from "other" via conflict prompt)
54
54
55 $ hg update -q -C 2
55 $ hg update -q -C 2
56 $ echo 'large1 in #3' > large1
56 $ echo 'large1 in #3' > large1
57 $ echo 'normal1 in #3' > normal1
57 $ echo 'normal1 in #3' > normal1
58 $ hg commit -m '#3'
58 $ hg commit -m '#3'
59 $ cat .hglf/large1
59 $ cat .hglf/large1
60 e5bb990443d6a92aaf7223813720f7566c9dd05b
60 e5bb990443d6a92aaf7223813720f7566c9dd05b
61 $ hg merge --config debug.dirstate.delaywrite=2 --config ui.interactive=True <<EOF
61 $ hg merge --config debug.dirstate.delaywrite=2 --config ui.interactive=True <<EOF
62 > o
62 > o
63 > EOF
63 > EOF
64 largefile large1 has a merge conflict
64 largefile large1 has a merge conflict
65 ancestor was 4669e532d5b2c093a78eca010077e708a071bb64
65 ancestor was 4669e532d5b2c093a78eca010077e708a071bb64
66 keep (l)ocal e5bb990443d6a92aaf7223813720f7566c9dd05b or
66 keep (l)ocal e5bb990443d6a92aaf7223813720f7566c9dd05b or
67 take (o)ther 58e24f733a964da346e2407a2bee99d9001184f5? merging normal1
67 take (o)ther 58e24f733a964da346e2407a2bee99d9001184f5? o
68 merging normal1
68 warning: conflicts during merge.
69 warning: conflicts during merge.
69 merging normal1 incomplete! (edit conflicts, then use 'hg resolve --mark')
70 merging normal1 incomplete! (edit conflicts, then use 'hg resolve --mark')
70 getting changed largefiles
71 getting changed largefiles
71 1 largefiles updated, 0 removed
72 1 largefiles updated, 0 removed
72 0 files updated, 1 files merged, 0 files removed, 1 files unresolved
73 0 files updated, 1 files merged, 0 files removed, 1 files unresolved
73 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
74 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
74 [1]
75 [1]
75 $ hg status -A large1
76 $ hg status -A large1
76 M large1
77 M large1
77 $ cat large1
78 $ cat large1
78 large1 in #1
79 large1 in #1
79 $ cat .hglf/large1
80 $ cat .hglf/large1
80 58e24f733a964da346e2407a2bee99d9001184f5
81 58e24f733a964da346e2407a2bee99d9001184f5
81
82
82 Test that "hg revert -r REV" updates largefiles from "REV" correctly
83 Test that "hg revert -r REV" updates largefiles from "REV" correctly
83
84
84 $ hg update -q -C 3
85 $ hg update -q -C 3
85 $ hg status -A large1
86 $ hg status -A large1
86 C large1
87 C large1
87 $ cat large1
88 $ cat large1
88 large1 in #3
89 large1 in #3
89 $ cat .hglf/large1
90 $ cat .hglf/large1
90 e5bb990443d6a92aaf7223813720f7566c9dd05b
91 e5bb990443d6a92aaf7223813720f7566c9dd05b
91 $ hg diff -c 1 --nodates .hglf/large1 | grep '^[+-][0-9a-z]'
92 $ hg diff -c 1 --nodates .hglf/large1 | grep '^[+-][0-9a-z]'
92 -4669e532d5b2c093a78eca010077e708a071bb64
93 -4669e532d5b2c093a78eca010077e708a071bb64
93 +58e24f733a964da346e2407a2bee99d9001184f5
94 +58e24f733a964da346e2407a2bee99d9001184f5
94 $ hg revert --no-backup -r 1 --config debug.dirstate.delaywrite=2 large1
95 $ hg revert --no-backup -r 1 --config debug.dirstate.delaywrite=2 large1
95 $ hg status -A large1
96 $ hg status -A large1
96 M large1
97 M large1
97 $ cat large1
98 $ cat large1
98 large1 in #1
99 large1 in #1
99 $ cat .hglf/large1
100 $ cat .hglf/large1
100 58e24f733a964da346e2407a2bee99d9001184f5
101 58e24f733a964da346e2407a2bee99d9001184f5
101
102
102 Test that "hg rollback" restores status of largefiles correctly
103 Test that "hg rollback" restores status of largefiles correctly
103
104
104 $ hg update -C -q
105 $ hg update -C -q
105 $ hg remove large1
106 $ hg remove large1
106 $ test -f .hglf/large1
107 $ test -f .hglf/large1
107 [1]
108 [1]
108 $ hg forget large2
109 $ hg forget large2
109 $ test -f .hglf/large2
110 $ test -f .hglf/large2
110 [1]
111 [1]
111 $ echo largeX > largeX
112 $ echo largeX > largeX
112 $ hg add --large largeX
113 $ hg add --large largeX
113 $ cat .hglf/largeX
114 $ cat .hglf/largeX
114
115
115 $ hg commit -m 'will be rollback-ed soon'
116 $ hg commit -m 'will be rollback-ed soon'
116 $ echo largeY > largeY
117 $ echo largeY > largeY
117 $ hg add --large largeY
118 $ hg add --large largeY
118 $ hg status -A large1
119 $ hg status -A large1
119 large1: No such file or directory
120 large1: No such file or directory
120 $ hg status -A large2
121 $ hg status -A large2
121 ? large2
122 ? large2
122 $ hg status -A largeX
123 $ hg status -A largeX
123 C largeX
124 C largeX
124 $ hg status -A largeY
125 $ hg status -A largeY
125 A largeY
126 A largeY
126 $ hg rollback
127 $ hg rollback
127 repository tip rolled back to revision 3 (undo commit)
128 repository tip rolled back to revision 3 (undo commit)
128 working directory now based on revision 3
129 working directory now based on revision 3
129 $ hg status -A large1
130 $ hg status -A large1
130 R large1
131 R large1
131 $ test -f .hglf/large1
132 $ test -f .hglf/large1
132 [1]
133 [1]
133 $ hg status -A large2
134 $ hg status -A large2
134 R large2
135 R large2
135 $ test -f .hglf/large2
136 $ test -f .hglf/large2
136 [1]
137 [1]
137 $ hg status -A largeX
138 $ hg status -A largeX
138 A largeX
139 A largeX
139 $ cat .hglf/largeX
140 $ cat .hglf/largeX
140
141
141 $ hg status -A largeY
142 $ hg status -A largeY
142 ? largeY
143 ? largeY
143 $ test -f .hglf/largeY
144 $ test -f .hglf/largeY
144 [1]
145 [1]
145
146
146 Test that "hg rollback" restores standins correctly
147 Test that "hg rollback" restores standins correctly
147
148
148 $ hg commit -m 'will be rollback-ed soon'
149 $ hg commit -m 'will be rollback-ed soon'
149 $ hg update -q -C 2
150 $ hg update -q -C 2
150 $ cat large1
151 $ cat large1
151 large1
152 large1
152 $ cat .hglf/large1
153 $ cat .hglf/large1
153 4669e532d5b2c093a78eca010077e708a071bb64
154 4669e532d5b2c093a78eca010077e708a071bb64
154 $ cat large2
155 $ cat large2
155 large2 in #2
156 large2 in #2
156 $ cat .hglf/large2
157 $ cat .hglf/large2
157 3cfce6277e7668985707b6887ce56f9f62f6ccd9
158 3cfce6277e7668985707b6887ce56f9f62f6ccd9
158
159
159 $ hg rollback -q -f
160 $ hg rollback -q -f
160 $ cat large1
161 $ cat large1
161 large1
162 large1
162 $ cat .hglf/large1
163 $ cat .hglf/large1
163 4669e532d5b2c093a78eca010077e708a071bb64
164 4669e532d5b2c093a78eca010077e708a071bb64
164 $ cat large2
165 $ cat large2
165 large2 in #2
166 large2 in #2
166 $ cat .hglf/large2
167 $ cat .hglf/large2
167 3cfce6277e7668985707b6887ce56f9f62f6ccd9
168 3cfce6277e7668985707b6887ce56f9f62f6ccd9
168
169
169 (rollback the parent of the working directory, when the parent of it
170 (rollback the parent of the working directory, when the parent of it
170 is not branch-tip)
171 is not branch-tip)
171
172
172 $ hg update -q -C 1
173 $ hg update -q -C 1
173 $ cat .hglf/large1
174 $ cat .hglf/large1
174 58e24f733a964da346e2407a2bee99d9001184f5
175 58e24f733a964da346e2407a2bee99d9001184f5
175 $ cat .hglf/large2
176 $ cat .hglf/large2
176 1deebade43c8c498a3c8daddac0244dc55d1331d
177 1deebade43c8c498a3c8daddac0244dc55d1331d
177
178
178 $ echo normalX > normalX
179 $ echo normalX > normalX
179 $ hg add normalX
180 $ hg add normalX
180 $ hg commit -m 'will be rollback-ed soon'
181 $ hg commit -m 'will be rollback-ed soon'
181 $ hg rollback -q
182 $ hg rollback -q
182
183
183 $ cat .hglf/large1
184 $ cat .hglf/large1
184 58e24f733a964da346e2407a2bee99d9001184f5
185 58e24f733a964da346e2407a2bee99d9001184f5
185 $ cat .hglf/large2
186 $ cat .hglf/large2
186 1deebade43c8c498a3c8daddac0244dc55d1331d
187 1deebade43c8c498a3c8daddac0244dc55d1331d
187
188
188 Test that "hg status" shows status of largefiles correctly just after
189 Test that "hg status" shows status of largefiles correctly just after
189 automated commit like rebase/transplant
190 automated commit like rebase/transplant
190
191
191 $ cat >> .hg/hgrc <<EOF
192 $ cat >> .hg/hgrc <<EOF
192 > [extensions]
193 > [extensions]
193 > rebase =
194 > rebase =
194 > strip =
195 > strip =
195 > transplant =
196 > transplant =
196 > EOF
197 > EOF
197 $ hg update -q -C 1
198 $ hg update -q -C 1
198 $ hg remove large1
199 $ hg remove large1
199 $ echo largeX > largeX
200 $ echo largeX > largeX
200 $ hg add --large largeX
201 $ hg add --large largeX
201 $ hg commit -m '#4'
202 $ hg commit -m '#4'
202
203
203 $ hg rebase -s 1 -d 2 --keep
204 $ hg rebase -s 1 -d 2 --keep
204 $ hg status -A large1
205 $ hg status -A large1
205 large1: No such file or directory
206 large1: No such file or directory
206 $ hg status -A largeX
207 $ hg status -A largeX
207 C largeX
208 C largeX
208 $ hg strip -q 5
209 $ hg strip -q 5
209
210
210 $ hg update -q -C 2
211 $ hg update -q -C 2
211 $ hg transplant -q 1 4
212 $ hg transplant -q 1 4
212 $ hg status -A large1
213 $ hg status -A large1
213 large1: No such file or directory
214 large1: No such file or directory
214 $ hg status -A largeX
215 $ hg status -A largeX
215 C largeX
216 C largeX
216 $ hg strip -q 5
217 $ hg strip -q 5
217
218
218 $ hg update -q -C 2
219 $ hg update -q -C 2
219 $ hg transplant -q --merge 1 --merge 4
220 $ hg transplant -q --merge 1 --merge 4
220 $ hg status -A large1
221 $ hg status -A large1
221 large1: No such file or directory
222 large1: No such file or directory
222 $ hg status -A largeX
223 $ hg status -A largeX
223 C largeX
224 C largeX
224 $ hg strip -q 5
225 $ hg strip -q 5
225
226
226 Test that linear merge can detect modification (and conflict) correctly
227 Test that linear merge can detect modification (and conflict) correctly
227
228
228 (linear merge without conflict)
229 (linear merge without conflict)
229
230
230 $ echo 'large2 for linear merge (no conflict)' > large2
231 $ echo 'large2 for linear merge (no conflict)' > large2
231 $ hg update 3 --config debug.dirstate.delaywrite=2
232 $ hg update 3 --config debug.dirstate.delaywrite=2
232 getting changed largefiles
233 getting changed largefiles
233 1 largefiles updated, 0 removed
234 1 largefiles updated, 0 removed
234 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
235 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
235 $ hg status -A large2
236 $ hg status -A large2
236 M large2
237 M large2
237 $ cat large2
238 $ cat large2
238 large2 for linear merge (no conflict)
239 large2 for linear merge (no conflict)
239 $ cat .hglf/large2
240 $ cat .hglf/large2
240 9c4bf8f1b33536d6e5f89447e10620cfe52ea710
241 9c4bf8f1b33536d6e5f89447e10620cfe52ea710
241
242
242 (linear merge with conflict, choosing "other")
243 (linear merge with conflict, choosing "other")
243
244
244 $ hg update -q -C 2
245 $ hg update -q -C 2
245 $ echo 'large1 for linear merge (conflict)' > large1
246 $ echo 'large1 for linear merge (conflict)' > large1
246 $ hg update 3 --config ui.interactive=True <<EOF
247 $ hg update 3 --config ui.interactive=True <<EOF
247 > o
248 > o
248 > EOF
249 > EOF
249 largefile large1 has a merge conflict
250 largefile large1 has a merge conflict
250 ancestor was 4669e532d5b2c093a78eca010077e708a071bb64
251 ancestor was 4669e532d5b2c093a78eca010077e708a071bb64
251 keep (l)ocal ba94c2efe5b7c5e0af8d189295ce00553b0612b7 or
252 keep (l)ocal ba94c2efe5b7c5e0af8d189295ce00553b0612b7 or
252 take (o)ther e5bb990443d6a92aaf7223813720f7566c9dd05b? getting changed largefiles
253 take (o)ther e5bb990443d6a92aaf7223813720f7566c9dd05b? o
254 getting changed largefiles
253 1 largefiles updated, 0 removed
255 1 largefiles updated, 0 removed
254 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
256 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
255 $ hg status -A large1
257 $ hg status -A large1
256 C large1
258 C large1
257 $ cat large1
259 $ cat large1
258 large1 in #3
260 large1 in #3
259 $ cat .hglf/large1
261 $ cat .hglf/large1
260 e5bb990443d6a92aaf7223813720f7566c9dd05b
262 e5bb990443d6a92aaf7223813720f7566c9dd05b
261
263
262 (linear merge with conflict, choosing "local")
264 (linear merge with conflict, choosing "local")
263
265
264 $ hg update -q -C 2
266 $ hg update -q -C 2
265 $ echo 'large1 for linear merge (conflict)' > large1
267 $ echo 'large1 for linear merge (conflict)' > large1
266 $ hg update 3 --config debug.dirstate.delaywrite=2
268 $ hg update 3 --config debug.dirstate.delaywrite=2
267 largefile large1 has a merge conflict
269 largefile large1 has a merge conflict
268 ancestor was 4669e532d5b2c093a78eca010077e708a071bb64
270 ancestor was 4669e532d5b2c093a78eca010077e708a071bb64
269 keep (l)ocal ba94c2efe5b7c5e0af8d189295ce00553b0612b7 or
271 keep (l)ocal ba94c2efe5b7c5e0af8d189295ce00553b0612b7 or
270 take (o)ther e5bb990443d6a92aaf7223813720f7566c9dd05b? l
272 take (o)ther e5bb990443d6a92aaf7223813720f7566c9dd05b? l
271 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
273 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
272 $ hg status -A large1
274 $ hg status -A large1
273 M large1
275 M large1
274 $ cat large1
276 $ cat large1
275 large1 for linear merge (conflict)
277 large1 for linear merge (conflict)
276 $ cat .hglf/large1
278 $ cat .hglf/large1
277 ba94c2efe5b7c5e0af8d189295ce00553b0612b7
279 ba94c2efe5b7c5e0af8d189295ce00553b0612b7
278
280
279 Test a linear merge to a revision containing same-name normal file
281 Test a linear merge to a revision containing same-name normal file
280
282
281 $ hg update -q -C 3
283 $ hg update -q -C 3
282 $ hg remove large2
284 $ hg remove large2
283 $ echo 'large2 as normal file' > large2
285 $ echo 'large2 as normal file' > large2
284 $ hg add large2
286 $ hg add large2
285 $ echo 'large3 as normal file' > large3
287 $ echo 'large3 as normal file' > large3
286 $ hg add large3
288 $ hg add large3
287 $ hg commit -m '#5'
289 $ hg commit -m '#5'
288 $ hg manifest
290 $ hg manifest
289 .hglf/large1
291 .hglf/large1
290 large2
292 large2
291 large3
293 large3
292 normal1
294 normal1
293
295
294 (modified largefile is already switched to normal)
296 (modified largefile is already switched to normal)
295
297
296 $ hg update -q -C 2
298 $ hg update -q -C 2
297 $ echo 'modified large2 for linear merge' > large2
299 $ echo 'modified large2 for linear merge' > large2
298 $ hg update -q 5
300 $ hg update -q 5
299 local changed .hglf/large2 which remote deleted
301 local changed .hglf/large2 which remote deleted
300 use (c)hanged version or (d)elete? c
302 use (c)hanged version or (d)elete? c
301 remote turned local largefile large2 into a normal file
303 remote turned local largefile large2 into a normal file
302 keep (l)argefile or use (n)ormal file? l
304 keep (l)argefile or use (n)ormal file? l
303 $ hg debugdirstate --nodates | grep large2
305 $ hg debugdirstate --nodates | grep large2
304 a 0 -1 .hglf/large2
306 a 0 -1 .hglf/large2
305 r 0 0 large2
307 r 0 0 large2
306 $ hg status -A large2
308 $ hg status -A large2
307 A large2
309 A large2
308 $ cat large2
310 $ cat large2
309 modified large2 for linear merge
311 modified large2 for linear merge
310
312
311 (added largefile is already committed as normal)
313 (added largefile is already committed as normal)
312
314
313 $ hg update -q -C 2
315 $ hg update -q -C 2
314 $ echo 'large3 as large file for linear merge' > large3
316 $ echo 'large3 as large file for linear merge' > large3
315 $ hg add --large large3
317 $ hg add --large large3
316 $ hg update -q 5
318 $ hg update -q 5
317 remote turned local largefile large3 into a normal file
319 remote turned local largefile large3 into a normal file
318 keep (l)argefile or use (n)ormal file? l
320 keep (l)argefile or use (n)ormal file? l
319 $ hg debugdirstate --nodates | grep large3
321 $ hg debugdirstate --nodates | grep large3
320 a 0 -1 .hglf/large3
322 a 0 -1 .hglf/large3
321 r 0 0 large3
323 r 0 0 large3
322 $ hg status -A large3
324 $ hg status -A large3
323 A large3
325 A large3
324 $ cat large3
326 $ cat large3
325 large3 as large file for linear merge
327 large3 as large file for linear merge
326 $ rm -f large3 .hglf/large3
328 $ rm -f large3 .hglf/large3
327
329
328 Test that the internal linear merging works correctly
330 Test that the internal linear merging works correctly
329 (both heads are stripped to keep pairing of revision number and commit log)
331 (both heads are stripped to keep pairing of revision number and commit log)
330
332
331 $ hg update -q -C 2
333 $ hg update -q -C 2
332 $ hg strip 3 4
334 $ hg strip 3 4
333 saved backup bundle to $TESTTMP/repo/.hg/strip-backup/9530e27857f7-backup.hg (glob)
335 saved backup bundle to $TESTTMP/repo/.hg/strip-backup/9530e27857f7-backup.hg (glob)
334 $ mv .hg/strip-backup/9530e27857f7-backup.hg $TESTTMP
336 $ mv .hg/strip-backup/9530e27857f7-backup.hg $TESTTMP
335
337
336 (internal linear merging at "hg pull --update")
338 (internal linear merging at "hg pull --update")
337
339
338 $ echo 'large1 for linear merge (conflict)' > large1
340 $ echo 'large1 for linear merge (conflict)' > large1
339 $ echo 'large2 for linear merge (conflict with normal file)' > large2
341 $ echo 'large2 for linear merge (conflict with normal file)' > large2
340 $ hg pull --update --config debug.dirstate.delaywrite=2 $TESTTMP/9530e27857f7-backup.hg
342 $ hg pull --update --config debug.dirstate.delaywrite=2 $TESTTMP/9530e27857f7-backup.hg
341 pulling from $TESTTMP/9530e27857f7-backup.hg (glob)
343 pulling from $TESTTMP/9530e27857f7-backup.hg (glob)
342 searching for changes
344 searching for changes
343 adding changesets
345 adding changesets
344 adding manifests
346 adding manifests
345 adding file changes
347 adding file changes
346 added 3 changesets with 5 changes to 5 files
348 added 3 changesets with 5 changes to 5 files
347 local changed .hglf/large2 which remote deleted
349 local changed .hglf/large2 which remote deleted
348 use (c)hanged version or (d)elete? c
350 use (c)hanged version or (d)elete? c
349 remote turned local largefile large2 into a normal file
351 remote turned local largefile large2 into a normal file
350 keep (l)argefile or use (n)ormal file? l
352 keep (l)argefile or use (n)ormal file? l
351 largefile large1 has a merge conflict
353 largefile large1 has a merge conflict
352 ancestor was 4669e532d5b2c093a78eca010077e708a071bb64
354 ancestor was 4669e532d5b2c093a78eca010077e708a071bb64
353 keep (l)ocal ba94c2efe5b7c5e0af8d189295ce00553b0612b7 or
355 keep (l)ocal ba94c2efe5b7c5e0af8d189295ce00553b0612b7 or
354 take (o)ther e5bb990443d6a92aaf7223813720f7566c9dd05b? l
356 take (o)ther e5bb990443d6a92aaf7223813720f7566c9dd05b? l
355 2 files updated, 1 files merged, 0 files removed, 0 files unresolved
357 2 files updated, 1 files merged, 0 files removed, 0 files unresolved
356
358
357 $ hg status -A large1
359 $ hg status -A large1
358 M large1
360 M large1
359 $ cat large1
361 $ cat large1
360 large1 for linear merge (conflict)
362 large1 for linear merge (conflict)
361 $ cat .hglf/large1
363 $ cat .hglf/large1
362 ba94c2efe5b7c5e0af8d189295ce00553b0612b7
364 ba94c2efe5b7c5e0af8d189295ce00553b0612b7
363 $ hg status -A large2
365 $ hg status -A large2
364 A large2
366 A large2
365 $ cat large2
367 $ cat large2
366 large2 for linear merge (conflict with normal file)
368 large2 for linear merge (conflict with normal file)
367 $ cat .hglf/large2
369 $ cat .hglf/large2
368 d7591fe9be0f6227d90bddf3e4f52ff41fc1f544
370 d7591fe9be0f6227d90bddf3e4f52ff41fc1f544
369
371
370 (internal linear merging at "hg unbundle --update")
372 (internal linear merging at "hg unbundle --update")
371
373
372 $ hg update -q -C 2
374 $ hg update -q -C 2
373 $ hg rollback -q
375 $ hg rollback -q
374
376
375 $ echo 'large1 for linear merge (conflict)' > large1
377 $ echo 'large1 for linear merge (conflict)' > large1
376 $ echo 'large2 for linear merge (conflict with normal file)' > large2
378 $ echo 'large2 for linear merge (conflict with normal file)' > large2
377 $ hg unbundle --update --config debug.dirstate.delaywrite=2 $TESTTMP/9530e27857f7-backup.hg
379 $ hg unbundle --update --config debug.dirstate.delaywrite=2 $TESTTMP/9530e27857f7-backup.hg
378 adding changesets
380 adding changesets
379 adding manifests
381 adding manifests
380 adding file changes
382 adding file changes
381 added 3 changesets with 5 changes to 5 files
383 added 3 changesets with 5 changes to 5 files
382 local changed .hglf/large2 which remote deleted
384 local changed .hglf/large2 which remote deleted
383 use (c)hanged version or (d)elete? c
385 use (c)hanged version or (d)elete? c
384 remote turned local largefile large2 into a normal file
386 remote turned local largefile large2 into a normal file
385 keep (l)argefile or use (n)ormal file? l
387 keep (l)argefile or use (n)ormal file? l
386 largefile large1 has a merge conflict
388 largefile large1 has a merge conflict
387 ancestor was 4669e532d5b2c093a78eca010077e708a071bb64
389 ancestor was 4669e532d5b2c093a78eca010077e708a071bb64
388 keep (l)ocal ba94c2efe5b7c5e0af8d189295ce00553b0612b7 or
390 keep (l)ocal ba94c2efe5b7c5e0af8d189295ce00553b0612b7 or
389 take (o)ther e5bb990443d6a92aaf7223813720f7566c9dd05b? l
391 take (o)ther e5bb990443d6a92aaf7223813720f7566c9dd05b? l
390 2 files updated, 1 files merged, 0 files removed, 0 files unresolved
392 2 files updated, 1 files merged, 0 files removed, 0 files unresolved
391
393
392 $ hg status -A large1
394 $ hg status -A large1
393 M large1
395 M large1
394 $ cat large1
396 $ cat large1
395 large1 for linear merge (conflict)
397 large1 for linear merge (conflict)
396 $ cat .hglf/large1
398 $ cat .hglf/large1
397 ba94c2efe5b7c5e0af8d189295ce00553b0612b7
399 ba94c2efe5b7c5e0af8d189295ce00553b0612b7
398 $ hg status -A large2
400 $ hg status -A large2
399 A large2
401 A large2
400 $ cat large2
402 $ cat large2
401 large2 for linear merge (conflict with normal file)
403 large2 for linear merge (conflict with normal file)
402 $ cat .hglf/large2
404 $ cat .hglf/large2
403 d7591fe9be0f6227d90bddf3e4f52ff41fc1f544
405 d7591fe9be0f6227d90bddf3e4f52ff41fc1f544
404
406
405 (internal linear merging in subrepo at "hg update")
407 (internal linear merging in subrepo at "hg update")
406
408
407 $ cd ..
409 $ cd ..
408 $ hg init subparent
410 $ hg init subparent
409 $ cd subparent
411 $ cd subparent
410
412
411 $ hg clone -q -u 2 ../repo sub
413 $ hg clone -q -u 2 ../repo sub
412 $ cat > .hgsub <<EOF
414 $ cat > .hgsub <<EOF
413 > sub = sub
415 > sub = sub
414 > EOF
416 > EOF
415 $ hg add .hgsub
417 $ hg add .hgsub
416 $ hg commit -m '#0@parent'
418 $ hg commit -m '#0@parent'
417 $ cat .hgsubstate
419 $ cat .hgsubstate
418 f74e50bd9e5594b7cf1e6c5cbab86ddd25f3ca2f sub
420 f74e50bd9e5594b7cf1e6c5cbab86ddd25f3ca2f sub
419 $ hg -R sub update -q
421 $ hg -R sub update -q
420 $ hg commit -m '#1@parent'
422 $ hg commit -m '#1@parent'
421 $ cat .hgsubstate
423 $ cat .hgsubstate
422 d65e59e952a9638e2ce863b41a420ca723dd3e8d sub
424 d65e59e952a9638e2ce863b41a420ca723dd3e8d sub
423 $ hg update -q 0
425 $ hg update -q 0
424
426
425 $ echo 'large1 for linear merge (conflict)' > sub/large1
427 $ echo 'large1 for linear merge (conflict)' > sub/large1
426 $ echo 'large2 for linear merge (conflict with normal file)' > sub/large2
428 $ echo 'large2 for linear merge (conflict with normal file)' > sub/large2
427 $ hg update --config ui.interactive=True --config debug.dirstate.delaywrite=2 <<EOF
429 $ hg update --config ui.interactive=True --config debug.dirstate.delaywrite=2 <<EOF
428 > m
430 > m
429 > r
431 > r
430 > c
432 > c
431 > l
433 > l
432 > l
434 > l
433 > EOF
435 > EOF
434 subrepository sub diverged (local revision: f74e50bd9e55, remote revision: d65e59e952a9)
436 subrepository sub diverged (local revision: f74e50bd9e55, remote revision: d65e59e952a9)
435 (M)erge, keep (l)ocal or keep (r)emote? subrepository sources for sub differ (in checked out version)
437 (M)erge, keep (l)ocal or keep (r)emote? m
438 subrepository sources for sub differ (in checked out version)
436 use (l)ocal source (f74e50bd9e55) or (r)emote source (d65e59e952a9)?
439 use (l)ocal source (f74e50bd9e55) or (r)emote source (d65e59e952a9)?
440 r
437 local changed .hglf/large2 which remote deleted
441 local changed .hglf/large2 which remote deleted
438 use (c)hanged version or (d)elete? remote turned local largefile large2 into a normal file
442 use (c)hanged version or (d)elete? c
439 keep (l)argefile or use (n)ormal file? largefile large1 has a merge conflict
443 remote turned local largefile large2 into a normal file
444 keep (l)argefile or use (n)ormal file? l
445 largefile large1 has a merge conflict
440 ancestor was 4669e532d5b2c093a78eca010077e708a071bb64
446 ancestor was 4669e532d5b2c093a78eca010077e708a071bb64
441 keep (l)ocal ba94c2efe5b7c5e0af8d189295ce00553b0612b7 or
447 keep (l)ocal ba94c2efe5b7c5e0af8d189295ce00553b0612b7 or
442 take (o)ther e5bb990443d6a92aaf7223813720f7566c9dd05b? 2 files updated, 1 files merged, 0 files removed, 0 files unresolved
448 take (o)ther e5bb990443d6a92aaf7223813720f7566c9dd05b? l
449 2 files updated, 1 files merged, 0 files removed, 0 files unresolved
443 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
450 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
444
451
445 $ hg -R sub status -A sub/large1
452 $ hg -R sub status -A sub/large1
446 M sub/large1
453 M sub/large1
447 $ cat sub/large1
454 $ cat sub/large1
448 large1 for linear merge (conflict)
455 large1 for linear merge (conflict)
449 $ cat sub/.hglf/large1
456 $ cat sub/.hglf/large1
450 ba94c2efe5b7c5e0af8d189295ce00553b0612b7
457 ba94c2efe5b7c5e0af8d189295ce00553b0612b7
451 $ hg -R sub status -A sub/large2
458 $ hg -R sub status -A sub/large2
452 A sub/large2
459 A sub/large2
453 $ cat sub/large2
460 $ cat sub/large2
454 large2 for linear merge (conflict with normal file)
461 large2 for linear merge (conflict with normal file)
455 $ cat sub/.hglf/large2
462 $ cat sub/.hglf/large2
456 d7591fe9be0f6227d90bddf3e4f52ff41fc1f544
463 d7591fe9be0f6227d90bddf3e4f52ff41fc1f544
457
464
458 $ cd ..
465 $ cd ..
459 $ cd repo
466 $ cd repo
460
467
461 Test that rebase updates largefiles in the working directory even if
468 Test that rebase updates largefiles in the working directory even if
462 it is aborted by conflict.
469 it is aborted by conflict.
463
470
464 $ hg update -q -C 3
471 $ hg update -q -C 3
465 $ cat .hglf/large1
472 $ cat .hglf/large1
466 e5bb990443d6a92aaf7223813720f7566c9dd05b
473 e5bb990443d6a92aaf7223813720f7566c9dd05b
467 $ cat large1
474 $ cat large1
468 large1 in #3
475 large1 in #3
469 $ hg rebase -s 1 -d 3 --keep --config ui.interactive=True <<EOF
476 $ hg rebase -s 1 -d 3 --keep --config ui.interactive=True <<EOF
470 > o
477 > o
471 > EOF
478 > EOF
472 largefile large1 has a merge conflict
479 largefile large1 has a merge conflict
473 ancestor was 4669e532d5b2c093a78eca010077e708a071bb64
480 ancestor was 4669e532d5b2c093a78eca010077e708a071bb64
474 keep (l)ocal e5bb990443d6a92aaf7223813720f7566c9dd05b or
481 keep (l)ocal e5bb990443d6a92aaf7223813720f7566c9dd05b or
475 take (o)ther 58e24f733a964da346e2407a2bee99d9001184f5? merging normal1
482 take (o)ther 58e24f733a964da346e2407a2bee99d9001184f5? o
483 merging normal1
476 warning: conflicts during merge.
484 warning: conflicts during merge.
477 merging normal1 incomplete! (edit conflicts, then use 'hg resolve --mark')
485 merging normal1 incomplete! (edit conflicts, then use 'hg resolve --mark')
478 unresolved conflicts (see hg resolve, then hg rebase --continue)
486 unresolved conflicts (see hg resolve, then hg rebase --continue)
479 [1]
487 [1]
480 $ cat .hglf/large1
488 $ cat .hglf/large1
481 58e24f733a964da346e2407a2bee99d9001184f5
489 58e24f733a964da346e2407a2bee99d9001184f5
482 $ cat large1
490 $ cat large1
483 large1 in #1
491 large1 in #1
484
492
485 $ hg rebase -q --abort
493 $ hg rebase -q --abort
486 rebase aborted
494 rebase aborted
487
495
488 Test that transplant updates largefiles, of which standins are safely
496 Test that transplant updates largefiles, of which standins are safely
489 changed, even if it is aborted by conflict of other.
497 changed, even if it is aborted by conflict of other.
490
498
491 $ hg update -q -C 5
499 $ hg update -q -C 5
492 $ cat .hglf/large1
500 $ cat .hglf/large1
493 e5bb990443d6a92aaf7223813720f7566c9dd05b
501 e5bb990443d6a92aaf7223813720f7566c9dd05b
494 $ cat large1
502 $ cat large1
495 large1 in #3
503 large1 in #3
496 $ hg diff -c 4 .hglf/largeX | grep '^[+-][0-9a-z]'
504 $ hg diff -c 4 .hglf/largeX | grep '^[+-][0-9a-z]'
497 +fa44618ea25181aff4f48b70428294790cec9f61
505 +fa44618ea25181aff4f48b70428294790cec9f61
498 $ hg transplant 4
506 $ hg transplant 4
499 applying 07d6153b5c04
507 applying 07d6153b5c04
500 patching file .hglf/large1
508 patching file .hglf/large1
501 Hunk #1 FAILED at 0
509 Hunk #1 FAILED at 0
502 1 out of 1 hunks FAILED -- saving rejects to file .hglf/large1.rej
510 1 out of 1 hunks FAILED -- saving rejects to file .hglf/large1.rej
503 patch failed to apply
511 patch failed to apply
504 abort: fix up the merge and run hg transplant --continue
512 abort: fix up the merge and run hg transplant --continue
505 [255]
513 [255]
506 $ hg status -A large1
514 $ hg status -A large1
507 C large1
515 C large1
508 $ cat .hglf/large1
516 $ cat .hglf/large1
509 e5bb990443d6a92aaf7223813720f7566c9dd05b
517 e5bb990443d6a92aaf7223813720f7566c9dd05b
510 $ cat large1
518 $ cat large1
511 large1 in #3
519 large1 in #3
512 $ hg status -A largeX
520 $ hg status -A largeX
513 A largeX
521 A largeX
514 $ cat .hglf/largeX
522 $ cat .hglf/largeX
515 fa44618ea25181aff4f48b70428294790cec9f61
523 fa44618ea25181aff4f48b70428294790cec9f61
516 $ cat largeX
524 $ cat largeX
517 largeX
525 largeX
518
526
519 $ cd ..
527 $ cd ..
@@ -1,142 +1,150 b''
1 Test for
1 Test for
2 b5605d88dc27: Make ui.prompt repeat on "unrecognized response" again
2 b5605d88dc27: Make ui.prompt repeat on "unrecognized response" again
3 (issue897)
3 (issue897)
4
4
5 840e2b315c1f: Fix misleading error and prompts during update/merge
5 840e2b315c1f: Fix misleading error and prompts during update/merge
6 (issue556)
6 (issue556)
7
7
8 $ status() {
8 $ status() {
9 > echo "--- status ---"
9 > echo "--- status ---"
10 > hg st -A file1 file2
10 > hg st -A file1 file2
11 > for file in file1 file2; do
11 > for file in file1 file2; do
12 > if [ -f $file ]; then
12 > if [ -f $file ]; then
13 > echo "--- $file ---"
13 > echo "--- $file ---"
14 > cat $file
14 > cat $file
15 > else
15 > else
16 > echo "*** $file does not exist"
16 > echo "*** $file does not exist"
17 > fi
17 > fi
18 > done
18 > done
19 > }
19 > }
20
20
21 $ hg init
21 $ hg init
22
22
23 $ echo 1 > file1
23 $ echo 1 > file1
24 $ echo 2 > file2
24 $ echo 2 > file2
25 $ hg ci -Am 'added file1 and file2'
25 $ hg ci -Am 'added file1 and file2'
26 adding file1
26 adding file1
27 adding file2
27 adding file2
28
28
29 $ hg rm file1
29 $ hg rm file1
30 $ echo changed >> file2
30 $ echo changed >> file2
31 $ hg ci -m 'removed file1, changed file2'
31 $ hg ci -m 'removed file1, changed file2'
32
32
33 $ hg co 0
33 $ hg co 0
34 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
34 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
35
35
36 $ echo changed >> file1
36 $ echo changed >> file1
37 $ hg rm file2
37 $ hg rm file2
38 $ hg ci -m 'changed file1, removed file2'
38 $ hg ci -m 'changed file1, removed file2'
39 created new head
39 created new head
40
40
41
41
42 Non-interactive merge:
42 Non-interactive merge:
43
43
44 $ hg merge -y
44 $ hg merge -y
45 local changed file1 which remote deleted
45 local changed file1 which remote deleted
46 use (c)hanged version or (d)elete? c
46 use (c)hanged version or (d)elete? c
47 remote changed file2 which local deleted
47 remote changed file2 which local deleted
48 use (c)hanged version or leave (d)eleted? c
48 use (c)hanged version or leave (d)eleted? c
49 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
49 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
50 (branch merge, don't forget to commit)
50 (branch merge, don't forget to commit)
51
51
52 $ status
52 $ status
53 --- status ---
53 --- status ---
54 M file2
54 M file2
55 C file1
55 C file1
56 --- file1 ---
56 --- file1 ---
57 1
57 1
58 changed
58 changed
59 --- file2 ---
59 --- file2 ---
60 2
60 2
61 changed
61 changed
62
62
63
63
64 Interactive merge:
64 Interactive merge:
65
65
66 $ hg co -C
66 $ hg co -C
67 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
67 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
68
68
69 $ hg merge --config ui.interactive=true <<EOF
69 $ hg merge --config ui.interactive=true <<EOF
70 > c
70 > c
71 > d
71 > d
72 > EOF
72 > EOF
73 local changed file1 which remote deleted
73 local changed file1 which remote deleted
74 use (c)hanged version or (d)elete? remote changed file2 which local deleted
74 use (c)hanged version or (d)elete? c
75 use (c)hanged version or leave (d)eleted? 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
75 remote changed file2 which local deleted
76 use (c)hanged version or leave (d)eleted? d
77 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
76 (branch merge, don't forget to commit)
78 (branch merge, don't forget to commit)
77
79
78 $ status
80 $ status
79 --- status ---
81 --- status ---
80 file2: * (glob)
82 file2: * (glob)
81 C file1
83 C file1
82 --- file1 ---
84 --- file1 ---
83 1
85 1
84 changed
86 changed
85 *** file2 does not exist
87 *** file2 does not exist
86
88
87
89
88 Interactive merge with bad input:
90 Interactive merge with bad input:
89
91
90 $ hg co -C
92 $ hg co -C
91 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
93 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
92
94
93 $ hg merge --config ui.interactive=true <<EOF
95 $ hg merge --config ui.interactive=true <<EOF
94 > foo
96 > foo
95 > bar
97 > bar
96 > d
98 > d
97 > baz
99 > baz
98 > c
100 > c
99 > EOF
101 > EOF
100 local changed file1 which remote deleted
102 local changed file1 which remote deleted
101 use (c)hanged version or (d)elete? unrecognized response
103 use (c)hanged version or (d)elete? foo
104 unrecognized response
102 local changed file1 which remote deleted
105 local changed file1 which remote deleted
103 use (c)hanged version or (d)elete? unrecognized response
106 use (c)hanged version or (d)elete? bar
107 unrecognized response
104 local changed file1 which remote deleted
108 local changed file1 which remote deleted
105 use (c)hanged version or (d)elete? remote changed file2 which local deleted
109 use (c)hanged version or (d)elete? d
106 use (c)hanged version or leave (d)eleted? unrecognized response
107 remote changed file2 which local deleted
110 remote changed file2 which local deleted
108 use (c)hanged version or leave (d)eleted? 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
111 use (c)hanged version or leave (d)eleted? baz
112 unrecognized response
113 remote changed file2 which local deleted
114 use (c)hanged version or leave (d)eleted? c
115 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
109 (branch merge, don't forget to commit)
116 (branch merge, don't forget to commit)
110
117
111 $ status
118 $ status
112 --- status ---
119 --- status ---
113 M file2
120 M file2
114 R file1
121 R file1
115 *** file1 does not exist
122 *** file1 does not exist
116 --- file2 ---
123 --- file2 ---
117 2
124 2
118 changed
125 changed
119
126
120
127
121 Interactive merge with not enough input:
128 Interactive merge with not enough input:
122
129
123 $ hg co -C
130 $ hg co -C
124 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
131 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
125
132
126 $ hg merge --config ui.interactive=true <<EOF
133 $ hg merge --config ui.interactive=true <<EOF
127 > d
134 > d
128 > EOF
135 > EOF
129 local changed file1 which remote deleted
136 local changed file1 which remote deleted
130 use (c)hanged version or (d)elete? remote changed file2 which local deleted
137 use (c)hanged version or (d)elete? d
138 remote changed file2 which local deleted
131 use (c)hanged version or leave (d)eleted? abort: response expected
139 use (c)hanged version or leave (d)eleted? abort: response expected
132 [255]
140 [255]
133
141
134 $ status
142 $ status
135 --- status ---
143 --- status ---
136 file2: * (glob)
144 file2: * (glob)
137 C file1
145 C file1
138 --- file1 ---
146 --- file1 ---
139 1
147 1
140 changed
148 changed
141 *** file2 does not exist
149 *** file2 does not exist
142
150
@@ -1,346 +1,356 b''
1 Create configuration
1 Create configuration
2
2
3 $ echo "[ui]" >> $HGRCPATH
3 $ echo "[ui]" >> $HGRCPATH
4 $ echo "interactive=true" >> $HGRCPATH
4 $ echo "interactive=true" >> $HGRCPATH
5
5
6 help qrefresh (no record)
6 help qrefresh (no record)
7
7
8 $ echo "[extensions]" >> $HGRCPATH
8 $ echo "[extensions]" >> $HGRCPATH
9 $ echo "mq=" >> $HGRCPATH
9 $ echo "mq=" >> $HGRCPATH
10 $ hg help qrefresh
10 $ hg help qrefresh
11 hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]...
11 hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]...
12
12
13 update the current patch
13 update the current patch
14
14
15 If any file patterns are provided, the refreshed patch will contain only
15 If any file patterns are provided, the refreshed patch will contain only
16 the modifications that match those patterns; the remaining modifications
16 the modifications that match those patterns; the remaining modifications
17 will remain in the working directory.
17 will remain in the working directory.
18
18
19 If -s/--short is specified, files currently included in the patch will be
19 If -s/--short is specified, files currently included in the patch will be
20 refreshed just like matched files and remain in the patch.
20 refreshed just like matched files and remain in the patch.
21
21
22 If -e/--edit is specified, Mercurial will start your configured editor for
22 If -e/--edit is specified, Mercurial will start your configured editor for
23 you to enter a message. In case qrefresh fails, you will find a backup of
23 you to enter a message. In case qrefresh fails, you will find a backup of
24 your message in ".hg/last-message.txt".
24 your message in ".hg/last-message.txt".
25
25
26 hg add/remove/copy/rename work as usual, though you might want to use git-
26 hg add/remove/copy/rename work as usual, though you might want to use git-
27 style patches (-g/--git or [diff] git=1) to track copies and renames. See
27 style patches (-g/--git or [diff] git=1) to track copies and renames. See
28 the diffs help topic for more information on the git diff format.
28 the diffs help topic for more information on the git diff format.
29
29
30 Returns 0 on success.
30 Returns 0 on success.
31
31
32 options ([+] can be repeated):
32 options ([+] can be repeated):
33
33
34 -e --edit invoke editor on commit messages
34 -e --edit invoke editor on commit messages
35 -g --git use git extended diff format
35 -g --git use git extended diff format
36 -s --short refresh only files already in the patch and
36 -s --short refresh only files already in the patch and
37 specified files
37 specified files
38 -U --currentuser add/update author field in patch with current user
38 -U --currentuser add/update author field in patch with current user
39 -u --user USER add/update author field in patch with given user
39 -u --user USER add/update author field in patch with given user
40 -D --currentdate add/update date field in patch with current date
40 -D --currentdate add/update date field in patch with current date
41 -d --date DATE add/update date field in patch with given date
41 -d --date DATE add/update date field in patch with given date
42 -I --include PATTERN [+] include names matching the given patterns
42 -I --include PATTERN [+] include names matching the given patterns
43 -X --exclude PATTERN [+] exclude names matching the given patterns
43 -X --exclude PATTERN [+] exclude names matching the given patterns
44 -m --message TEXT use text as commit message
44 -m --message TEXT use text as commit message
45 -l --logfile FILE read commit message from file
45 -l --logfile FILE read commit message from file
46
46
47 (some details hidden, use --verbose to show complete help)
47 (some details hidden, use --verbose to show complete help)
48
48
49 help qrefresh (record)
49 help qrefresh (record)
50
50
51 $ echo "record=" >> $HGRCPATH
51 $ echo "record=" >> $HGRCPATH
52 $ hg help qrefresh
52 $ hg help qrefresh
53 hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]...
53 hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]...
54
54
55 update the current patch
55 update the current patch
56
56
57 If any file patterns are provided, the refreshed patch will contain only
57 If any file patterns are provided, the refreshed patch will contain only
58 the modifications that match those patterns; the remaining modifications
58 the modifications that match those patterns; the remaining modifications
59 will remain in the working directory.
59 will remain in the working directory.
60
60
61 If -s/--short is specified, files currently included in the patch will be
61 If -s/--short is specified, files currently included in the patch will be
62 refreshed just like matched files and remain in the patch.
62 refreshed just like matched files and remain in the patch.
63
63
64 If -e/--edit is specified, Mercurial will start your configured editor for
64 If -e/--edit is specified, Mercurial will start your configured editor for
65 you to enter a message. In case qrefresh fails, you will find a backup of
65 you to enter a message. In case qrefresh fails, you will find a backup of
66 your message in ".hg/last-message.txt".
66 your message in ".hg/last-message.txt".
67
67
68 hg add/remove/copy/rename work as usual, though you might want to use git-
68 hg add/remove/copy/rename work as usual, though you might want to use git-
69 style patches (-g/--git or [diff] git=1) to track copies and renames. See
69 style patches (-g/--git or [diff] git=1) to track copies and renames. See
70 the diffs help topic for more information on the git diff format.
70 the diffs help topic for more information on the git diff format.
71
71
72 Returns 0 on success.
72 Returns 0 on success.
73
73
74 options ([+] can be repeated):
74 options ([+] can be repeated):
75
75
76 -e --edit invoke editor on commit messages
76 -e --edit invoke editor on commit messages
77 -g --git use git extended diff format
77 -g --git use git extended diff format
78 -s --short refresh only files already in the patch and
78 -s --short refresh only files already in the patch and
79 specified files
79 specified files
80 -U --currentuser add/update author field in patch with current user
80 -U --currentuser add/update author field in patch with current user
81 -u --user USER add/update author field in patch with given user
81 -u --user USER add/update author field in patch with given user
82 -D --currentdate add/update date field in patch with current date
82 -D --currentdate add/update date field in patch with current date
83 -d --date DATE add/update date field in patch with given date
83 -d --date DATE add/update date field in patch with given date
84 -I --include PATTERN [+] include names matching the given patterns
84 -I --include PATTERN [+] include names matching the given patterns
85 -X --exclude PATTERN [+] exclude names matching the given patterns
85 -X --exclude PATTERN [+] exclude names matching the given patterns
86 -m --message TEXT use text as commit message
86 -m --message TEXT use text as commit message
87 -l --logfile FILE read commit message from file
87 -l --logfile FILE read commit message from file
88 -i --interactive interactively select changes to refresh
88 -i --interactive interactively select changes to refresh
89
89
90 (some details hidden, use --verbose to show complete help)
90 (some details hidden, use --verbose to show complete help)
91
91
92 $ hg init a
92 $ hg init a
93 $ cd a
93 $ cd a
94
94
95 Base commit
95 Base commit
96
96
97 $ cat > 1.txt <<EOF
97 $ cat > 1.txt <<EOF
98 > 1
98 > 1
99 > 2
99 > 2
100 > 3
100 > 3
101 > 4
101 > 4
102 > 5
102 > 5
103 > EOF
103 > EOF
104 $ cat > 2.txt <<EOF
104 $ cat > 2.txt <<EOF
105 > a
105 > a
106 > b
106 > b
107 > c
107 > c
108 > d
108 > d
109 > e
109 > e
110 > f
110 > f
111 > EOF
111 > EOF
112
112
113 $ mkdir dir
113 $ mkdir dir
114 $ cat > dir/a.txt <<EOF
114 $ cat > dir/a.txt <<EOF
115 > hello world
115 > hello world
116 >
116 >
117 > someone
117 > someone
118 > up
118 > up
119 > there
119 > there
120 > loves
120 > loves
121 > me
121 > me
122 > EOF
122 > EOF
123
123
124 $ hg add 1.txt 2.txt dir/a.txt
124 $ hg add 1.txt 2.txt dir/a.txt
125 $ hg commit -m aaa
125 $ hg commit -m aaa
126 $ hg qnew -d '0 0' patch
126 $ hg qnew -d '0 0' patch
127
127
128 Changing files
128 Changing files
129
129
130 $ sed -e 's/2/2 2/;s/4/4 4/' 1.txt > 1.txt.new
130 $ sed -e 's/2/2 2/;s/4/4 4/' 1.txt > 1.txt.new
131 $ sed -e 's/b/b b/' 2.txt > 2.txt.new
131 $ sed -e 's/b/b b/' 2.txt > 2.txt.new
132 $ sed -e 's/hello world/hello world!/' dir/a.txt > dir/a.txt.new
132 $ sed -e 's/hello world/hello world!/' dir/a.txt > dir/a.txt.new
133
133
134 $ mv -f 1.txt.new 1.txt
134 $ mv -f 1.txt.new 1.txt
135 $ mv -f 2.txt.new 2.txt
135 $ mv -f 2.txt.new 2.txt
136 $ mv -f dir/a.txt.new dir/a.txt
136 $ mv -f dir/a.txt.new dir/a.txt
137
137
138 Whole diff
138 Whole diff
139
139
140 $ hg diff --nodates
140 $ hg diff --nodates
141 diff -r ed27675cb5df 1.txt
141 diff -r ed27675cb5df 1.txt
142 --- a/1.txt
142 --- a/1.txt
143 +++ b/1.txt
143 +++ b/1.txt
144 @@ -1,5 +1,5 @@
144 @@ -1,5 +1,5 @@
145 1
145 1
146 -2
146 -2
147 +2 2
147 +2 2
148 3
148 3
149 -4
149 -4
150 +4 4
150 +4 4
151 5
151 5
152 diff -r ed27675cb5df 2.txt
152 diff -r ed27675cb5df 2.txt
153 --- a/2.txt
153 --- a/2.txt
154 +++ b/2.txt
154 +++ b/2.txt
155 @@ -1,5 +1,5 @@
155 @@ -1,5 +1,5 @@
156 a
156 a
157 -b
157 -b
158 +b b
158 +b b
159 c
159 c
160 d
160 d
161 e
161 e
162 diff -r ed27675cb5df dir/a.txt
162 diff -r ed27675cb5df dir/a.txt
163 --- a/dir/a.txt
163 --- a/dir/a.txt
164 +++ b/dir/a.txt
164 +++ b/dir/a.txt
165 @@ -1,4 +1,4 @@
165 @@ -1,4 +1,4 @@
166 -hello world
166 -hello world
167 +hello world!
167 +hello world!
168
168
169 someone
169 someone
170 up
170 up
171
171
172 partial qrefresh
172 partial qrefresh
173
173
174 $ hg qrefresh -i -d '0 0' <<EOF
174 $ hg qrefresh -i -d '0 0' <<EOF
175 > y
175 > y
176 > y
176 > y
177 > n
177 > n
178 > y
178 > y
179 > y
179 > y
180 > n
180 > n
181 > EOF
181 > EOF
182 diff --git a/1.txt b/1.txt
182 diff --git a/1.txt b/1.txt
183 2 hunks, 2 lines changed
183 2 hunks, 2 lines changed
184 examine changes to '1.txt'? [Ynesfdaq?]
184 examine changes to '1.txt'? [Ynesfdaq?] y
185
185 @@ -1,3 +1,3 @@
186 @@ -1,3 +1,3 @@
186 1
187 1
187 -2
188 -2
188 +2 2
189 +2 2
189 3
190 3
190 record change 1/4 to '1.txt'? [Ynesfdaq?]
191 record change 1/4 to '1.txt'? [Ynesfdaq?] y
192
191 @@ -3,3 +3,3 @@
193 @@ -3,3 +3,3 @@
192 3
194 3
193 -4
195 -4
194 +4 4
196 +4 4
195 5
197 5
196 record change 2/4 to '1.txt'? [Ynesfdaq?]
198 record change 2/4 to '1.txt'? [Ynesfdaq?] n
199
197 diff --git a/2.txt b/2.txt
200 diff --git a/2.txt b/2.txt
198 1 hunks, 1 lines changed
201 1 hunks, 1 lines changed
199 examine changes to '2.txt'? [Ynesfdaq?]
202 examine changes to '2.txt'? [Ynesfdaq?] y
203
200 @@ -1,5 +1,5 @@
204 @@ -1,5 +1,5 @@
201 a
205 a
202 -b
206 -b
203 +b b
207 +b b
204 c
208 c
205 d
209 d
206 e
210 e
207 record change 3/4 to '2.txt'? [Ynesfdaq?]
211 record change 3/4 to '2.txt'? [Ynesfdaq?] y
212
208 diff --git a/dir/a.txt b/dir/a.txt
213 diff --git a/dir/a.txt b/dir/a.txt
209 1 hunks, 1 lines changed
214 1 hunks, 1 lines changed
210 examine changes to 'dir/a.txt'? [Ynesfdaq?]
215 examine changes to 'dir/a.txt'? [Ynesfdaq?] n
216
211
217
212 After partial qrefresh 'tip'
218 After partial qrefresh 'tip'
213
219
214 $ hg tip -p
220 $ hg tip -p
215 changeset: 1:0738af1a8211
221 changeset: 1:0738af1a8211
216 tag: patch
222 tag: patch
217 tag: qbase
223 tag: qbase
218 tag: qtip
224 tag: qtip
219 tag: tip
225 tag: tip
220 user: test
226 user: test
221 date: Thu Jan 01 00:00:00 1970 +0000
227 date: Thu Jan 01 00:00:00 1970 +0000
222 summary: [mq]: patch
228 summary: [mq]: patch
223
229
224 diff -r 1fd39ab63a33 -r 0738af1a8211 1.txt
230 diff -r 1fd39ab63a33 -r 0738af1a8211 1.txt
225 --- a/1.txt Thu Jan 01 00:00:00 1970 +0000
231 --- a/1.txt Thu Jan 01 00:00:00 1970 +0000
226 +++ b/1.txt Thu Jan 01 00:00:00 1970 +0000
232 +++ b/1.txt Thu Jan 01 00:00:00 1970 +0000
227 @@ -1,5 +1,5 @@
233 @@ -1,5 +1,5 @@
228 1
234 1
229 -2
235 -2
230 +2 2
236 +2 2
231 3
237 3
232 4
238 4
233 5
239 5
234 diff -r 1fd39ab63a33 -r 0738af1a8211 2.txt
240 diff -r 1fd39ab63a33 -r 0738af1a8211 2.txt
235 --- a/2.txt Thu Jan 01 00:00:00 1970 +0000
241 --- a/2.txt Thu Jan 01 00:00:00 1970 +0000
236 +++ b/2.txt Thu Jan 01 00:00:00 1970 +0000
242 +++ b/2.txt Thu Jan 01 00:00:00 1970 +0000
237 @@ -1,5 +1,5 @@
243 @@ -1,5 +1,5 @@
238 a
244 a
239 -b
245 -b
240 +b b
246 +b b
241 c
247 c
242 d
248 d
243 e
249 e
244
250
245 After partial qrefresh 'diff'
251 After partial qrefresh 'diff'
246
252
247 $ hg diff --nodates
253 $ hg diff --nodates
248 diff -r 0738af1a8211 1.txt
254 diff -r 0738af1a8211 1.txt
249 --- a/1.txt
255 --- a/1.txt
250 +++ b/1.txt
256 +++ b/1.txt
251 @@ -1,5 +1,5 @@
257 @@ -1,5 +1,5 @@
252 1
258 1
253 2 2
259 2 2
254 3
260 3
255 -4
261 -4
256 +4 4
262 +4 4
257 5
263 5
258 diff -r 0738af1a8211 dir/a.txt
264 diff -r 0738af1a8211 dir/a.txt
259 --- a/dir/a.txt
265 --- a/dir/a.txt
260 +++ b/dir/a.txt
266 +++ b/dir/a.txt
261 @@ -1,4 +1,4 @@
267 @@ -1,4 +1,4 @@
262 -hello world
268 -hello world
263 +hello world!
269 +hello world!
264
270
265 someone
271 someone
266 up
272 up
267
273
268 qrefresh interactively everything else
274 qrefresh interactively everything else
269
275
270 $ hg qrefresh -i -d '0 0' <<EOF
276 $ hg qrefresh -i -d '0 0' <<EOF
271 > y
277 > y
272 > y
278 > y
273 > y
279 > y
274 > y
280 > y
275 > EOF
281 > EOF
276 diff --git a/1.txt b/1.txt
282 diff --git a/1.txt b/1.txt
277 1 hunks, 1 lines changed
283 1 hunks, 1 lines changed
278 examine changes to '1.txt'? [Ynesfdaq?]
284 examine changes to '1.txt'? [Ynesfdaq?] y
285
279 @@ -1,5 +1,5 @@
286 @@ -1,5 +1,5 @@
280 1
287 1
281 2 2
288 2 2
282 3
289 3
283 -4
290 -4
284 +4 4
291 +4 4
285 5
292 5
286 record change 1/2 to '1.txt'? [Ynesfdaq?]
293 record change 1/2 to '1.txt'? [Ynesfdaq?] y
294
287 diff --git a/dir/a.txt b/dir/a.txt
295 diff --git a/dir/a.txt b/dir/a.txt
288 1 hunks, 1 lines changed
296 1 hunks, 1 lines changed
289 examine changes to 'dir/a.txt'? [Ynesfdaq?]
297 examine changes to 'dir/a.txt'? [Ynesfdaq?] y
298
290 @@ -1,4 +1,4 @@
299 @@ -1,4 +1,4 @@
291 -hello world
300 -hello world
292 +hello world!
301 +hello world!
293
302
294 someone
303 someone
295 up
304 up
296 record change 2/2 to 'dir/a.txt'? [Ynesfdaq?]
305 record change 2/2 to 'dir/a.txt'? [Ynesfdaq?] y
306
297
307
298 After final qrefresh 'tip'
308 After final qrefresh 'tip'
299
309
300 $ hg tip -p
310 $ hg tip -p
301 changeset: 1:2c3f66afeed9
311 changeset: 1:2c3f66afeed9
302 tag: patch
312 tag: patch
303 tag: qbase
313 tag: qbase
304 tag: qtip
314 tag: qtip
305 tag: tip
315 tag: tip
306 user: test
316 user: test
307 date: Thu Jan 01 00:00:00 1970 +0000
317 date: Thu Jan 01 00:00:00 1970 +0000
308 summary: [mq]: patch
318 summary: [mq]: patch
309
319
310 diff -r 1fd39ab63a33 -r 2c3f66afeed9 1.txt
320 diff -r 1fd39ab63a33 -r 2c3f66afeed9 1.txt
311 --- a/1.txt Thu Jan 01 00:00:00 1970 +0000
321 --- a/1.txt Thu Jan 01 00:00:00 1970 +0000
312 +++ b/1.txt Thu Jan 01 00:00:00 1970 +0000
322 +++ b/1.txt Thu Jan 01 00:00:00 1970 +0000
313 @@ -1,5 +1,5 @@
323 @@ -1,5 +1,5 @@
314 1
324 1
315 -2
325 -2
316 +2 2
326 +2 2
317 3
327 3
318 -4
328 -4
319 +4 4
329 +4 4
320 5
330 5
321 diff -r 1fd39ab63a33 -r 2c3f66afeed9 2.txt
331 diff -r 1fd39ab63a33 -r 2c3f66afeed9 2.txt
322 --- a/2.txt Thu Jan 01 00:00:00 1970 +0000
332 --- a/2.txt Thu Jan 01 00:00:00 1970 +0000
323 +++ b/2.txt Thu Jan 01 00:00:00 1970 +0000
333 +++ b/2.txt Thu Jan 01 00:00:00 1970 +0000
324 @@ -1,5 +1,5 @@
334 @@ -1,5 +1,5 @@
325 a
335 a
326 -b
336 -b
327 +b b
337 +b b
328 c
338 c
329 d
339 d
330 e
340 e
331 diff -r 1fd39ab63a33 -r 2c3f66afeed9 dir/a.txt
341 diff -r 1fd39ab63a33 -r 2c3f66afeed9 dir/a.txt
332 --- a/dir/a.txt Thu Jan 01 00:00:00 1970 +0000
342 --- a/dir/a.txt Thu Jan 01 00:00:00 1970 +0000
333 +++ b/dir/a.txt Thu Jan 01 00:00:00 1970 +0000
343 +++ b/dir/a.txt Thu Jan 01 00:00:00 1970 +0000
334 @@ -1,4 +1,4 @@
344 @@ -1,4 +1,4 @@
335 -hello world
345 -hello world
336 +hello world!
346 +hello world!
337
347
338 someone
348 someone
339 up
349 up
340
350
341
351
342 After qrefresh 'diff'
352 After qrefresh 'diff'
343
353
344 $ hg diff --nodates
354 $ hg diff --nodates
345
355
346 $ cd ..
356 $ cd ..
@@ -1,601 +1,609 b''
1 $ echo "[ui]" >> $HGRCPATH
1 $ echo "[ui]" >> $HGRCPATH
2 $ echo "commitsubrepos = Yes" >> $HGRCPATH
2 $ echo "commitsubrepos = Yes" >> $HGRCPATH
3 $ echo "[extensions]" >> $HGRCPATH
3 $ echo "[extensions]" >> $HGRCPATH
4 $ echo "mq=" >> $HGRCPATH
4 $ echo "mq=" >> $HGRCPATH
5 $ echo "record=" >> $HGRCPATH
5 $ echo "record=" >> $HGRCPATH
6 $ echo "[diff]" >> $HGRCPATH
6 $ echo "[diff]" >> $HGRCPATH
7 $ echo "nodates=1" >> $HGRCPATH
7 $ echo "nodates=1" >> $HGRCPATH
8
8
9 $ stdin=`pwd`/stdin.tmp
9 $ stdin=`pwd`/stdin.tmp
10
10
11 fn to create new repository w/dirty subrepo, and cd into it
11 fn to create new repository w/dirty subrepo, and cd into it
12 $ mkrepo() {
12 $ mkrepo() {
13 > hg init $1
13 > hg init $1
14 > cd $1
14 > cd $1
15 > hg qinit
15 > hg qinit
16 > }
16 > }
17
17
18 fn to create dirty subrepo
18 fn to create dirty subrepo
19 $ mksubrepo() {
19 $ mksubrepo() {
20 > hg init $1
20 > hg init $1
21 > cd $1
21 > cd $1
22 > echo a > a
22 > echo a > a
23 > hg add
23 > hg add
24 > cd ..
24 > cd ..
25 > }
25 > }
26
26
27 $ testadd() {
27 $ testadd() {
28 > cat - > "$stdin"
28 > cat - > "$stdin"
29 > mksubrepo sub
29 > mksubrepo sub
30 > echo sub = sub >> .hgsub
30 > echo sub = sub >> .hgsub
31 > hg add .hgsub
31 > hg add .hgsub
32 > echo % abort when adding .hgsub w/dirty subrepo
32 > echo % abort when adding .hgsub w/dirty subrepo
33 > hg status -S
33 > hg status -S
34 > echo '%' $*
34 > echo '%' $*
35 > cat "$stdin" | hg $*
35 > cat "$stdin" | hg $*
36 > echo [$?]
36 > echo [$?]
37 > hg -R sub ci -m0sub
37 > hg -R sub ci -m0sub
38 > echo % update substate when adding .hgsub w/clean updated subrepo
38 > echo % update substate when adding .hgsub w/clean updated subrepo
39 > hg status -S
39 > hg status -S
40 > echo '%' $*
40 > echo '%' $*
41 > cat "$stdin" | hg $*
41 > cat "$stdin" | hg $*
42 > hg debugsub
42 > hg debugsub
43 > }
43 > }
44
44
45 $ testmod() {
45 $ testmod() {
46 > cat - > "$stdin"
46 > cat - > "$stdin"
47 > mksubrepo sub2
47 > mksubrepo sub2
48 > echo sub2 = sub2 >> .hgsub
48 > echo sub2 = sub2 >> .hgsub
49 > echo % abort when modifying .hgsub w/dirty subrepo
49 > echo % abort when modifying .hgsub w/dirty subrepo
50 > hg status -S
50 > hg status -S
51 > echo '%' $*
51 > echo '%' $*
52 > cat "$stdin" | hg $*
52 > cat "$stdin" | hg $*
53 > echo [$?]
53 > echo [$?]
54 > hg -R sub2 ci -m0sub2
54 > hg -R sub2 ci -m0sub2
55 > echo % update substate when modifying .hgsub w/clean updated subrepo
55 > echo % update substate when modifying .hgsub w/clean updated subrepo
56 > hg status -S
56 > hg status -S
57 > echo '%' $*
57 > echo '%' $*
58 > cat "$stdin" | hg $*
58 > cat "$stdin" | hg $*
59 > hg debugsub
59 > hg debugsub
60 > }
60 > }
61
61
62 $ testrm1() {
62 $ testrm1() {
63 > cat - > "$stdin"
63 > cat - > "$stdin"
64 > mksubrepo sub3
64 > mksubrepo sub3
65 > echo sub3 = sub3 >> .hgsub
65 > echo sub3 = sub3 >> .hgsub
66 > hg ci -Aqmsub3
66 > hg ci -Aqmsub3
67 > $EXTRA
67 > $EXTRA
68 > echo b >> sub3/a
68 > echo b >> sub3/a
69 > hg rm .hgsub
69 > hg rm .hgsub
70 > echo % update substate when removing .hgsub w/dirty subrepo
70 > echo % update substate when removing .hgsub w/dirty subrepo
71 > hg status -S
71 > hg status -S
72 > echo '%' $*
72 > echo '%' $*
73 > cat "$stdin" | hg $*
73 > cat "$stdin" | hg $*
74 > echo % debugsub should be empty
74 > echo % debugsub should be empty
75 > hg debugsub
75 > hg debugsub
76 > }
76 > }
77
77
78 $ testrm2() {
78 $ testrm2() {
79 > cat - > "$stdin"
79 > cat - > "$stdin"
80 > mksubrepo sub4
80 > mksubrepo sub4
81 > echo sub4 = sub4 >> .hgsub
81 > echo sub4 = sub4 >> .hgsub
82 > hg ci -Aqmsub4
82 > hg ci -Aqmsub4
83 > $EXTRA
83 > $EXTRA
84 > hg rm .hgsub
84 > hg rm .hgsub
85 > echo % update substate when removing .hgsub w/clean updated subrepo
85 > echo % update substate when removing .hgsub w/clean updated subrepo
86 > hg status -S
86 > hg status -S
87 > echo '%' $*
87 > echo '%' $*
88 > cat "$stdin" | hg $*
88 > cat "$stdin" | hg $*
89 > echo % debugsub should be empty
89 > echo % debugsub should be empty
90 > hg debugsub
90 > hg debugsub
91 > }
91 > }
92
92
93
93
94 handle subrepos safely on qnew
94 handle subrepos safely on qnew
95
95
96 $ mkrepo repo-2499-qnew
96 $ mkrepo repo-2499-qnew
97 $ testadd qnew -X path:no-effect -m0 0.diff
97 $ testadd qnew -X path:no-effect -m0 0.diff
98 adding a
98 adding a
99 % abort when adding .hgsub w/dirty subrepo
99 % abort when adding .hgsub w/dirty subrepo
100 A .hgsub
100 A .hgsub
101 A sub/a
101 A sub/a
102 % qnew -X path:no-effect -m0 0.diff
102 % qnew -X path:no-effect -m0 0.diff
103 abort: uncommitted changes in subrepository sub
103 abort: uncommitted changes in subrepository sub
104 [255]
104 [255]
105 % update substate when adding .hgsub w/clean updated subrepo
105 % update substate when adding .hgsub w/clean updated subrepo
106 A .hgsub
106 A .hgsub
107 % qnew -X path:no-effect -m0 0.diff
107 % qnew -X path:no-effect -m0 0.diff
108 path sub
108 path sub
109 source sub
109 source sub
110 revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
110 revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
111
111
112 $ testmod qnew --cwd .. -R repo-2499-qnew -X path:no-effect -m1 1.diff
112 $ testmod qnew --cwd .. -R repo-2499-qnew -X path:no-effect -m1 1.diff
113 adding a
113 adding a
114 % abort when modifying .hgsub w/dirty subrepo
114 % abort when modifying .hgsub w/dirty subrepo
115 M .hgsub
115 M .hgsub
116 A sub2/a
116 A sub2/a
117 % qnew --cwd .. -R repo-2499-qnew -X path:no-effect -m1 1.diff
117 % qnew --cwd .. -R repo-2499-qnew -X path:no-effect -m1 1.diff
118 abort: uncommitted changes in subrepository sub2
118 abort: uncommitted changes in subrepository sub2
119 [255]
119 [255]
120 % update substate when modifying .hgsub w/clean updated subrepo
120 % update substate when modifying .hgsub w/clean updated subrepo
121 M .hgsub
121 M .hgsub
122 % qnew --cwd .. -R repo-2499-qnew -X path:no-effect -m1 1.diff
122 % qnew --cwd .. -R repo-2499-qnew -X path:no-effect -m1 1.diff
123 path sub
123 path sub
124 source sub
124 source sub
125 revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
125 revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
126 path sub2
126 path sub2
127 source sub2
127 source sub2
128 revision 1f94c7611cc6b74f5a17b16121a1170d44776845
128 revision 1f94c7611cc6b74f5a17b16121a1170d44776845
129
129
130 $ hg qpop -qa
130 $ hg qpop -qa
131 patch queue now empty
131 patch queue now empty
132 $ testrm1 qnew -m2 2.diff
132 $ testrm1 qnew -m2 2.diff
133 adding a
133 adding a
134 % update substate when removing .hgsub w/dirty subrepo
134 % update substate when removing .hgsub w/dirty subrepo
135 M sub3/a
135 M sub3/a
136 R .hgsub
136 R .hgsub
137 % qnew -m2 2.diff
137 % qnew -m2 2.diff
138 % debugsub should be empty
138 % debugsub should be empty
139
139
140 $ hg qpop -qa
140 $ hg qpop -qa
141 patch queue now empty
141 patch queue now empty
142 $ testrm2 qnew -m3 3.diff
142 $ testrm2 qnew -m3 3.diff
143 adding a
143 adding a
144 % update substate when removing .hgsub w/clean updated subrepo
144 % update substate when removing .hgsub w/clean updated subrepo
145 R .hgsub
145 R .hgsub
146 % qnew -m3 3.diff
146 % qnew -m3 3.diff
147 % debugsub should be empty
147 % debugsub should be empty
148
148
149 $ cd ..
149 $ cd ..
150
150
151
151
152 handle subrepos safely on qrefresh
152 handle subrepos safely on qrefresh
153
153
154 $ mkrepo repo-2499-qrefresh
154 $ mkrepo repo-2499-qrefresh
155 $ hg qnew -m0 0.diff
155 $ hg qnew -m0 0.diff
156 $ testadd qrefresh
156 $ testadd qrefresh
157 adding a
157 adding a
158 % abort when adding .hgsub w/dirty subrepo
158 % abort when adding .hgsub w/dirty subrepo
159 A .hgsub
159 A .hgsub
160 A sub/a
160 A sub/a
161 % qrefresh
161 % qrefresh
162 abort: uncommitted changes in subrepository sub
162 abort: uncommitted changes in subrepository sub
163 [255]
163 [255]
164 % update substate when adding .hgsub w/clean updated subrepo
164 % update substate when adding .hgsub w/clean updated subrepo
165 A .hgsub
165 A .hgsub
166 % qrefresh
166 % qrefresh
167 path sub
167 path sub
168 source sub
168 source sub
169 revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
169 revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
170
170
171 $ hg qnew -m1 1.diff
171 $ hg qnew -m1 1.diff
172 $ testmod qrefresh
172 $ testmod qrefresh
173 adding a
173 adding a
174 % abort when modifying .hgsub w/dirty subrepo
174 % abort when modifying .hgsub w/dirty subrepo
175 M .hgsub
175 M .hgsub
176 A sub2/a
176 A sub2/a
177 % qrefresh
177 % qrefresh
178 abort: uncommitted changes in subrepository sub2
178 abort: uncommitted changes in subrepository sub2
179 [255]
179 [255]
180 % update substate when modifying .hgsub w/clean updated subrepo
180 % update substate when modifying .hgsub w/clean updated subrepo
181 M .hgsub
181 M .hgsub
182 % qrefresh
182 % qrefresh
183 path sub
183 path sub
184 source sub
184 source sub
185 revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
185 revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
186 path sub2
186 path sub2
187 source sub2
187 source sub2
188 revision 1f94c7611cc6b74f5a17b16121a1170d44776845
188 revision 1f94c7611cc6b74f5a17b16121a1170d44776845
189
189
190 $ hg qpop -qa
190 $ hg qpop -qa
191 patch queue now empty
191 patch queue now empty
192 $ EXTRA='hg qnew -m2 2.diff'
192 $ EXTRA='hg qnew -m2 2.diff'
193 $ testrm1 qrefresh
193 $ testrm1 qrefresh
194 adding a
194 adding a
195 % update substate when removing .hgsub w/dirty subrepo
195 % update substate when removing .hgsub w/dirty subrepo
196 M sub3/a
196 M sub3/a
197 R .hgsub
197 R .hgsub
198 % qrefresh
198 % qrefresh
199 % debugsub should be empty
199 % debugsub should be empty
200
200
201 $ hg qpop -qa
201 $ hg qpop -qa
202 patch queue now empty
202 patch queue now empty
203 $ EXTRA='hg qnew -m3 3.diff'
203 $ EXTRA='hg qnew -m3 3.diff'
204 $ testrm2 qrefresh
204 $ testrm2 qrefresh
205 adding a
205 adding a
206 % update substate when removing .hgsub w/clean updated subrepo
206 % update substate when removing .hgsub w/clean updated subrepo
207 R .hgsub
207 R .hgsub
208 % qrefresh
208 % qrefresh
209 % debugsub should be empty
209 % debugsub should be empty
210 $ EXTRA=
210 $ EXTRA=
211
211
212 $ cd ..
212 $ cd ..
213
213
214
214
215 handle subrepos safely on qpush/qpop
215 handle subrepos safely on qpush/qpop
216 (and we cannot qpop / qpush with a modified subrepo)
216 (and we cannot qpop / qpush with a modified subrepo)
217
217
218 $ mkrepo repo-2499-qpush
218 $ mkrepo repo-2499-qpush
219 $ mksubrepo sub
219 $ mksubrepo sub
220 adding a
220 adding a
221 $ hg -R sub ci -m0sub
221 $ hg -R sub ci -m0sub
222 $ echo sub = sub > .hgsub
222 $ echo sub = sub > .hgsub
223 $ hg add .hgsub
223 $ hg add .hgsub
224 $ hg commit -m0
224 $ hg commit -m0
225 $ hg debugsub
225 $ hg debugsub
226 path sub
226 path sub
227 source sub
227 source sub
228 revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
228 revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
229 $ echo foo > ./sub/a
229 $ echo foo > ./sub/a
230 $ hg -R sub commit -m foo
230 $ hg -R sub commit -m foo
231 $ hg commit -m1
231 $ hg commit -m1
232 $ hg qimport -r "0:tip"
232 $ hg qimport -r "0:tip"
233 $ hg -R sub id --id
233 $ hg -R sub id --id
234 aa037b301eba
234 aa037b301eba
235
235
236 qpop
236 qpop
237 $ hg -R sub update 0000
237 $ hg -R sub update 0000
238 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
238 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
239 $ hg qpop
239 $ hg qpop
240 abort: local changed subrepos found, refresh first
240 abort: local changed subrepos found, refresh first
241 [255]
241 [255]
242 $ hg revert sub
242 $ hg revert sub
243 reverting subrepo sub
243 reverting subrepo sub
244 adding sub/a
244 adding sub/a
245 $ hg qpop
245 $ hg qpop
246 popping 1.diff
246 popping 1.diff
247 now at: 0.diff
247 now at: 0.diff
248 $ hg status -AS
248 $ hg status -AS
249 C .hgsub
249 C .hgsub
250 C .hgsubstate
250 C .hgsubstate
251 C sub/a
251 C sub/a
252 $ hg -R sub id --id
252 $ hg -R sub id --id
253 b2fdb12cd82b
253 b2fdb12cd82b
254
254
255 qpush
255 qpush
256 $ hg -R sub update 0000
256 $ hg -R sub update 0000
257 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
257 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
258 $ hg qpush
258 $ hg qpush
259 abort: local changed subrepos found, refresh first
259 abort: local changed subrepos found, refresh first
260 [255]
260 [255]
261 $ hg revert sub
261 $ hg revert sub
262 reverting subrepo sub
262 reverting subrepo sub
263 adding sub/a
263 adding sub/a
264 $ hg qpush
264 $ hg qpush
265 applying 1.diff
265 applying 1.diff
266 subrepository sub diverged (local revision: b2fdb12cd82b, remote revision: aa037b301eba)
266 subrepository sub diverged (local revision: b2fdb12cd82b, remote revision: aa037b301eba)
267 (M)erge, keep (l)ocal or keep (r)emote? m
267 (M)erge, keep (l)ocal or keep (r)emote? m
268 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
268 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
269 now at: 1.diff
269 now at: 1.diff
270 $ hg status -AS
270 $ hg status -AS
271 C .hgsub
271 C .hgsub
272 C .hgsubstate
272 C .hgsubstate
273 C sub/a
273 C sub/a
274 $ hg -R sub id --id
274 $ hg -R sub id --id
275 aa037b301eba
275 aa037b301eba
276
276
277 $ cd ..
277 $ cd ..
278
278
279
279
280 handle subrepos safely on qrecord
280 handle subrepos safely on qrecord
281
281
282 $ mkrepo repo-2499-qrecord
282 $ mkrepo repo-2499-qrecord
283 $ testadd qrecord --config ui.interactive=1 -m0 0.diff <<EOF
283 $ testadd qrecord --config ui.interactive=1 -m0 0.diff <<EOF
284 > y
284 > y
285 > y
285 > y
286 > EOF
286 > EOF
287 adding a
287 adding a
288 % abort when adding .hgsub w/dirty subrepo
288 % abort when adding .hgsub w/dirty subrepo
289 A .hgsub
289 A .hgsub
290 A sub/a
290 A sub/a
291 % qrecord --config ui.interactive=1 -m0 0.diff
291 % qrecord --config ui.interactive=1 -m0 0.diff
292 diff --git a/.hgsub b/.hgsub
292 diff --git a/.hgsub b/.hgsub
293 new file mode 100644
293 new file mode 100644
294 examine changes to '.hgsub'? [Ynesfdaq?]
294 examine changes to '.hgsub'? [Ynesfdaq?] y
295
295 abort: uncommitted changes in subrepository sub
296 abort: uncommitted changes in subrepository sub
296 [255]
297 [255]
297 % update substate when adding .hgsub w/clean updated subrepo
298 % update substate when adding .hgsub w/clean updated subrepo
298 A .hgsub
299 A .hgsub
299 % qrecord --config ui.interactive=1 -m0 0.diff
300 % qrecord --config ui.interactive=1 -m0 0.diff
300 diff --git a/.hgsub b/.hgsub
301 diff --git a/.hgsub b/.hgsub
301 new file mode 100644
302 new file mode 100644
302 examine changes to '.hgsub'? [Ynesfdaq?]
303 examine changes to '.hgsub'? [Ynesfdaq?] y
304
303 path sub
305 path sub
304 source sub
306 source sub
305 revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
307 revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
306
308
307 $ testmod qrecord --config ui.interactive=1 -m1 1.diff <<EOF
309 $ testmod qrecord --config ui.interactive=1 -m1 1.diff <<EOF
308 > y
310 > y
309 > y
311 > y
310 > EOF
312 > EOF
311 adding a
313 adding a
312 % abort when modifying .hgsub w/dirty subrepo
314 % abort when modifying .hgsub w/dirty subrepo
313 M .hgsub
315 M .hgsub
314 A sub2/a
316 A sub2/a
315 % qrecord --config ui.interactive=1 -m1 1.diff
317 % qrecord --config ui.interactive=1 -m1 1.diff
316 diff --git a/.hgsub b/.hgsub
318 diff --git a/.hgsub b/.hgsub
317 1 hunks, 1 lines changed
319 1 hunks, 1 lines changed
318 examine changes to '.hgsub'? [Ynesfdaq?]
320 examine changes to '.hgsub'? [Ynesfdaq?] y
321
319 @@ -1,1 +1,2 @@
322 @@ -1,1 +1,2 @@
320 sub = sub
323 sub = sub
321 +sub2 = sub2
324 +sub2 = sub2
322 record this change to '.hgsub'? [Ynesfdaq?]
325 record this change to '.hgsub'? [Ynesfdaq?] y
326
323 abort: uncommitted changes in subrepository sub2
327 abort: uncommitted changes in subrepository sub2
324 [255]
328 [255]
325 % update substate when modifying .hgsub w/clean updated subrepo
329 % update substate when modifying .hgsub w/clean updated subrepo
326 M .hgsub
330 M .hgsub
327 % qrecord --config ui.interactive=1 -m1 1.diff
331 % qrecord --config ui.interactive=1 -m1 1.diff
328 diff --git a/.hgsub b/.hgsub
332 diff --git a/.hgsub b/.hgsub
329 1 hunks, 1 lines changed
333 1 hunks, 1 lines changed
330 examine changes to '.hgsub'? [Ynesfdaq?]
334 examine changes to '.hgsub'? [Ynesfdaq?] y
335
331 @@ -1,1 +1,2 @@
336 @@ -1,1 +1,2 @@
332 sub = sub
337 sub = sub
333 +sub2 = sub2
338 +sub2 = sub2
334 record this change to '.hgsub'? [Ynesfdaq?]
339 record this change to '.hgsub'? [Ynesfdaq?] y
340
335 path sub
341 path sub
336 source sub
342 source sub
337 revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
343 revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
338 path sub2
344 path sub2
339 source sub2
345 source sub2
340 revision 1f94c7611cc6b74f5a17b16121a1170d44776845
346 revision 1f94c7611cc6b74f5a17b16121a1170d44776845
341
347
342 $ hg qpop -qa
348 $ hg qpop -qa
343 patch queue now empty
349 patch queue now empty
344 $ testrm1 qrecord --config ui.interactive=1 -m2 2.diff <<EOF
350 $ testrm1 qrecord --config ui.interactive=1 -m2 2.diff <<EOF
345 > y
351 > y
346 > y
352 > y
347 > EOF
353 > EOF
348 adding a
354 adding a
349 % update substate when removing .hgsub w/dirty subrepo
355 % update substate when removing .hgsub w/dirty subrepo
350 M sub3/a
356 M sub3/a
351 R .hgsub
357 R .hgsub
352 % qrecord --config ui.interactive=1 -m2 2.diff
358 % qrecord --config ui.interactive=1 -m2 2.diff
353 diff --git a/.hgsub b/.hgsub
359 diff --git a/.hgsub b/.hgsub
354 deleted file mode 100644
360 deleted file mode 100644
355 examine changes to '.hgsub'? [Ynesfdaq?]
361 examine changes to '.hgsub'? [Ynesfdaq?] y
362
356 % debugsub should be empty
363 % debugsub should be empty
357
364
358 $ hg qpop -qa
365 $ hg qpop -qa
359 patch queue now empty
366 patch queue now empty
360 $ testrm2 qrecord --config ui.interactive=1 -m3 3.diff <<EOF
367 $ testrm2 qrecord --config ui.interactive=1 -m3 3.diff <<EOF
361 > y
368 > y
362 > y
369 > y
363 > EOF
370 > EOF
364 adding a
371 adding a
365 % update substate when removing .hgsub w/clean updated subrepo
372 % update substate when removing .hgsub w/clean updated subrepo
366 R .hgsub
373 R .hgsub
367 % qrecord --config ui.interactive=1 -m3 3.diff
374 % qrecord --config ui.interactive=1 -m3 3.diff
368 diff --git a/.hgsub b/.hgsub
375 diff --git a/.hgsub b/.hgsub
369 deleted file mode 100644
376 deleted file mode 100644
370 examine changes to '.hgsub'? [Ynesfdaq?]
377 examine changes to '.hgsub'? [Ynesfdaq?] y
378
371 % debugsub should be empty
379 % debugsub should be empty
372
380
373 $ cd ..
381 $ cd ..
374
382
375
383
376 correctly handle subrepos with patch queues
384 correctly handle subrepos with patch queues
377 $ mkrepo repo-subrepo-with-queue
385 $ mkrepo repo-subrepo-with-queue
378 $ mksubrepo sub
386 $ mksubrepo sub
379 adding a
387 adding a
380 $ hg -R sub qnew sub0.diff
388 $ hg -R sub qnew sub0.diff
381 $ echo sub = sub >> .hgsub
389 $ echo sub = sub >> .hgsub
382 $ hg add .hgsub
390 $ hg add .hgsub
383 $ hg qnew 0.diff
391 $ hg qnew 0.diff
384
392
385 $ cd ..
393 $ cd ..
386
394
387 check whether MQ operations can import updated .hgsubstate correctly
395 check whether MQ operations can import updated .hgsubstate correctly
388 both into 'revision' and 'patch file under .hg/patches':
396 both into 'revision' and 'patch file under .hg/patches':
389
397
390 $ hg init importing-hgsubstate
398 $ hg init importing-hgsubstate
391 $ cd importing-hgsubstate
399 $ cd importing-hgsubstate
392
400
393 $ echo a > a
401 $ echo a > a
394 $ hg commit -u test -d '0 0' -Am '#0 in parent'
402 $ hg commit -u test -d '0 0' -Am '#0 in parent'
395 adding a
403 adding a
396 $ hg init sub
404 $ hg init sub
397 $ echo sa > sub/sa
405 $ echo sa > sub/sa
398 $ hg -R sub commit -u test -d '0 0' -Am '#0 in sub'
406 $ hg -R sub commit -u test -d '0 0' -Am '#0 in sub'
399 adding sa
407 adding sa
400 $ echo 'sub = sub' > .hgsub
408 $ echo 'sub = sub' > .hgsub
401 $ touch .hgsubstate
409 $ touch .hgsubstate
402 $ hg add .hgsub .hgsubstate
410 $ hg add .hgsub .hgsubstate
403
411
404 $ hg qnew -u test -d '0 0' import-at-qnew
412 $ hg qnew -u test -d '0 0' import-at-qnew
405 $ hg -R sub parents --template '{node} sub\n'
413 $ hg -R sub parents --template '{node} sub\n'
406 b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
414 b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
407 $ cat .hgsubstate
415 $ cat .hgsubstate
408 b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
416 b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
409 $ hg diff -c tip
417 $ hg diff -c tip
410 diff -r f499373e340c -r f69e96d86e75 .hgsub
418 diff -r f499373e340c -r f69e96d86e75 .hgsub
411 --- /dev/null
419 --- /dev/null
412 +++ b/.hgsub
420 +++ b/.hgsub
413 @@ -0,0 +1,1 @@
421 @@ -0,0 +1,1 @@
414 +sub = sub
422 +sub = sub
415 diff -r f499373e340c -r f69e96d86e75 .hgsubstate
423 diff -r f499373e340c -r f69e96d86e75 .hgsubstate
416 --- /dev/null
424 --- /dev/null
417 +++ b/.hgsubstate
425 +++ b/.hgsubstate
418 @@ -0,0 +1,1 @@
426 @@ -0,0 +1,1 @@
419 +b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
427 +b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
420 $ cat .hg/patches/import-at-qnew
428 $ cat .hg/patches/import-at-qnew
421 # HG changeset patch
429 # HG changeset patch
422 # User test
430 # User test
423 # Date 0 0
431 # Date 0 0
424 # Parent f499373e340cdca5d01dee904aeb42dd2a325e71
432 # Parent f499373e340cdca5d01dee904aeb42dd2a325e71
425
433
426 diff -r f499373e340c -r f69e96d86e75 .hgsub
434 diff -r f499373e340c -r f69e96d86e75 .hgsub
427 --- /dev/null
435 --- /dev/null
428 +++ b/.hgsub
436 +++ b/.hgsub
429 @@ -0,0 +1,1 @@
437 @@ -0,0 +1,1 @@
430 +sub = sub
438 +sub = sub
431 diff -r f499373e340c -r f69e96d86e75 .hgsubstate
439 diff -r f499373e340c -r f69e96d86e75 .hgsubstate
432 --- /dev/null
440 --- /dev/null
433 +++ b/.hgsubstate
441 +++ b/.hgsubstate
434 @@ -0,0 +1,1 @@
442 @@ -0,0 +1,1 @@
435 +b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
443 +b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
436 $ hg parents --template '{node}\n'
444 $ hg parents --template '{node}\n'
437 f69e96d86e75a6d4fd88285dc9697acb23951041
445 f69e96d86e75a6d4fd88285dc9697acb23951041
438 $ hg parents --template '{files}\n'
446 $ hg parents --template '{files}\n'
439 .hgsub .hgsubstate
447 .hgsub .hgsubstate
440
448
441 check also whether qnew not including ".hgsubstate" explicitly causes
449 check also whether qnew not including ".hgsubstate" explicitly causes
442 as same result (in node hash) as one including it.
450 as same result (in node hash) as one including it.
443
451
444 $ hg qpop -a -q
452 $ hg qpop -a -q
445 patch queue now empty
453 patch queue now empty
446 $ hg qdelete import-at-qnew
454 $ hg qdelete import-at-qnew
447 $ echo 'sub = sub' > .hgsub
455 $ echo 'sub = sub' > .hgsub
448 $ hg add .hgsub
456 $ hg add .hgsub
449 $ rm -f .hgsubstate
457 $ rm -f .hgsubstate
450 $ hg qnew -u test -d '0 0' import-at-qnew
458 $ hg qnew -u test -d '0 0' import-at-qnew
451 $ hg parents --template '{node}\n'
459 $ hg parents --template '{node}\n'
452 f69e96d86e75a6d4fd88285dc9697acb23951041
460 f69e96d86e75a6d4fd88285dc9697acb23951041
453 $ hg parents --template '{files}\n'
461 $ hg parents --template '{files}\n'
454 .hgsub .hgsubstate
462 .hgsub .hgsubstate
455
463
456 check whether qrefresh imports updated .hgsubstate correctly
464 check whether qrefresh imports updated .hgsubstate correctly
457
465
458 $ hg qpop
466 $ hg qpop
459 popping import-at-qnew
467 popping import-at-qnew
460 patch queue now empty
468 patch queue now empty
461 $ hg qpush
469 $ hg qpush
462 applying import-at-qnew
470 applying import-at-qnew
463 now at: import-at-qnew
471 now at: import-at-qnew
464 $ hg parents --template '{files}\n'
472 $ hg parents --template '{files}\n'
465 .hgsub .hgsubstate
473 .hgsub .hgsubstate
466
474
467 $ hg qnew import-at-qrefresh
475 $ hg qnew import-at-qrefresh
468 $ echo sb > sub/sb
476 $ echo sb > sub/sb
469 $ hg -R sub commit -u test -d '0 0' -Am '#1 in sub'
477 $ hg -R sub commit -u test -d '0 0' -Am '#1 in sub'
470 adding sb
478 adding sb
471 $ hg qrefresh -u test -d '0 0'
479 $ hg qrefresh -u test -d '0 0'
472 $ hg -R sub parents --template '{node} sub\n'
480 $ hg -R sub parents --template '{node} sub\n'
473 88ac1bef5ed43b689d1d200b59886b675dec474b sub
481 88ac1bef5ed43b689d1d200b59886b675dec474b sub
474 $ cat .hgsubstate
482 $ cat .hgsubstate
475 88ac1bef5ed43b689d1d200b59886b675dec474b sub
483 88ac1bef5ed43b689d1d200b59886b675dec474b sub
476 $ hg diff -c tip
484 $ hg diff -c tip
477 diff -r 05b056bb9c8c -r d987bec230f4 .hgsubstate
485 diff -r 05b056bb9c8c -r d987bec230f4 .hgsubstate
478 --- a/.hgsubstate
486 --- a/.hgsubstate
479 +++ b/.hgsubstate
487 +++ b/.hgsubstate
480 @@ -1,1 +1,1 @@
488 @@ -1,1 +1,1 @@
481 -b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
489 -b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
482 +88ac1bef5ed43b689d1d200b59886b675dec474b sub
490 +88ac1bef5ed43b689d1d200b59886b675dec474b sub
483 $ cat .hg/patches/import-at-qrefresh
491 $ cat .hg/patches/import-at-qrefresh
484 # HG changeset patch
492 # HG changeset patch
485 # User test
493 # User test
486 # Date 0 0
494 # Date 0 0
487 # Parent 05b056bb9c8c05ff15258b84fd42ab3527271033
495 # Parent 05b056bb9c8c05ff15258b84fd42ab3527271033
488
496
489 diff -r 05b056bb9c8c .hgsubstate
497 diff -r 05b056bb9c8c .hgsubstate
490 --- a/.hgsubstate
498 --- a/.hgsubstate
491 +++ b/.hgsubstate
499 +++ b/.hgsubstate
492 @@ -1,1 +1,1 @@
500 @@ -1,1 +1,1 @@
493 -b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
501 -b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
494 +88ac1bef5ed43b689d1d200b59886b675dec474b sub
502 +88ac1bef5ed43b689d1d200b59886b675dec474b sub
495 $ hg parents --template '{files}\n'
503 $ hg parents --template '{files}\n'
496 .hgsubstate
504 .hgsubstate
497
505
498 $ hg qrefresh -u test -d '0 0'
506 $ hg qrefresh -u test -d '0 0'
499 $ cat .hgsubstate
507 $ cat .hgsubstate
500 88ac1bef5ed43b689d1d200b59886b675dec474b sub
508 88ac1bef5ed43b689d1d200b59886b675dec474b sub
501 $ hg diff -c tip
509 $ hg diff -c tip
502 diff -r 05b056bb9c8c -r d987bec230f4 .hgsubstate
510 diff -r 05b056bb9c8c -r d987bec230f4 .hgsubstate
503 --- a/.hgsubstate
511 --- a/.hgsubstate
504 +++ b/.hgsubstate
512 +++ b/.hgsubstate
505 @@ -1,1 +1,1 @@
513 @@ -1,1 +1,1 @@
506 -b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
514 -b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
507 +88ac1bef5ed43b689d1d200b59886b675dec474b sub
515 +88ac1bef5ed43b689d1d200b59886b675dec474b sub
508 $ cat .hg/patches/import-at-qrefresh
516 $ cat .hg/patches/import-at-qrefresh
509 # HG changeset patch
517 # HG changeset patch
510 # User test
518 # User test
511 # Date 0 0
519 # Date 0 0
512 # Parent 05b056bb9c8c05ff15258b84fd42ab3527271033
520 # Parent 05b056bb9c8c05ff15258b84fd42ab3527271033
513
521
514 diff -r 05b056bb9c8c .hgsubstate
522 diff -r 05b056bb9c8c .hgsubstate
515 --- a/.hgsubstate
523 --- a/.hgsubstate
516 +++ b/.hgsubstate
524 +++ b/.hgsubstate
517 @@ -1,1 +1,1 @@
525 @@ -1,1 +1,1 @@
518 -b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
526 -b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
519 +88ac1bef5ed43b689d1d200b59886b675dec474b sub
527 +88ac1bef5ed43b689d1d200b59886b675dec474b sub
520 $ hg parents --template '{files}\n'
528 $ hg parents --template '{files}\n'
521 .hgsubstate
529 .hgsubstate
522
530
523 $ hg update -C tip
531 $ hg update -C tip
524 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
532 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
525 $ hg qpop -a
533 $ hg qpop -a
526 popping import-at-qrefresh
534 popping import-at-qrefresh
527 popping import-at-qnew
535 popping import-at-qnew
528 patch queue now empty
536 patch queue now empty
529
537
530 $ hg -R sub update -C 0
538 $ hg -R sub update -C 0
531 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
539 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
532 $ echo 'sub = sub' > .hgsub
540 $ echo 'sub = sub' > .hgsub
533 $ hg commit -Am '#1 in parent'
541 $ hg commit -Am '#1 in parent'
534 adding .hgsub
542 adding .hgsub
535 $ hg -R sub update -C 1
543 $ hg -R sub update -C 1
536 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
544 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
537 $ hg commit -Am '#2 in parent (but will be rolled back soon)'
545 $ hg commit -Am '#2 in parent (but will be rolled back soon)'
538 $ hg rollback
546 $ hg rollback
539 repository tip rolled back to revision 1 (undo commit)
547 repository tip rolled back to revision 1 (undo commit)
540 working directory now based on revision 1
548 working directory now based on revision 1
541 $ hg status
549 $ hg status
542 M .hgsubstate
550 M .hgsubstate
543 $ hg qnew -u test -d '0 0' checkstate-at-qnew
551 $ hg qnew -u test -d '0 0' checkstate-at-qnew
544 $ hg -R sub parents --template '{node} sub\n'
552 $ hg -R sub parents --template '{node} sub\n'
545 88ac1bef5ed43b689d1d200b59886b675dec474b sub
553 88ac1bef5ed43b689d1d200b59886b675dec474b sub
546 $ cat .hgsubstate
554 $ cat .hgsubstate
547 88ac1bef5ed43b689d1d200b59886b675dec474b sub
555 88ac1bef5ed43b689d1d200b59886b675dec474b sub
548 $ hg diff -c tip
556 $ hg diff -c tip
549 diff -r 4d91eb2fa1d1 -r 1259c112d884 .hgsubstate
557 diff -r 4d91eb2fa1d1 -r 1259c112d884 .hgsubstate
550 --- a/.hgsubstate
558 --- a/.hgsubstate
551 +++ b/.hgsubstate
559 +++ b/.hgsubstate
552 @@ -1,1 +1,1 @@
560 @@ -1,1 +1,1 @@
553 -b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
561 -b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
554 +88ac1bef5ed43b689d1d200b59886b675dec474b sub
562 +88ac1bef5ed43b689d1d200b59886b675dec474b sub
555 $ cat .hg/patches/checkstate-at-qnew
563 $ cat .hg/patches/checkstate-at-qnew
556 # HG changeset patch
564 # HG changeset patch
557 # User test
565 # User test
558 # Date 0 0
566 # Date 0 0
559 # Parent 4d91eb2fa1d1b22ec513347b9cd06f6b49d470fa
567 # Parent 4d91eb2fa1d1b22ec513347b9cd06f6b49d470fa
560
568
561 diff -r 4d91eb2fa1d1 -r 1259c112d884 .hgsubstate
569 diff -r 4d91eb2fa1d1 -r 1259c112d884 .hgsubstate
562 --- a/.hgsubstate
570 --- a/.hgsubstate
563 +++ b/.hgsubstate
571 +++ b/.hgsubstate
564 @@ -1,1 +1,1 @@
572 @@ -1,1 +1,1 @@
565 -b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
573 -b6f6e9c41f3dfd374a6d2ed4535c87951cf979cf sub
566 +88ac1bef5ed43b689d1d200b59886b675dec474b sub
574 +88ac1bef5ed43b689d1d200b59886b675dec474b sub
567 $ hg parents --template '{files}\n'
575 $ hg parents --template '{files}\n'
568 .hgsubstate
576 .hgsubstate
569
577
570 check whether qrefresh not including ".hgsubstate" explicitly causes
578 check whether qrefresh not including ".hgsubstate" explicitly causes
571 as same result (in node hash) as one including it.
579 as same result (in node hash) as one including it.
572
580
573 $ hg update -C -q 0
581 $ hg update -C -q 0
574 $ hg qpop -a -q
582 $ hg qpop -a -q
575 patch queue now empty
583 patch queue now empty
576 $ hg qnew -u test -d '0 0' add-hgsub-at-qrefresh
584 $ hg qnew -u test -d '0 0' add-hgsub-at-qrefresh
577 $ echo 'sub = sub' > .hgsub
585 $ echo 'sub = sub' > .hgsub
578 $ echo > .hgsubstate
586 $ echo > .hgsubstate
579 $ hg add .hgsub .hgsubstate
587 $ hg add .hgsub .hgsubstate
580 $ hg qrefresh -u test -d '0 0'
588 $ hg qrefresh -u test -d '0 0'
581 $ hg parents --template '{node}\n'
589 $ hg parents --template '{node}\n'
582 7c48c35501aae6770ed9c2517014628615821a8e
590 7c48c35501aae6770ed9c2517014628615821a8e
583 $ hg parents --template '{files}\n'
591 $ hg parents --template '{files}\n'
584 .hgsub .hgsubstate
592 .hgsub .hgsubstate
585
593
586 $ hg qpop -a -q
594 $ hg qpop -a -q
587 patch queue now empty
595 patch queue now empty
588 $ hg qdelete add-hgsub-at-qrefresh
596 $ hg qdelete add-hgsub-at-qrefresh
589 $ hg qnew -u test -d '0 0' add-hgsub-at-qrefresh
597 $ hg qnew -u test -d '0 0' add-hgsub-at-qrefresh
590 $ echo 'sub = sub' > .hgsub
598 $ echo 'sub = sub' > .hgsub
591 $ hg add .hgsub
599 $ hg add .hgsub
592 $ rm -f .hgsubstate
600 $ rm -f .hgsubstate
593 $ hg qrefresh -u test -d '0 0'
601 $ hg qrefresh -u test -d '0 0'
594 $ hg parents --template '{node}\n'
602 $ hg parents --template '{node}\n'
595 7c48c35501aae6770ed9c2517014628615821a8e
603 7c48c35501aae6770ed9c2517014628615821a8e
596 $ hg parents --template '{files}\n'
604 $ hg parents --template '{files}\n'
597 .hgsub .hgsubstate
605 .hgsub .hgsubstate
598
606
599 $ cd ..
607 $ cd ..
600
608
601 $ cd ..
609 $ cd ..
@@ -1,2591 +1,2592 b''
1 Note for future hackers of patchbomb: this file is a bit heavy on
1 Note for future hackers of patchbomb: this file is a bit heavy on
2 wildcards in test expectations due to how many things like hostnames
2 wildcards in test expectations due to how many things like hostnames
3 tend to make it into outputs. As a result, you may need to perform the
3 tend to make it into outputs. As a result, you may need to perform the
4 following regular expression substitutions:
4 following regular expression substitutions:
5 @$HOSTNAME> -> @*> (glob)
5 @$HOSTNAME> -> @*> (glob)
6 Mercurial-patchbomb/.* -> Mercurial-patchbomb/* (glob)
6 Mercurial-patchbomb/.* -> Mercurial-patchbomb/* (glob)
7 /mixed; boundary="===+[0-9]+==" -> /mixed; boundary="===*== (glob)"
7 /mixed; boundary="===+[0-9]+==" -> /mixed; boundary="===*== (glob)"
8 --===+[0-9]+=+--$ -> --===*=-- (glob)
8 --===+[0-9]+=+--$ -> --===*=-- (glob)
9 --===+[0-9]+=+$ -> --===*= (glob)
9 --===+[0-9]+=+$ -> --===*= (glob)
10
10
11 $ cat > prune-blank-after-boundary.py <<EOF
11 $ cat > prune-blank-after-boundary.py <<EOF
12 > import sys
12 > import sys
13 > skipblank = False
13 > skipblank = False
14 > trim = lambda x: x.strip(' \r\n')
14 > trim = lambda x: x.strip(' \r\n')
15 > for l in sys.stdin:
15 > for l in sys.stdin:
16 > if trim(l).endswith('=--') or trim(l).endswith('=='):
16 > if trim(l).endswith('=--') or trim(l).endswith('=='):
17 > skipblank = True
17 > skipblank = True
18 > print l,
18 > print l,
19 > continue
19 > continue
20 > if not trim(l) and skipblank:
20 > if not trim(l) and skipblank:
21 > continue
21 > continue
22 > skipblank = False
22 > skipblank = False
23 > print l,
23 > print l,
24 > EOF
24 > EOF
25 $ FILTERBOUNDARY="python `pwd`/prune-blank-after-boundary.py"
25 $ FILTERBOUNDARY="python `pwd`/prune-blank-after-boundary.py"
26 $ echo "[extensions]" >> $HGRCPATH
26 $ echo "[extensions]" >> $HGRCPATH
27 $ echo "patchbomb=" >> $HGRCPATH
27 $ echo "patchbomb=" >> $HGRCPATH
28
28
29 $ hg init t
29 $ hg init t
30 $ cd t
30 $ cd t
31 $ echo a > a
31 $ echo a > a
32 $ hg commit -Ama -d '1 0'
32 $ hg commit -Ama -d '1 0'
33 adding a
33 adding a
34
34
35 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -r tip
35 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -r tip
36 this patch series consists of 1 patches.
36 this patch series consists of 1 patches.
37
37
38
38
39 displaying [PATCH] a ...
39 displaying [PATCH] a ...
40 Content-Type: text/plain; charset="us-ascii"
40 Content-Type: text/plain; charset="us-ascii"
41 MIME-Version: 1.0
41 MIME-Version: 1.0
42 Content-Transfer-Encoding: 7bit
42 Content-Transfer-Encoding: 7bit
43 Subject: [PATCH] a
43 Subject: [PATCH] a
44 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
44 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
45 X-Mercurial-Series-Index: 1
45 X-Mercurial-Series-Index: 1
46 X-Mercurial-Series-Total: 1
46 X-Mercurial-Series-Total: 1
47 Message-Id: <8580ff50825a50c8f716.60@*> (glob)
47 Message-Id: <8580ff50825a50c8f716.60@*> (glob)
48 X-Mercurial-Series-Id: <8580ff50825a50c8f716.60@*> (glob)
48 X-Mercurial-Series-Id: <8580ff50825a50c8f716.60@*> (glob)
49 User-Agent: Mercurial-patchbomb/* (glob)
49 User-Agent: Mercurial-patchbomb/* (glob)
50 Date: Thu, 01 Jan 1970 00:01:00 +0000
50 Date: Thu, 01 Jan 1970 00:01:00 +0000
51 From: quux
51 From: quux
52 To: foo
52 To: foo
53 Cc: bar
53 Cc: bar
54
54
55 # HG changeset patch
55 # HG changeset patch
56 # User test
56 # User test
57 # Date 1 0
57 # Date 1 0
58 # Thu Jan 01 00:00:01 1970 +0000
58 # Thu Jan 01 00:00:01 1970 +0000
59 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
59 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
60 # Parent 0000000000000000000000000000000000000000
60 # Parent 0000000000000000000000000000000000000000
61 a
61 a
62
62
63 diff -r 000000000000 -r 8580ff50825a a
63 diff -r 000000000000 -r 8580ff50825a a
64 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
64 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
65 +++ b/a Thu Jan 01 00:00:01 1970 +0000
65 +++ b/a Thu Jan 01 00:00:01 1970 +0000
66 @@ -0,0 +1,1 @@
66 @@ -0,0 +1,1 @@
67 +a
67 +a
68
68
69
69
70 $ hg --config ui.interactive=1 email --confirm -n -f quux -t foo -c bar -r tip<<EOF
70 $ hg --config ui.interactive=1 email --confirm -n -f quux -t foo -c bar -r tip<<EOF
71 > n
71 > n
72 > EOF
72 > EOF
73 this patch series consists of 1 patches.
73 this patch series consists of 1 patches.
74
74
75
75
76 Final summary:
76 Final summary:
77
77
78 From: quux
78 From: quux
79 To: foo
79 To: foo
80 Cc: bar
80 Cc: bar
81 Subject: [PATCH] a
81 Subject: [PATCH] a
82 a | 1 +
82 a | 1 +
83 1 files changed, 1 insertions(+), 0 deletions(-)
83 1 files changed, 1 insertions(+), 0 deletions(-)
84
84
85 are you sure you want to send (yn)? abort: patchbomb canceled
85 are you sure you want to send (yn)? n
86 abort: patchbomb canceled
86 [255]
87 [255]
87
88
88 $ echo b > b
89 $ echo b > b
89 $ hg commit -Amb -d '2 0'
90 $ hg commit -Amb -d '2 0'
90 adding b
91 adding b
91
92
92 $ hg email --date '1970-1-1 0:2' -n -f quux -t foo -c bar -s test -r 0:tip
93 $ hg email --date '1970-1-1 0:2' -n -f quux -t foo -c bar -s test -r 0:tip
93 this patch series consists of 2 patches.
94 this patch series consists of 2 patches.
94
95
95
96
96 Write the introductory message for the patch series.
97 Write the introductory message for the patch series.
97
98
98
99
99 displaying [PATCH 0 of 2] test ...
100 displaying [PATCH 0 of 2] test ...
100 Content-Type: text/plain; charset="us-ascii"
101 Content-Type: text/plain; charset="us-ascii"
101 MIME-Version: 1.0
102 MIME-Version: 1.0
102 Content-Transfer-Encoding: 7bit
103 Content-Transfer-Encoding: 7bit
103 Subject: [PATCH 0 of 2] test
104 Subject: [PATCH 0 of 2] test
104 Message-Id: <patchbomb.120@*> (glob)
105 Message-Id: <patchbomb.120@*> (glob)
105 User-Agent: Mercurial-patchbomb/* (glob)
106 User-Agent: Mercurial-patchbomb/* (glob)
106 Date: Thu, 01 Jan 1970 00:02:00 +0000
107 Date: Thu, 01 Jan 1970 00:02:00 +0000
107 From: quux
108 From: quux
108 To: foo
109 To: foo
109 Cc: bar
110 Cc: bar
110
111
111
112
112 displaying [PATCH 1 of 2] a ...
113 displaying [PATCH 1 of 2] a ...
113 Content-Type: text/plain; charset="us-ascii"
114 Content-Type: text/plain; charset="us-ascii"
114 MIME-Version: 1.0
115 MIME-Version: 1.0
115 Content-Transfer-Encoding: 7bit
116 Content-Transfer-Encoding: 7bit
116 Subject: [PATCH 1 of 2] a
117 Subject: [PATCH 1 of 2] a
117 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
118 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
118 X-Mercurial-Series-Index: 1
119 X-Mercurial-Series-Index: 1
119 X-Mercurial-Series-Total: 2
120 X-Mercurial-Series-Total: 2
120 Message-Id: <8580ff50825a50c8f716.121@*> (glob)
121 Message-Id: <8580ff50825a50c8f716.121@*> (glob)
121 X-Mercurial-Series-Id: <8580ff50825a50c8f716.121@*> (glob)
122 X-Mercurial-Series-Id: <8580ff50825a50c8f716.121@*> (glob)
122 In-Reply-To: <patchbomb.120@*> (glob)
123 In-Reply-To: <patchbomb.120@*> (glob)
123 References: <patchbomb.120@*> (glob)
124 References: <patchbomb.120@*> (glob)
124 User-Agent: Mercurial-patchbomb/* (glob)
125 User-Agent: Mercurial-patchbomb/* (glob)
125 Date: Thu, 01 Jan 1970 00:02:01 +0000
126 Date: Thu, 01 Jan 1970 00:02:01 +0000
126 From: quux
127 From: quux
127 To: foo
128 To: foo
128 Cc: bar
129 Cc: bar
129
130
130 # HG changeset patch
131 # HG changeset patch
131 # User test
132 # User test
132 # Date 1 0
133 # Date 1 0
133 # Thu Jan 01 00:00:01 1970 +0000
134 # Thu Jan 01 00:00:01 1970 +0000
134 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
135 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
135 # Parent 0000000000000000000000000000000000000000
136 # Parent 0000000000000000000000000000000000000000
136 a
137 a
137
138
138 diff -r 000000000000 -r 8580ff50825a a
139 diff -r 000000000000 -r 8580ff50825a a
139 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
140 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
140 +++ b/a Thu Jan 01 00:00:01 1970 +0000
141 +++ b/a Thu Jan 01 00:00:01 1970 +0000
141 @@ -0,0 +1,1 @@
142 @@ -0,0 +1,1 @@
142 +a
143 +a
143
144
144 displaying [PATCH 2 of 2] b ...
145 displaying [PATCH 2 of 2] b ...
145 Content-Type: text/plain; charset="us-ascii"
146 Content-Type: text/plain; charset="us-ascii"
146 MIME-Version: 1.0
147 MIME-Version: 1.0
147 Content-Transfer-Encoding: 7bit
148 Content-Transfer-Encoding: 7bit
148 Subject: [PATCH 2 of 2] b
149 Subject: [PATCH 2 of 2] b
149 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
150 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
150 X-Mercurial-Series-Index: 2
151 X-Mercurial-Series-Index: 2
151 X-Mercurial-Series-Total: 2
152 X-Mercurial-Series-Total: 2
152 Message-Id: <97d72e5f12c7e84f8506.122@*> (glob)
153 Message-Id: <97d72e5f12c7e84f8506.122@*> (glob)
153 X-Mercurial-Series-Id: <8580ff50825a50c8f716.121@*> (glob)
154 X-Mercurial-Series-Id: <8580ff50825a50c8f716.121@*> (glob)
154 In-Reply-To: <patchbomb.120@*> (glob)
155 In-Reply-To: <patchbomb.120@*> (glob)
155 References: <patchbomb.120@*> (glob)
156 References: <patchbomb.120@*> (glob)
156 User-Agent: Mercurial-patchbomb/* (glob)
157 User-Agent: Mercurial-patchbomb/* (glob)
157 Date: Thu, 01 Jan 1970 00:02:02 +0000
158 Date: Thu, 01 Jan 1970 00:02:02 +0000
158 From: quux
159 From: quux
159 To: foo
160 To: foo
160 Cc: bar
161 Cc: bar
161
162
162 # HG changeset patch
163 # HG changeset patch
163 # User test
164 # User test
164 # Date 2 0
165 # Date 2 0
165 # Thu Jan 01 00:00:02 1970 +0000
166 # Thu Jan 01 00:00:02 1970 +0000
166 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
167 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
167 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
168 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
168 b
169 b
169
170
170 diff -r 8580ff50825a -r 97d72e5f12c7 b
171 diff -r 8580ff50825a -r 97d72e5f12c7 b
171 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
172 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
172 +++ b/b Thu Jan 01 00:00:02 1970 +0000
173 +++ b/b Thu Jan 01 00:00:02 1970 +0000
173 @@ -0,0 +1,1 @@
174 @@ -0,0 +1,1 @@
174 +b
175 +b
175
176
176
177
177 .hg/last-email.txt
178 .hg/last-email.txt
178
179
179 $ cat > editor.sh << '__EOF__'
180 $ cat > editor.sh << '__EOF__'
180 > echo "a precious introductory message" > "$1"
181 > echo "a precious introductory message" > "$1"
181 > __EOF__
182 > __EOF__
182 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg email -n -t foo -s test -r 0:tip > /dev/null
183 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg email -n -t foo -s test -r 0:tip > /dev/null
183 $ cat .hg/last-email.txt
184 $ cat .hg/last-email.txt
184 a precious introductory message
185 a precious introductory message
185
186
186 $ hg email -m test.mbox -f quux -t foo -c bar -s test 0:tip \
187 $ hg email -m test.mbox -f quux -t foo -c bar -s test 0:tip \
187 > --config extensions.progress= --config progress.assume-tty=1 \
188 > --config extensions.progress= --config progress.assume-tty=1 \
188 > --config progress.delay=0 --config progress.refresh=0 \
189 > --config progress.delay=0 --config progress.refresh=0 \
189 > --config progress.width=60
190 > --config progress.width=60
190 this patch series consists of 2 patches.
191 this patch series consists of 2 patches.
191
192
192
193
193 Write the introductory message for the patch series.
194 Write the introductory message for the patch series.
194
195
195 \r (no-eol) (esc)
196 \r (no-eol) (esc)
196 sending [ ] 0/3\r (no-eol) (esc)
197 sending [ ] 0/3\r (no-eol) (esc)
197 sending [ ] 0/3\r (no-eol) (esc)
198 sending [ ] 0/3\r (no-eol) (esc)
198 \r (no-eol) (esc)
199 \r (no-eol) (esc)
199 \r (no-eol) (esc)
200 \r (no-eol) (esc)
200 \r (no-eol) (esc)
201 \r (no-eol) (esc)
201 \r (no-eol) (esc)
202 \r (no-eol) (esc)
202 sending [==============> ] 1/3\r (no-eol) (esc)
203 sending [==============> ] 1/3\r (no-eol) (esc)
203 sending [==============> ] 1/3\r (no-eol) (esc)
204 sending [==============> ] 1/3\r (no-eol) (esc)
204 \r (no-eol) (esc)
205 \r (no-eol) (esc)
205 \r (no-eol) (esc)
206 \r (no-eol) (esc)
206 \r (no-eol) (esc)
207 \r (no-eol) (esc)
207 \r (no-eol) (esc)
208 \r (no-eol) (esc)
208 sending [=============================> ] 2/3\r (no-eol) (esc)
209 sending [=============================> ] 2/3\r (no-eol) (esc)
209 sending [=============================> ] 2/3\r (no-eol) (esc)
210 sending [=============================> ] 2/3\r (no-eol) (esc)
210 \r (esc)
211 \r (esc)
211 sending [PATCH 0 of 2] test ...
212 sending [PATCH 0 of 2] test ...
212 sending [PATCH 1 of 2] a ...
213 sending [PATCH 1 of 2] a ...
213 sending [PATCH 2 of 2] b ...
214 sending [PATCH 2 of 2] b ...
214
215
215 $ cd ..
216 $ cd ..
216
217
217 $ hg clone -q t t2
218 $ hg clone -q t t2
218 $ cd t2
219 $ cd t2
219 $ echo c > c
220 $ echo c > c
220 $ hg commit -Amc -d '3 0'
221 $ hg commit -Amc -d '3 0'
221 adding c
222 adding c
222
223
223 $ cat > description <<EOF
224 $ cat > description <<EOF
224 > a multiline
225 > a multiline
225 >
226 >
226 > description
227 > description
227 > EOF
228 > EOF
228
229
229
230
230 test bundle and description:
231 test bundle and description:
231 $ hg email --date '1970-1-1 0:3' -n -f quux -t foo \
232 $ hg email --date '1970-1-1 0:3' -n -f quux -t foo \
232 > -c bar -s test -r tip -b --desc description | $FILTERBOUNDARY
233 > -c bar -s test -r tip -b --desc description | $FILTERBOUNDARY
233 searching for changes
234 searching for changes
234 1 changesets found
235 1 changesets found
235
236
236 displaying test ...
237 displaying test ...
237 Content-Type: multipart/mixed; boundary="===*==" (glob)
238 Content-Type: multipart/mixed; boundary="===*==" (glob)
238 MIME-Version: 1.0
239 MIME-Version: 1.0
239 Subject: test
240 Subject: test
240 Message-Id: <patchbomb.180@*> (glob)
241 Message-Id: <patchbomb.180@*> (glob)
241 User-Agent: Mercurial-patchbomb/* (glob)
242 User-Agent: Mercurial-patchbomb/* (glob)
242 Date: Thu, 01 Jan 1970 00:03:00 +0000
243 Date: Thu, 01 Jan 1970 00:03:00 +0000
243 From: quux
244 From: quux
244 To: foo
245 To: foo
245 Cc: bar
246 Cc: bar
246
247
247 --===*= (glob)
248 --===*= (glob)
248 Content-Type: text/plain; charset="us-ascii"
249 Content-Type: text/plain; charset="us-ascii"
249 MIME-Version: 1.0
250 MIME-Version: 1.0
250 Content-Transfer-Encoding: 7bit
251 Content-Transfer-Encoding: 7bit
251
252
252 a multiline
253 a multiline
253
254
254 description
255 description
255
256
256 --===*= (glob)
257 --===*= (glob)
257 Content-Type: application/x-mercurial-bundle
258 Content-Type: application/x-mercurial-bundle
258 MIME-Version: 1.0
259 MIME-Version: 1.0
259 Content-Disposition: attachment; filename="bundle.hg"
260 Content-Disposition: attachment; filename="bundle.hg"
260 Content-Transfer-Encoding: base64
261 Content-Transfer-Encoding: base64
261
262
262 SEcxMEJaaDkxQVkmU1nvR7I3AAAN////lFYQWj1/4HwRkdC/AywIAk0E4pfoSIIIgQCgGEQOcLAA
263 SEcxMEJaaDkxQVkmU1nvR7I3AAAN////lFYQWj1/4HwRkdC/AywIAk0E4pfoSIIIgQCgGEQOcLAA
263 2tA1VPyp4mkeoG0EaaPU0GTT1GjRiNPIg9CZGBqZ6UbU9J+KFU09DNUaGgAAAAAANAGgAAAAA1U8
264 2tA1VPyp4mkeoG0EaaPU0GTT1GjRiNPIg9CZGBqZ6UbU9J+KFU09DNUaGgAAAAAANAGgAAAAA1U8
264 oGgAADQGgAANNANAAAAAAZipFLz3XoakCEQB3PVPyHJVi1iYkAAKQAZQGpQGZESInRnCFMqLDla2
265 oGgAADQGgAANNANAAAAAAZipFLz3XoakCEQB3PVPyHJVi1iYkAAKQAZQGpQGZESInRnCFMqLDla2
265 Bx3qfRQeA2N4lnzKkAmP8kR2asievLLXXebVU8Vg4iEBqcJNJAxIapSU6SM4888ZAciRG6MYAIEE
266 Bx3qfRQeA2N4lnzKkAmP8kR2asievLLXXebVU8Vg4iEBqcJNJAxIapSU6SM4888ZAciRG6MYAIEE
266 SlIBpFisgGkyRjX//TMtfcUAEsGu56+YnE1OlTZmzKm8BSu2rvo4rHAYYaadIFFuTy0LYgIkgLVD
267 SlIBpFisgGkyRjX//TMtfcUAEsGu56+YnE1OlTZmzKm8BSu2rvo4rHAYYaadIFFuTy0LYgIkgLVD
267 sgVa2F19D1tx9+hgbAygLgQwaIqcDdgA4BjQgIiz/AEP72++llgDKhKducqodGE4B0ETqF3JFOFC
268 sgVa2F19D1tx9+hgbAygLgQwaIqcDdgA4BjQgIiz/AEP72++llgDKhKducqodGE4B0ETqF3JFOFC
268 Q70eyNw=
269 Q70eyNw=
269 --===*=-- (glob)
270 --===*=-- (glob)
270
271
271 utf-8 patch:
272 utf-8 patch:
272 $ python -c 'fp = open("utf", "wb"); fp.write("h\xC3\xB6mma!\n"); fp.close();'
273 $ python -c 'fp = open("utf", "wb"); fp.write("h\xC3\xB6mma!\n"); fp.close();'
273 $ hg commit -A -d '4 0' -m 'utf-8 content'
274 $ hg commit -A -d '4 0' -m 'utf-8 content'
274 adding description
275 adding description
275 adding utf
276 adding utf
276
277
277 no mime encoding for email --test:
278 no mime encoding for email --test:
278 $ hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -n
279 $ hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -n
279 this patch series consists of 1 patches.
280 this patch series consists of 1 patches.
280
281
281
282
282 displaying [PATCH] utf-8 content ...
283 displaying [PATCH] utf-8 content ...
283 Content-Type: text/plain; charset="us-ascii"
284 Content-Type: text/plain; charset="us-ascii"
284 MIME-Version: 1.0
285 MIME-Version: 1.0
285 Content-Transfer-Encoding: 8bit
286 Content-Transfer-Encoding: 8bit
286 Subject: [PATCH] utf-8 content
287 Subject: [PATCH] utf-8 content
287 X-Mercurial-Node: 909a00e13e9d78b575aeee23dddbada46d5a143f
288 X-Mercurial-Node: 909a00e13e9d78b575aeee23dddbada46d5a143f
288 X-Mercurial-Series-Index: 1
289 X-Mercurial-Series-Index: 1
289 X-Mercurial-Series-Total: 1
290 X-Mercurial-Series-Total: 1
290 Message-Id: <909a00e13e9d78b575ae.240@*> (glob)
291 Message-Id: <909a00e13e9d78b575ae.240@*> (glob)
291 X-Mercurial-Series-Id: <909a00e13e9d78b575ae.240@*> (glob)
292 X-Mercurial-Series-Id: <909a00e13e9d78b575ae.240@*> (glob)
292 User-Agent: Mercurial-patchbomb/* (glob)
293 User-Agent: Mercurial-patchbomb/* (glob)
293 Date: Thu, 01 Jan 1970 00:04:00 +0000
294 Date: Thu, 01 Jan 1970 00:04:00 +0000
294 From: quux
295 From: quux
295 To: foo
296 To: foo
296 Cc: bar
297 Cc: bar
297
298
298 # HG changeset patch
299 # HG changeset patch
299 # User test
300 # User test
300 # Date 4 0
301 # Date 4 0
301 # Thu Jan 01 00:00:04 1970 +0000
302 # Thu Jan 01 00:00:04 1970 +0000
302 # Node ID 909a00e13e9d78b575aeee23dddbada46d5a143f
303 # Node ID 909a00e13e9d78b575aeee23dddbada46d5a143f
303 # Parent ff2c9fa2018b15fa74b33363bda9527323e2a99f
304 # Parent ff2c9fa2018b15fa74b33363bda9527323e2a99f
304 utf-8 content
305 utf-8 content
305
306
306 diff -r ff2c9fa2018b -r 909a00e13e9d description
307 diff -r ff2c9fa2018b -r 909a00e13e9d description
307 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
308 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
308 +++ b/description Thu Jan 01 00:00:04 1970 +0000
309 +++ b/description Thu Jan 01 00:00:04 1970 +0000
309 @@ -0,0 +1,3 @@
310 @@ -0,0 +1,3 @@
310 +a multiline
311 +a multiline
311 +
312 +
312 +description
313 +description
313 diff -r ff2c9fa2018b -r 909a00e13e9d utf
314 diff -r ff2c9fa2018b -r 909a00e13e9d utf
314 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
315 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
315 +++ b/utf Thu Jan 01 00:00:04 1970 +0000
316 +++ b/utf Thu Jan 01 00:00:04 1970 +0000
316 @@ -0,0 +1,1 @@
317 @@ -0,0 +1,1 @@
317 +h\xc3\xb6mma! (esc)
318 +h\xc3\xb6mma! (esc)
318
319
319
320
320 mime encoded mbox (base64):
321 mime encoded mbox (base64):
321 $ hg email --date '1970-1-1 0:4' -f 'Q <quux>' -t foo -c bar -r tip -m mbox
322 $ hg email --date '1970-1-1 0:4' -f 'Q <quux>' -t foo -c bar -r tip -m mbox
322 this patch series consists of 1 patches.
323 this patch series consists of 1 patches.
323
324
324
325
325 sending [PATCH] utf-8 content ...
326 sending [PATCH] utf-8 content ...
326
327
327 $ cat mbox
328 $ cat mbox
328 From quux ... ... .. ..:..:.. .... (re)
329 From quux ... ... .. ..:..:.. .... (re)
329 Content-Type: text/plain; charset="utf-8"
330 Content-Type: text/plain; charset="utf-8"
330 MIME-Version: 1.0
331 MIME-Version: 1.0
331 Content-Transfer-Encoding: base64
332 Content-Transfer-Encoding: base64
332 Subject: [PATCH] utf-8 content
333 Subject: [PATCH] utf-8 content
333 X-Mercurial-Node: 909a00e13e9d78b575aeee23dddbada46d5a143f
334 X-Mercurial-Node: 909a00e13e9d78b575aeee23dddbada46d5a143f
334 X-Mercurial-Series-Index: 1
335 X-Mercurial-Series-Index: 1
335 X-Mercurial-Series-Total: 1
336 X-Mercurial-Series-Total: 1
336 Message-Id: <909a00e13e9d78b575ae.240@*> (glob)
337 Message-Id: <909a00e13e9d78b575ae.240@*> (glob)
337 X-Mercurial-Series-Id: <909a00e13e9d78b575ae.240@*> (glob)
338 X-Mercurial-Series-Id: <909a00e13e9d78b575ae.240@*> (glob)
338 User-Agent: Mercurial-patchbomb/* (glob)
339 User-Agent: Mercurial-patchbomb/* (glob)
339 Date: Thu, 01 Jan 1970 00:04:00 +0000
340 Date: Thu, 01 Jan 1970 00:04:00 +0000
340 From: Q <quux>
341 From: Q <quux>
341 To: foo
342 To: foo
342 Cc: bar
343 Cc: bar
343
344
344 IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIHRlc3QKIyBEYXRlIDQgMAojICAgICAgVGh1IEph
345 IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIHRlc3QKIyBEYXRlIDQgMAojICAgICAgVGh1IEph
345 biAwMSAwMDowMDowNCAxOTcwICswMDAwCiMgTm9kZSBJRCA5MDlhMDBlMTNlOWQ3OGI1NzVhZWVl
346 biAwMSAwMDowMDowNCAxOTcwICswMDAwCiMgTm9kZSBJRCA5MDlhMDBlMTNlOWQ3OGI1NzVhZWVl
346 MjNkZGRiYWRhNDZkNWExNDNmCiMgUGFyZW50ICBmZjJjOWZhMjAxOGIxNWZhNzRiMzMzNjNiZGE5
347 MjNkZGRiYWRhNDZkNWExNDNmCiMgUGFyZW50ICBmZjJjOWZhMjAxOGIxNWZhNzRiMzMzNjNiZGE5
347 NTI3MzIzZTJhOTlmCnV0Zi04IGNvbnRlbnQKCmRpZmYgLXIgZmYyYzlmYTIwMThiIC1yIDkwOWEw
348 NTI3MzIzZTJhOTlmCnV0Zi04IGNvbnRlbnQKCmRpZmYgLXIgZmYyYzlmYTIwMThiIC1yIDkwOWEw
348 MGUxM2U5ZCBkZXNjcmlwdGlvbgotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3
349 MGUxM2U5ZCBkZXNjcmlwdGlvbgotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3
349 MCArMDAwMAorKysgYi9kZXNjcmlwdGlvbglUaHUgSmFuIDAxIDAwOjAwOjA0IDE5NzAgKzAwMDAK
350 MCArMDAwMAorKysgYi9kZXNjcmlwdGlvbglUaHUgSmFuIDAxIDAwOjAwOjA0IDE5NzAgKzAwMDAK
350 QEAgLTAsMCArMSwzIEBACithIG11bHRpbGluZQorCitkZXNjcmlwdGlvbgpkaWZmIC1yIGZmMmM5
351 QEAgLTAsMCArMSwzIEBACithIG11bHRpbGluZQorCitkZXNjcmlwdGlvbgpkaWZmIC1yIGZmMmM5
351 ZmEyMDE4YiAtciA5MDlhMDBlMTNlOWQgdXRmCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDow
352 ZmEyMDE4YiAtciA5MDlhMDBlMTNlOWQgdXRmCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDow
352 MDowMCAxOTcwICswMDAwCisrKyBiL3V0ZglUaHUgSmFuIDAxIDAwOjAwOjA0IDE5NzAgKzAwMDAK
353 MDowMCAxOTcwICswMDAwCisrKyBiL3V0ZglUaHUgSmFuIDAxIDAwOjAwOjA0IDE5NzAgKzAwMDAK
353 QEAgLTAsMCArMSwxIEBACitow7ZtbWEhCg==
354 QEAgLTAsMCArMSwxIEBACitow7ZtbWEhCg==
354
355
355
356
356 $ python -c 'print open("mbox").read().split("\n\n")[1].decode("base64")'
357 $ python -c 'print open("mbox").read().split("\n\n")[1].decode("base64")'
357 # HG changeset patch
358 # HG changeset patch
358 # User test
359 # User test
359 # Date 4 0
360 # Date 4 0
360 # Thu Jan 01 00:00:04 1970 +0000
361 # Thu Jan 01 00:00:04 1970 +0000
361 # Node ID 909a00e13e9d78b575aeee23dddbada46d5a143f
362 # Node ID 909a00e13e9d78b575aeee23dddbada46d5a143f
362 # Parent ff2c9fa2018b15fa74b33363bda9527323e2a99f
363 # Parent ff2c9fa2018b15fa74b33363bda9527323e2a99f
363 utf-8 content
364 utf-8 content
364
365
365 diff -r ff2c9fa2018b -r 909a00e13e9d description
366 diff -r ff2c9fa2018b -r 909a00e13e9d description
366 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
367 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
367 +++ b/description Thu Jan 01 00:00:04 1970 +0000
368 +++ b/description Thu Jan 01 00:00:04 1970 +0000
368 @@ -0,0 +1,3 @@
369 @@ -0,0 +1,3 @@
369 +a multiline
370 +a multiline
370 +
371 +
371 +description
372 +description
372 diff -r ff2c9fa2018b -r 909a00e13e9d utf
373 diff -r ff2c9fa2018b -r 909a00e13e9d utf
373 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
374 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
374 +++ b/utf Thu Jan 01 00:00:04 1970 +0000
375 +++ b/utf Thu Jan 01 00:00:04 1970 +0000
375 @@ -0,0 +1,1 @@
376 @@ -0,0 +1,1 @@
376 +h\xc3\xb6mma! (esc)
377 +h\xc3\xb6mma! (esc)
377
378
378 $ rm mbox
379 $ rm mbox
379
380
380 mime encoded mbox (quoted-printable):
381 mime encoded mbox (quoted-printable):
381 $ python -c 'fp = open("long", "wb"); fp.write("%s\nfoo\n\nbar\n" % ("x" * 1024)); fp.close();'
382 $ python -c 'fp = open("long", "wb"); fp.write("%s\nfoo\n\nbar\n" % ("x" * 1024)); fp.close();'
382 $ hg commit -A -d '4 0' -m 'long line'
383 $ hg commit -A -d '4 0' -m 'long line'
383 adding long
384 adding long
384
385
385 no mime encoding for email --test:
386 no mime encoding for email --test:
386 $ hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -n
387 $ hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -n
387 this patch series consists of 1 patches.
388 this patch series consists of 1 patches.
388
389
389
390
390 displaying [PATCH] long line ...
391 displaying [PATCH] long line ...
391 Content-Type: text/plain; charset="us-ascii"
392 Content-Type: text/plain; charset="us-ascii"
392 MIME-Version: 1.0
393 MIME-Version: 1.0
393 Content-Transfer-Encoding: quoted-printable
394 Content-Transfer-Encoding: quoted-printable
394 Subject: [PATCH] long line
395 Subject: [PATCH] long line
395 X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
396 X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
396 X-Mercurial-Series-Index: 1
397 X-Mercurial-Series-Index: 1
397 X-Mercurial-Series-Total: 1
398 X-Mercurial-Series-Total: 1
398 Message-Id: <a2ea8fc83dd8b93cfd86.240@*> (glob)
399 Message-Id: <a2ea8fc83dd8b93cfd86.240@*> (glob)
399 X-Mercurial-Series-Id: <a2ea8fc83dd8b93cfd86.240@*> (glob)
400 X-Mercurial-Series-Id: <a2ea8fc83dd8b93cfd86.240@*> (glob)
400 User-Agent: Mercurial-patchbomb/* (glob)
401 User-Agent: Mercurial-patchbomb/* (glob)
401 Date: Thu, 01 Jan 1970 00:04:00 +0000
402 Date: Thu, 01 Jan 1970 00:04:00 +0000
402 From: quux
403 From: quux
403 To: foo
404 To: foo
404 Cc: bar
405 Cc: bar
405
406
406 # HG changeset patch
407 # HG changeset patch
407 # User test
408 # User test
408 # Date 4 0
409 # Date 4 0
409 # Thu Jan 01 00:00:04 1970 +0000
410 # Thu Jan 01 00:00:04 1970 +0000
410 # Node ID a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
411 # Node ID a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
411 # Parent 909a00e13e9d78b575aeee23dddbada46d5a143f
412 # Parent 909a00e13e9d78b575aeee23dddbada46d5a143f
412 long line
413 long line
413
414
414 diff -r 909a00e13e9d -r a2ea8fc83dd8 long
415 diff -r 909a00e13e9d -r a2ea8fc83dd8 long
415 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
416 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
416 +++ b/long Thu Jan 01 00:00:04 1970 +0000
417 +++ b/long Thu Jan 01 00:00:04 1970 +0000
417 @@ -0,0 +1,4 @@
418 @@ -0,0 +1,4 @@
418 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
419 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
419 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
420 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
420 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
421 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
421 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
422 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
422 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
423 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
423 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
424 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
424 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
425 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
425 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
426 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
426 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
427 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
427 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
428 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
428 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
429 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
429 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
430 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
430 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
431 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
431 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
432 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
432 +foo
433 +foo
433 +
434 +
434 +bar
435 +bar
435
436
436
437
437 mime encoded mbox (quoted-printable):
438 mime encoded mbox (quoted-printable):
438 $ hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -m mbox
439 $ hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -m mbox
439 this patch series consists of 1 patches.
440 this patch series consists of 1 patches.
440
441
441
442
442 sending [PATCH] long line ...
443 sending [PATCH] long line ...
443 $ cat mbox
444 $ cat mbox
444 From quux ... ... .. ..:..:.. .... (re)
445 From quux ... ... .. ..:..:.. .... (re)
445 Content-Type: text/plain; charset="us-ascii"
446 Content-Type: text/plain; charset="us-ascii"
446 MIME-Version: 1.0
447 MIME-Version: 1.0
447 Content-Transfer-Encoding: quoted-printable
448 Content-Transfer-Encoding: quoted-printable
448 Subject: [PATCH] long line
449 Subject: [PATCH] long line
449 X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
450 X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
450 X-Mercurial-Series-Index: 1
451 X-Mercurial-Series-Index: 1
451 X-Mercurial-Series-Total: 1
452 X-Mercurial-Series-Total: 1
452 Message-Id: <a2ea8fc83dd8b93cfd86.240@*> (glob)
453 Message-Id: <a2ea8fc83dd8b93cfd86.240@*> (glob)
453 X-Mercurial-Series-Id: <a2ea8fc83dd8b93cfd86.240@*> (glob)
454 X-Mercurial-Series-Id: <a2ea8fc83dd8b93cfd86.240@*> (glob)
454 User-Agent: Mercurial-patchbomb/* (glob)
455 User-Agent: Mercurial-patchbomb/* (glob)
455 Date: Thu, 01 Jan 1970 00:04:00 +0000
456 Date: Thu, 01 Jan 1970 00:04:00 +0000
456 From: quux
457 From: quux
457 To: foo
458 To: foo
458 Cc: bar
459 Cc: bar
459
460
460 # HG changeset patch
461 # HG changeset patch
461 # User test
462 # User test
462 # Date 4 0
463 # Date 4 0
463 # Thu Jan 01 00:00:04 1970 +0000
464 # Thu Jan 01 00:00:04 1970 +0000
464 # Node ID a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
465 # Node ID a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
465 # Parent 909a00e13e9d78b575aeee23dddbada46d5a143f
466 # Parent 909a00e13e9d78b575aeee23dddbada46d5a143f
466 long line
467 long line
467
468
468 diff -r 909a00e13e9d -r a2ea8fc83dd8 long
469 diff -r 909a00e13e9d -r a2ea8fc83dd8 long
469 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
470 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
470 +++ b/long Thu Jan 01 00:00:04 1970 +0000
471 +++ b/long Thu Jan 01 00:00:04 1970 +0000
471 @@ -0,0 +1,4 @@
472 @@ -0,0 +1,4 @@
472 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
473 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
473 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
474 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
474 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
475 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
475 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
476 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
476 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
477 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
477 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
478 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
478 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
479 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
479 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
480 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
480 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
481 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
481 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
482 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
482 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
483 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
483 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
484 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
484 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
485 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
485 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
486 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
486 +foo
487 +foo
487 +
488 +
488 +bar
489 +bar
489
490
490
491
491
492
492 $ rm mbox
493 $ rm mbox
493
494
494 iso-8859-1 patch:
495 iso-8859-1 patch:
495 $ python -c 'fp = open("isolatin", "wb"); fp.write("h\xF6mma!\n"); fp.close();'
496 $ python -c 'fp = open("isolatin", "wb"); fp.write("h\xF6mma!\n"); fp.close();'
496 $ hg commit -A -d '5 0' -m 'isolatin 8-bit encoding'
497 $ hg commit -A -d '5 0' -m 'isolatin 8-bit encoding'
497 adding isolatin
498 adding isolatin
498
499
499 fake ascii mbox:
500 fake ascii mbox:
500 $ hg email --date '1970-1-1 0:5' -f quux -t foo -c bar -r tip -m mbox
501 $ hg email --date '1970-1-1 0:5' -f quux -t foo -c bar -r tip -m mbox
501 this patch series consists of 1 patches.
502 this patch series consists of 1 patches.
502
503
503
504
504 sending [PATCH] isolatin 8-bit encoding ...
505 sending [PATCH] isolatin 8-bit encoding ...
505 $ cat mbox
506 $ cat mbox
506 From quux ... ... .. ..:..:.. .... (re)
507 From quux ... ... .. ..:..:.. .... (re)
507 Content-Type: text/plain; charset="us-ascii"
508 Content-Type: text/plain; charset="us-ascii"
508 MIME-Version: 1.0
509 MIME-Version: 1.0
509 Content-Transfer-Encoding: 8bit
510 Content-Transfer-Encoding: 8bit
510 Subject: [PATCH] isolatin 8-bit encoding
511 Subject: [PATCH] isolatin 8-bit encoding
511 X-Mercurial-Node: 240fb913fc1b7ff15ddb9f33e73d82bf5277c720
512 X-Mercurial-Node: 240fb913fc1b7ff15ddb9f33e73d82bf5277c720
512 X-Mercurial-Series-Index: 1
513 X-Mercurial-Series-Index: 1
513 X-Mercurial-Series-Total: 1
514 X-Mercurial-Series-Total: 1
514 Message-Id: <240fb913fc1b7ff15ddb.300@*> (glob)
515 Message-Id: <240fb913fc1b7ff15ddb.300@*> (glob)
515 X-Mercurial-Series-Id: <240fb913fc1b7ff15ddb.300@*> (glob)
516 X-Mercurial-Series-Id: <240fb913fc1b7ff15ddb.300@*> (glob)
516 User-Agent: Mercurial-patchbomb/* (glob)
517 User-Agent: Mercurial-patchbomb/* (glob)
517 Date: Thu, 01 Jan 1970 00:05:00 +0000
518 Date: Thu, 01 Jan 1970 00:05:00 +0000
518 From: quux
519 From: quux
519 To: foo
520 To: foo
520 Cc: bar
521 Cc: bar
521
522
522 # HG changeset patch
523 # HG changeset patch
523 # User test
524 # User test
524 # Date 5 0
525 # Date 5 0
525 # Thu Jan 01 00:00:05 1970 +0000
526 # Thu Jan 01 00:00:05 1970 +0000
526 # Node ID 240fb913fc1b7ff15ddb9f33e73d82bf5277c720
527 # Node ID 240fb913fc1b7ff15ddb9f33e73d82bf5277c720
527 # Parent a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
528 # Parent a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
528 isolatin 8-bit encoding
529 isolatin 8-bit encoding
529
530
530 diff -r a2ea8fc83dd8 -r 240fb913fc1b isolatin
531 diff -r a2ea8fc83dd8 -r 240fb913fc1b isolatin
531 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
532 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
532 +++ b/isolatin Thu Jan 01 00:00:05 1970 +0000
533 +++ b/isolatin Thu Jan 01 00:00:05 1970 +0000
533 @@ -0,0 +1,1 @@
534 @@ -0,0 +1,1 @@
534 +h\xf6mma! (esc)
535 +h\xf6mma! (esc)
535
536
536
537
537
538
538 test diffstat for single patch:
539 test diffstat for single patch:
539 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y -r 2
540 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y -r 2
540 this patch series consists of 1 patches.
541 this patch series consists of 1 patches.
541
542
542
543
543 Final summary:
544 Final summary:
544
545
545 From: quux
546 From: quux
546 To: foo
547 To: foo
547 Cc: bar
548 Cc: bar
548 Subject: [PATCH] test
549 Subject: [PATCH] test
549 c | 1 +
550 c | 1 +
550 1 files changed, 1 insertions(+), 0 deletions(-)
551 1 files changed, 1 insertions(+), 0 deletions(-)
551
552
552 are you sure you want to send (yn)? y
553 are you sure you want to send (yn)? y
553
554
554 displaying [PATCH] test ...
555 displaying [PATCH] test ...
555 Content-Type: text/plain; charset="us-ascii"
556 Content-Type: text/plain; charset="us-ascii"
556 MIME-Version: 1.0
557 MIME-Version: 1.0
557 Content-Transfer-Encoding: 7bit
558 Content-Transfer-Encoding: 7bit
558 Subject: [PATCH] test
559 Subject: [PATCH] test
559 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
560 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
560 X-Mercurial-Series-Index: 1
561 X-Mercurial-Series-Index: 1
561 X-Mercurial-Series-Total: 1
562 X-Mercurial-Series-Total: 1
562 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
563 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
563 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
564 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
564 User-Agent: Mercurial-patchbomb/* (glob)
565 User-Agent: Mercurial-patchbomb/* (glob)
565 Date: Thu, 01 Jan 1970 00:01:00 +0000
566 Date: Thu, 01 Jan 1970 00:01:00 +0000
566 From: quux
567 From: quux
567 To: foo
568 To: foo
568 Cc: bar
569 Cc: bar
569
570
570 c | 1 +
571 c | 1 +
571 1 files changed, 1 insertions(+), 0 deletions(-)
572 1 files changed, 1 insertions(+), 0 deletions(-)
572
573
573
574
574 # HG changeset patch
575 # HG changeset patch
575 # User test
576 # User test
576 # Date 3 0
577 # Date 3 0
577 # Thu Jan 01 00:00:03 1970 +0000
578 # Thu Jan 01 00:00:03 1970 +0000
578 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
579 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
579 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
580 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
580 c
581 c
581
582
582 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
583 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
583 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
584 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
584 +++ b/c Thu Jan 01 00:00:03 1970 +0000
585 +++ b/c Thu Jan 01 00:00:03 1970 +0000
585 @@ -0,0 +1,1 @@
586 @@ -0,0 +1,1 @@
586 +c
587 +c
587
588
588
589
589 test diffstat for multiple patches:
590 test diffstat for multiple patches:
590 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y \
591 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y \
591 > -r 0:1
592 > -r 0:1
592 this patch series consists of 2 patches.
593 this patch series consists of 2 patches.
593
594
594
595
595 Write the introductory message for the patch series.
596 Write the introductory message for the patch series.
596
597
597
598
598 Final summary:
599 Final summary:
599
600
600 From: quux
601 From: quux
601 To: foo
602 To: foo
602 Cc: bar
603 Cc: bar
603 Subject: [PATCH 0 of 2] test
604 Subject: [PATCH 0 of 2] test
604 a | 1 +
605 a | 1 +
605 b | 1 +
606 b | 1 +
606 2 files changed, 2 insertions(+), 0 deletions(-)
607 2 files changed, 2 insertions(+), 0 deletions(-)
607 Subject: [PATCH 1 of 2] a
608 Subject: [PATCH 1 of 2] a
608 a | 1 +
609 a | 1 +
609 1 files changed, 1 insertions(+), 0 deletions(-)
610 1 files changed, 1 insertions(+), 0 deletions(-)
610 Subject: [PATCH 2 of 2] b
611 Subject: [PATCH 2 of 2] b
611 b | 1 +
612 b | 1 +
612 1 files changed, 1 insertions(+), 0 deletions(-)
613 1 files changed, 1 insertions(+), 0 deletions(-)
613
614
614 are you sure you want to send (yn)? y
615 are you sure you want to send (yn)? y
615
616
616 displaying [PATCH 0 of 2] test ...
617 displaying [PATCH 0 of 2] test ...
617 Content-Type: text/plain; charset="us-ascii"
618 Content-Type: text/plain; charset="us-ascii"
618 MIME-Version: 1.0
619 MIME-Version: 1.0
619 Content-Transfer-Encoding: 7bit
620 Content-Transfer-Encoding: 7bit
620 Subject: [PATCH 0 of 2] test
621 Subject: [PATCH 0 of 2] test
621 Message-Id: <patchbomb.60@*> (glob)
622 Message-Id: <patchbomb.60@*> (glob)
622 User-Agent: Mercurial-patchbomb/* (glob)
623 User-Agent: Mercurial-patchbomb/* (glob)
623 Date: Thu, 01 Jan 1970 00:01:00 +0000
624 Date: Thu, 01 Jan 1970 00:01:00 +0000
624 From: quux
625 From: quux
625 To: foo
626 To: foo
626 Cc: bar
627 Cc: bar
627
628
628
629
629 a | 1 +
630 a | 1 +
630 b | 1 +
631 b | 1 +
631 2 files changed, 2 insertions(+), 0 deletions(-)
632 2 files changed, 2 insertions(+), 0 deletions(-)
632
633
633 displaying [PATCH 1 of 2] a ...
634 displaying [PATCH 1 of 2] a ...
634 Content-Type: text/plain; charset="us-ascii"
635 Content-Type: text/plain; charset="us-ascii"
635 MIME-Version: 1.0
636 MIME-Version: 1.0
636 Content-Transfer-Encoding: 7bit
637 Content-Transfer-Encoding: 7bit
637 Subject: [PATCH 1 of 2] a
638 Subject: [PATCH 1 of 2] a
638 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
639 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
639 X-Mercurial-Series-Index: 1
640 X-Mercurial-Series-Index: 1
640 X-Mercurial-Series-Total: 2
641 X-Mercurial-Series-Total: 2
641 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
642 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
642 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
643 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
643 In-Reply-To: <patchbomb.60@*> (glob)
644 In-Reply-To: <patchbomb.60@*> (glob)
644 References: <patchbomb.60@*> (glob)
645 References: <patchbomb.60@*> (glob)
645 User-Agent: Mercurial-patchbomb/* (glob)
646 User-Agent: Mercurial-patchbomb/* (glob)
646 Date: Thu, 01 Jan 1970 00:01:01 +0000
647 Date: Thu, 01 Jan 1970 00:01:01 +0000
647 From: quux
648 From: quux
648 To: foo
649 To: foo
649 Cc: bar
650 Cc: bar
650
651
651 a | 1 +
652 a | 1 +
652 1 files changed, 1 insertions(+), 0 deletions(-)
653 1 files changed, 1 insertions(+), 0 deletions(-)
653
654
654
655
655 # HG changeset patch
656 # HG changeset patch
656 # User test
657 # User test
657 # Date 1 0
658 # Date 1 0
658 # Thu Jan 01 00:00:01 1970 +0000
659 # Thu Jan 01 00:00:01 1970 +0000
659 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
660 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
660 # Parent 0000000000000000000000000000000000000000
661 # Parent 0000000000000000000000000000000000000000
661 a
662 a
662
663
663 diff -r 000000000000 -r 8580ff50825a a
664 diff -r 000000000000 -r 8580ff50825a a
664 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
665 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
665 +++ b/a Thu Jan 01 00:00:01 1970 +0000
666 +++ b/a Thu Jan 01 00:00:01 1970 +0000
666 @@ -0,0 +1,1 @@
667 @@ -0,0 +1,1 @@
667 +a
668 +a
668
669
669 displaying [PATCH 2 of 2] b ...
670 displaying [PATCH 2 of 2] b ...
670 Content-Type: text/plain; charset="us-ascii"
671 Content-Type: text/plain; charset="us-ascii"
671 MIME-Version: 1.0
672 MIME-Version: 1.0
672 Content-Transfer-Encoding: 7bit
673 Content-Transfer-Encoding: 7bit
673 Subject: [PATCH 2 of 2] b
674 Subject: [PATCH 2 of 2] b
674 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
675 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
675 X-Mercurial-Series-Index: 2
676 X-Mercurial-Series-Index: 2
676 X-Mercurial-Series-Total: 2
677 X-Mercurial-Series-Total: 2
677 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
678 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
678 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
679 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
679 In-Reply-To: <patchbomb.60@*> (glob)
680 In-Reply-To: <patchbomb.60@*> (glob)
680 References: <patchbomb.60@*> (glob)
681 References: <patchbomb.60@*> (glob)
681 User-Agent: Mercurial-patchbomb/* (glob)
682 User-Agent: Mercurial-patchbomb/* (glob)
682 Date: Thu, 01 Jan 1970 00:01:02 +0000
683 Date: Thu, 01 Jan 1970 00:01:02 +0000
683 From: quux
684 From: quux
684 To: foo
685 To: foo
685 Cc: bar
686 Cc: bar
686
687
687 b | 1 +
688 b | 1 +
688 1 files changed, 1 insertions(+), 0 deletions(-)
689 1 files changed, 1 insertions(+), 0 deletions(-)
689
690
690
691
691 # HG changeset patch
692 # HG changeset patch
692 # User test
693 # User test
693 # Date 2 0
694 # Date 2 0
694 # Thu Jan 01 00:00:02 1970 +0000
695 # Thu Jan 01 00:00:02 1970 +0000
695 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
696 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
696 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
697 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
697 b
698 b
698
699
699 diff -r 8580ff50825a -r 97d72e5f12c7 b
700 diff -r 8580ff50825a -r 97d72e5f12c7 b
700 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
701 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
701 +++ b/b Thu Jan 01 00:00:02 1970 +0000
702 +++ b/b Thu Jan 01 00:00:02 1970 +0000
702 @@ -0,0 +1,1 @@
703 @@ -0,0 +1,1 @@
703 +b
704 +b
704
705
705
706
706 test inline for single patch:
707 test inline for single patch:
707 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 2 | $FILTERBOUNDARY
708 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 2 | $FILTERBOUNDARY
708 this patch series consists of 1 patches.
709 this patch series consists of 1 patches.
709
710
710
711
711 displaying [PATCH] test ...
712 displaying [PATCH] test ...
712 Content-Type: multipart/mixed; boundary="===*==" (glob)
713 Content-Type: multipart/mixed; boundary="===*==" (glob)
713 MIME-Version: 1.0
714 MIME-Version: 1.0
714 Subject: [PATCH] test
715 Subject: [PATCH] test
715 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
716 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
716 X-Mercurial-Series-Index: 1
717 X-Mercurial-Series-Index: 1
717 X-Mercurial-Series-Total: 1
718 X-Mercurial-Series-Total: 1
718 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
719 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
719 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
720 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
720 User-Agent: Mercurial-patchbomb/* (glob)
721 User-Agent: Mercurial-patchbomb/* (glob)
721 Date: Thu, 01 Jan 1970 00:01:00 +0000
722 Date: Thu, 01 Jan 1970 00:01:00 +0000
722 From: quux
723 From: quux
723 To: foo
724 To: foo
724 Cc: bar
725 Cc: bar
725
726
726 --===*= (glob)
727 --===*= (glob)
727 Content-Type: text/x-patch; charset="us-ascii"
728 Content-Type: text/x-patch; charset="us-ascii"
728 MIME-Version: 1.0
729 MIME-Version: 1.0
729 Content-Transfer-Encoding: 7bit
730 Content-Transfer-Encoding: 7bit
730 Content-Disposition: inline; filename=t2.patch
731 Content-Disposition: inline; filename=t2.patch
731
732
732 # HG changeset patch
733 # HG changeset patch
733 # User test
734 # User test
734 # Date 3 0
735 # Date 3 0
735 # Thu Jan 01 00:00:03 1970 +0000
736 # Thu Jan 01 00:00:03 1970 +0000
736 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
737 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
737 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
738 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
738 c
739 c
739
740
740 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
741 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
741 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
742 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
742 +++ b/c Thu Jan 01 00:00:03 1970 +0000
743 +++ b/c Thu Jan 01 00:00:03 1970 +0000
743 @@ -0,0 +1,1 @@
744 @@ -0,0 +1,1 @@
744 +c
745 +c
745
746
746 --===*=-- (glob)
747 --===*=-- (glob)
747
748
748
749
749 test inline for single patch (quoted-printable):
750 test inline for single patch (quoted-printable):
750 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 4 | $FILTERBOUNDARY
751 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 4 | $FILTERBOUNDARY
751 this patch series consists of 1 patches.
752 this patch series consists of 1 patches.
752
753
753
754
754 displaying [PATCH] test ...
755 displaying [PATCH] test ...
755 Content-Type: multipart/mixed; boundary="===*==" (glob)
756 Content-Type: multipart/mixed; boundary="===*==" (glob)
756 MIME-Version: 1.0
757 MIME-Version: 1.0
757 Subject: [PATCH] test
758 Subject: [PATCH] test
758 X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
759 X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
759 X-Mercurial-Series-Index: 1
760 X-Mercurial-Series-Index: 1
760 X-Mercurial-Series-Total: 1
761 X-Mercurial-Series-Total: 1
761 Message-Id: <a2ea8fc83dd8b93cfd86.60@*> (glob)
762 Message-Id: <a2ea8fc83dd8b93cfd86.60@*> (glob)
762 X-Mercurial-Series-Id: <a2ea8fc83dd8b93cfd86.60@*> (glob)
763 X-Mercurial-Series-Id: <a2ea8fc83dd8b93cfd86.60@*> (glob)
763 User-Agent: Mercurial-patchbomb/* (glob)
764 User-Agent: Mercurial-patchbomb/* (glob)
764 Date: Thu, 01 Jan 1970 00:01:00 +0000
765 Date: Thu, 01 Jan 1970 00:01:00 +0000
765 From: quux
766 From: quux
766 To: foo
767 To: foo
767 Cc: bar
768 Cc: bar
768
769
769 --===*= (glob)
770 --===*= (glob)
770 Content-Type: text/x-patch; charset="us-ascii"
771 Content-Type: text/x-patch; charset="us-ascii"
771 MIME-Version: 1.0
772 MIME-Version: 1.0
772 Content-Transfer-Encoding: quoted-printable
773 Content-Transfer-Encoding: quoted-printable
773 Content-Disposition: inline; filename=t2.patch
774 Content-Disposition: inline; filename=t2.patch
774
775
775 # HG changeset patch
776 # HG changeset patch
776 # User test
777 # User test
777 # Date 4 0
778 # Date 4 0
778 # Thu Jan 01 00:00:04 1970 +0000
779 # Thu Jan 01 00:00:04 1970 +0000
779 # Node ID a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
780 # Node ID a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
780 # Parent 909a00e13e9d78b575aeee23dddbada46d5a143f
781 # Parent 909a00e13e9d78b575aeee23dddbada46d5a143f
781 long line
782 long line
782
783
783 diff -r 909a00e13e9d -r a2ea8fc83dd8 long
784 diff -r 909a00e13e9d -r a2ea8fc83dd8 long
784 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
785 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
785 +++ b/long Thu Jan 01 00:00:04 1970 +0000
786 +++ b/long Thu Jan 01 00:00:04 1970 +0000
786 @@ -0,0 +1,4 @@
787 @@ -0,0 +1,4 @@
787 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
788 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
788 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
789 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
789 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
790 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
790 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
791 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
791 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
792 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
792 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
793 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
793 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
794 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
794 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
795 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
795 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
796 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
796 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
797 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
797 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
798 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
798 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
799 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
799 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
800 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
800 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
801 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
801 +foo
802 +foo
802 +
803 +
803 +bar
804 +bar
804
805
805 --===*=-- (glob)
806 --===*=-- (glob)
806
807
807 test inline for multiple patches:
808 test inline for multiple patches:
808 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i \
809 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i \
809 > -r 0:1 -r 4 | $FILTERBOUNDARY
810 > -r 0:1 -r 4 | $FILTERBOUNDARY
810 this patch series consists of 3 patches.
811 this patch series consists of 3 patches.
811
812
812
813
813 Write the introductory message for the patch series.
814 Write the introductory message for the patch series.
814
815
815
816
816 displaying [PATCH 0 of 3] test ...
817 displaying [PATCH 0 of 3] test ...
817 Content-Type: text/plain; charset="us-ascii"
818 Content-Type: text/plain; charset="us-ascii"
818 MIME-Version: 1.0
819 MIME-Version: 1.0
819 Content-Transfer-Encoding: 7bit
820 Content-Transfer-Encoding: 7bit
820 Subject: [PATCH 0 of 3] test
821 Subject: [PATCH 0 of 3] test
821 Message-Id: <patchbomb.60@*> (glob)
822 Message-Id: <patchbomb.60@*> (glob)
822 User-Agent: Mercurial-patchbomb/* (glob)
823 User-Agent: Mercurial-patchbomb/* (glob)
823 Date: Thu, 01 Jan 1970 00:01:00 +0000
824 Date: Thu, 01 Jan 1970 00:01:00 +0000
824 From: quux
825 From: quux
825 To: foo
826 To: foo
826 Cc: bar
827 Cc: bar
827
828
828
829
829 displaying [PATCH 1 of 3] a ...
830 displaying [PATCH 1 of 3] a ...
830 Content-Type: multipart/mixed; boundary="===*==" (glob)
831 Content-Type: multipart/mixed; boundary="===*==" (glob)
831 MIME-Version: 1.0
832 MIME-Version: 1.0
832 Subject: [PATCH 1 of 3] a
833 Subject: [PATCH 1 of 3] a
833 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
834 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
834 X-Mercurial-Series-Index: 1
835 X-Mercurial-Series-Index: 1
835 X-Mercurial-Series-Total: 3
836 X-Mercurial-Series-Total: 3
836 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
837 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
837 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
838 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
838 In-Reply-To: <patchbomb.60@*> (glob)
839 In-Reply-To: <patchbomb.60@*> (glob)
839 References: <patchbomb.60@*> (glob)
840 References: <patchbomb.60@*> (glob)
840 User-Agent: Mercurial-patchbomb/* (glob)
841 User-Agent: Mercurial-patchbomb/* (glob)
841 Date: Thu, 01 Jan 1970 00:01:01 +0000
842 Date: Thu, 01 Jan 1970 00:01:01 +0000
842 From: quux
843 From: quux
843 To: foo
844 To: foo
844 Cc: bar
845 Cc: bar
845
846
846 --===*= (glob)
847 --===*= (glob)
847 Content-Type: text/x-patch; charset="us-ascii"
848 Content-Type: text/x-patch; charset="us-ascii"
848 MIME-Version: 1.0
849 MIME-Version: 1.0
849 Content-Transfer-Encoding: 7bit
850 Content-Transfer-Encoding: 7bit
850 Content-Disposition: inline; filename=t2-1.patch
851 Content-Disposition: inline; filename=t2-1.patch
851
852
852 # HG changeset patch
853 # HG changeset patch
853 # User test
854 # User test
854 # Date 1 0
855 # Date 1 0
855 # Thu Jan 01 00:00:01 1970 +0000
856 # Thu Jan 01 00:00:01 1970 +0000
856 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
857 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
857 # Parent 0000000000000000000000000000000000000000
858 # Parent 0000000000000000000000000000000000000000
858 a
859 a
859
860
860 diff -r 000000000000 -r 8580ff50825a a
861 diff -r 000000000000 -r 8580ff50825a a
861 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
862 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
862 +++ b/a Thu Jan 01 00:00:01 1970 +0000
863 +++ b/a Thu Jan 01 00:00:01 1970 +0000
863 @@ -0,0 +1,1 @@
864 @@ -0,0 +1,1 @@
864 +a
865 +a
865
866
866 --===*=-- (glob)
867 --===*=-- (glob)
867 displaying [PATCH 2 of 3] b ...
868 displaying [PATCH 2 of 3] b ...
868 Content-Type: multipart/mixed; boundary="===*==" (glob)
869 Content-Type: multipart/mixed; boundary="===*==" (glob)
869 MIME-Version: 1.0
870 MIME-Version: 1.0
870 Subject: [PATCH 2 of 3] b
871 Subject: [PATCH 2 of 3] b
871 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
872 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
872 X-Mercurial-Series-Index: 2
873 X-Mercurial-Series-Index: 2
873 X-Mercurial-Series-Total: 3
874 X-Mercurial-Series-Total: 3
874 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
875 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
875 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
876 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
876 In-Reply-To: <patchbomb.60@*> (glob)
877 In-Reply-To: <patchbomb.60@*> (glob)
877 References: <patchbomb.60@*> (glob)
878 References: <patchbomb.60@*> (glob)
878 User-Agent: Mercurial-patchbomb/* (glob)
879 User-Agent: Mercurial-patchbomb/* (glob)
879 Date: Thu, 01 Jan 1970 00:01:02 +0000
880 Date: Thu, 01 Jan 1970 00:01:02 +0000
880 From: quux
881 From: quux
881 To: foo
882 To: foo
882 Cc: bar
883 Cc: bar
883
884
884 --===*= (glob)
885 --===*= (glob)
885 Content-Type: text/x-patch; charset="us-ascii"
886 Content-Type: text/x-patch; charset="us-ascii"
886 MIME-Version: 1.0
887 MIME-Version: 1.0
887 Content-Transfer-Encoding: 7bit
888 Content-Transfer-Encoding: 7bit
888 Content-Disposition: inline; filename=t2-2.patch
889 Content-Disposition: inline; filename=t2-2.patch
889
890
890 # HG changeset patch
891 # HG changeset patch
891 # User test
892 # User test
892 # Date 2 0
893 # Date 2 0
893 # Thu Jan 01 00:00:02 1970 +0000
894 # Thu Jan 01 00:00:02 1970 +0000
894 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
895 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
895 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
896 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
896 b
897 b
897
898
898 diff -r 8580ff50825a -r 97d72e5f12c7 b
899 diff -r 8580ff50825a -r 97d72e5f12c7 b
899 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
900 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
900 +++ b/b Thu Jan 01 00:00:02 1970 +0000
901 +++ b/b Thu Jan 01 00:00:02 1970 +0000
901 @@ -0,0 +1,1 @@
902 @@ -0,0 +1,1 @@
902 +b
903 +b
903
904
904 --===*=-- (glob)
905 --===*=-- (glob)
905 displaying [PATCH 3 of 3] long line ...
906 displaying [PATCH 3 of 3] long line ...
906 Content-Type: multipart/mixed; boundary="===*==" (glob)
907 Content-Type: multipart/mixed; boundary="===*==" (glob)
907 MIME-Version: 1.0
908 MIME-Version: 1.0
908 Subject: [PATCH 3 of 3] long line
909 Subject: [PATCH 3 of 3] long line
909 X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
910 X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
910 X-Mercurial-Series-Index: 3
911 X-Mercurial-Series-Index: 3
911 X-Mercurial-Series-Total: 3
912 X-Mercurial-Series-Total: 3
912 Message-Id: <a2ea8fc83dd8b93cfd86.63@*> (glob)
913 Message-Id: <a2ea8fc83dd8b93cfd86.63@*> (glob)
913 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
914 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
914 In-Reply-To: <patchbomb.60@*> (glob)
915 In-Reply-To: <patchbomb.60@*> (glob)
915 References: <patchbomb.60@*> (glob)
916 References: <patchbomb.60@*> (glob)
916 User-Agent: Mercurial-patchbomb/* (glob)
917 User-Agent: Mercurial-patchbomb/* (glob)
917 Date: Thu, 01 Jan 1970 00:01:03 +0000
918 Date: Thu, 01 Jan 1970 00:01:03 +0000
918 From: quux
919 From: quux
919 To: foo
920 To: foo
920 Cc: bar
921 Cc: bar
921
922
922 --===*= (glob)
923 --===*= (glob)
923 Content-Type: text/x-patch; charset="us-ascii"
924 Content-Type: text/x-patch; charset="us-ascii"
924 MIME-Version: 1.0
925 MIME-Version: 1.0
925 Content-Transfer-Encoding: quoted-printable
926 Content-Transfer-Encoding: quoted-printable
926 Content-Disposition: inline; filename=t2-3.patch
927 Content-Disposition: inline; filename=t2-3.patch
927
928
928 # HG changeset patch
929 # HG changeset patch
929 # User test
930 # User test
930 # Date 4 0
931 # Date 4 0
931 # Thu Jan 01 00:00:04 1970 +0000
932 # Thu Jan 01 00:00:04 1970 +0000
932 # Node ID a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
933 # Node ID a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
933 # Parent 909a00e13e9d78b575aeee23dddbada46d5a143f
934 # Parent 909a00e13e9d78b575aeee23dddbada46d5a143f
934 long line
935 long line
935
936
936 diff -r 909a00e13e9d -r a2ea8fc83dd8 long
937 diff -r 909a00e13e9d -r a2ea8fc83dd8 long
937 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
938 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
938 +++ b/long Thu Jan 01 00:00:04 1970 +0000
939 +++ b/long Thu Jan 01 00:00:04 1970 +0000
939 @@ -0,0 +1,4 @@
940 @@ -0,0 +1,4 @@
940 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
941 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
941 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
942 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
942 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
943 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
943 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
944 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
944 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
945 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
945 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
946 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
946 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
947 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
947 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
948 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
948 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
949 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
949 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
950 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
950 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
951 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
951 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
952 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
952 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
953 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
953 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
954 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
954 +foo
955 +foo
955 +
956 +
956 +bar
957 +bar
957
958
958 --===*=-- (glob)
959 --===*=-- (glob)
959
960
960 test attach for single patch:
961 test attach for single patch:
961 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a -r 2 | $FILTERBOUNDARY
962 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a -r 2 | $FILTERBOUNDARY
962 this patch series consists of 1 patches.
963 this patch series consists of 1 patches.
963
964
964
965
965 displaying [PATCH] test ...
966 displaying [PATCH] test ...
966 Content-Type: multipart/mixed; boundary="===*==" (glob)
967 Content-Type: multipart/mixed; boundary="===*==" (glob)
967 MIME-Version: 1.0
968 MIME-Version: 1.0
968 Subject: [PATCH] test
969 Subject: [PATCH] test
969 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
970 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
970 X-Mercurial-Series-Index: 1
971 X-Mercurial-Series-Index: 1
971 X-Mercurial-Series-Total: 1
972 X-Mercurial-Series-Total: 1
972 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
973 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
973 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
974 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
974 User-Agent: Mercurial-patchbomb/* (glob)
975 User-Agent: Mercurial-patchbomb/* (glob)
975 Date: Thu, 01 Jan 1970 00:01:00 +0000
976 Date: Thu, 01 Jan 1970 00:01:00 +0000
976 From: quux
977 From: quux
977 To: foo
978 To: foo
978 Cc: bar
979 Cc: bar
979
980
980 --===*= (glob)
981 --===*= (glob)
981 Content-Type: text/plain; charset="us-ascii"
982 Content-Type: text/plain; charset="us-ascii"
982 MIME-Version: 1.0
983 MIME-Version: 1.0
983 Content-Transfer-Encoding: 7bit
984 Content-Transfer-Encoding: 7bit
984
985
985 Patch subject is complete summary.
986 Patch subject is complete summary.
986
987
987
988
988
989
989 --===*= (glob)
990 --===*= (glob)
990 Content-Type: text/x-patch; charset="us-ascii"
991 Content-Type: text/x-patch; charset="us-ascii"
991 MIME-Version: 1.0
992 MIME-Version: 1.0
992 Content-Transfer-Encoding: 7bit
993 Content-Transfer-Encoding: 7bit
993 Content-Disposition: attachment; filename=t2.patch
994 Content-Disposition: attachment; filename=t2.patch
994
995
995 # HG changeset patch
996 # HG changeset patch
996 # User test
997 # User test
997 # Date 3 0
998 # Date 3 0
998 # Thu Jan 01 00:00:03 1970 +0000
999 # Thu Jan 01 00:00:03 1970 +0000
999 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1000 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1000 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1001 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1001 c
1002 c
1002
1003
1003 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1004 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1004 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1005 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1005 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1006 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1006 @@ -0,0 +1,1 @@
1007 @@ -0,0 +1,1 @@
1007 +c
1008 +c
1008
1009
1009 --===*=-- (glob)
1010 --===*=-- (glob)
1010
1011
1011 test attach for single patch (quoted-printable):
1012 test attach for single patch (quoted-printable):
1012 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a -r 4 | $FILTERBOUNDARY
1013 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a -r 4 | $FILTERBOUNDARY
1013 this patch series consists of 1 patches.
1014 this patch series consists of 1 patches.
1014
1015
1015
1016
1016 displaying [PATCH] test ...
1017 displaying [PATCH] test ...
1017 Content-Type: multipart/mixed; boundary="===*==" (glob)
1018 Content-Type: multipart/mixed; boundary="===*==" (glob)
1018 MIME-Version: 1.0
1019 MIME-Version: 1.0
1019 Subject: [PATCH] test
1020 Subject: [PATCH] test
1020 X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
1021 X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
1021 X-Mercurial-Series-Index: 1
1022 X-Mercurial-Series-Index: 1
1022 X-Mercurial-Series-Total: 1
1023 X-Mercurial-Series-Total: 1
1023 Message-Id: <a2ea8fc83dd8b93cfd86.60@*> (glob)
1024 Message-Id: <a2ea8fc83dd8b93cfd86.60@*> (glob)
1024 X-Mercurial-Series-Id: <a2ea8fc83dd8b93cfd86.60@*> (glob)
1025 X-Mercurial-Series-Id: <a2ea8fc83dd8b93cfd86.60@*> (glob)
1025 User-Agent: Mercurial-patchbomb/* (glob)
1026 User-Agent: Mercurial-patchbomb/* (glob)
1026 Date: Thu, 01 Jan 1970 00:01:00 +0000
1027 Date: Thu, 01 Jan 1970 00:01:00 +0000
1027 From: quux
1028 From: quux
1028 To: foo
1029 To: foo
1029 Cc: bar
1030 Cc: bar
1030
1031
1031 --===*= (glob)
1032 --===*= (glob)
1032 Content-Type: text/plain; charset="us-ascii"
1033 Content-Type: text/plain; charset="us-ascii"
1033 MIME-Version: 1.0
1034 MIME-Version: 1.0
1034 Content-Transfer-Encoding: 7bit
1035 Content-Transfer-Encoding: 7bit
1035
1036
1036 Patch subject is complete summary.
1037 Patch subject is complete summary.
1037
1038
1038
1039
1039
1040
1040 --===*= (glob)
1041 --===*= (glob)
1041 Content-Type: text/x-patch; charset="us-ascii"
1042 Content-Type: text/x-patch; charset="us-ascii"
1042 MIME-Version: 1.0
1043 MIME-Version: 1.0
1043 Content-Transfer-Encoding: quoted-printable
1044 Content-Transfer-Encoding: quoted-printable
1044 Content-Disposition: attachment; filename=t2.patch
1045 Content-Disposition: attachment; filename=t2.patch
1045
1046
1046 # HG changeset patch
1047 # HG changeset patch
1047 # User test
1048 # User test
1048 # Date 4 0
1049 # Date 4 0
1049 # Thu Jan 01 00:00:04 1970 +0000
1050 # Thu Jan 01 00:00:04 1970 +0000
1050 # Node ID a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
1051 # Node ID a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
1051 # Parent 909a00e13e9d78b575aeee23dddbada46d5a143f
1052 # Parent 909a00e13e9d78b575aeee23dddbada46d5a143f
1052 long line
1053 long line
1053
1054
1054 diff -r 909a00e13e9d -r a2ea8fc83dd8 long
1055 diff -r 909a00e13e9d -r a2ea8fc83dd8 long
1055 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1056 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1056 +++ b/long Thu Jan 01 00:00:04 1970 +0000
1057 +++ b/long Thu Jan 01 00:00:04 1970 +0000
1057 @@ -0,0 +1,4 @@
1058 @@ -0,0 +1,4 @@
1058 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1059 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1059 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1060 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1060 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1061 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1061 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1062 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1062 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1063 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1063 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1064 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1064 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1065 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1065 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1066 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1066 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1067 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1067 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1068 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1068 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1069 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1069 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1070 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1070 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1071 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1071 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
1072 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
1072 +foo
1073 +foo
1073 +
1074 +
1074 +bar
1075 +bar
1075
1076
1076 --===*=-- (glob)
1077 --===*=-- (glob)
1077
1078
1078 test attach and body for single patch:
1079 test attach and body for single patch:
1079 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a --body -r 2 | $FILTERBOUNDARY
1080 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a --body -r 2 | $FILTERBOUNDARY
1080 this patch series consists of 1 patches.
1081 this patch series consists of 1 patches.
1081
1082
1082
1083
1083 displaying [PATCH] test ...
1084 displaying [PATCH] test ...
1084 Content-Type: multipart/mixed; boundary="===*==" (glob)
1085 Content-Type: multipart/mixed; boundary="===*==" (glob)
1085 MIME-Version: 1.0
1086 MIME-Version: 1.0
1086 Subject: [PATCH] test
1087 Subject: [PATCH] test
1087 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1088 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1088 X-Mercurial-Series-Index: 1
1089 X-Mercurial-Series-Index: 1
1089 X-Mercurial-Series-Total: 1
1090 X-Mercurial-Series-Total: 1
1090 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1091 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1091 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1092 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1092 User-Agent: Mercurial-patchbomb/* (glob)
1093 User-Agent: Mercurial-patchbomb/* (glob)
1093 Date: Thu, 01 Jan 1970 00:01:00 +0000
1094 Date: Thu, 01 Jan 1970 00:01:00 +0000
1094 From: quux
1095 From: quux
1095 To: foo
1096 To: foo
1096 Cc: bar
1097 Cc: bar
1097
1098
1098 --===*= (glob)
1099 --===*= (glob)
1099 Content-Type: text/plain; charset="us-ascii"
1100 Content-Type: text/plain; charset="us-ascii"
1100 MIME-Version: 1.0
1101 MIME-Version: 1.0
1101 Content-Transfer-Encoding: 7bit
1102 Content-Transfer-Encoding: 7bit
1102
1103
1103 # HG changeset patch
1104 # HG changeset patch
1104 # User test
1105 # User test
1105 # Date 3 0
1106 # Date 3 0
1106 # Thu Jan 01 00:00:03 1970 +0000
1107 # Thu Jan 01 00:00:03 1970 +0000
1107 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1108 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1108 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1109 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1109 c
1110 c
1110
1111
1111 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1112 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1112 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1113 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1113 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1114 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1114 @@ -0,0 +1,1 @@
1115 @@ -0,0 +1,1 @@
1115 +c
1116 +c
1116
1117
1117 --===*= (glob)
1118 --===*= (glob)
1118 Content-Type: text/x-patch; charset="us-ascii"
1119 Content-Type: text/x-patch; charset="us-ascii"
1119 MIME-Version: 1.0
1120 MIME-Version: 1.0
1120 Content-Transfer-Encoding: 7bit
1121 Content-Transfer-Encoding: 7bit
1121 Content-Disposition: attachment; filename=t2.patch
1122 Content-Disposition: attachment; filename=t2.patch
1122
1123
1123 # HG changeset patch
1124 # HG changeset patch
1124 # User test
1125 # User test
1125 # Date 3 0
1126 # Date 3 0
1126 # Thu Jan 01 00:00:03 1970 +0000
1127 # Thu Jan 01 00:00:03 1970 +0000
1127 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1128 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1128 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1129 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1129 c
1130 c
1130
1131
1131 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1132 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1132 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1133 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1133 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1134 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1134 @@ -0,0 +1,1 @@
1135 @@ -0,0 +1,1 @@
1135 +c
1136 +c
1136
1137
1137 --===*=-- (glob)
1138 --===*=-- (glob)
1138
1139
1139 test attach for multiple patches:
1140 test attach for multiple patches:
1140 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a \
1141 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a \
1141 > -r 0:1 -r 4 | $FILTERBOUNDARY
1142 > -r 0:1 -r 4 | $FILTERBOUNDARY
1142 this patch series consists of 3 patches.
1143 this patch series consists of 3 patches.
1143
1144
1144
1145
1145 Write the introductory message for the patch series.
1146 Write the introductory message for the patch series.
1146
1147
1147
1148
1148 displaying [PATCH 0 of 3] test ...
1149 displaying [PATCH 0 of 3] test ...
1149 Content-Type: text/plain; charset="us-ascii"
1150 Content-Type: text/plain; charset="us-ascii"
1150 MIME-Version: 1.0
1151 MIME-Version: 1.0
1151 Content-Transfer-Encoding: 7bit
1152 Content-Transfer-Encoding: 7bit
1152 Subject: [PATCH 0 of 3] test
1153 Subject: [PATCH 0 of 3] test
1153 Message-Id: <patchbomb.60@*> (glob)
1154 Message-Id: <patchbomb.60@*> (glob)
1154 User-Agent: Mercurial-patchbomb/* (glob)
1155 User-Agent: Mercurial-patchbomb/* (glob)
1155 Date: Thu, 01 Jan 1970 00:01:00 +0000
1156 Date: Thu, 01 Jan 1970 00:01:00 +0000
1156 From: quux
1157 From: quux
1157 To: foo
1158 To: foo
1158 Cc: bar
1159 Cc: bar
1159
1160
1160
1161
1161 displaying [PATCH 1 of 3] a ...
1162 displaying [PATCH 1 of 3] a ...
1162 Content-Type: multipart/mixed; boundary="===*==" (glob)
1163 Content-Type: multipart/mixed; boundary="===*==" (glob)
1163 MIME-Version: 1.0
1164 MIME-Version: 1.0
1164 Subject: [PATCH 1 of 3] a
1165 Subject: [PATCH 1 of 3] a
1165 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
1166 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
1166 X-Mercurial-Series-Index: 1
1167 X-Mercurial-Series-Index: 1
1167 X-Mercurial-Series-Total: 3
1168 X-Mercurial-Series-Total: 3
1168 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
1169 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
1169 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1170 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1170 In-Reply-To: <patchbomb.60@*> (glob)
1171 In-Reply-To: <patchbomb.60@*> (glob)
1171 References: <patchbomb.60@*> (glob)
1172 References: <patchbomb.60@*> (glob)
1172 User-Agent: Mercurial-patchbomb/* (glob)
1173 User-Agent: Mercurial-patchbomb/* (glob)
1173 Date: Thu, 01 Jan 1970 00:01:01 +0000
1174 Date: Thu, 01 Jan 1970 00:01:01 +0000
1174 From: quux
1175 From: quux
1175 To: foo
1176 To: foo
1176 Cc: bar
1177 Cc: bar
1177
1178
1178 --===*= (glob)
1179 --===*= (glob)
1179 Content-Type: text/plain; charset="us-ascii"
1180 Content-Type: text/plain; charset="us-ascii"
1180 MIME-Version: 1.0
1181 MIME-Version: 1.0
1181 Content-Transfer-Encoding: 7bit
1182 Content-Transfer-Encoding: 7bit
1182
1183
1183 Patch subject is complete summary.
1184 Patch subject is complete summary.
1184
1185
1185
1186
1186
1187
1187 --===*= (glob)
1188 --===*= (glob)
1188 Content-Type: text/x-patch; charset="us-ascii"
1189 Content-Type: text/x-patch; charset="us-ascii"
1189 MIME-Version: 1.0
1190 MIME-Version: 1.0
1190 Content-Transfer-Encoding: 7bit
1191 Content-Transfer-Encoding: 7bit
1191 Content-Disposition: attachment; filename=t2-1.patch
1192 Content-Disposition: attachment; filename=t2-1.patch
1192
1193
1193 # HG changeset patch
1194 # HG changeset patch
1194 # User test
1195 # User test
1195 # Date 1 0
1196 # Date 1 0
1196 # Thu Jan 01 00:00:01 1970 +0000
1197 # Thu Jan 01 00:00:01 1970 +0000
1197 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
1198 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
1198 # Parent 0000000000000000000000000000000000000000
1199 # Parent 0000000000000000000000000000000000000000
1199 a
1200 a
1200
1201
1201 diff -r 000000000000 -r 8580ff50825a a
1202 diff -r 000000000000 -r 8580ff50825a a
1202 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1203 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1203 +++ b/a Thu Jan 01 00:00:01 1970 +0000
1204 +++ b/a Thu Jan 01 00:00:01 1970 +0000
1204 @@ -0,0 +1,1 @@
1205 @@ -0,0 +1,1 @@
1205 +a
1206 +a
1206
1207
1207 --===*=-- (glob)
1208 --===*=-- (glob)
1208 displaying [PATCH 2 of 3] b ...
1209 displaying [PATCH 2 of 3] b ...
1209 Content-Type: multipart/mixed; boundary="===*==" (glob)
1210 Content-Type: multipart/mixed; boundary="===*==" (glob)
1210 MIME-Version: 1.0
1211 MIME-Version: 1.0
1211 Subject: [PATCH 2 of 3] b
1212 Subject: [PATCH 2 of 3] b
1212 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1213 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1213 X-Mercurial-Series-Index: 2
1214 X-Mercurial-Series-Index: 2
1214 X-Mercurial-Series-Total: 3
1215 X-Mercurial-Series-Total: 3
1215 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
1216 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
1216 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1217 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1217 In-Reply-To: <patchbomb.60@*> (glob)
1218 In-Reply-To: <patchbomb.60@*> (glob)
1218 References: <patchbomb.60@*> (glob)
1219 References: <patchbomb.60@*> (glob)
1219 User-Agent: Mercurial-patchbomb/* (glob)
1220 User-Agent: Mercurial-patchbomb/* (glob)
1220 Date: Thu, 01 Jan 1970 00:01:02 +0000
1221 Date: Thu, 01 Jan 1970 00:01:02 +0000
1221 From: quux
1222 From: quux
1222 To: foo
1223 To: foo
1223 Cc: bar
1224 Cc: bar
1224
1225
1225 --===*= (glob)
1226 --===*= (glob)
1226 Content-Type: text/plain; charset="us-ascii"
1227 Content-Type: text/plain; charset="us-ascii"
1227 MIME-Version: 1.0
1228 MIME-Version: 1.0
1228 Content-Transfer-Encoding: 7bit
1229 Content-Transfer-Encoding: 7bit
1229
1230
1230 Patch subject is complete summary.
1231 Patch subject is complete summary.
1231
1232
1232
1233
1233
1234
1234 --===*= (glob)
1235 --===*= (glob)
1235 Content-Type: text/x-patch; charset="us-ascii"
1236 Content-Type: text/x-patch; charset="us-ascii"
1236 MIME-Version: 1.0
1237 MIME-Version: 1.0
1237 Content-Transfer-Encoding: 7bit
1238 Content-Transfer-Encoding: 7bit
1238 Content-Disposition: attachment; filename=t2-2.patch
1239 Content-Disposition: attachment; filename=t2-2.patch
1239
1240
1240 # HG changeset patch
1241 # HG changeset patch
1241 # User test
1242 # User test
1242 # Date 2 0
1243 # Date 2 0
1243 # Thu Jan 01 00:00:02 1970 +0000
1244 # Thu Jan 01 00:00:02 1970 +0000
1244 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1245 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1245 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1246 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1246 b
1247 b
1247
1248
1248 diff -r 8580ff50825a -r 97d72e5f12c7 b
1249 diff -r 8580ff50825a -r 97d72e5f12c7 b
1249 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1250 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1250 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1251 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1251 @@ -0,0 +1,1 @@
1252 @@ -0,0 +1,1 @@
1252 +b
1253 +b
1253
1254
1254 --===*=-- (glob)
1255 --===*=-- (glob)
1255 displaying [PATCH 3 of 3] long line ...
1256 displaying [PATCH 3 of 3] long line ...
1256 Content-Type: multipart/mixed; boundary="===*==" (glob)
1257 Content-Type: multipart/mixed; boundary="===*==" (glob)
1257 MIME-Version: 1.0
1258 MIME-Version: 1.0
1258 Subject: [PATCH 3 of 3] long line
1259 Subject: [PATCH 3 of 3] long line
1259 X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
1260 X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
1260 X-Mercurial-Series-Index: 3
1261 X-Mercurial-Series-Index: 3
1261 X-Mercurial-Series-Total: 3
1262 X-Mercurial-Series-Total: 3
1262 Message-Id: <a2ea8fc83dd8b93cfd86.63@*> (glob)
1263 Message-Id: <a2ea8fc83dd8b93cfd86.63@*> (glob)
1263 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1264 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1264 In-Reply-To: <patchbomb.60@*> (glob)
1265 In-Reply-To: <patchbomb.60@*> (glob)
1265 References: <patchbomb.60@*> (glob)
1266 References: <patchbomb.60@*> (glob)
1266 User-Agent: Mercurial-patchbomb/* (glob)
1267 User-Agent: Mercurial-patchbomb/* (glob)
1267 Date: Thu, 01 Jan 1970 00:01:03 +0000
1268 Date: Thu, 01 Jan 1970 00:01:03 +0000
1268 From: quux
1269 From: quux
1269 To: foo
1270 To: foo
1270 Cc: bar
1271 Cc: bar
1271
1272
1272 --===*= (glob)
1273 --===*= (glob)
1273 Content-Type: text/plain; charset="us-ascii"
1274 Content-Type: text/plain; charset="us-ascii"
1274 MIME-Version: 1.0
1275 MIME-Version: 1.0
1275 Content-Transfer-Encoding: 7bit
1276 Content-Transfer-Encoding: 7bit
1276
1277
1277 Patch subject is complete summary.
1278 Patch subject is complete summary.
1278
1279
1279
1280
1280
1281
1281 --===*= (glob)
1282 --===*= (glob)
1282 Content-Type: text/x-patch; charset="us-ascii"
1283 Content-Type: text/x-patch; charset="us-ascii"
1283 MIME-Version: 1.0
1284 MIME-Version: 1.0
1284 Content-Transfer-Encoding: quoted-printable
1285 Content-Transfer-Encoding: quoted-printable
1285 Content-Disposition: attachment; filename=t2-3.patch
1286 Content-Disposition: attachment; filename=t2-3.patch
1286
1287
1287 # HG changeset patch
1288 # HG changeset patch
1288 # User test
1289 # User test
1289 # Date 4 0
1290 # Date 4 0
1290 # Thu Jan 01 00:00:04 1970 +0000
1291 # Thu Jan 01 00:00:04 1970 +0000
1291 # Node ID a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
1292 # Node ID a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
1292 # Parent 909a00e13e9d78b575aeee23dddbada46d5a143f
1293 # Parent 909a00e13e9d78b575aeee23dddbada46d5a143f
1293 long line
1294 long line
1294
1295
1295 diff -r 909a00e13e9d -r a2ea8fc83dd8 long
1296 diff -r 909a00e13e9d -r a2ea8fc83dd8 long
1296 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1297 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1297 +++ b/long Thu Jan 01 00:00:04 1970 +0000
1298 +++ b/long Thu Jan 01 00:00:04 1970 +0000
1298 @@ -0,0 +1,4 @@
1299 @@ -0,0 +1,4 @@
1299 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1300 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1300 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1301 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1301 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1302 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1302 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1303 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1303 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1304 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1304 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1305 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1305 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1306 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1306 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1307 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1307 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1308 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1308 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1309 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1309 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1310 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1310 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1311 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1311 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1312 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
1312 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
1313 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
1313 +foo
1314 +foo
1314 +
1315 +
1315 +bar
1316 +bar
1316
1317
1317 --===*=-- (glob)
1318 --===*=-- (glob)
1318
1319
1319 test intro for single patch:
1320 test intro for single patch:
1320 $ hg email --date '1970-1-1 0:1' -n --intro -f quux -t foo -c bar -s test \
1321 $ hg email --date '1970-1-1 0:1' -n --intro -f quux -t foo -c bar -s test \
1321 > -r 2
1322 > -r 2
1322 this patch series consists of 1 patches.
1323 this patch series consists of 1 patches.
1323
1324
1324
1325
1325 Write the introductory message for the patch series.
1326 Write the introductory message for the patch series.
1326
1327
1327
1328
1328 displaying [PATCH 0 of 1] test ...
1329 displaying [PATCH 0 of 1] test ...
1329 Content-Type: text/plain; charset="us-ascii"
1330 Content-Type: text/plain; charset="us-ascii"
1330 MIME-Version: 1.0
1331 MIME-Version: 1.0
1331 Content-Transfer-Encoding: 7bit
1332 Content-Transfer-Encoding: 7bit
1332 Subject: [PATCH 0 of 1] test
1333 Subject: [PATCH 0 of 1] test
1333 Message-Id: <patchbomb.60@*> (glob)
1334 Message-Id: <patchbomb.60@*> (glob)
1334 User-Agent: Mercurial-patchbomb/* (glob)
1335 User-Agent: Mercurial-patchbomb/* (glob)
1335 Date: Thu, 01 Jan 1970 00:01:00 +0000
1336 Date: Thu, 01 Jan 1970 00:01:00 +0000
1336 From: quux
1337 From: quux
1337 To: foo
1338 To: foo
1338 Cc: bar
1339 Cc: bar
1339
1340
1340
1341
1341 displaying [PATCH 1 of 1] c ...
1342 displaying [PATCH 1 of 1] c ...
1342 Content-Type: text/plain; charset="us-ascii"
1343 Content-Type: text/plain; charset="us-ascii"
1343 MIME-Version: 1.0
1344 MIME-Version: 1.0
1344 Content-Transfer-Encoding: 7bit
1345 Content-Transfer-Encoding: 7bit
1345 Subject: [PATCH 1 of 1] c
1346 Subject: [PATCH 1 of 1] c
1346 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1347 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1347 X-Mercurial-Series-Index: 1
1348 X-Mercurial-Series-Index: 1
1348 X-Mercurial-Series-Total: 1
1349 X-Mercurial-Series-Total: 1
1349 Message-Id: <ff2c9fa2018b15fa74b3.61@*> (glob)
1350 Message-Id: <ff2c9fa2018b15fa74b3.61@*> (glob)
1350 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.61@*> (glob)
1351 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.61@*> (glob)
1351 In-Reply-To: <patchbomb.60@*> (glob)
1352 In-Reply-To: <patchbomb.60@*> (glob)
1352 References: <patchbomb.60@*> (glob)
1353 References: <patchbomb.60@*> (glob)
1353 User-Agent: Mercurial-patchbomb/* (glob)
1354 User-Agent: Mercurial-patchbomb/* (glob)
1354 Date: Thu, 01 Jan 1970 00:01:01 +0000
1355 Date: Thu, 01 Jan 1970 00:01:01 +0000
1355 From: quux
1356 From: quux
1356 To: foo
1357 To: foo
1357 Cc: bar
1358 Cc: bar
1358
1359
1359 # HG changeset patch
1360 # HG changeset patch
1360 # User test
1361 # User test
1361 # Date 3 0
1362 # Date 3 0
1362 # Thu Jan 01 00:00:03 1970 +0000
1363 # Thu Jan 01 00:00:03 1970 +0000
1363 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1364 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1364 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1365 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1365 c
1366 c
1366
1367
1367 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1368 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1368 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1369 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1369 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1370 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1370 @@ -0,0 +1,1 @@
1371 @@ -0,0 +1,1 @@
1371 +c
1372 +c
1372
1373
1373
1374
1374 test --desc without --intro for a single patch:
1375 test --desc without --intro for a single patch:
1375 $ echo foo > intro.text
1376 $ echo foo > intro.text
1376 $ hg email --date '1970-1-1 0:1' -n --desc intro.text -f quux -t foo -c bar \
1377 $ hg email --date '1970-1-1 0:1' -n --desc intro.text -f quux -t foo -c bar \
1377 > -s test -r 2
1378 > -s test -r 2
1378 this patch series consists of 1 patches.
1379 this patch series consists of 1 patches.
1379
1380
1380
1381
1381 displaying [PATCH 0 of 1] test ...
1382 displaying [PATCH 0 of 1] test ...
1382 Content-Type: text/plain; charset="us-ascii"
1383 Content-Type: text/plain; charset="us-ascii"
1383 MIME-Version: 1.0
1384 MIME-Version: 1.0
1384 Content-Transfer-Encoding: 7bit
1385 Content-Transfer-Encoding: 7bit
1385 Subject: [PATCH 0 of 1] test
1386 Subject: [PATCH 0 of 1] test
1386 Message-Id: <patchbomb.60@*> (glob)
1387 Message-Id: <patchbomb.60@*> (glob)
1387 User-Agent: Mercurial-patchbomb/* (glob)
1388 User-Agent: Mercurial-patchbomb/* (glob)
1388 Date: Thu, 01 Jan 1970 00:01:00 +0000
1389 Date: Thu, 01 Jan 1970 00:01:00 +0000
1389 From: quux
1390 From: quux
1390 To: foo
1391 To: foo
1391 Cc: bar
1392 Cc: bar
1392
1393
1393 foo
1394 foo
1394
1395
1395 displaying [PATCH 1 of 1] c ...
1396 displaying [PATCH 1 of 1] c ...
1396 Content-Type: text/plain; charset="us-ascii"
1397 Content-Type: text/plain; charset="us-ascii"
1397 MIME-Version: 1.0
1398 MIME-Version: 1.0
1398 Content-Transfer-Encoding: 7bit
1399 Content-Transfer-Encoding: 7bit
1399 Subject: [PATCH 1 of 1] c
1400 Subject: [PATCH 1 of 1] c
1400 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1401 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1401 X-Mercurial-Series-Index: 1
1402 X-Mercurial-Series-Index: 1
1402 X-Mercurial-Series-Total: 1
1403 X-Mercurial-Series-Total: 1
1403 Message-Id: <ff2c9fa2018b15fa74b3.61@*> (glob)
1404 Message-Id: <ff2c9fa2018b15fa74b3.61@*> (glob)
1404 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.61@*> (glob)
1405 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.61@*> (glob)
1405 In-Reply-To: <patchbomb.60@*> (glob)
1406 In-Reply-To: <patchbomb.60@*> (glob)
1406 References: <patchbomb.60@*> (glob)
1407 References: <patchbomb.60@*> (glob)
1407 User-Agent: Mercurial-patchbomb/* (glob)
1408 User-Agent: Mercurial-patchbomb/* (glob)
1408 Date: Thu, 01 Jan 1970 00:01:01 +0000
1409 Date: Thu, 01 Jan 1970 00:01:01 +0000
1409 From: quux
1410 From: quux
1410 To: foo
1411 To: foo
1411 Cc: bar
1412 Cc: bar
1412
1413
1413 # HG changeset patch
1414 # HG changeset patch
1414 # User test
1415 # User test
1415 # Date 3 0
1416 # Date 3 0
1416 # Thu Jan 01 00:00:03 1970 +0000
1417 # Thu Jan 01 00:00:03 1970 +0000
1417 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1418 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1418 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1419 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1419 c
1420 c
1420
1421
1421 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1422 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1422 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1423 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1423 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1424 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1424 @@ -0,0 +1,1 @@
1425 @@ -0,0 +1,1 @@
1425 +c
1426 +c
1426
1427
1427
1428
1428 test intro for multiple patches:
1429 test intro for multiple patches:
1429 $ hg email --date '1970-1-1 0:1' -n --intro -f quux -t foo -c bar -s test \
1430 $ hg email --date '1970-1-1 0:1' -n --intro -f quux -t foo -c bar -s test \
1430 > -r 0:1
1431 > -r 0:1
1431 this patch series consists of 2 patches.
1432 this patch series consists of 2 patches.
1432
1433
1433
1434
1434 Write the introductory message for the patch series.
1435 Write the introductory message for the patch series.
1435
1436
1436
1437
1437 displaying [PATCH 0 of 2] test ...
1438 displaying [PATCH 0 of 2] test ...
1438 Content-Type: text/plain; charset="us-ascii"
1439 Content-Type: text/plain; charset="us-ascii"
1439 MIME-Version: 1.0
1440 MIME-Version: 1.0
1440 Content-Transfer-Encoding: 7bit
1441 Content-Transfer-Encoding: 7bit
1441 Subject: [PATCH 0 of 2] test
1442 Subject: [PATCH 0 of 2] test
1442 Message-Id: <patchbomb.60@*> (glob)
1443 Message-Id: <patchbomb.60@*> (glob)
1443 User-Agent: Mercurial-patchbomb/* (glob)
1444 User-Agent: Mercurial-patchbomb/* (glob)
1444 Date: Thu, 01 Jan 1970 00:01:00 +0000
1445 Date: Thu, 01 Jan 1970 00:01:00 +0000
1445 From: quux
1446 From: quux
1446 To: foo
1447 To: foo
1447 Cc: bar
1448 Cc: bar
1448
1449
1449
1450
1450 displaying [PATCH 1 of 2] a ...
1451 displaying [PATCH 1 of 2] a ...
1451 Content-Type: text/plain; charset="us-ascii"
1452 Content-Type: text/plain; charset="us-ascii"
1452 MIME-Version: 1.0
1453 MIME-Version: 1.0
1453 Content-Transfer-Encoding: 7bit
1454 Content-Transfer-Encoding: 7bit
1454 Subject: [PATCH 1 of 2] a
1455 Subject: [PATCH 1 of 2] a
1455 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
1456 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
1456 X-Mercurial-Series-Index: 1
1457 X-Mercurial-Series-Index: 1
1457 X-Mercurial-Series-Total: 2
1458 X-Mercurial-Series-Total: 2
1458 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
1459 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
1459 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1460 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1460 In-Reply-To: <patchbomb.60@*> (glob)
1461 In-Reply-To: <patchbomb.60@*> (glob)
1461 References: <patchbomb.60@*> (glob)
1462 References: <patchbomb.60@*> (glob)
1462 User-Agent: Mercurial-patchbomb/* (glob)
1463 User-Agent: Mercurial-patchbomb/* (glob)
1463 Date: Thu, 01 Jan 1970 00:01:01 +0000
1464 Date: Thu, 01 Jan 1970 00:01:01 +0000
1464 From: quux
1465 From: quux
1465 To: foo
1466 To: foo
1466 Cc: bar
1467 Cc: bar
1467
1468
1468 # HG changeset patch
1469 # HG changeset patch
1469 # User test
1470 # User test
1470 # Date 1 0
1471 # Date 1 0
1471 # Thu Jan 01 00:00:01 1970 +0000
1472 # Thu Jan 01 00:00:01 1970 +0000
1472 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
1473 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
1473 # Parent 0000000000000000000000000000000000000000
1474 # Parent 0000000000000000000000000000000000000000
1474 a
1475 a
1475
1476
1476 diff -r 000000000000 -r 8580ff50825a a
1477 diff -r 000000000000 -r 8580ff50825a a
1477 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1478 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1478 +++ b/a Thu Jan 01 00:00:01 1970 +0000
1479 +++ b/a Thu Jan 01 00:00:01 1970 +0000
1479 @@ -0,0 +1,1 @@
1480 @@ -0,0 +1,1 @@
1480 +a
1481 +a
1481
1482
1482 displaying [PATCH 2 of 2] b ...
1483 displaying [PATCH 2 of 2] b ...
1483 Content-Type: text/plain; charset="us-ascii"
1484 Content-Type: text/plain; charset="us-ascii"
1484 MIME-Version: 1.0
1485 MIME-Version: 1.0
1485 Content-Transfer-Encoding: 7bit
1486 Content-Transfer-Encoding: 7bit
1486 Subject: [PATCH 2 of 2] b
1487 Subject: [PATCH 2 of 2] b
1487 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1488 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1488 X-Mercurial-Series-Index: 2
1489 X-Mercurial-Series-Index: 2
1489 X-Mercurial-Series-Total: 2
1490 X-Mercurial-Series-Total: 2
1490 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
1491 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
1491 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1492 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1492 In-Reply-To: <patchbomb.60@*> (glob)
1493 In-Reply-To: <patchbomb.60@*> (glob)
1493 References: <patchbomb.60@*> (glob)
1494 References: <patchbomb.60@*> (glob)
1494 User-Agent: Mercurial-patchbomb/* (glob)
1495 User-Agent: Mercurial-patchbomb/* (glob)
1495 Date: Thu, 01 Jan 1970 00:01:02 +0000
1496 Date: Thu, 01 Jan 1970 00:01:02 +0000
1496 From: quux
1497 From: quux
1497 To: foo
1498 To: foo
1498 Cc: bar
1499 Cc: bar
1499
1500
1500 # HG changeset patch
1501 # HG changeset patch
1501 # User test
1502 # User test
1502 # Date 2 0
1503 # Date 2 0
1503 # Thu Jan 01 00:00:02 1970 +0000
1504 # Thu Jan 01 00:00:02 1970 +0000
1504 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1505 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1505 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1506 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1506 b
1507 b
1507
1508
1508 diff -r 8580ff50825a -r 97d72e5f12c7 b
1509 diff -r 8580ff50825a -r 97d72e5f12c7 b
1509 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1510 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1510 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1511 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1511 @@ -0,0 +1,1 @@
1512 @@ -0,0 +1,1 @@
1512 +b
1513 +b
1513
1514
1514
1515
1515 test reply-to via config:
1516 test reply-to via config:
1516 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -r 2 \
1517 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -r 2 \
1517 > --config patchbomb.reply-to='baz@example.com'
1518 > --config patchbomb.reply-to='baz@example.com'
1518 this patch series consists of 1 patches.
1519 this patch series consists of 1 patches.
1519
1520
1520
1521
1521 displaying [PATCH] test ...
1522 displaying [PATCH] test ...
1522 Content-Type: text/plain; charset="us-ascii"
1523 Content-Type: text/plain; charset="us-ascii"
1523 MIME-Version: 1.0
1524 MIME-Version: 1.0
1524 Content-Transfer-Encoding: 7bit
1525 Content-Transfer-Encoding: 7bit
1525 Subject: [PATCH] test
1526 Subject: [PATCH] test
1526 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1527 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1527 X-Mercurial-Series-Index: 1
1528 X-Mercurial-Series-Index: 1
1528 X-Mercurial-Series-Total: 1
1529 X-Mercurial-Series-Total: 1
1529 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1530 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1530 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1531 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1531 User-Agent: Mercurial-patchbomb/* (glob)
1532 User-Agent: Mercurial-patchbomb/* (glob)
1532 Date: Thu, 01 Jan 1970 00:01:00 +0000
1533 Date: Thu, 01 Jan 1970 00:01:00 +0000
1533 From: quux
1534 From: quux
1534 To: foo
1535 To: foo
1535 Cc: bar
1536 Cc: bar
1536 Reply-To: baz@example.com
1537 Reply-To: baz@example.com
1537
1538
1538 # HG changeset patch
1539 # HG changeset patch
1539 # User test
1540 # User test
1540 # Date 3 0
1541 # Date 3 0
1541 # Thu Jan 01 00:00:03 1970 +0000
1542 # Thu Jan 01 00:00:03 1970 +0000
1542 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1543 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1543 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1544 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1544 c
1545 c
1545
1546
1546 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1547 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1547 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1548 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1548 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1549 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1549 @@ -0,0 +1,1 @@
1550 @@ -0,0 +1,1 @@
1550 +c
1551 +c
1551
1552
1552
1553
1553 test reply-to via command line:
1554 test reply-to via command line:
1554 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -r 2 \
1555 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -r 2 \
1555 > --reply-to baz --reply-to fred
1556 > --reply-to baz --reply-to fred
1556 this patch series consists of 1 patches.
1557 this patch series consists of 1 patches.
1557
1558
1558
1559
1559 displaying [PATCH] test ...
1560 displaying [PATCH] test ...
1560 Content-Type: text/plain; charset="us-ascii"
1561 Content-Type: text/plain; charset="us-ascii"
1561 MIME-Version: 1.0
1562 MIME-Version: 1.0
1562 Content-Transfer-Encoding: 7bit
1563 Content-Transfer-Encoding: 7bit
1563 Subject: [PATCH] test
1564 Subject: [PATCH] test
1564 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1565 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1565 X-Mercurial-Series-Index: 1
1566 X-Mercurial-Series-Index: 1
1566 X-Mercurial-Series-Total: 1
1567 X-Mercurial-Series-Total: 1
1567 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1568 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1568 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1569 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1569 User-Agent: Mercurial-patchbomb/* (glob)
1570 User-Agent: Mercurial-patchbomb/* (glob)
1570 Date: Thu, 01 Jan 1970 00:01:00 +0000
1571 Date: Thu, 01 Jan 1970 00:01:00 +0000
1571 From: quux
1572 From: quux
1572 To: foo
1573 To: foo
1573 Cc: bar
1574 Cc: bar
1574 Reply-To: baz, fred
1575 Reply-To: baz, fred
1575
1576
1576 # HG changeset patch
1577 # HG changeset patch
1577 # User test
1578 # User test
1578 # Date 3 0
1579 # Date 3 0
1579 # Thu Jan 01 00:00:03 1970 +0000
1580 # Thu Jan 01 00:00:03 1970 +0000
1580 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1581 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1581 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1582 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1582 c
1583 c
1583
1584
1584 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1585 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1585 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1586 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1586 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1587 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1587 @@ -0,0 +1,1 @@
1588 @@ -0,0 +1,1 @@
1588 +c
1589 +c
1589
1590
1590
1591
1591 tagging csets:
1592 tagging csets:
1592 $ hg tag -r0 zero zero.foo
1593 $ hg tag -r0 zero zero.foo
1593 $ hg tag -r1 one one.patch
1594 $ hg tag -r1 one one.patch
1594 $ hg tag -r2 two two.diff
1595 $ hg tag -r2 two two.diff
1595
1596
1596 test inline for single named patch:
1597 test inline for single named patch:
1597 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i \
1598 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i \
1598 > -r 2 | $FILTERBOUNDARY
1599 > -r 2 | $FILTERBOUNDARY
1599 this patch series consists of 1 patches.
1600 this patch series consists of 1 patches.
1600
1601
1601
1602
1602 displaying [PATCH] test ...
1603 displaying [PATCH] test ...
1603 Content-Type: multipart/mixed; boundary="===*==" (glob)
1604 Content-Type: multipart/mixed; boundary="===*==" (glob)
1604 MIME-Version: 1.0
1605 MIME-Version: 1.0
1605 Subject: [PATCH] test
1606 Subject: [PATCH] test
1606 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1607 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1607 X-Mercurial-Series-Index: 1
1608 X-Mercurial-Series-Index: 1
1608 X-Mercurial-Series-Total: 1
1609 X-Mercurial-Series-Total: 1
1609 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1610 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1610 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1611 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1611 User-Agent: Mercurial-patchbomb/* (glob)
1612 User-Agent: Mercurial-patchbomb/* (glob)
1612 Date: Thu, 01 Jan 1970 00:01:00 +0000
1613 Date: Thu, 01 Jan 1970 00:01:00 +0000
1613 From: quux
1614 From: quux
1614 To: foo
1615 To: foo
1615 Cc: bar
1616 Cc: bar
1616
1617
1617 --===*= (glob)
1618 --===*= (glob)
1618 Content-Type: text/x-patch; charset="us-ascii"
1619 Content-Type: text/x-patch; charset="us-ascii"
1619 MIME-Version: 1.0
1620 MIME-Version: 1.0
1620 Content-Transfer-Encoding: 7bit
1621 Content-Transfer-Encoding: 7bit
1621 Content-Disposition: inline; filename=two.diff
1622 Content-Disposition: inline; filename=two.diff
1622
1623
1623 # HG changeset patch
1624 # HG changeset patch
1624 # User test
1625 # User test
1625 # Date 3 0
1626 # Date 3 0
1626 # Thu Jan 01 00:00:03 1970 +0000
1627 # Thu Jan 01 00:00:03 1970 +0000
1627 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1628 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1628 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1629 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1629 c
1630 c
1630
1631
1631 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1632 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1632 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1633 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1633 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1634 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1634 @@ -0,0 +1,1 @@
1635 @@ -0,0 +1,1 @@
1635 +c
1636 +c
1636
1637
1637 --===*=-- (glob)
1638 --===*=-- (glob)
1638
1639
1639 test inline for multiple named/unnamed patches:
1640 test inline for multiple named/unnamed patches:
1640 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i \
1641 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i \
1641 > -r 0:1 | $FILTERBOUNDARY
1642 > -r 0:1 | $FILTERBOUNDARY
1642 this patch series consists of 2 patches.
1643 this patch series consists of 2 patches.
1643
1644
1644
1645
1645 Write the introductory message for the patch series.
1646 Write the introductory message for the patch series.
1646
1647
1647
1648
1648 displaying [PATCH 0 of 2] test ...
1649 displaying [PATCH 0 of 2] test ...
1649 Content-Type: text/plain; charset="us-ascii"
1650 Content-Type: text/plain; charset="us-ascii"
1650 MIME-Version: 1.0
1651 MIME-Version: 1.0
1651 Content-Transfer-Encoding: 7bit
1652 Content-Transfer-Encoding: 7bit
1652 Subject: [PATCH 0 of 2] test
1653 Subject: [PATCH 0 of 2] test
1653 Message-Id: <patchbomb.60@*> (glob)
1654 Message-Id: <patchbomb.60@*> (glob)
1654 User-Agent: Mercurial-patchbomb/* (glob)
1655 User-Agent: Mercurial-patchbomb/* (glob)
1655 Date: Thu, 01 Jan 1970 00:01:00 +0000
1656 Date: Thu, 01 Jan 1970 00:01:00 +0000
1656 From: quux
1657 From: quux
1657 To: foo
1658 To: foo
1658 Cc: bar
1659 Cc: bar
1659
1660
1660
1661
1661 displaying [PATCH 1 of 2] a ...
1662 displaying [PATCH 1 of 2] a ...
1662 Content-Type: multipart/mixed; boundary="===*==" (glob)
1663 Content-Type: multipart/mixed; boundary="===*==" (glob)
1663 MIME-Version: 1.0
1664 MIME-Version: 1.0
1664 Subject: [PATCH 1 of 2] a
1665 Subject: [PATCH 1 of 2] a
1665 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
1666 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
1666 X-Mercurial-Series-Index: 1
1667 X-Mercurial-Series-Index: 1
1667 X-Mercurial-Series-Total: 2
1668 X-Mercurial-Series-Total: 2
1668 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
1669 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
1669 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1670 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1670 In-Reply-To: <patchbomb.60@*> (glob)
1671 In-Reply-To: <patchbomb.60@*> (glob)
1671 References: <patchbomb.60@*> (glob)
1672 References: <patchbomb.60@*> (glob)
1672 User-Agent: Mercurial-patchbomb/* (glob)
1673 User-Agent: Mercurial-patchbomb/* (glob)
1673 Date: Thu, 01 Jan 1970 00:01:01 +0000
1674 Date: Thu, 01 Jan 1970 00:01:01 +0000
1674 From: quux
1675 From: quux
1675 To: foo
1676 To: foo
1676 Cc: bar
1677 Cc: bar
1677
1678
1678 --===*= (glob)
1679 --===*= (glob)
1679 Content-Type: text/x-patch; charset="us-ascii"
1680 Content-Type: text/x-patch; charset="us-ascii"
1680 MIME-Version: 1.0
1681 MIME-Version: 1.0
1681 Content-Transfer-Encoding: 7bit
1682 Content-Transfer-Encoding: 7bit
1682 Content-Disposition: inline; filename=t2-1.patch
1683 Content-Disposition: inline; filename=t2-1.patch
1683
1684
1684 # HG changeset patch
1685 # HG changeset patch
1685 # User test
1686 # User test
1686 # Date 1 0
1687 # Date 1 0
1687 # Thu Jan 01 00:00:01 1970 +0000
1688 # Thu Jan 01 00:00:01 1970 +0000
1688 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
1689 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
1689 # Parent 0000000000000000000000000000000000000000
1690 # Parent 0000000000000000000000000000000000000000
1690 a
1691 a
1691
1692
1692 diff -r 000000000000 -r 8580ff50825a a
1693 diff -r 000000000000 -r 8580ff50825a a
1693 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1694 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1694 +++ b/a Thu Jan 01 00:00:01 1970 +0000
1695 +++ b/a Thu Jan 01 00:00:01 1970 +0000
1695 @@ -0,0 +1,1 @@
1696 @@ -0,0 +1,1 @@
1696 +a
1697 +a
1697
1698
1698 --===*=-- (glob)
1699 --===*=-- (glob)
1699 displaying [PATCH 2 of 2] b ...
1700 displaying [PATCH 2 of 2] b ...
1700 Content-Type: multipart/mixed; boundary="===*==" (glob)
1701 Content-Type: multipart/mixed; boundary="===*==" (glob)
1701 MIME-Version: 1.0
1702 MIME-Version: 1.0
1702 Subject: [PATCH 2 of 2] b
1703 Subject: [PATCH 2 of 2] b
1703 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1704 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1704 X-Mercurial-Series-Index: 2
1705 X-Mercurial-Series-Index: 2
1705 X-Mercurial-Series-Total: 2
1706 X-Mercurial-Series-Total: 2
1706 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
1707 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
1707 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1708 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1708 In-Reply-To: <patchbomb.60@*> (glob)
1709 In-Reply-To: <patchbomb.60@*> (glob)
1709 References: <patchbomb.60@*> (glob)
1710 References: <patchbomb.60@*> (glob)
1710 User-Agent: Mercurial-patchbomb/* (glob)
1711 User-Agent: Mercurial-patchbomb/* (glob)
1711 Date: Thu, 01 Jan 1970 00:01:02 +0000
1712 Date: Thu, 01 Jan 1970 00:01:02 +0000
1712 From: quux
1713 From: quux
1713 To: foo
1714 To: foo
1714 Cc: bar
1715 Cc: bar
1715
1716
1716 --===*= (glob)
1717 --===*= (glob)
1717 Content-Type: text/x-patch; charset="us-ascii"
1718 Content-Type: text/x-patch; charset="us-ascii"
1718 MIME-Version: 1.0
1719 MIME-Version: 1.0
1719 Content-Transfer-Encoding: 7bit
1720 Content-Transfer-Encoding: 7bit
1720 Content-Disposition: inline; filename=one.patch
1721 Content-Disposition: inline; filename=one.patch
1721
1722
1722 # HG changeset patch
1723 # HG changeset patch
1723 # User test
1724 # User test
1724 # Date 2 0
1725 # Date 2 0
1725 # Thu Jan 01 00:00:02 1970 +0000
1726 # Thu Jan 01 00:00:02 1970 +0000
1726 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1727 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1727 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1728 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1728 b
1729 b
1729
1730
1730 diff -r 8580ff50825a -r 97d72e5f12c7 b
1731 diff -r 8580ff50825a -r 97d72e5f12c7 b
1731 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1732 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1732 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1733 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1733 @@ -0,0 +1,1 @@
1734 @@ -0,0 +1,1 @@
1734 +b
1735 +b
1735
1736
1736 --===*=-- (glob)
1737 --===*=-- (glob)
1737
1738
1738
1739
1739 test inreplyto:
1740 test inreplyto:
1740 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz \
1741 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz \
1741 > -r tip
1742 > -r tip
1742 this patch series consists of 1 patches.
1743 this patch series consists of 1 patches.
1743
1744
1744
1745
1745 displaying [PATCH] Added tag two, two.diff for changeset ff2c9fa2018b ...
1746 displaying [PATCH] Added tag two, two.diff for changeset ff2c9fa2018b ...
1746 Content-Type: text/plain; charset="us-ascii"
1747 Content-Type: text/plain; charset="us-ascii"
1747 MIME-Version: 1.0
1748 MIME-Version: 1.0
1748 Content-Transfer-Encoding: 7bit
1749 Content-Transfer-Encoding: 7bit
1749 Subject: [PATCH] Added tag two, two.diff for changeset ff2c9fa2018b
1750 Subject: [PATCH] Added tag two, two.diff for changeset ff2c9fa2018b
1750 X-Mercurial-Node: 7aead2484924c445ad8ce2613df91f52f9e502ed
1751 X-Mercurial-Node: 7aead2484924c445ad8ce2613df91f52f9e502ed
1751 X-Mercurial-Series-Index: 1
1752 X-Mercurial-Series-Index: 1
1752 X-Mercurial-Series-Total: 1
1753 X-Mercurial-Series-Total: 1
1753 Message-Id: <7aead2484924c445ad8c.60@*> (glob)
1754 Message-Id: <7aead2484924c445ad8c.60@*> (glob)
1754 X-Mercurial-Series-Id: <7aead2484924c445ad8c.60@*> (glob)
1755 X-Mercurial-Series-Id: <7aead2484924c445ad8c.60@*> (glob)
1755 In-Reply-To: <baz>
1756 In-Reply-To: <baz>
1756 References: <baz>
1757 References: <baz>
1757 User-Agent: Mercurial-patchbomb/* (glob)
1758 User-Agent: Mercurial-patchbomb/* (glob)
1758 Date: Thu, 01 Jan 1970 00:01:00 +0000
1759 Date: Thu, 01 Jan 1970 00:01:00 +0000
1759 From: quux
1760 From: quux
1760 To: foo
1761 To: foo
1761 Cc: bar
1762 Cc: bar
1762
1763
1763 # HG changeset patch
1764 # HG changeset patch
1764 # User test
1765 # User test
1765 # Date 0 0
1766 # Date 0 0
1766 # Thu Jan 01 00:00:00 1970 +0000
1767 # Thu Jan 01 00:00:00 1970 +0000
1767 # Node ID 7aead2484924c445ad8ce2613df91f52f9e502ed
1768 # Node ID 7aead2484924c445ad8ce2613df91f52f9e502ed
1768 # Parent 045ca29b1ea20e4940411e695e20e521f2f0f98e
1769 # Parent 045ca29b1ea20e4940411e695e20e521f2f0f98e
1769 Added tag two, two.diff for changeset ff2c9fa2018b
1770 Added tag two, two.diff for changeset ff2c9fa2018b
1770
1771
1771 diff -r 045ca29b1ea2 -r 7aead2484924 .hgtags
1772 diff -r 045ca29b1ea2 -r 7aead2484924 .hgtags
1772 --- a/.hgtags Thu Jan 01 00:00:00 1970 +0000
1773 --- a/.hgtags Thu Jan 01 00:00:00 1970 +0000
1773 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
1774 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
1774 @@ -2,3 +2,5 @@
1775 @@ -2,3 +2,5 @@
1775 8580ff50825a50c8f716709acdf8de0deddcd6ab zero.foo
1776 8580ff50825a50c8f716709acdf8de0deddcd6ab zero.foo
1776 97d72e5f12c7e84f85064aa72e5a297142c36ed9 one
1777 97d72e5f12c7e84f85064aa72e5a297142c36ed9 one
1777 97d72e5f12c7e84f85064aa72e5a297142c36ed9 one.patch
1778 97d72e5f12c7e84f85064aa72e5a297142c36ed9 one.patch
1778 +ff2c9fa2018b15fa74b33363bda9527323e2a99f two
1779 +ff2c9fa2018b15fa74b33363bda9527323e2a99f two
1779 +ff2c9fa2018b15fa74b33363bda9527323e2a99f two.diff
1780 +ff2c9fa2018b15fa74b33363bda9527323e2a99f two.diff
1780
1781
1781 no intro message in non-interactive mode
1782 no intro message in non-interactive mode
1782 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz \
1783 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz \
1783 > -r 0:1
1784 > -r 0:1
1784 this patch series consists of 2 patches.
1785 this patch series consists of 2 patches.
1785
1786
1786 (optional) Subject: [PATCH 0 of 2]
1787 (optional) Subject: [PATCH 0 of 2]
1787
1788
1788 displaying [PATCH 1 of 2] a ...
1789 displaying [PATCH 1 of 2] a ...
1789 Content-Type: text/plain; charset="us-ascii"
1790 Content-Type: text/plain; charset="us-ascii"
1790 MIME-Version: 1.0
1791 MIME-Version: 1.0
1791 Content-Transfer-Encoding: 7bit
1792 Content-Transfer-Encoding: 7bit
1792 Subject: [PATCH 1 of 2] a
1793 Subject: [PATCH 1 of 2] a
1793 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
1794 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
1794 X-Mercurial-Series-Index: 1
1795 X-Mercurial-Series-Index: 1
1795 X-Mercurial-Series-Total: 2
1796 X-Mercurial-Series-Total: 2
1796 Message-Id: <8580ff50825a50c8f716.60@*> (glob)
1797 Message-Id: <8580ff50825a50c8f716.60@*> (glob)
1797 X-Mercurial-Series-Id: <8580ff50825a50c8f716.60@*> (glob)
1798 X-Mercurial-Series-Id: <8580ff50825a50c8f716.60@*> (glob)
1798 In-Reply-To: <baz>
1799 In-Reply-To: <baz>
1799 References: <baz>
1800 References: <baz>
1800 User-Agent: Mercurial-patchbomb/* (glob)
1801 User-Agent: Mercurial-patchbomb/* (glob)
1801 Date: Thu, 01 Jan 1970 00:01:00 +0000
1802 Date: Thu, 01 Jan 1970 00:01:00 +0000
1802 From: quux
1803 From: quux
1803 To: foo
1804 To: foo
1804 Cc: bar
1805 Cc: bar
1805
1806
1806 # HG changeset patch
1807 # HG changeset patch
1807 # User test
1808 # User test
1808 # Date 1 0
1809 # Date 1 0
1809 # Thu Jan 01 00:00:01 1970 +0000
1810 # Thu Jan 01 00:00:01 1970 +0000
1810 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
1811 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
1811 # Parent 0000000000000000000000000000000000000000
1812 # Parent 0000000000000000000000000000000000000000
1812 a
1813 a
1813
1814
1814 diff -r 000000000000 -r 8580ff50825a a
1815 diff -r 000000000000 -r 8580ff50825a a
1815 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1816 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1816 +++ b/a Thu Jan 01 00:00:01 1970 +0000
1817 +++ b/a Thu Jan 01 00:00:01 1970 +0000
1817 @@ -0,0 +1,1 @@
1818 @@ -0,0 +1,1 @@
1818 +a
1819 +a
1819
1820
1820 displaying [PATCH 2 of 2] b ...
1821 displaying [PATCH 2 of 2] b ...
1821 Content-Type: text/plain; charset="us-ascii"
1822 Content-Type: text/plain; charset="us-ascii"
1822 MIME-Version: 1.0
1823 MIME-Version: 1.0
1823 Content-Transfer-Encoding: 7bit
1824 Content-Transfer-Encoding: 7bit
1824 Subject: [PATCH 2 of 2] b
1825 Subject: [PATCH 2 of 2] b
1825 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1826 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1826 X-Mercurial-Series-Index: 2
1827 X-Mercurial-Series-Index: 2
1827 X-Mercurial-Series-Total: 2
1828 X-Mercurial-Series-Total: 2
1828 Message-Id: <97d72e5f12c7e84f8506.61@*> (glob)
1829 Message-Id: <97d72e5f12c7e84f8506.61@*> (glob)
1829 X-Mercurial-Series-Id: <8580ff50825a50c8f716.60@*> (glob)
1830 X-Mercurial-Series-Id: <8580ff50825a50c8f716.60@*> (glob)
1830 In-Reply-To: <baz>
1831 In-Reply-To: <baz>
1831 References: <baz>
1832 References: <baz>
1832 User-Agent: Mercurial-patchbomb/* (glob)
1833 User-Agent: Mercurial-patchbomb/* (glob)
1833 Date: Thu, 01 Jan 1970 00:01:01 +0000
1834 Date: Thu, 01 Jan 1970 00:01:01 +0000
1834 From: quux
1835 From: quux
1835 To: foo
1836 To: foo
1836 Cc: bar
1837 Cc: bar
1837
1838
1838 # HG changeset patch
1839 # HG changeset patch
1839 # User test
1840 # User test
1840 # Date 2 0
1841 # Date 2 0
1841 # Thu Jan 01 00:00:02 1970 +0000
1842 # Thu Jan 01 00:00:02 1970 +0000
1842 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1843 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1843 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1844 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1844 b
1845 b
1845
1846
1846 diff -r 8580ff50825a -r 97d72e5f12c7 b
1847 diff -r 8580ff50825a -r 97d72e5f12c7 b
1847 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1848 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1848 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1849 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1849 @@ -0,0 +1,1 @@
1850 @@ -0,0 +1,1 @@
1850 +b
1851 +b
1851
1852
1852
1853
1853
1854
1854
1855
1855 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz \
1856 $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz \
1856 > -s test -r 0:1
1857 > -s test -r 0:1
1857 this patch series consists of 2 patches.
1858 this patch series consists of 2 patches.
1858
1859
1859
1860
1860 Write the introductory message for the patch series.
1861 Write the introductory message for the patch series.
1861
1862
1862
1863
1863 displaying [PATCH 0 of 2] test ...
1864 displaying [PATCH 0 of 2] test ...
1864 Content-Type: text/plain; charset="us-ascii"
1865 Content-Type: text/plain; charset="us-ascii"
1865 MIME-Version: 1.0
1866 MIME-Version: 1.0
1866 Content-Transfer-Encoding: 7bit
1867 Content-Transfer-Encoding: 7bit
1867 Subject: [PATCH 0 of 2] test
1868 Subject: [PATCH 0 of 2] test
1868 Message-Id: <patchbomb.60@*> (glob)
1869 Message-Id: <patchbomb.60@*> (glob)
1869 In-Reply-To: <baz>
1870 In-Reply-To: <baz>
1870 References: <baz>
1871 References: <baz>
1871 User-Agent: Mercurial-patchbomb/* (glob)
1872 User-Agent: Mercurial-patchbomb/* (glob)
1872 Date: Thu, 01 Jan 1970 00:01:00 +0000
1873 Date: Thu, 01 Jan 1970 00:01:00 +0000
1873 From: quux
1874 From: quux
1874 To: foo
1875 To: foo
1875 Cc: bar
1876 Cc: bar
1876
1877
1877
1878
1878 displaying [PATCH 1 of 2] a ...
1879 displaying [PATCH 1 of 2] a ...
1879 Content-Type: text/plain; charset="us-ascii"
1880 Content-Type: text/plain; charset="us-ascii"
1880 MIME-Version: 1.0
1881 MIME-Version: 1.0
1881 Content-Transfer-Encoding: 7bit
1882 Content-Transfer-Encoding: 7bit
1882 Subject: [PATCH 1 of 2] a
1883 Subject: [PATCH 1 of 2] a
1883 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
1884 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
1884 X-Mercurial-Series-Index: 1
1885 X-Mercurial-Series-Index: 1
1885 X-Mercurial-Series-Total: 2
1886 X-Mercurial-Series-Total: 2
1886 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
1887 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
1887 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1888 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1888 In-Reply-To: <patchbomb.60@*> (glob)
1889 In-Reply-To: <patchbomb.60@*> (glob)
1889 References: <patchbomb.60@*> (glob)
1890 References: <patchbomb.60@*> (glob)
1890 User-Agent: Mercurial-patchbomb/* (glob)
1891 User-Agent: Mercurial-patchbomb/* (glob)
1891 Date: Thu, 01 Jan 1970 00:01:01 +0000
1892 Date: Thu, 01 Jan 1970 00:01:01 +0000
1892 From: quux
1893 From: quux
1893 To: foo
1894 To: foo
1894 Cc: bar
1895 Cc: bar
1895
1896
1896 # HG changeset patch
1897 # HG changeset patch
1897 # User test
1898 # User test
1898 # Date 1 0
1899 # Date 1 0
1899 # Thu Jan 01 00:00:01 1970 +0000
1900 # Thu Jan 01 00:00:01 1970 +0000
1900 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
1901 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
1901 # Parent 0000000000000000000000000000000000000000
1902 # Parent 0000000000000000000000000000000000000000
1902 a
1903 a
1903
1904
1904 diff -r 000000000000 -r 8580ff50825a a
1905 diff -r 000000000000 -r 8580ff50825a a
1905 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1906 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1906 +++ b/a Thu Jan 01 00:00:01 1970 +0000
1907 +++ b/a Thu Jan 01 00:00:01 1970 +0000
1907 @@ -0,0 +1,1 @@
1908 @@ -0,0 +1,1 @@
1908 +a
1909 +a
1909
1910
1910 displaying [PATCH 2 of 2] b ...
1911 displaying [PATCH 2 of 2] b ...
1911 Content-Type: text/plain; charset="us-ascii"
1912 Content-Type: text/plain; charset="us-ascii"
1912 MIME-Version: 1.0
1913 MIME-Version: 1.0
1913 Content-Transfer-Encoding: 7bit
1914 Content-Transfer-Encoding: 7bit
1914 Subject: [PATCH 2 of 2] b
1915 Subject: [PATCH 2 of 2] b
1915 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1916 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1916 X-Mercurial-Series-Index: 2
1917 X-Mercurial-Series-Index: 2
1917 X-Mercurial-Series-Total: 2
1918 X-Mercurial-Series-Total: 2
1918 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
1919 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
1919 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1920 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
1920 In-Reply-To: <patchbomb.60@*> (glob)
1921 In-Reply-To: <patchbomb.60@*> (glob)
1921 References: <patchbomb.60@*> (glob)
1922 References: <patchbomb.60@*> (glob)
1922 User-Agent: Mercurial-patchbomb/* (glob)
1923 User-Agent: Mercurial-patchbomb/* (glob)
1923 Date: Thu, 01 Jan 1970 00:01:02 +0000
1924 Date: Thu, 01 Jan 1970 00:01:02 +0000
1924 From: quux
1925 From: quux
1925 To: foo
1926 To: foo
1926 Cc: bar
1927 Cc: bar
1927
1928
1928 # HG changeset patch
1929 # HG changeset patch
1929 # User test
1930 # User test
1930 # Date 2 0
1931 # Date 2 0
1931 # Thu Jan 01 00:00:02 1970 +0000
1932 # Thu Jan 01 00:00:02 1970 +0000
1932 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1933 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1933 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1934 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1934 b
1935 b
1935
1936
1936 diff -r 8580ff50825a -r 97d72e5f12c7 b
1937 diff -r 8580ff50825a -r 97d72e5f12c7 b
1937 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1938 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1938 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1939 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1939 @@ -0,0 +1,1 @@
1940 @@ -0,0 +1,1 @@
1940 +b
1941 +b
1941
1942
1942
1943
1943 test single flag for single patch (and no warning when not mailing dirty rev):
1944 test single flag for single patch (and no warning when not mailing dirty rev):
1944 $ hg up -qr1
1945 $ hg up -qr1
1945 $ echo dirt > a
1946 $ echo dirt > a
1946 $ hg email --date '1970-1-1 0:1' -n --flag fooFlag -f quux -t foo -c bar -s test \
1947 $ hg email --date '1970-1-1 0:1' -n --flag fooFlag -f quux -t foo -c bar -s test \
1947 > -r 2 | $FILTERBOUNDARY
1948 > -r 2 | $FILTERBOUNDARY
1948 this patch series consists of 1 patches.
1949 this patch series consists of 1 patches.
1949
1950
1950
1951
1951 displaying [PATCH fooFlag] test ...
1952 displaying [PATCH fooFlag] test ...
1952 Content-Type: text/plain; charset="us-ascii"
1953 Content-Type: text/plain; charset="us-ascii"
1953 MIME-Version: 1.0
1954 MIME-Version: 1.0
1954 Content-Transfer-Encoding: 7bit
1955 Content-Transfer-Encoding: 7bit
1955 Subject: [PATCH fooFlag] test
1956 Subject: [PATCH fooFlag] test
1956 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1957 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1957 X-Mercurial-Series-Index: 1
1958 X-Mercurial-Series-Index: 1
1958 X-Mercurial-Series-Total: 1
1959 X-Mercurial-Series-Total: 1
1959 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1960 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1960 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1961 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
1961 User-Agent: Mercurial-patchbomb/* (glob)
1962 User-Agent: Mercurial-patchbomb/* (glob)
1962 Date: Thu, 01 Jan 1970 00:01:00 +0000
1963 Date: Thu, 01 Jan 1970 00:01:00 +0000
1963 From: quux
1964 From: quux
1964 To: foo
1965 To: foo
1965 Cc: bar
1966 Cc: bar
1966
1967
1967 # HG changeset patch
1968 # HG changeset patch
1968 # User test
1969 # User test
1969 # Date 3 0
1970 # Date 3 0
1970 # Thu Jan 01 00:00:03 1970 +0000
1971 # Thu Jan 01 00:00:03 1970 +0000
1971 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1972 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1972 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1973 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1973 c
1974 c
1974
1975
1975 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1976 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1976 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1977 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1977 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1978 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1978 @@ -0,0 +1,1 @@
1979 @@ -0,0 +1,1 @@
1979 +c
1980 +c
1980
1981
1981
1982
1982 test single flag for multiple patches (and warning when mailing dirty rev):
1983 test single flag for multiple patches (and warning when mailing dirty rev):
1983 $ hg email --date '1970-1-1 0:1' -n --flag fooFlag -f quux -t foo -c bar -s test \
1984 $ hg email --date '1970-1-1 0:1' -n --flag fooFlag -f quux -t foo -c bar -s test \
1984 > -r 0:1
1985 > -r 0:1
1985 warning: working directory has uncommitted changes
1986 warning: working directory has uncommitted changes
1986 this patch series consists of 2 patches.
1987 this patch series consists of 2 patches.
1987
1988
1988
1989
1989 Write the introductory message for the patch series.
1990 Write the introductory message for the patch series.
1990
1991
1991
1992
1992 displaying [PATCH 0 of 2 fooFlag] test ...
1993 displaying [PATCH 0 of 2 fooFlag] test ...
1993 Content-Type: text/plain; charset="us-ascii"
1994 Content-Type: text/plain; charset="us-ascii"
1994 MIME-Version: 1.0
1995 MIME-Version: 1.0
1995 Content-Transfer-Encoding: 7bit
1996 Content-Transfer-Encoding: 7bit
1996 Subject: [PATCH 0 of 2 fooFlag] test
1997 Subject: [PATCH 0 of 2 fooFlag] test
1997 Message-Id: <patchbomb.60@*> (glob)
1998 Message-Id: <patchbomb.60@*> (glob)
1998 User-Agent: Mercurial-patchbomb/* (glob)
1999 User-Agent: Mercurial-patchbomb/* (glob)
1999 Date: Thu, 01 Jan 1970 00:01:00 +0000
2000 Date: Thu, 01 Jan 1970 00:01:00 +0000
2000 From: quux
2001 From: quux
2001 To: foo
2002 To: foo
2002 Cc: bar
2003 Cc: bar
2003
2004
2004
2005
2005 displaying [PATCH 1 of 2 fooFlag] a ...
2006 displaying [PATCH 1 of 2 fooFlag] a ...
2006 Content-Type: text/plain; charset="us-ascii"
2007 Content-Type: text/plain; charset="us-ascii"
2007 MIME-Version: 1.0
2008 MIME-Version: 1.0
2008 Content-Transfer-Encoding: 7bit
2009 Content-Transfer-Encoding: 7bit
2009 Subject: [PATCH 1 of 2 fooFlag] a
2010 Subject: [PATCH 1 of 2 fooFlag] a
2010 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
2011 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
2011 X-Mercurial-Series-Index: 1
2012 X-Mercurial-Series-Index: 1
2012 X-Mercurial-Series-Total: 2
2013 X-Mercurial-Series-Total: 2
2013 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
2014 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
2014 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
2015 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
2015 In-Reply-To: <patchbomb.60@*> (glob)
2016 In-Reply-To: <patchbomb.60@*> (glob)
2016 References: <patchbomb.60@*> (glob)
2017 References: <patchbomb.60@*> (glob)
2017 User-Agent: Mercurial-patchbomb/* (glob)
2018 User-Agent: Mercurial-patchbomb/* (glob)
2018 Date: Thu, 01 Jan 1970 00:01:01 +0000
2019 Date: Thu, 01 Jan 1970 00:01:01 +0000
2019 From: quux
2020 From: quux
2020 To: foo
2021 To: foo
2021 Cc: bar
2022 Cc: bar
2022
2023
2023 # HG changeset patch
2024 # HG changeset patch
2024 # User test
2025 # User test
2025 # Date 1 0
2026 # Date 1 0
2026 # Thu Jan 01 00:00:01 1970 +0000
2027 # Thu Jan 01 00:00:01 1970 +0000
2027 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
2028 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
2028 # Parent 0000000000000000000000000000000000000000
2029 # Parent 0000000000000000000000000000000000000000
2029 a
2030 a
2030
2031
2031 diff -r 000000000000 -r 8580ff50825a a
2032 diff -r 000000000000 -r 8580ff50825a a
2032 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2033 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2033 +++ b/a Thu Jan 01 00:00:01 1970 +0000
2034 +++ b/a Thu Jan 01 00:00:01 1970 +0000
2034 @@ -0,0 +1,1 @@
2035 @@ -0,0 +1,1 @@
2035 +a
2036 +a
2036
2037
2037 displaying [PATCH 2 of 2 fooFlag] b ...
2038 displaying [PATCH 2 of 2 fooFlag] b ...
2038 Content-Type: text/plain; charset="us-ascii"
2039 Content-Type: text/plain; charset="us-ascii"
2039 MIME-Version: 1.0
2040 MIME-Version: 1.0
2040 Content-Transfer-Encoding: 7bit
2041 Content-Transfer-Encoding: 7bit
2041 Subject: [PATCH 2 of 2 fooFlag] b
2042 Subject: [PATCH 2 of 2 fooFlag] b
2042 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2043 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2043 X-Mercurial-Series-Index: 2
2044 X-Mercurial-Series-Index: 2
2044 X-Mercurial-Series-Total: 2
2045 X-Mercurial-Series-Total: 2
2045 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
2046 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
2046 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
2047 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
2047 In-Reply-To: <patchbomb.60@*> (glob)
2048 In-Reply-To: <patchbomb.60@*> (glob)
2048 References: <patchbomb.60@*> (glob)
2049 References: <patchbomb.60@*> (glob)
2049 User-Agent: Mercurial-patchbomb/* (glob)
2050 User-Agent: Mercurial-patchbomb/* (glob)
2050 Date: Thu, 01 Jan 1970 00:01:02 +0000
2051 Date: Thu, 01 Jan 1970 00:01:02 +0000
2051 From: quux
2052 From: quux
2052 To: foo
2053 To: foo
2053 Cc: bar
2054 Cc: bar
2054
2055
2055 # HG changeset patch
2056 # HG changeset patch
2056 # User test
2057 # User test
2057 # Date 2 0
2058 # Date 2 0
2058 # Thu Jan 01 00:00:02 1970 +0000
2059 # Thu Jan 01 00:00:02 1970 +0000
2059 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2060 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2060 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
2061 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
2061 b
2062 b
2062
2063
2063 diff -r 8580ff50825a -r 97d72e5f12c7 b
2064 diff -r 8580ff50825a -r 97d72e5f12c7 b
2064 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2065 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2065 +++ b/b Thu Jan 01 00:00:02 1970 +0000
2066 +++ b/b Thu Jan 01 00:00:02 1970 +0000
2066 @@ -0,0 +1,1 @@
2067 @@ -0,0 +1,1 @@
2067 +b
2068 +b
2068
2069
2069 $ hg revert --no-b a
2070 $ hg revert --no-b a
2070 $ hg up -q
2071 $ hg up -q
2071
2072
2072 test multiple flags for single patch:
2073 test multiple flags for single patch:
2073 $ hg email --date '1970-1-1 0:1' -n --flag fooFlag --flag barFlag -f quux -t foo \
2074 $ hg email --date '1970-1-1 0:1' -n --flag fooFlag --flag barFlag -f quux -t foo \
2074 > -c bar -s test -r 2
2075 > -c bar -s test -r 2
2075 this patch series consists of 1 patches.
2076 this patch series consists of 1 patches.
2076
2077
2077
2078
2078 displaying [PATCH fooFlag barFlag] test ...
2079 displaying [PATCH fooFlag barFlag] test ...
2079 Content-Type: text/plain; charset="us-ascii"
2080 Content-Type: text/plain; charset="us-ascii"
2080 MIME-Version: 1.0
2081 MIME-Version: 1.0
2081 Content-Transfer-Encoding: 7bit
2082 Content-Transfer-Encoding: 7bit
2082 Subject: [PATCH fooFlag barFlag] test
2083 Subject: [PATCH fooFlag barFlag] test
2083 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
2084 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
2084 X-Mercurial-Series-Index: 1
2085 X-Mercurial-Series-Index: 1
2085 X-Mercurial-Series-Total: 1
2086 X-Mercurial-Series-Total: 1
2086 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
2087 Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
2087 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
2088 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
2088 User-Agent: Mercurial-patchbomb/* (glob)
2089 User-Agent: Mercurial-patchbomb/* (glob)
2089 Date: Thu, 01 Jan 1970 00:01:00 +0000
2090 Date: Thu, 01 Jan 1970 00:01:00 +0000
2090 From: quux
2091 From: quux
2091 To: foo
2092 To: foo
2092 Cc: bar
2093 Cc: bar
2093
2094
2094 # HG changeset patch
2095 # HG changeset patch
2095 # User test
2096 # User test
2096 # Date 3 0
2097 # Date 3 0
2097 # Thu Jan 01 00:00:03 1970 +0000
2098 # Thu Jan 01 00:00:03 1970 +0000
2098 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
2099 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
2099 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2100 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2100 c
2101 c
2101
2102
2102 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
2103 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
2103 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2104 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2104 +++ b/c Thu Jan 01 00:00:03 1970 +0000
2105 +++ b/c Thu Jan 01 00:00:03 1970 +0000
2105 @@ -0,0 +1,1 @@
2106 @@ -0,0 +1,1 @@
2106 +c
2107 +c
2107
2108
2108
2109
2109 test multiple flags for multiple patches:
2110 test multiple flags for multiple patches:
2110 $ hg email --date '1970-1-1 0:1' -n --flag fooFlag --flag barFlag -f quux -t foo \
2111 $ hg email --date '1970-1-1 0:1' -n --flag fooFlag --flag barFlag -f quux -t foo \
2111 > -c bar -s test -r 0:1
2112 > -c bar -s test -r 0:1
2112 this patch series consists of 2 patches.
2113 this patch series consists of 2 patches.
2113
2114
2114
2115
2115 Write the introductory message for the patch series.
2116 Write the introductory message for the patch series.
2116
2117
2117
2118
2118 displaying [PATCH 0 of 2 fooFlag barFlag] test ...
2119 displaying [PATCH 0 of 2 fooFlag barFlag] test ...
2119 Content-Type: text/plain; charset="us-ascii"
2120 Content-Type: text/plain; charset="us-ascii"
2120 MIME-Version: 1.0
2121 MIME-Version: 1.0
2121 Content-Transfer-Encoding: 7bit
2122 Content-Transfer-Encoding: 7bit
2122 Subject: [PATCH 0 of 2 fooFlag barFlag] test
2123 Subject: [PATCH 0 of 2 fooFlag barFlag] test
2123 Message-Id: <patchbomb.60@*> (glob)
2124 Message-Id: <patchbomb.60@*> (glob)
2124 User-Agent: Mercurial-patchbomb/* (glob)
2125 User-Agent: Mercurial-patchbomb/* (glob)
2125 Date: Thu, 01 Jan 1970 00:01:00 +0000
2126 Date: Thu, 01 Jan 1970 00:01:00 +0000
2126 From: quux
2127 From: quux
2127 To: foo
2128 To: foo
2128 Cc: bar
2129 Cc: bar
2129
2130
2130
2131
2131 displaying [PATCH 1 of 2 fooFlag barFlag] a ...
2132 displaying [PATCH 1 of 2 fooFlag barFlag] a ...
2132 Content-Type: text/plain; charset="us-ascii"
2133 Content-Type: text/plain; charset="us-ascii"
2133 MIME-Version: 1.0
2134 MIME-Version: 1.0
2134 Content-Transfer-Encoding: 7bit
2135 Content-Transfer-Encoding: 7bit
2135 Subject: [PATCH 1 of 2 fooFlag barFlag] a
2136 Subject: [PATCH 1 of 2 fooFlag barFlag] a
2136 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
2137 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
2137 X-Mercurial-Series-Index: 1
2138 X-Mercurial-Series-Index: 1
2138 X-Mercurial-Series-Total: 2
2139 X-Mercurial-Series-Total: 2
2139 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
2140 Message-Id: <8580ff50825a50c8f716.61@*> (glob)
2140 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
2141 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
2141 In-Reply-To: <patchbomb.60@*> (glob)
2142 In-Reply-To: <patchbomb.60@*> (glob)
2142 References: <patchbomb.60@*> (glob)
2143 References: <patchbomb.60@*> (glob)
2143 User-Agent: Mercurial-patchbomb/* (glob)
2144 User-Agent: Mercurial-patchbomb/* (glob)
2144 Date: Thu, 01 Jan 1970 00:01:01 +0000
2145 Date: Thu, 01 Jan 1970 00:01:01 +0000
2145 From: quux
2146 From: quux
2146 To: foo
2147 To: foo
2147 Cc: bar
2148 Cc: bar
2148
2149
2149 # HG changeset patch
2150 # HG changeset patch
2150 # User test
2151 # User test
2151 # Date 1 0
2152 # Date 1 0
2152 # Thu Jan 01 00:00:01 1970 +0000
2153 # Thu Jan 01 00:00:01 1970 +0000
2153 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
2154 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
2154 # Parent 0000000000000000000000000000000000000000
2155 # Parent 0000000000000000000000000000000000000000
2155 a
2156 a
2156
2157
2157 diff -r 000000000000 -r 8580ff50825a a
2158 diff -r 000000000000 -r 8580ff50825a a
2158 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2159 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2159 +++ b/a Thu Jan 01 00:00:01 1970 +0000
2160 +++ b/a Thu Jan 01 00:00:01 1970 +0000
2160 @@ -0,0 +1,1 @@
2161 @@ -0,0 +1,1 @@
2161 +a
2162 +a
2162
2163
2163 displaying [PATCH 2 of 2 fooFlag barFlag] b ...
2164 displaying [PATCH 2 of 2 fooFlag barFlag] b ...
2164 Content-Type: text/plain; charset="us-ascii"
2165 Content-Type: text/plain; charset="us-ascii"
2165 MIME-Version: 1.0
2166 MIME-Version: 1.0
2166 Content-Transfer-Encoding: 7bit
2167 Content-Transfer-Encoding: 7bit
2167 Subject: [PATCH 2 of 2 fooFlag barFlag] b
2168 Subject: [PATCH 2 of 2 fooFlag barFlag] b
2168 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2169 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2169 X-Mercurial-Series-Index: 2
2170 X-Mercurial-Series-Index: 2
2170 X-Mercurial-Series-Total: 2
2171 X-Mercurial-Series-Total: 2
2171 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
2172 Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
2172 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
2173 X-Mercurial-Series-Id: <8580ff50825a50c8f716.61@*> (glob)
2173 In-Reply-To: <patchbomb.60@*> (glob)
2174 In-Reply-To: <patchbomb.60@*> (glob)
2174 References: <patchbomb.60@*> (glob)
2175 References: <patchbomb.60@*> (glob)
2175 User-Agent: Mercurial-patchbomb/* (glob)
2176 User-Agent: Mercurial-patchbomb/* (glob)
2176 Date: Thu, 01 Jan 1970 00:01:02 +0000
2177 Date: Thu, 01 Jan 1970 00:01:02 +0000
2177 From: quux
2178 From: quux
2178 To: foo
2179 To: foo
2179 Cc: bar
2180 Cc: bar
2180
2181
2181 # HG changeset patch
2182 # HG changeset patch
2182 # User test
2183 # User test
2183 # Date 2 0
2184 # Date 2 0
2184 # Thu Jan 01 00:00:02 1970 +0000
2185 # Thu Jan 01 00:00:02 1970 +0000
2185 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2186 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2186 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
2187 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
2187 b
2188 b
2188
2189
2189 diff -r 8580ff50825a -r 97d72e5f12c7 b
2190 diff -r 8580ff50825a -r 97d72e5f12c7 b
2190 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2191 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2191 +++ b/b Thu Jan 01 00:00:02 1970 +0000
2192 +++ b/b Thu Jan 01 00:00:02 1970 +0000
2192 @@ -0,0 +1,1 @@
2193 @@ -0,0 +1,1 @@
2193 +b
2194 +b
2194
2195
2195
2196
2196 test multi-address parsing:
2197 test multi-address parsing:
2197 $ hg email --date '1980-1-1 0:1' -m tmp.mbox -f quux -t 'spam<spam><eggs>' \
2198 $ hg email --date '1980-1-1 0:1' -m tmp.mbox -f quux -t 'spam<spam><eggs>' \
2198 > -t toast -c 'foo,bar@example.com' -c '"A, B <>" <a@example.com>' -s test -r 0 \
2199 > -t toast -c 'foo,bar@example.com' -c '"A, B <>" <a@example.com>' -s test -r 0 \
2199 > --config email.bcc='"Quux, A." <quux>'
2200 > --config email.bcc='"Quux, A." <quux>'
2200 this patch series consists of 1 patches.
2201 this patch series consists of 1 patches.
2201
2202
2202
2203
2203 sending [PATCH] test ...
2204 sending [PATCH] test ...
2204 $ cat < tmp.mbox
2205 $ cat < tmp.mbox
2205 From quux ... ... .. ..:..:.. .... (re)
2206 From quux ... ... .. ..:..:.. .... (re)
2206 Content-Type: text/plain; charset="us-ascii"
2207 Content-Type: text/plain; charset="us-ascii"
2207 MIME-Version: 1.0
2208 MIME-Version: 1.0
2208 Content-Transfer-Encoding: 7bit
2209 Content-Transfer-Encoding: 7bit
2209 Subject: [PATCH] test
2210 Subject: [PATCH] test
2210 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
2211 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
2211 X-Mercurial-Series-Index: 1
2212 X-Mercurial-Series-Index: 1
2212 X-Mercurial-Series-Total: 1
2213 X-Mercurial-Series-Total: 1
2213 Message-Id: <8580ff50825a50c8f716.315532860@*> (glob)
2214 Message-Id: <8580ff50825a50c8f716.315532860@*> (glob)
2214 X-Mercurial-Series-Id: <8580ff50825a50c8f716.315532860@*> (glob)
2215 X-Mercurial-Series-Id: <8580ff50825a50c8f716.315532860@*> (glob)
2215 User-Agent: Mercurial-patchbomb/* (glob)
2216 User-Agent: Mercurial-patchbomb/* (glob)
2216 Date: Tue, 01 Jan 1980 00:01:00 +0000
2217 Date: Tue, 01 Jan 1980 00:01:00 +0000
2217 From: quux
2218 From: quux
2218 To: spam <spam>, eggs, toast
2219 To: spam <spam>, eggs, toast
2219 Cc: foo, bar@example.com, "A, B <>" <a@example.com>
2220 Cc: foo, bar@example.com, "A, B <>" <a@example.com>
2220 Bcc: "Quux, A." <quux>
2221 Bcc: "Quux, A." <quux>
2221
2222
2222 # HG changeset patch
2223 # HG changeset patch
2223 # User test
2224 # User test
2224 # Date 1 0
2225 # Date 1 0
2225 # Thu Jan 01 00:00:01 1970 +0000
2226 # Thu Jan 01 00:00:01 1970 +0000
2226 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
2227 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
2227 # Parent 0000000000000000000000000000000000000000
2228 # Parent 0000000000000000000000000000000000000000
2228 a
2229 a
2229
2230
2230 diff -r 000000000000 -r 8580ff50825a a
2231 diff -r 000000000000 -r 8580ff50825a a
2231 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2232 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2232 +++ b/a Thu Jan 01 00:00:01 1970 +0000
2233 +++ b/a Thu Jan 01 00:00:01 1970 +0000
2233 @@ -0,0 +1,1 @@
2234 @@ -0,0 +1,1 @@
2234 +a
2235 +a
2235
2236
2236
2237
2237
2238
2238 test multi-byte domain parsing:
2239 test multi-byte domain parsing:
2239 $ UUML=`python -c 'import sys; sys.stdout.write("\374")'`
2240 $ UUML=`python -c 'import sys; sys.stdout.write("\374")'`
2240 $ HGENCODING=iso-8859-1
2241 $ HGENCODING=iso-8859-1
2241 $ export HGENCODING
2242 $ export HGENCODING
2242 $ hg email --date '1980-1-1 0:1' -m tmp.mbox -f quux -t "bar@${UUML}nicode.com" -s test -r 0
2243 $ hg email --date '1980-1-1 0:1' -m tmp.mbox -f quux -t "bar@${UUML}nicode.com" -s test -r 0
2243 this patch series consists of 1 patches.
2244 this patch series consists of 1 patches.
2244
2245
2245 Cc:
2246 Cc:
2246
2247
2247 sending [PATCH] test ...
2248 sending [PATCH] test ...
2248
2249
2249 $ cat tmp.mbox
2250 $ cat tmp.mbox
2250 From quux ... ... .. ..:..:.. .... (re)
2251 From quux ... ... .. ..:..:.. .... (re)
2251 Content-Type: text/plain; charset="us-ascii"
2252 Content-Type: text/plain; charset="us-ascii"
2252 MIME-Version: 1.0
2253 MIME-Version: 1.0
2253 Content-Transfer-Encoding: 7bit
2254 Content-Transfer-Encoding: 7bit
2254 Subject: [PATCH] test
2255 Subject: [PATCH] test
2255 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
2256 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
2256 X-Mercurial-Series-Index: 1
2257 X-Mercurial-Series-Index: 1
2257 X-Mercurial-Series-Total: 1
2258 X-Mercurial-Series-Total: 1
2258 Message-Id: <8580ff50825a50c8f716.315532860@*> (glob)
2259 Message-Id: <8580ff50825a50c8f716.315532860@*> (glob)
2259 X-Mercurial-Series-Id: <8580ff50825a50c8f716.315532860@*> (glob)
2260 X-Mercurial-Series-Id: <8580ff50825a50c8f716.315532860@*> (glob)
2260 User-Agent: Mercurial-patchbomb/* (glob)
2261 User-Agent: Mercurial-patchbomb/* (glob)
2261 Date: Tue, 01 Jan 1980 00:01:00 +0000
2262 Date: Tue, 01 Jan 1980 00:01:00 +0000
2262 From: quux
2263 From: quux
2263 To: bar@xn--nicode-2ya.com
2264 To: bar@xn--nicode-2ya.com
2264
2265
2265 # HG changeset patch
2266 # HG changeset patch
2266 # User test
2267 # User test
2267 # Date 1 0
2268 # Date 1 0
2268 # Thu Jan 01 00:00:01 1970 +0000
2269 # Thu Jan 01 00:00:01 1970 +0000
2269 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
2270 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
2270 # Parent 0000000000000000000000000000000000000000
2271 # Parent 0000000000000000000000000000000000000000
2271 a
2272 a
2272
2273
2273 diff -r 000000000000 -r 8580ff50825a a
2274 diff -r 000000000000 -r 8580ff50825a a
2274 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2275 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2275 +++ b/a Thu Jan 01 00:00:01 1970 +0000
2276 +++ b/a Thu Jan 01 00:00:01 1970 +0000
2276 @@ -0,0 +1,1 @@
2277 @@ -0,0 +1,1 @@
2277 +a
2278 +a
2278
2279
2279
2280
2280
2281
2281 test outgoing:
2282 test outgoing:
2282 $ hg up 1
2283 $ hg up 1
2283 0 files updated, 0 files merged, 6 files removed, 0 files unresolved
2284 0 files updated, 0 files merged, 6 files removed, 0 files unresolved
2284
2285
2285 $ hg branch test
2286 $ hg branch test
2286 marked working directory as branch test
2287 marked working directory as branch test
2287 (branches are permanent and global, did you want a bookmark?)
2288 (branches are permanent and global, did you want a bookmark?)
2288
2289
2289 $ echo d > d
2290 $ echo d > d
2290 $ hg add d
2291 $ hg add d
2291 $ hg ci -md -d '4 0'
2292 $ hg ci -md -d '4 0'
2292 $ echo d >> d
2293 $ echo d >> d
2293 $ hg ci -mdd -d '5 0'
2294 $ hg ci -mdd -d '5 0'
2294 $ hg log -G --template "{rev}:{node|short} {desc|firstline}\n"
2295 $ hg log -G --template "{rev}:{node|short} {desc|firstline}\n"
2295 @ 10:3b6f1ec9dde9 dd
2296 @ 10:3b6f1ec9dde9 dd
2296 |
2297 |
2297 o 9:2f9fa9b998c5 d
2298 o 9:2f9fa9b998c5 d
2298 |
2299 |
2299 | o 8:7aead2484924 Added tag two, two.diff for changeset ff2c9fa2018b
2300 | o 8:7aead2484924 Added tag two, two.diff for changeset ff2c9fa2018b
2300 | |
2301 | |
2301 | o 7:045ca29b1ea2 Added tag one, one.patch for changeset 97d72e5f12c7
2302 | o 7:045ca29b1ea2 Added tag one, one.patch for changeset 97d72e5f12c7
2302 | |
2303 | |
2303 | o 6:5d5ef15dfe5e Added tag zero, zero.foo for changeset 8580ff50825a
2304 | o 6:5d5ef15dfe5e Added tag zero, zero.foo for changeset 8580ff50825a
2304 | |
2305 | |
2305 | o 5:240fb913fc1b isolatin 8-bit encoding
2306 | o 5:240fb913fc1b isolatin 8-bit encoding
2306 | |
2307 | |
2307 | o 4:a2ea8fc83dd8 long line
2308 | o 4:a2ea8fc83dd8 long line
2308 | |
2309 | |
2309 | o 3:909a00e13e9d utf-8 content
2310 | o 3:909a00e13e9d utf-8 content
2310 | |
2311 | |
2311 | o 2:ff2c9fa2018b c
2312 | o 2:ff2c9fa2018b c
2312 |/
2313 |/
2313 o 1:97d72e5f12c7 b
2314 o 1:97d72e5f12c7 b
2314 |
2315 |
2315 o 0:8580ff50825a a
2316 o 0:8580ff50825a a
2316
2317
2317 $ hg phase --force --secret -r 10
2318 $ hg phase --force --secret -r 10
2318 $ hg email --date '1980-1-1 0:1' -n -t foo -s test -o ../t -r 'rev(10) or rev(6)'
2319 $ hg email --date '1980-1-1 0:1' -n -t foo -s test -o ../t -r 'rev(10) or rev(6)'
2319 comparing with ../t
2320 comparing with ../t
2320 From [test]: test
2321 From [test]: test
2321 this patch series consists of 6 patches.
2322 this patch series consists of 6 patches.
2322
2323
2323
2324
2324 Write the introductory message for the patch series.
2325 Write the introductory message for the patch series.
2325
2326
2326 Cc:
2327 Cc:
2327
2328
2328 displaying [PATCH 0 of 6] test ...
2329 displaying [PATCH 0 of 6] test ...
2329 Content-Type: text/plain; charset="us-ascii"
2330 Content-Type: text/plain; charset="us-ascii"
2330 MIME-Version: 1.0
2331 MIME-Version: 1.0
2331 Content-Transfer-Encoding: 7bit
2332 Content-Transfer-Encoding: 7bit
2332 Subject: [PATCH 0 of 6] test
2333 Subject: [PATCH 0 of 6] test
2333 Message-Id: <patchbomb.315532860@*> (glob)
2334 Message-Id: <patchbomb.315532860@*> (glob)
2334 User-Agent: Mercurial-patchbomb/* (glob)
2335 User-Agent: Mercurial-patchbomb/* (glob)
2335 Date: Tue, 01 Jan 1980 00:01:00 +0000
2336 Date: Tue, 01 Jan 1980 00:01:00 +0000
2336 From: test
2337 From: test
2337 To: foo
2338 To: foo
2338
2339
2339
2340
2340 displaying [PATCH 1 of 6] c ...
2341 displaying [PATCH 1 of 6] c ...
2341 Content-Type: text/plain; charset="us-ascii"
2342 Content-Type: text/plain; charset="us-ascii"
2342 MIME-Version: 1.0
2343 MIME-Version: 1.0
2343 Content-Transfer-Encoding: 7bit
2344 Content-Transfer-Encoding: 7bit
2344 Subject: [PATCH 1 of 6] c
2345 Subject: [PATCH 1 of 6] c
2345 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
2346 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
2346 X-Mercurial-Series-Index: 1
2347 X-Mercurial-Series-Index: 1
2347 X-Mercurial-Series-Total: 6
2348 X-Mercurial-Series-Total: 6
2348 Message-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
2349 Message-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
2349 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
2350 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
2350 In-Reply-To: <patchbomb.315532860@*> (glob)
2351 In-Reply-To: <patchbomb.315532860@*> (glob)
2351 References: <patchbomb.315532860@*> (glob)
2352 References: <patchbomb.315532860@*> (glob)
2352 User-Agent: Mercurial-patchbomb/* (glob)
2353 User-Agent: Mercurial-patchbomb/* (glob)
2353 Date: Tue, 01 Jan 1980 00:01:01 +0000
2354 Date: Tue, 01 Jan 1980 00:01:01 +0000
2354 From: test
2355 From: test
2355 To: foo
2356 To: foo
2356
2357
2357 # HG changeset patch
2358 # HG changeset patch
2358 # User test
2359 # User test
2359 # Date 3 0
2360 # Date 3 0
2360 # Thu Jan 01 00:00:03 1970 +0000
2361 # Thu Jan 01 00:00:03 1970 +0000
2361 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
2362 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
2362 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2363 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2363 c
2364 c
2364
2365
2365 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
2366 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
2366 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2367 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2367 +++ b/c Thu Jan 01 00:00:03 1970 +0000
2368 +++ b/c Thu Jan 01 00:00:03 1970 +0000
2368 @@ -0,0 +1,1 @@
2369 @@ -0,0 +1,1 @@
2369 +c
2370 +c
2370
2371
2371 displaying [PATCH 2 of 6] utf-8 content ...
2372 displaying [PATCH 2 of 6] utf-8 content ...
2372 Content-Type: text/plain; charset="us-ascii"
2373 Content-Type: text/plain; charset="us-ascii"
2373 MIME-Version: 1.0
2374 MIME-Version: 1.0
2374 Content-Transfer-Encoding: 8bit
2375 Content-Transfer-Encoding: 8bit
2375 Subject: [PATCH 2 of 6] utf-8 content
2376 Subject: [PATCH 2 of 6] utf-8 content
2376 X-Mercurial-Node: 909a00e13e9d78b575aeee23dddbada46d5a143f
2377 X-Mercurial-Node: 909a00e13e9d78b575aeee23dddbada46d5a143f
2377 X-Mercurial-Series-Index: 2
2378 X-Mercurial-Series-Index: 2
2378 X-Mercurial-Series-Total: 6
2379 X-Mercurial-Series-Total: 6
2379 Message-Id: <909a00e13e9d78b575ae.315532862@*> (glob)
2380 Message-Id: <909a00e13e9d78b575ae.315532862@*> (glob)
2380 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
2381 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
2381 In-Reply-To: <patchbomb.315532860@*> (glob)
2382 In-Reply-To: <patchbomb.315532860@*> (glob)
2382 References: <patchbomb.315532860@*> (glob)
2383 References: <patchbomb.315532860@*> (glob)
2383 User-Agent: Mercurial-patchbomb/* (glob)
2384 User-Agent: Mercurial-patchbomb/* (glob)
2384 Date: Tue, 01 Jan 1980 00:01:02 +0000
2385 Date: Tue, 01 Jan 1980 00:01:02 +0000
2385 From: test
2386 From: test
2386 To: foo
2387 To: foo
2387
2388
2388 # HG changeset patch
2389 # HG changeset patch
2389 # User test
2390 # User test
2390 # Date 4 0
2391 # Date 4 0
2391 # Thu Jan 01 00:00:04 1970 +0000
2392 # Thu Jan 01 00:00:04 1970 +0000
2392 # Node ID 909a00e13e9d78b575aeee23dddbada46d5a143f
2393 # Node ID 909a00e13e9d78b575aeee23dddbada46d5a143f
2393 # Parent ff2c9fa2018b15fa74b33363bda9527323e2a99f
2394 # Parent ff2c9fa2018b15fa74b33363bda9527323e2a99f
2394 utf-8 content
2395 utf-8 content
2395
2396
2396 diff -r ff2c9fa2018b -r 909a00e13e9d description
2397 diff -r ff2c9fa2018b -r 909a00e13e9d description
2397 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2398 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2398 +++ b/description Thu Jan 01 00:00:04 1970 +0000
2399 +++ b/description Thu Jan 01 00:00:04 1970 +0000
2399 @@ -0,0 +1,3 @@
2400 @@ -0,0 +1,3 @@
2400 +a multiline
2401 +a multiline
2401 +
2402 +
2402 +description
2403 +description
2403 diff -r ff2c9fa2018b -r 909a00e13e9d utf
2404 diff -r ff2c9fa2018b -r 909a00e13e9d utf
2404 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2405 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2405 +++ b/utf Thu Jan 01 00:00:04 1970 +0000
2406 +++ b/utf Thu Jan 01 00:00:04 1970 +0000
2406 @@ -0,0 +1,1 @@
2407 @@ -0,0 +1,1 @@
2407 +h\xc3\xb6mma! (esc)
2408 +h\xc3\xb6mma! (esc)
2408
2409
2409 displaying [PATCH 3 of 6] long line ...
2410 displaying [PATCH 3 of 6] long line ...
2410 Content-Type: text/plain; charset="us-ascii"
2411 Content-Type: text/plain; charset="us-ascii"
2411 MIME-Version: 1.0
2412 MIME-Version: 1.0
2412 Content-Transfer-Encoding: quoted-printable
2413 Content-Transfer-Encoding: quoted-printable
2413 Subject: [PATCH 3 of 6] long line
2414 Subject: [PATCH 3 of 6] long line
2414 X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
2415 X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
2415 X-Mercurial-Series-Index: 3
2416 X-Mercurial-Series-Index: 3
2416 X-Mercurial-Series-Total: 6
2417 X-Mercurial-Series-Total: 6
2417 Message-Id: <a2ea8fc83dd8b93cfd86.315532863@*> (glob)
2418 Message-Id: <a2ea8fc83dd8b93cfd86.315532863@*> (glob)
2418 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
2419 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
2419 In-Reply-To: <patchbomb.315532860@*> (glob)
2420 In-Reply-To: <patchbomb.315532860@*> (glob)
2420 References: <patchbomb.315532860@*> (glob)
2421 References: <patchbomb.315532860@*> (glob)
2421 User-Agent: Mercurial-patchbomb/* (glob)
2422 User-Agent: Mercurial-patchbomb/* (glob)
2422 Date: Tue, 01 Jan 1980 00:01:03 +0000
2423 Date: Tue, 01 Jan 1980 00:01:03 +0000
2423 From: test
2424 From: test
2424 To: foo
2425 To: foo
2425
2426
2426 # HG changeset patch
2427 # HG changeset patch
2427 # User test
2428 # User test
2428 # Date 4 0
2429 # Date 4 0
2429 # Thu Jan 01 00:00:04 1970 +0000
2430 # Thu Jan 01 00:00:04 1970 +0000
2430 # Node ID a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
2431 # Node ID a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
2431 # Parent 909a00e13e9d78b575aeee23dddbada46d5a143f
2432 # Parent 909a00e13e9d78b575aeee23dddbada46d5a143f
2432 long line
2433 long line
2433
2434
2434 diff -r 909a00e13e9d -r a2ea8fc83dd8 long
2435 diff -r 909a00e13e9d -r a2ea8fc83dd8 long
2435 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2436 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2436 +++ b/long Thu Jan 01 00:00:04 1970 +0000
2437 +++ b/long Thu Jan 01 00:00:04 1970 +0000
2437 @@ -0,0 +1,4 @@
2438 @@ -0,0 +1,4 @@
2438 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2439 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2439 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2440 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2440 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2441 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2441 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2442 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2442 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2443 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2443 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2444 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2444 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2445 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2445 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2446 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2446 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2447 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2447 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2448 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2448 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2449 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2449 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2450 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2450 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2451 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
2451 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2452 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2452 +foo
2453 +foo
2453 +
2454 +
2454 +bar
2455 +bar
2455
2456
2456 displaying [PATCH 4 of 6] isolatin 8-bit encoding ...
2457 displaying [PATCH 4 of 6] isolatin 8-bit encoding ...
2457 Content-Type: text/plain; charset="us-ascii"
2458 Content-Type: text/plain; charset="us-ascii"
2458 MIME-Version: 1.0
2459 MIME-Version: 1.0
2459 Content-Transfer-Encoding: 8bit
2460 Content-Transfer-Encoding: 8bit
2460 Subject: [PATCH 4 of 6] isolatin 8-bit encoding
2461 Subject: [PATCH 4 of 6] isolatin 8-bit encoding
2461 X-Mercurial-Node: 240fb913fc1b7ff15ddb9f33e73d82bf5277c720
2462 X-Mercurial-Node: 240fb913fc1b7ff15ddb9f33e73d82bf5277c720
2462 X-Mercurial-Series-Index: 4
2463 X-Mercurial-Series-Index: 4
2463 X-Mercurial-Series-Total: 6
2464 X-Mercurial-Series-Total: 6
2464 Message-Id: <240fb913fc1b7ff15ddb.315532864@*> (glob)
2465 Message-Id: <240fb913fc1b7ff15ddb.315532864@*> (glob)
2465 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
2466 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
2466 In-Reply-To: <patchbomb.315532860@*> (glob)
2467 In-Reply-To: <patchbomb.315532860@*> (glob)
2467 References: <patchbomb.315532860@*> (glob)
2468 References: <patchbomb.315532860@*> (glob)
2468 User-Agent: Mercurial-patchbomb/* (glob)
2469 User-Agent: Mercurial-patchbomb/* (glob)
2469 Date: Tue, 01 Jan 1980 00:01:04 +0000
2470 Date: Tue, 01 Jan 1980 00:01:04 +0000
2470 From: test
2471 From: test
2471 To: foo
2472 To: foo
2472
2473
2473 # HG changeset patch
2474 # HG changeset patch
2474 # User test
2475 # User test
2475 # Date 5 0
2476 # Date 5 0
2476 # Thu Jan 01 00:00:05 1970 +0000
2477 # Thu Jan 01 00:00:05 1970 +0000
2477 # Node ID 240fb913fc1b7ff15ddb9f33e73d82bf5277c720
2478 # Node ID 240fb913fc1b7ff15ddb9f33e73d82bf5277c720
2478 # Parent a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
2479 # Parent a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
2479 isolatin 8-bit encoding
2480 isolatin 8-bit encoding
2480
2481
2481 diff -r a2ea8fc83dd8 -r 240fb913fc1b isolatin
2482 diff -r a2ea8fc83dd8 -r 240fb913fc1b isolatin
2482 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2483 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2483 +++ b/isolatin Thu Jan 01 00:00:05 1970 +0000
2484 +++ b/isolatin Thu Jan 01 00:00:05 1970 +0000
2484 @@ -0,0 +1,1 @@
2485 @@ -0,0 +1,1 @@
2485 +h\xf6mma! (esc)
2486 +h\xf6mma! (esc)
2486
2487
2487 displaying [PATCH 5 of 6] Added tag zero, zero.foo for changeset 8580ff50825a ...
2488 displaying [PATCH 5 of 6] Added tag zero, zero.foo for changeset 8580ff50825a ...
2488 Content-Type: text/plain; charset="us-ascii"
2489 Content-Type: text/plain; charset="us-ascii"
2489 MIME-Version: 1.0
2490 MIME-Version: 1.0
2490 Content-Transfer-Encoding: 7bit
2491 Content-Transfer-Encoding: 7bit
2491 Subject: [PATCH 5 of 6] Added tag zero, zero.foo for changeset 8580ff50825a
2492 Subject: [PATCH 5 of 6] Added tag zero, zero.foo for changeset 8580ff50825a
2492 X-Mercurial-Node: 5d5ef15dfe5e7bd3a4ee154b5fff76c7945ec433
2493 X-Mercurial-Node: 5d5ef15dfe5e7bd3a4ee154b5fff76c7945ec433
2493 X-Mercurial-Series-Index: 5
2494 X-Mercurial-Series-Index: 5
2494 X-Mercurial-Series-Total: 6
2495 X-Mercurial-Series-Total: 6
2495 Message-Id: <5d5ef15dfe5e7bd3a4ee.315532865@*> (glob)
2496 Message-Id: <5d5ef15dfe5e7bd3a4ee.315532865@*> (glob)
2496 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
2497 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
2497 In-Reply-To: <patchbomb.315532860@*> (glob)
2498 In-Reply-To: <patchbomb.315532860@*> (glob)
2498 References: <patchbomb.315532860@*> (glob)
2499 References: <patchbomb.315532860@*> (glob)
2499 User-Agent: Mercurial-patchbomb/* (glob)
2500 User-Agent: Mercurial-patchbomb/* (glob)
2500 Date: Tue, 01 Jan 1980 00:01:05 +0000
2501 Date: Tue, 01 Jan 1980 00:01:05 +0000
2501 From: test
2502 From: test
2502 To: foo
2503 To: foo
2503
2504
2504 # HG changeset patch
2505 # HG changeset patch
2505 # User test
2506 # User test
2506 # Date 0 0
2507 # Date 0 0
2507 # Thu Jan 01 00:00:00 1970 +0000
2508 # Thu Jan 01 00:00:00 1970 +0000
2508 # Node ID 5d5ef15dfe5e7bd3a4ee154b5fff76c7945ec433
2509 # Node ID 5d5ef15dfe5e7bd3a4ee154b5fff76c7945ec433
2509 # Parent 240fb913fc1b7ff15ddb9f33e73d82bf5277c720
2510 # Parent 240fb913fc1b7ff15ddb9f33e73d82bf5277c720
2510 Added tag zero, zero.foo for changeset 8580ff50825a
2511 Added tag zero, zero.foo for changeset 8580ff50825a
2511
2512
2512 diff -r 240fb913fc1b -r 5d5ef15dfe5e .hgtags
2513 diff -r 240fb913fc1b -r 5d5ef15dfe5e .hgtags
2513 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2514 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2514 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
2515 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
2515 @@ -0,0 +1,2 @@
2516 @@ -0,0 +1,2 @@
2516 +8580ff50825a50c8f716709acdf8de0deddcd6ab zero
2517 +8580ff50825a50c8f716709acdf8de0deddcd6ab zero
2517 +8580ff50825a50c8f716709acdf8de0deddcd6ab zero.foo
2518 +8580ff50825a50c8f716709acdf8de0deddcd6ab zero.foo
2518
2519
2519 displaying [PATCH 6 of 6] d ...
2520 displaying [PATCH 6 of 6] d ...
2520 Content-Type: text/plain; charset="us-ascii"
2521 Content-Type: text/plain; charset="us-ascii"
2521 MIME-Version: 1.0
2522 MIME-Version: 1.0
2522 Content-Transfer-Encoding: 7bit
2523 Content-Transfer-Encoding: 7bit
2523 Subject: [PATCH 6 of 6] d
2524 Subject: [PATCH 6 of 6] d
2524 X-Mercurial-Node: 2f9fa9b998c5fe3ac2bd9a2b14bfcbeecbc7c268
2525 X-Mercurial-Node: 2f9fa9b998c5fe3ac2bd9a2b14bfcbeecbc7c268
2525 X-Mercurial-Series-Index: 6
2526 X-Mercurial-Series-Index: 6
2526 X-Mercurial-Series-Total: 6
2527 X-Mercurial-Series-Total: 6
2527 Message-Id: <2f9fa9b998c5fe3ac2bd.315532866@*> (glob)
2528 Message-Id: <2f9fa9b998c5fe3ac2bd.315532866@*> (glob)
2528 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
2529 X-Mercurial-Series-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
2529 In-Reply-To: <patchbomb.315532860@*> (glob)
2530 In-Reply-To: <patchbomb.315532860@*> (glob)
2530 References: <patchbomb.315532860@*> (glob)
2531 References: <patchbomb.315532860@*> (glob)
2531 User-Agent: Mercurial-patchbomb/* (glob)
2532 User-Agent: Mercurial-patchbomb/* (glob)
2532 Date: Tue, 01 Jan 1980 00:01:06 +0000
2533 Date: Tue, 01 Jan 1980 00:01:06 +0000
2533 From: test
2534 From: test
2534 To: foo
2535 To: foo
2535
2536
2536 # HG changeset patch
2537 # HG changeset patch
2537 # User test
2538 # User test
2538 # Date 4 0
2539 # Date 4 0
2539 # Thu Jan 01 00:00:04 1970 +0000
2540 # Thu Jan 01 00:00:04 1970 +0000
2540 # Branch test
2541 # Branch test
2541 # Node ID 2f9fa9b998c5fe3ac2bd9a2b14bfcbeecbc7c268
2542 # Node ID 2f9fa9b998c5fe3ac2bd9a2b14bfcbeecbc7c268
2542 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2543 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2543 d
2544 d
2544
2545
2545 diff -r 97d72e5f12c7 -r 2f9fa9b998c5 d
2546 diff -r 97d72e5f12c7 -r 2f9fa9b998c5 d
2546 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2547 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2547 +++ b/d Thu Jan 01 00:00:04 1970 +0000
2548 +++ b/d Thu Jan 01 00:00:04 1970 +0000
2548 @@ -0,0 +1,1 @@
2549 @@ -0,0 +1,1 @@
2549 +d
2550 +d
2550
2551
2551
2552
2552 dest#branch URIs:
2553 dest#branch URIs:
2553 $ hg email --date '1980-1-1 0:1' -n -t foo -s test -o ../t#test
2554 $ hg email --date '1980-1-1 0:1' -n -t foo -s test -o ../t#test
2554 comparing with ../t
2555 comparing with ../t
2555 From [test]: test
2556 From [test]: test
2556 this patch series consists of 1 patches.
2557 this patch series consists of 1 patches.
2557
2558
2558 Cc:
2559 Cc:
2559
2560
2560 displaying [PATCH] test ...
2561 displaying [PATCH] test ...
2561 Content-Type: text/plain; charset="us-ascii"
2562 Content-Type: text/plain; charset="us-ascii"
2562 MIME-Version: 1.0
2563 MIME-Version: 1.0
2563 Content-Transfer-Encoding: 7bit
2564 Content-Transfer-Encoding: 7bit
2564 Subject: [PATCH] test
2565 Subject: [PATCH] test
2565 X-Mercurial-Node: 2f9fa9b998c5fe3ac2bd9a2b14bfcbeecbc7c268
2566 X-Mercurial-Node: 2f9fa9b998c5fe3ac2bd9a2b14bfcbeecbc7c268
2566 X-Mercurial-Series-Index: 1
2567 X-Mercurial-Series-Index: 1
2567 X-Mercurial-Series-Total: 1
2568 X-Mercurial-Series-Total: 1
2568 Message-Id: <2f9fa9b998c5fe3ac2bd.315532860@*> (glob)
2569 Message-Id: <2f9fa9b998c5fe3ac2bd.315532860@*> (glob)
2569 X-Mercurial-Series-Id: <2f9fa9b998c5fe3ac2bd.315532860@*> (glob)
2570 X-Mercurial-Series-Id: <2f9fa9b998c5fe3ac2bd.315532860@*> (glob)
2570 User-Agent: Mercurial-patchbomb/* (glob)
2571 User-Agent: Mercurial-patchbomb/* (glob)
2571 Date: Tue, 01 Jan 1980 00:01:00 +0000
2572 Date: Tue, 01 Jan 1980 00:01:00 +0000
2572 From: test
2573 From: test
2573 To: foo
2574 To: foo
2574
2575
2575 # HG changeset patch
2576 # HG changeset patch
2576 # User test
2577 # User test
2577 # Date 4 0
2578 # Date 4 0
2578 # Thu Jan 01 00:00:04 1970 +0000
2579 # Thu Jan 01 00:00:04 1970 +0000
2579 # Branch test
2580 # Branch test
2580 # Node ID 2f9fa9b998c5fe3ac2bd9a2b14bfcbeecbc7c268
2581 # Node ID 2f9fa9b998c5fe3ac2bd9a2b14bfcbeecbc7c268
2581 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2582 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
2582 d
2583 d
2583
2584
2584 diff -r 97d72e5f12c7 -r 2f9fa9b998c5 d
2585 diff -r 97d72e5f12c7 -r 2f9fa9b998c5 d
2585 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2586 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2586 +++ b/d Thu Jan 01 00:00:04 1970 +0000
2587 +++ b/d Thu Jan 01 00:00:04 1970 +0000
2587 @@ -0,0 +1,1 @@
2588 @@ -0,0 +1,1 @@
2588 +d
2589 +d
2589
2590
2590
2591
2591 $ cd ..
2592 $ cd ..
@@ -1,400 +1,410 b''
1 Create configuration
1 Create configuration
2
2
3 $ echo "[ui]" >> $HGRCPATH
3 $ echo "[ui]" >> $HGRCPATH
4 $ echo "interactive=true" >> $HGRCPATH
4 $ echo "interactive=true" >> $HGRCPATH
5
5
6 help record (no record)
6 help record (no record)
7
7
8 $ hg help record
8 $ hg help record
9 record extension - commands to interactively select changes for
9 record extension - commands to interactively select changes for
10 commit/qrefresh
10 commit/qrefresh
11
11
12 (use "hg help extensions" for information on enabling extensions)
12 (use "hg help extensions" for information on enabling extensions)
13
13
14 help qrecord (no record)
14 help qrecord (no record)
15
15
16 $ hg help qrecord
16 $ hg help qrecord
17 'qrecord' is provided by the following extension:
17 'qrecord' is provided by the following extension:
18
18
19 record commands to interactively select changes for commit/qrefresh
19 record commands to interactively select changes for commit/qrefresh
20
20
21 (use "hg help extensions" for information on enabling extensions)
21 (use "hg help extensions" for information on enabling extensions)
22
22
23 $ echo "[extensions]" >> $HGRCPATH
23 $ echo "[extensions]" >> $HGRCPATH
24 $ echo "record=" >> $HGRCPATH
24 $ echo "record=" >> $HGRCPATH
25
25
26 help record (record)
26 help record (record)
27
27
28 $ hg help record
28 $ hg help record
29 hg record [OPTION]... [FILE]...
29 hg record [OPTION]... [FILE]...
30
30
31 interactively select changes to commit
31 interactively select changes to commit
32
32
33 If a list of files is omitted, all changes reported by "hg status" will be
33 If a list of files is omitted, all changes reported by "hg status" will be
34 candidates for recording.
34 candidates for recording.
35
35
36 See "hg help dates" for a list of formats valid for -d/--date.
36 See "hg help dates" for a list of formats valid for -d/--date.
37
37
38 You will be prompted for whether to record changes to each modified file,
38 You will be prompted for whether to record changes to each modified file,
39 and for files with multiple changes, for each change to use. For each
39 and for files with multiple changes, for each change to use. For each
40 query, the following responses are possible:
40 query, the following responses are possible:
41
41
42 y - record this change
42 y - record this change
43 n - skip this change
43 n - skip this change
44 e - edit this change manually
44 e - edit this change manually
45
45
46 s - skip remaining changes to this file
46 s - skip remaining changes to this file
47 f - record remaining changes to this file
47 f - record remaining changes to this file
48
48
49 d - done, skip remaining changes and files
49 d - done, skip remaining changes and files
50 a - record all changes to all remaining files
50 a - record all changes to all remaining files
51 q - quit, recording no changes
51 q - quit, recording no changes
52
52
53 ? - display help
53 ? - display help
54
54
55 This command is not available when committing a merge.
55 This command is not available when committing a merge.
56
56
57 options ([+] can be repeated):
57 options ([+] can be repeated):
58
58
59 -A --addremove mark new/missing files as added/removed before
59 -A --addremove mark new/missing files as added/removed before
60 committing
60 committing
61 --close-branch mark a branch as closed, hiding it from the branch
61 --close-branch mark a branch as closed, hiding it from the branch
62 list
62 list
63 --amend amend the parent of the working dir
63 --amend amend the parent of the working dir
64 -s --secret use the secret phase for committing
64 -s --secret use the secret phase for committing
65 -e --edit invoke editor on commit messages
65 -e --edit invoke editor on commit messages
66 -I --include PATTERN [+] include names matching the given patterns
66 -I --include PATTERN [+] include names matching the given patterns
67 -X --exclude PATTERN [+] exclude names matching the given patterns
67 -X --exclude PATTERN [+] exclude names matching the given patterns
68 -m --message TEXT use text as commit message
68 -m --message TEXT use text as commit message
69 -l --logfile FILE read commit message from file
69 -l --logfile FILE read commit message from file
70 -d --date DATE record the specified date as commit date
70 -d --date DATE record the specified date as commit date
71 -u --user USER record the specified user as committer
71 -u --user USER record the specified user as committer
72 -S --subrepos recurse into subrepositories
72 -S --subrepos recurse into subrepositories
73 -w --ignore-all-space ignore white space when comparing lines
73 -w --ignore-all-space ignore white space when comparing lines
74 -b --ignore-space-change ignore changes in the amount of white space
74 -b --ignore-space-change ignore changes in the amount of white space
75 -B --ignore-blank-lines ignore changes whose lines are all blank
75 -B --ignore-blank-lines ignore changes whose lines are all blank
76
76
77 (some details hidden, use --verbose to show complete help)
77 (some details hidden, use --verbose to show complete help)
78
78
79 help (no mq, so no qrecord)
79 help (no mq, so no qrecord)
80
80
81 $ hg help qrecord
81 $ hg help qrecord
82 hg qrecord [OPTION]... PATCH [FILE]...
82 hg qrecord [OPTION]... PATCH [FILE]...
83
83
84 interactively record a new patch
84 interactively record a new patch
85
85
86 See "hg help qnew" & "hg help record" for more information and usage.
86 See "hg help qnew" & "hg help record" for more information and usage.
87
87
88 (some details hidden, use --verbose to show complete help)
88 (some details hidden, use --verbose to show complete help)
89
89
90 $ hg init a
90 $ hg init a
91
91
92 qrecord (mq not present)
92 qrecord (mq not present)
93
93
94 $ hg -R a qrecord
94 $ hg -R a qrecord
95 hg qrecord: invalid arguments
95 hg qrecord: invalid arguments
96 hg qrecord [OPTION]... PATCH [FILE]...
96 hg qrecord [OPTION]... PATCH [FILE]...
97
97
98 interactively record a new patch
98 interactively record a new patch
99
99
100 (use "hg qrecord -h" to show more help)
100 (use "hg qrecord -h" to show more help)
101 [255]
101 [255]
102
102
103 qrecord patch (mq not present)
103 qrecord patch (mq not present)
104
104
105 $ hg -R a qrecord patch
105 $ hg -R a qrecord patch
106 abort: 'mq' extension not loaded
106 abort: 'mq' extension not loaded
107 [255]
107 [255]
108
108
109 help (bad mq)
109 help (bad mq)
110
110
111 $ echo "mq=nonexistent" >> $HGRCPATH
111 $ echo "mq=nonexistent" >> $HGRCPATH
112 $ hg help qrecord
112 $ hg help qrecord
113 *** failed to import extension mq from nonexistent: [Errno *] * (glob)
113 *** failed to import extension mq from nonexistent: [Errno *] * (glob)
114 hg qrecord [OPTION]... PATCH [FILE]...
114 hg qrecord [OPTION]... PATCH [FILE]...
115
115
116 interactively record a new patch
116 interactively record a new patch
117
117
118 See "hg help qnew" & "hg help record" for more information and usage.
118 See "hg help qnew" & "hg help record" for more information and usage.
119
119
120 (some details hidden, use --verbose to show complete help)
120 (some details hidden, use --verbose to show complete help)
121
121
122 help (mq present)
122 help (mq present)
123
123
124 $ sed 's/mq=nonexistent/mq=/' $HGRCPATH > hgrc.tmp
124 $ sed 's/mq=nonexistent/mq=/' $HGRCPATH > hgrc.tmp
125 $ mv hgrc.tmp $HGRCPATH
125 $ mv hgrc.tmp $HGRCPATH
126
126
127 $ hg help qrecord
127 $ hg help qrecord
128 hg qrecord [OPTION]... PATCH [FILE]...
128 hg qrecord [OPTION]... PATCH [FILE]...
129
129
130 interactively record a new patch
130 interactively record a new patch
131
131
132 See "hg help qnew" & "hg help record" for more information and usage.
132 See "hg help qnew" & "hg help record" for more information and usage.
133
133
134 options ([+] can be repeated):
134 options ([+] can be repeated):
135
135
136 -e --edit invoke editor on commit messages
136 -e --edit invoke editor on commit messages
137 -g --git use git extended diff format
137 -g --git use git extended diff format
138 -U --currentuser add "From: <current user>" to patch
138 -U --currentuser add "From: <current user>" to patch
139 -u --user USER add "From: <USER>" to patch
139 -u --user USER add "From: <USER>" to patch
140 -D --currentdate add "Date: <current date>" to patch
140 -D --currentdate add "Date: <current date>" to patch
141 -d --date DATE add "Date: <DATE>" to patch
141 -d --date DATE add "Date: <DATE>" to patch
142 -I --include PATTERN [+] include names matching the given patterns
142 -I --include PATTERN [+] include names matching the given patterns
143 -X --exclude PATTERN [+] exclude names matching the given patterns
143 -X --exclude PATTERN [+] exclude names matching the given patterns
144 -m --message TEXT use text as commit message
144 -m --message TEXT use text as commit message
145 -l --logfile FILE read commit message from file
145 -l --logfile FILE read commit message from file
146 -w --ignore-all-space ignore white space when comparing lines
146 -w --ignore-all-space ignore white space when comparing lines
147 -b --ignore-space-change ignore changes in the amount of white space
147 -b --ignore-space-change ignore changes in the amount of white space
148 -B --ignore-blank-lines ignore changes whose lines are all blank
148 -B --ignore-blank-lines ignore changes whose lines are all blank
149 --mq operate on patch repository
149 --mq operate on patch repository
150
150
151 (some details hidden, use --verbose to show complete help)
151 (some details hidden, use --verbose to show complete help)
152
152
153 $ cd a
153 $ cd a
154
154
155 Base commit
155 Base commit
156
156
157 $ cat > 1.txt <<EOF
157 $ cat > 1.txt <<EOF
158 > 1
158 > 1
159 > 2
159 > 2
160 > 3
160 > 3
161 > 4
161 > 4
162 > 5
162 > 5
163 > EOF
163 > EOF
164 $ cat > 2.txt <<EOF
164 $ cat > 2.txt <<EOF
165 > a
165 > a
166 > b
166 > b
167 > c
167 > c
168 > d
168 > d
169 > e
169 > e
170 > f
170 > f
171 > EOF
171 > EOF
172
172
173 $ mkdir dir
173 $ mkdir dir
174 $ cat > dir/a.txt <<EOF
174 $ cat > dir/a.txt <<EOF
175 > hello world
175 > hello world
176 >
176 >
177 > someone
177 > someone
178 > up
178 > up
179 > there
179 > there
180 > loves
180 > loves
181 > me
181 > me
182 > EOF
182 > EOF
183
183
184 $ hg add 1.txt 2.txt dir/a.txt
184 $ hg add 1.txt 2.txt dir/a.txt
185 $ hg commit -m 'initial checkin'
185 $ hg commit -m 'initial checkin'
186
186
187 Changing files
187 Changing files
188
188
189 $ sed -e 's/2/2 2/;s/4/4 4/' 1.txt > 1.txt.new
189 $ sed -e 's/2/2 2/;s/4/4 4/' 1.txt > 1.txt.new
190 $ sed -e 's/b/b b/' 2.txt > 2.txt.new
190 $ sed -e 's/b/b b/' 2.txt > 2.txt.new
191 $ sed -e 's/hello world/hello world!/' dir/a.txt > dir/a.txt.new
191 $ sed -e 's/hello world/hello world!/' dir/a.txt > dir/a.txt.new
192
192
193 $ mv -f 1.txt.new 1.txt
193 $ mv -f 1.txt.new 1.txt
194 $ mv -f 2.txt.new 2.txt
194 $ mv -f 2.txt.new 2.txt
195 $ mv -f dir/a.txt.new dir/a.txt
195 $ mv -f dir/a.txt.new dir/a.txt
196
196
197 Whole diff
197 Whole diff
198
198
199 $ hg diff --nodates
199 $ hg diff --nodates
200 diff -r 1057167b20ef 1.txt
200 diff -r 1057167b20ef 1.txt
201 --- a/1.txt
201 --- a/1.txt
202 +++ b/1.txt
202 +++ b/1.txt
203 @@ -1,5 +1,5 @@
203 @@ -1,5 +1,5 @@
204 1
204 1
205 -2
205 -2
206 +2 2
206 +2 2
207 3
207 3
208 -4
208 -4
209 +4 4
209 +4 4
210 5
210 5
211 diff -r 1057167b20ef 2.txt
211 diff -r 1057167b20ef 2.txt
212 --- a/2.txt
212 --- a/2.txt
213 +++ b/2.txt
213 +++ b/2.txt
214 @@ -1,5 +1,5 @@
214 @@ -1,5 +1,5 @@
215 a
215 a
216 -b
216 -b
217 +b b
217 +b b
218 c
218 c
219 d
219 d
220 e
220 e
221 diff -r 1057167b20ef dir/a.txt
221 diff -r 1057167b20ef dir/a.txt
222 --- a/dir/a.txt
222 --- a/dir/a.txt
223 +++ b/dir/a.txt
223 +++ b/dir/a.txt
224 @@ -1,4 +1,4 @@
224 @@ -1,4 +1,4 @@
225 -hello world
225 -hello world
226 +hello world!
226 +hello world!
227
227
228 someone
228 someone
229 up
229 up
230
230
231 qrecord with bad patch name, should abort before prompting
231 qrecord with bad patch name, should abort before prompting
232
232
233 $ hg qrecord .hg
233 $ hg qrecord .hg
234 abort: patch name cannot begin with ".hg"
234 abort: patch name cannot begin with ".hg"
235 [255]
235 [255]
236
236
237 qrecord a.patch
237 qrecord a.patch
238
238
239 $ hg qrecord -d '0 0' -m aaa a.patch <<EOF
239 $ hg qrecord -d '0 0' -m aaa a.patch <<EOF
240 > y
240 > y
241 > y
241 > y
242 > n
242 > n
243 > y
243 > y
244 > y
244 > y
245 > n
245 > n
246 > EOF
246 > EOF
247 diff --git a/1.txt b/1.txt
247 diff --git a/1.txt b/1.txt
248 2 hunks, 2 lines changed
248 2 hunks, 2 lines changed
249 examine changes to '1.txt'? [Ynesfdaq?]
249 examine changes to '1.txt'? [Ynesfdaq?] y
250
250 @@ -1,3 +1,3 @@
251 @@ -1,3 +1,3 @@
251 1
252 1
252 -2
253 -2
253 +2 2
254 +2 2
254 3
255 3
255 record change 1/4 to '1.txt'? [Ynesfdaq?]
256 record change 1/4 to '1.txt'? [Ynesfdaq?] y
257
256 @@ -3,3 +3,3 @@
258 @@ -3,3 +3,3 @@
257 3
259 3
258 -4
260 -4
259 +4 4
261 +4 4
260 5
262 5
261 record change 2/4 to '1.txt'? [Ynesfdaq?]
263 record change 2/4 to '1.txt'? [Ynesfdaq?] n
264
262 diff --git a/2.txt b/2.txt
265 diff --git a/2.txt b/2.txt
263 1 hunks, 1 lines changed
266 1 hunks, 1 lines changed
264 examine changes to '2.txt'? [Ynesfdaq?]
267 examine changes to '2.txt'? [Ynesfdaq?] y
268
265 @@ -1,5 +1,5 @@
269 @@ -1,5 +1,5 @@
266 a
270 a
267 -b
271 -b
268 +b b
272 +b b
269 c
273 c
270 d
274 d
271 e
275 e
272 record change 3/4 to '2.txt'? [Ynesfdaq?]
276 record change 3/4 to '2.txt'? [Ynesfdaq?] y
277
273 diff --git a/dir/a.txt b/dir/a.txt
278 diff --git a/dir/a.txt b/dir/a.txt
274 1 hunks, 1 lines changed
279 1 hunks, 1 lines changed
275 examine changes to 'dir/a.txt'? [Ynesfdaq?]
280 examine changes to 'dir/a.txt'? [Ynesfdaq?] n
281
276
282
277 After qrecord a.patch 'tip'"
283 After qrecord a.patch 'tip'"
278
284
279 $ hg tip -p
285 $ hg tip -p
280 changeset: 1:5d1ca63427ee
286 changeset: 1:5d1ca63427ee
281 tag: a.patch
287 tag: a.patch
282 tag: qbase
288 tag: qbase
283 tag: qtip
289 tag: qtip
284 tag: tip
290 tag: tip
285 user: test
291 user: test
286 date: Thu Jan 01 00:00:00 1970 +0000
292 date: Thu Jan 01 00:00:00 1970 +0000
287 summary: aaa
293 summary: aaa
288
294
289 diff -r 1057167b20ef -r 5d1ca63427ee 1.txt
295 diff -r 1057167b20ef -r 5d1ca63427ee 1.txt
290 --- a/1.txt Thu Jan 01 00:00:00 1970 +0000
296 --- a/1.txt Thu Jan 01 00:00:00 1970 +0000
291 +++ b/1.txt Thu Jan 01 00:00:00 1970 +0000
297 +++ b/1.txt Thu Jan 01 00:00:00 1970 +0000
292 @@ -1,5 +1,5 @@
298 @@ -1,5 +1,5 @@
293 1
299 1
294 -2
300 -2
295 +2 2
301 +2 2
296 3
302 3
297 4
303 4
298 5
304 5
299 diff -r 1057167b20ef -r 5d1ca63427ee 2.txt
305 diff -r 1057167b20ef -r 5d1ca63427ee 2.txt
300 --- a/2.txt Thu Jan 01 00:00:00 1970 +0000
306 --- a/2.txt Thu Jan 01 00:00:00 1970 +0000
301 +++ b/2.txt Thu Jan 01 00:00:00 1970 +0000
307 +++ b/2.txt Thu Jan 01 00:00:00 1970 +0000
302 @@ -1,5 +1,5 @@
308 @@ -1,5 +1,5 @@
303 a
309 a
304 -b
310 -b
305 +b b
311 +b b
306 c
312 c
307 d
313 d
308 e
314 e
309
315
310
316
311 After qrecord a.patch 'diff'"
317 After qrecord a.patch 'diff'"
312
318
313 $ hg diff --nodates
319 $ hg diff --nodates
314 diff -r 5d1ca63427ee 1.txt
320 diff -r 5d1ca63427ee 1.txt
315 --- a/1.txt
321 --- a/1.txt
316 +++ b/1.txt
322 +++ b/1.txt
317 @@ -1,5 +1,5 @@
323 @@ -1,5 +1,5 @@
318 1
324 1
319 2 2
325 2 2
320 3
326 3
321 -4
327 -4
322 +4 4
328 +4 4
323 5
329 5
324 diff -r 5d1ca63427ee dir/a.txt
330 diff -r 5d1ca63427ee dir/a.txt
325 --- a/dir/a.txt
331 --- a/dir/a.txt
326 +++ b/dir/a.txt
332 +++ b/dir/a.txt
327 @@ -1,4 +1,4 @@
333 @@ -1,4 +1,4 @@
328 -hello world
334 -hello world
329 +hello world!
335 +hello world!
330
336
331 someone
337 someone
332 up
338 up
333
339
334 qrecord b.patch
340 qrecord b.patch
335
341
336 $ hg qrecord -d '0 0' -m bbb b.patch <<EOF
342 $ hg qrecord -d '0 0' -m bbb b.patch <<EOF
337 > y
343 > y
338 > y
344 > y
339 > y
345 > y
340 > y
346 > y
341 > EOF
347 > EOF
342 diff --git a/1.txt b/1.txt
348 diff --git a/1.txt b/1.txt
343 1 hunks, 1 lines changed
349 1 hunks, 1 lines changed
344 examine changes to '1.txt'? [Ynesfdaq?]
350 examine changes to '1.txt'? [Ynesfdaq?] y
351
345 @@ -1,5 +1,5 @@
352 @@ -1,5 +1,5 @@
346 1
353 1
347 2 2
354 2 2
348 3
355 3
349 -4
356 -4
350 +4 4
357 +4 4
351 5
358 5
352 record change 1/2 to '1.txt'? [Ynesfdaq?]
359 record change 1/2 to '1.txt'? [Ynesfdaq?] y
360
353 diff --git a/dir/a.txt b/dir/a.txt
361 diff --git a/dir/a.txt b/dir/a.txt
354 1 hunks, 1 lines changed
362 1 hunks, 1 lines changed
355 examine changes to 'dir/a.txt'? [Ynesfdaq?]
363 examine changes to 'dir/a.txt'? [Ynesfdaq?] y
364
356 @@ -1,4 +1,4 @@
365 @@ -1,4 +1,4 @@
357 -hello world
366 -hello world
358 +hello world!
367 +hello world!
359
368
360 someone
369 someone
361 up
370 up
362 record change 2/2 to 'dir/a.txt'? [Ynesfdaq?]
371 record change 2/2 to 'dir/a.txt'? [Ynesfdaq?] y
372
363
373
364 After qrecord b.patch 'tip'
374 After qrecord b.patch 'tip'
365
375
366 $ hg tip -p
376 $ hg tip -p
367 changeset: 2:b056198bf878
377 changeset: 2:b056198bf878
368 tag: b.patch
378 tag: b.patch
369 tag: qtip
379 tag: qtip
370 tag: tip
380 tag: tip
371 user: test
381 user: test
372 date: Thu Jan 01 00:00:00 1970 +0000
382 date: Thu Jan 01 00:00:00 1970 +0000
373 summary: bbb
383 summary: bbb
374
384
375 diff -r 5d1ca63427ee -r b056198bf878 1.txt
385 diff -r 5d1ca63427ee -r b056198bf878 1.txt
376 --- a/1.txt Thu Jan 01 00:00:00 1970 +0000
386 --- a/1.txt Thu Jan 01 00:00:00 1970 +0000
377 +++ b/1.txt Thu Jan 01 00:00:00 1970 +0000
387 +++ b/1.txt Thu Jan 01 00:00:00 1970 +0000
378 @@ -1,5 +1,5 @@
388 @@ -1,5 +1,5 @@
379 1
389 1
380 2 2
390 2 2
381 3
391 3
382 -4
392 -4
383 +4 4
393 +4 4
384 5
394 5
385 diff -r 5d1ca63427ee -r b056198bf878 dir/a.txt
395 diff -r 5d1ca63427ee -r b056198bf878 dir/a.txt
386 --- a/dir/a.txt Thu Jan 01 00:00:00 1970 +0000
396 --- a/dir/a.txt Thu Jan 01 00:00:00 1970 +0000
387 +++ b/dir/a.txt Thu Jan 01 00:00:00 1970 +0000
397 +++ b/dir/a.txt Thu Jan 01 00:00:00 1970 +0000
388 @@ -1,4 +1,4 @@
398 @@ -1,4 +1,4 @@
389 -hello world
399 -hello world
390 +hello world!
400 +hello world!
391
401
392 someone
402 someone
393 up
403 up
394
404
395
405
396 After qrecord b.patch 'diff'
406 After qrecord b.patch 'diff'
397
407
398 $ hg diff --nodates
408 $ hg diff --nodates
399
409
400 $ cd ..
410 $ cd ..
@@ -1,1302 +1,1371 b''
1 Set up a repo
1 Set up a repo
2
2
3 $ echo "[ui]" >> $HGRCPATH
3 $ echo "[ui]" >> $HGRCPATH
4 $ echo "interactive=true" >> $HGRCPATH
4 $ echo "interactive=true" >> $HGRCPATH
5 $ echo "[extensions]" >> $HGRCPATH
5 $ echo "[extensions]" >> $HGRCPATH
6 $ echo "record=" >> $HGRCPATH
6 $ echo "record=" >> $HGRCPATH
7
7
8 $ hg init a
8 $ hg init a
9 $ cd a
9 $ cd a
10
10
11 Select no files
11 Select no files
12
12
13 $ touch empty-rw
13 $ touch empty-rw
14 $ hg add empty-rw
14 $ hg add empty-rw
15
15
16 $ hg record empty-rw<<EOF
16 $ hg record empty-rw<<EOF
17 > n
17 > n
18 > EOF
18 > EOF
19 diff --git a/empty-rw b/empty-rw
19 diff --git a/empty-rw b/empty-rw
20 new file mode 100644
20 new file mode 100644
21 examine changes to 'empty-rw'? [Ynesfdaq?]
21 examine changes to 'empty-rw'? [Ynesfdaq?] n
22
22 no changes to record
23 no changes to record
23
24
24 $ hg tip -p
25 $ hg tip -p
25 changeset: -1:000000000000
26 changeset: -1:000000000000
26 tag: tip
27 tag: tip
27 user:
28 user:
28 date: Thu Jan 01 00:00:00 1970 +0000
29 date: Thu Jan 01 00:00:00 1970 +0000
29
30
30
31
31
32
32 Select files but no hunks
33 Select files but no hunks
33
34
34 $ hg record empty-rw<<EOF
35 $ hg record empty-rw<<EOF
35 > y
36 > y
36 > n
37 > n
37 > EOF
38 > EOF
38 diff --git a/empty-rw b/empty-rw
39 diff --git a/empty-rw b/empty-rw
39 new file mode 100644
40 new file mode 100644
40 examine changes to 'empty-rw'? [Ynesfdaq?]
41 examine changes to 'empty-rw'? [Ynesfdaq?] y
42
41 abort: empty commit message
43 abort: empty commit message
42 [255]
44 [255]
43
45
44 $ hg tip -p
46 $ hg tip -p
45 changeset: -1:000000000000
47 changeset: -1:000000000000
46 tag: tip
48 tag: tip
47 user:
49 user:
48 date: Thu Jan 01 00:00:00 1970 +0000
50 date: Thu Jan 01 00:00:00 1970 +0000
49
51
50
52
51
53
52 Record empty file
54 Record empty file
53
55
54 $ hg record -d '0 0' -m empty empty-rw<<EOF
56 $ hg record -d '0 0' -m empty empty-rw<<EOF
55 > y
57 > y
56 > y
58 > y
57 > EOF
59 > EOF
58 diff --git a/empty-rw b/empty-rw
60 diff --git a/empty-rw b/empty-rw
59 new file mode 100644
61 new file mode 100644
60 examine changes to 'empty-rw'? [Ynesfdaq?]
62 examine changes to 'empty-rw'? [Ynesfdaq?] y
63
61
64
62 $ hg tip -p
65 $ hg tip -p
63 changeset: 0:c0708cf4e46e
66 changeset: 0:c0708cf4e46e
64 tag: tip
67 tag: tip
65 user: test
68 user: test
66 date: Thu Jan 01 00:00:00 1970 +0000
69 date: Thu Jan 01 00:00:00 1970 +0000
67 summary: empty
70 summary: empty
68
71
69
72
70
73
71 Summary shows we updated to the new cset
74 Summary shows we updated to the new cset
72
75
73 $ hg summary
76 $ hg summary
74 parent: 0:c0708cf4e46e tip
77 parent: 0:c0708cf4e46e tip
75 empty
78 empty
76 branch: default
79 branch: default
77 commit: (clean)
80 commit: (clean)
78 update: (current)
81 update: (current)
79
82
80 Rename empty file
83 Rename empty file
81
84
82 $ hg mv empty-rw empty-rename
85 $ hg mv empty-rw empty-rename
83 $ hg record -d '1 0' -m rename<<EOF
86 $ hg record -d '1 0' -m rename<<EOF
84 > y
87 > y
85 > EOF
88 > EOF
86 diff --git a/empty-rw b/empty-rename
89 diff --git a/empty-rw b/empty-rename
87 rename from empty-rw
90 rename from empty-rw
88 rename to empty-rename
91 rename to empty-rename
89 examine changes to 'empty-rw' and 'empty-rename'? [Ynesfdaq?]
92 examine changes to 'empty-rw' and 'empty-rename'? [Ynesfdaq?] y
93
90
94
91 $ hg tip -p
95 $ hg tip -p
92 changeset: 1:d695e8dcb197
96 changeset: 1:d695e8dcb197
93 tag: tip
97 tag: tip
94 user: test
98 user: test
95 date: Thu Jan 01 00:00:01 1970 +0000
99 date: Thu Jan 01 00:00:01 1970 +0000
96 summary: rename
100 summary: rename
97
101
98
102
99
103
100 Copy empty file
104 Copy empty file
101
105
102 $ hg cp empty-rename empty-copy
106 $ hg cp empty-rename empty-copy
103 $ hg record -d '2 0' -m copy<<EOF
107 $ hg record -d '2 0' -m copy<<EOF
104 > y
108 > y
105 > EOF
109 > EOF
106 diff --git a/empty-rename b/empty-copy
110 diff --git a/empty-rename b/empty-copy
107 copy from empty-rename
111 copy from empty-rename
108 copy to empty-copy
112 copy to empty-copy
109 examine changes to 'empty-rename' and 'empty-copy'? [Ynesfdaq?]
113 examine changes to 'empty-rename' and 'empty-copy'? [Ynesfdaq?] y
114
110
115
111 $ hg tip -p
116 $ hg tip -p
112 changeset: 2:1d4b90bea524
117 changeset: 2:1d4b90bea524
113 tag: tip
118 tag: tip
114 user: test
119 user: test
115 date: Thu Jan 01 00:00:02 1970 +0000
120 date: Thu Jan 01 00:00:02 1970 +0000
116 summary: copy
121 summary: copy
117
122
118
123
119
124
120 Delete empty file
125 Delete empty file
121
126
122 $ hg rm empty-copy
127 $ hg rm empty-copy
123 $ hg record -d '3 0' -m delete<<EOF
128 $ hg record -d '3 0' -m delete<<EOF
124 > y
129 > y
125 > EOF
130 > EOF
126 diff --git a/empty-copy b/empty-copy
131 diff --git a/empty-copy b/empty-copy
127 deleted file mode 100644
132 deleted file mode 100644
128 examine changes to 'empty-copy'? [Ynesfdaq?]
133 examine changes to 'empty-copy'? [Ynesfdaq?] y
134
129
135
130 $ hg tip -p
136 $ hg tip -p
131 changeset: 3:b39a238f01a1
137 changeset: 3:b39a238f01a1
132 tag: tip
138 tag: tip
133 user: test
139 user: test
134 date: Thu Jan 01 00:00:03 1970 +0000
140 date: Thu Jan 01 00:00:03 1970 +0000
135 summary: delete
141 summary: delete
136
142
137
143
138
144
139 Add binary file
145 Add binary file
140
146
141 $ hg bundle --base -2 tip.bundle
147 $ hg bundle --base -2 tip.bundle
142 1 changesets found
148 1 changesets found
143 $ hg add tip.bundle
149 $ hg add tip.bundle
144 $ hg record -d '4 0' -m binary<<EOF
150 $ hg record -d '4 0' -m binary<<EOF
145 > y
151 > y
146 > EOF
152 > EOF
147 diff --git a/tip.bundle b/tip.bundle
153 diff --git a/tip.bundle b/tip.bundle
148 new file mode 100644
154 new file mode 100644
149 this is a binary file
155 this is a binary file
150 examine changes to 'tip.bundle'? [Ynesfdaq?]
156 examine changes to 'tip.bundle'? [Ynesfdaq?] y
157
151
158
152 $ hg tip -p
159 $ hg tip -p
153 changeset: 4:ad816da3711e
160 changeset: 4:ad816da3711e
154 tag: tip
161 tag: tip
155 user: test
162 user: test
156 date: Thu Jan 01 00:00:04 1970 +0000
163 date: Thu Jan 01 00:00:04 1970 +0000
157 summary: binary
164 summary: binary
158
165
159 diff -r b39a238f01a1 -r ad816da3711e tip.bundle
166 diff -r b39a238f01a1 -r ad816da3711e tip.bundle
160 Binary file tip.bundle has changed
167 Binary file tip.bundle has changed
161
168
162
169
163 Change binary file
170 Change binary file
164
171
165 $ hg bundle --base -2 tip.bundle
172 $ hg bundle --base -2 tip.bundle
166 1 changesets found
173 1 changesets found
167 $ hg record -d '5 0' -m binary-change<<EOF
174 $ hg record -d '5 0' -m binary-change<<EOF
168 > y
175 > y
169 > EOF
176 > EOF
170 diff --git a/tip.bundle b/tip.bundle
177 diff --git a/tip.bundle b/tip.bundle
171 this modifies a binary file (all or nothing)
178 this modifies a binary file (all or nothing)
172 examine changes to 'tip.bundle'? [Ynesfdaq?]
179 examine changes to 'tip.bundle'? [Ynesfdaq?] y
180
173
181
174 $ hg tip -p
182 $ hg tip -p
175 changeset: 5:dccd6f3eb485
183 changeset: 5:dccd6f3eb485
176 tag: tip
184 tag: tip
177 user: test
185 user: test
178 date: Thu Jan 01 00:00:05 1970 +0000
186 date: Thu Jan 01 00:00:05 1970 +0000
179 summary: binary-change
187 summary: binary-change
180
188
181 diff -r ad816da3711e -r dccd6f3eb485 tip.bundle
189 diff -r ad816da3711e -r dccd6f3eb485 tip.bundle
182 Binary file tip.bundle has changed
190 Binary file tip.bundle has changed
183
191
184
192
185 Rename and change binary file
193 Rename and change binary file
186
194
187 $ hg mv tip.bundle top.bundle
195 $ hg mv tip.bundle top.bundle
188 $ hg bundle --base -2 top.bundle
196 $ hg bundle --base -2 top.bundle
189 1 changesets found
197 1 changesets found
190 $ hg record -d '6 0' -m binary-change-rename<<EOF
198 $ hg record -d '6 0' -m binary-change-rename<<EOF
191 > y
199 > y
192 > EOF
200 > EOF
193 diff --git a/tip.bundle b/top.bundle
201 diff --git a/tip.bundle b/top.bundle
194 rename from tip.bundle
202 rename from tip.bundle
195 rename to top.bundle
203 rename to top.bundle
196 this modifies a binary file (all or nothing)
204 this modifies a binary file (all or nothing)
197 examine changes to 'tip.bundle' and 'top.bundle'? [Ynesfdaq?]
205 examine changes to 'tip.bundle' and 'top.bundle'? [Ynesfdaq?] y
206
198
207
199 $ hg tip -p
208 $ hg tip -p
200 changeset: 6:7fa44105f5b3
209 changeset: 6:7fa44105f5b3
201 tag: tip
210 tag: tip
202 user: test
211 user: test
203 date: Thu Jan 01 00:00:06 1970 +0000
212 date: Thu Jan 01 00:00:06 1970 +0000
204 summary: binary-change-rename
213 summary: binary-change-rename
205
214
206 diff -r dccd6f3eb485 -r 7fa44105f5b3 tip.bundle
215 diff -r dccd6f3eb485 -r 7fa44105f5b3 tip.bundle
207 Binary file tip.bundle has changed
216 Binary file tip.bundle has changed
208 diff -r dccd6f3eb485 -r 7fa44105f5b3 top.bundle
217 diff -r dccd6f3eb485 -r 7fa44105f5b3 top.bundle
209 Binary file top.bundle has changed
218 Binary file top.bundle has changed
210
219
211
220
212 Add plain file
221 Add plain file
213
222
214 $ for i in 1 2 3 4 5 6 7 8 9 10; do
223 $ for i in 1 2 3 4 5 6 7 8 9 10; do
215 > echo $i >> plain
224 > echo $i >> plain
216 > done
225 > done
217
226
218 $ hg add plain
227 $ hg add plain
219 $ hg record -d '7 0' -m plain plain<<EOF
228 $ hg record -d '7 0' -m plain plain<<EOF
220 > y
229 > y
221 > y
230 > y
222 > EOF
231 > EOF
223 diff --git a/plain b/plain
232 diff --git a/plain b/plain
224 new file mode 100644
233 new file mode 100644
225 examine changes to 'plain'? [Ynesfdaq?]
234 examine changes to 'plain'? [Ynesfdaq?] y
235
226
236
227 $ hg tip -p
237 $ hg tip -p
228 changeset: 7:11fb457c1be4
238 changeset: 7:11fb457c1be4
229 tag: tip
239 tag: tip
230 user: test
240 user: test
231 date: Thu Jan 01 00:00:07 1970 +0000
241 date: Thu Jan 01 00:00:07 1970 +0000
232 summary: plain
242 summary: plain
233
243
234 diff -r 7fa44105f5b3 -r 11fb457c1be4 plain
244 diff -r 7fa44105f5b3 -r 11fb457c1be4 plain
235 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
245 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
236 +++ b/plain Thu Jan 01 00:00:07 1970 +0000
246 +++ b/plain Thu Jan 01 00:00:07 1970 +0000
237 @@ -0,0 +1,10 @@
247 @@ -0,0 +1,10 @@
238 +1
248 +1
239 +2
249 +2
240 +3
250 +3
241 +4
251 +4
242 +5
252 +5
243 +6
253 +6
244 +7
254 +7
245 +8
255 +8
246 +9
256 +9
247 +10
257 +10
248
258
249 Modify end of plain file with username unset
259 Modify end of plain file with username unset
250
260
251 $ echo 11 >> plain
261 $ echo 11 >> plain
252 $ unset HGUSER
262 $ unset HGUSER
253 $ hg record --config ui.username= -d '8 0' -m end plain
263 $ hg record --config ui.username= -d '8 0' -m end plain
254 abort: no username supplied
264 abort: no username supplied
255 (use "hg config --edit" to set your username)
265 (use "hg config --edit" to set your username)
256 [255]
266 [255]
257
267
258
268
259 Modify end of plain file, also test that diffopts are accounted for
269 Modify end of plain file, also test that diffopts are accounted for
260
270
261 $ HGUSER="test"
271 $ HGUSER="test"
262 $ export HGUSER
272 $ export HGUSER
263 $ hg record --config diff.showfunc=true -d '8 0' -m end plain <<EOF
273 $ hg record --config diff.showfunc=true -d '8 0' -m end plain <<EOF
264 > y
274 > y
265 > y
275 > y
266 > EOF
276 > EOF
267 diff --git a/plain b/plain
277 diff --git a/plain b/plain
268 1 hunks, 1 lines changed
278 1 hunks, 1 lines changed
269 examine changes to 'plain'? [Ynesfdaq?]
279 examine changes to 'plain'? [Ynesfdaq?] y
280
270 @@ -8,3 +8,4 @@ 7
281 @@ -8,3 +8,4 @@ 7
271 8
282 8
272 9
283 9
273 10
284 10
274 +11
285 +11
275 record this change to 'plain'? [Ynesfdaq?]
286 record this change to 'plain'? [Ynesfdaq?] y
287
276
288
277 Modify end of plain file, no EOL
289 Modify end of plain file, no EOL
278
290
279 $ hg tip --template '{node}' >> plain
291 $ hg tip --template '{node}' >> plain
280 $ hg record -d '9 0' -m noeol plain <<EOF
292 $ hg record -d '9 0' -m noeol plain <<EOF
281 > y
293 > y
282 > y
294 > y
283 > EOF
295 > EOF
284 diff --git a/plain b/plain
296 diff --git a/plain b/plain
285 1 hunks, 1 lines changed
297 1 hunks, 1 lines changed
286 examine changes to 'plain'? [Ynesfdaq?]
298 examine changes to 'plain'? [Ynesfdaq?] y
299
287 @@ -9,3 +9,4 @@
300 @@ -9,3 +9,4 @@
288 9
301 9
289 10
302 10
290 11
303 11
291 +7264f99c5f5ff3261504828afa4fb4d406c3af54
304 +7264f99c5f5ff3261504828afa4fb4d406c3af54
292 \ No newline at end of file
305 \ No newline at end of file
293 record this change to 'plain'? [Ynesfdaq?]
306 record this change to 'plain'? [Ynesfdaq?] y
307
294
308
295 Modify end of plain file, add EOL
309 Modify end of plain file, add EOL
296
310
297 $ echo >> plain
311 $ echo >> plain
298 $ echo 1 > plain2
312 $ echo 1 > plain2
299 $ hg add plain2
313 $ hg add plain2
300 $ hg record -d '10 0' -m eol plain plain2 <<EOF
314 $ hg record -d '10 0' -m eol plain plain2 <<EOF
301 > y
315 > y
302 > y
316 > y
303 > y
317 > y
304 > EOF
318 > EOF
305 diff --git a/plain b/plain
319 diff --git a/plain b/plain
306 1 hunks, 1 lines changed
320 1 hunks, 1 lines changed
307 examine changes to 'plain'? [Ynesfdaq?]
321 examine changes to 'plain'? [Ynesfdaq?] y
322
308 @@ -9,4 +9,4 @@
323 @@ -9,4 +9,4 @@
309 9
324 9
310 10
325 10
311 11
326 11
312 -7264f99c5f5ff3261504828afa4fb4d406c3af54
327 -7264f99c5f5ff3261504828afa4fb4d406c3af54
313 \ No newline at end of file
328 \ No newline at end of file
314 +7264f99c5f5ff3261504828afa4fb4d406c3af54
329 +7264f99c5f5ff3261504828afa4fb4d406c3af54
315 record change 1/2 to 'plain'? [Ynesfdaq?]
330 record change 1/2 to 'plain'? [Ynesfdaq?] y
331
316 diff --git a/plain2 b/plain2
332 diff --git a/plain2 b/plain2
317 new file mode 100644
333 new file mode 100644
318 examine changes to 'plain2'? [Ynesfdaq?]
334 examine changes to 'plain2'? [Ynesfdaq?] y
335
319
336
320 Modify beginning, trim end, record both, add another file to test
337 Modify beginning, trim end, record both, add another file to test
321 changes numbering
338 changes numbering
322
339
323 $ rm plain
340 $ rm plain
324 $ for i in 2 2 3 4 5 6 7 8 9 10; do
341 $ for i in 2 2 3 4 5 6 7 8 9 10; do
325 > echo $i >> plain
342 > echo $i >> plain
326 > done
343 > done
327 $ echo 2 >> plain2
344 $ echo 2 >> plain2
328
345
329 $ hg record -d '10 0' -m begin-and-end plain plain2 <<EOF
346 $ hg record -d '10 0' -m begin-and-end plain plain2 <<EOF
330 > y
347 > y
331 > y
348 > y
332 > y
349 > y
333 > y
350 > y
334 > y
351 > y
335 > EOF
352 > EOF
336 diff --git a/plain b/plain
353 diff --git a/plain b/plain
337 2 hunks, 3 lines changed
354 2 hunks, 3 lines changed
338 examine changes to 'plain'? [Ynesfdaq?]
355 examine changes to 'plain'? [Ynesfdaq?] y
356
339 @@ -1,4 +1,4 @@
357 @@ -1,4 +1,4 @@
340 -1
358 -1
341 +2
359 +2
342 2
360 2
343 3
361 3
344 4
362 4
345 record change 1/3 to 'plain'? [Ynesfdaq?]
363 record change 1/3 to 'plain'? [Ynesfdaq?] y
364
346 @@ -8,5 +8,3 @@
365 @@ -8,5 +8,3 @@
347 8
366 8
348 9
367 9
349 10
368 10
350 -11
369 -11
351 -7264f99c5f5ff3261504828afa4fb4d406c3af54
370 -7264f99c5f5ff3261504828afa4fb4d406c3af54
352 record change 2/3 to 'plain'? [Ynesfdaq?]
371 record change 2/3 to 'plain'? [Ynesfdaq?] y
372
353 diff --git a/plain2 b/plain2
373 diff --git a/plain2 b/plain2
354 1 hunks, 1 lines changed
374 1 hunks, 1 lines changed
355 examine changes to 'plain2'? [Ynesfdaq?]
375 examine changes to 'plain2'? [Ynesfdaq?] y
376
356 @@ -1,1 +1,2 @@
377 @@ -1,1 +1,2 @@
357 1
378 1
358 +2
379 +2
359 record change 3/3 to 'plain2'? [Ynesfdaq?]
380 record change 3/3 to 'plain2'? [Ynesfdaq?] y
381
360
382
361 $ hg tip -p
383 $ hg tip -p
362 changeset: 11:21df83db12b8
384 changeset: 11:21df83db12b8
363 tag: tip
385 tag: tip
364 user: test
386 user: test
365 date: Thu Jan 01 00:00:10 1970 +0000
387 date: Thu Jan 01 00:00:10 1970 +0000
366 summary: begin-and-end
388 summary: begin-and-end
367
389
368 diff -r ddb8b281c3ff -r 21df83db12b8 plain
390 diff -r ddb8b281c3ff -r 21df83db12b8 plain
369 --- a/plain Thu Jan 01 00:00:10 1970 +0000
391 --- a/plain Thu Jan 01 00:00:10 1970 +0000
370 +++ b/plain Thu Jan 01 00:00:10 1970 +0000
392 +++ b/plain Thu Jan 01 00:00:10 1970 +0000
371 @@ -1,4 +1,4 @@
393 @@ -1,4 +1,4 @@
372 -1
394 -1
373 +2
395 +2
374 2
396 2
375 3
397 3
376 4
398 4
377 @@ -8,5 +8,3 @@
399 @@ -8,5 +8,3 @@
378 8
400 8
379 9
401 9
380 10
402 10
381 -11
403 -11
382 -7264f99c5f5ff3261504828afa4fb4d406c3af54
404 -7264f99c5f5ff3261504828afa4fb4d406c3af54
383 diff -r ddb8b281c3ff -r 21df83db12b8 plain2
405 diff -r ddb8b281c3ff -r 21df83db12b8 plain2
384 --- a/plain2 Thu Jan 01 00:00:10 1970 +0000
406 --- a/plain2 Thu Jan 01 00:00:10 1970 +0000
385 +++ b/plain2 Thu Jan 01 00:00:10 1970 +0000
407 +++ b/plain2 Thu Jan 01 00:00:10 1970 +0000
386 @@ -1,1 +1,2 @@
408 @@ -1,1 +1,2 @@
387 1
409 1
388 +2
410 +2
389
411
390
412
391 Trim beginning, modify end
413 Trim beginning, modify end
392
414
393 $ rm plain
415 $ rm plain
394 > for i in 4 5 6 7 8 9 10.new; do
416 > for i in 4 5 6 7 8 9 10.new; do
395 > echo $i >> plain
417 > echo $i >> plain
396 > done
418 > done
397
419
398 Record end
420 Record end
399
421
400 $ hg record -d '11 0' -m end-only plain <<EOF
422 $ hg record -d '11 0' -m end-only plain <<EOF
401 > y
423 > y
402 > n
424 > n
403 > y
425 > y
404 > EOF
426 > EOF
405 diff --git a/plain b/plain
427 diff --git a/plain b/plain
406 2 hunks, 4 lines changed
428 2 hunks, 4 lines changed
407 examine changes to 'plain'? [Ynesfdaq?]
429 examine changes to 'plain'? [Ynesfdaq?] y
430
408 @@ -1,9 +1,6 @@
431 @@ -1,9 +1,6 @@
409 -2
432 -2
410 -2
433 -2
411 -3
434 -3
412 4
435 4
413 5
436 5
414 6
437 6
415 7
438 7
416 8
439 8
417 9
440 9
418 record change 1/2 to 'plain'? [Ynesfdaq?]
441 record change 1/2 to 'plain'? [Ynesfdaq?] n
442
419 @@ -4,7 +1,7 @@
443 @@ -4,7 +1,7 @@
420 4
444 4
421 5
445 5
422 6
446 6
423 7
447 7
424 8
448 8
425 9
449 9
426 -10
450 -10
427 +10.new
451 +10.new
428 record change 2/2 to 'plain'? [Ynesfdaq?]
452 record change 2/2 to 'plain'? [Ynesfdaq?] y
453
429
454
430 $ hg tip -p
455 $ hg tip -p
431 changeset: 12:99337501826f
456 changeset: 12:99337501826f
432 tag: tip
457 tag: tip
433 user: test
458 user: test
434 date: Thu Jan 01 00:00:11 1970 +0000
459 date: Thu Jan 01 00:00:11 1970 +0000
435 summary: end-only
460 summary: end-only
436
461
437 diff -r 21df83db12b8 -r 99337501826f plain
462 diff -r 21df83db12b8 -r 99337501826f plain
438 --- a/plain Thu Jan 01 00:00:10 1970 +0000
463 --- a/plain Thu Jan 01 00:00:10 1970 +0000
439 +++ b/plain Thu Jan 01 00:00:11 1970 +0000
464 +++ b/plain Thu Jan 01 00:00:11 1970 +0000
440 @@ -7,4 +7,4 @@
465 @@ -7,4 +7,4 @@
441 7
466 7
442 8
467 8
443 9
468 9
444 -10
469 -10
445 +10.new
470 +10.new
446
471
447
472
448 Record beginning
473 Record beginning
449
474
450 $ hg record -d '12 0' -m begin-only plain <<EOF
475 $ hg record -d '12 0' -m begin-only plain <<EOF
451 > y
476 > y
452 > y
477 > y
453 > EOF
478 > EOF
454 diff --git a/plain b/plain
479 diff --git a/plain b/plain
455 1 hunks, 3 lines changed
480 1 hunks, 3 lines changed
456 examine changes to 'plain'? [Ynesfdaq?]
481 examine changes to 'plain'? [Ynesfdaq?] y
482
457 @@ -1,6 +1,3 @@
483 @@ -1,6 +1,3 @@
458 -2
484 -2
459 -2
485 -2
460 -3
486 -3
461 4
487 4
462 5
488 5
463 6
489 6
464 record this change to 'plain'? [Ynesfdaq?]
490 record this change to 'plain'? [Ynesfdaq?] y
491
465
492
466 $ hg tip -p
493 $ hg tip -p
467 changeset: 13:bbd45465d540
494 changeset: 13:bbd45465d540
468 tag: tip
495 tag: tip
469 user: test
496 user: test
470 date: Thu Jan 01 00:00:12 1970 +0000
497 date: Thu Jan 01 00:00:12 1970 +0000
471 summary: begin-only
498 summary: begin-only
472
499
473 diff -r 99337501826f -r bbd45465d540 plain
500 diff -r 99337501826f -r bbd45465d540 plain
474 --- a/plain Thu Jan 01 00:00:11 1970 +0000
501 --- a/plain Thu Jan 01 00:00:11 1970 +0000
475 +++ b/plain Thu Jan 01 00:00:12 1970 +0000
502 +++ b/plain Thu Jan 01 00:00:12 1970 +0000
476 @@ -1,6 +1,3 @@
503 @@ -1,6 +1,3 @@
477 -2
504 -2
478 -2
505 -2
479 -3
506 -3
480 4
507 4
481 5
508 5
482 6
509 6
483
510
484
511
485 Add to beginning, trim from end
512 Add to beginning, trim from end
486
513
487 $ rm plain
514 $ rm plain
488 $ for i in 1 2 3 4 5 6 7 8 9; do
515 $ for i in 1 2 3 4 5 6 7 8 9; do
489 > echo $i >> plain
516 > echo $i >> plain
490 > done
517 > done
491
518
492 Record end
519 Record end
493
520
494 $ hg record --traceback -d '13 0' -m end-again plain<<EOF
521 $ hg record --traceback -d '13 0' -m end-again plain<<EOF
495 > y
522 > y
496 > n
523 > n
497 > y
524 > y
498 > EOF
525 > EOF
499 diff --git a/plain b/plain
526 diff --git a/plain b/plain
500 2 hunks, 4 lines changed
527 2 hunks, 4 lines changed
501 examine changes to 'plain'? [Ynesfdaq?]
528 examine changes to 'plain'? [Ynesfdaq?] y
529
502 @@ -1,6 +1,9 @@
530 @@ -1,6 +1,9 @@
503 +1
531 +1
504 +2
532 +2
505 +3
533 +3
506 4
534 4
507 5
535 5
508 6
536 6
509 7
537 7
510 8
538 8
511 9
539 9
512 record change 1/2 to 'plain'? [Ynesfdaq?]
540 record change 1/2 to 'plain'? [Ynesfdaq?] n
541
513 @@ -1,7 +4,6 @@
542 @@ -1,7 +4,6 @@
514 4
543 4
515 5
544 5
516 6
545 6
517 7
546 7
518 8
547 8
519 9
548 9
520 -10.new
549 -10.new
521 record change 2/2 to 'plain'? [Ynesfdaq?]
550 record change 2/2 to 'plain'? [Ynesfdaq?] y
551
522
552
523 Add to beginning, middle, end
553 Add to beginning, middle, end
524
554
525 $ rm plain
555 $ rm plain
526 $ for i in 1 2 3 4 5 5.new 5.reallynew 6 7 8 9 10 11; do
556 $ for i in 1 2 3 4 5 5.new 5.reallynew 6 7 8 9 10 11; do
527 > echo $i >> plain
557 > echo $i >> plain
528 > done
558 > done
529
559
530 Record beginning, middle
560 Record beginning, middle
531
561
532 $ hg record -d '14 0' -m middle-only plain <<EOF
562 $ hg record -d '14 0' -m middle-only plain <<EOF
533 > y
563 > y
534 > y
564 > y
535 > y
565 > y
536 > n
566 > n
537 > EOF
567 > EOF
538 diff --git a/plain b/plain
568 diff --git a/plain b/plain
539 3 hunks, 7 lines changed
569 3 hunks, 7 lines changed
540 examine changes to 'plain'? [Ynesfdaq?]
570 examine changes to 'plain'? [Ynesfdaq?] y
571
541 @@ -1,2 +1,5 @@
572 @@ -1,2 +1,5 @@
542 +1
573 +1
543 +2
574 +2
544 +3
575 +3
545 4
576 4
546 5
577 5
547 record change 1/3 to 'plain'? [Ynesfdaq?]
578 record change 1/3 to 'plain'? [Ynesfdaq?] y
579
548 @@ -1,6 +4,8 @@
580 @@ -1,6 +4,8 @@
549 4
581 4
550 5
582 5
551 +5.new
583 +5.new
552 +5.reallynew
584 +5.reallynew
553 6
585 6
554 7
586 7
555 8
587 8
556 9
588 9
557 record change 2/3 to 'plain'? [Ynesfdaq?]
589 record change 2/3 to 'plain'? [Ynesfdaq?] y
590
558 @@ -3,4 +8,6 @@
591 @@ -3,4 +8,6 @@
559 6
592 6
560 7
593 7
561 8
594 8
562 9
595 9
563 +10
596 +10
564 +11
597 +11
565 record change 3/3 to 'plain'? [Ynesfdaq?]
598 record change 3/3 to 'plain'? [Ynesfdaq?] n
599
566
600
567 $ hg tip -p
601 $ hg tip -p
568 changeset: 15:f34a7937ec33
602 changeset: 15:f34a7937ec33
569 tag: tip
603 tag: tip
570 user: test
604 user: test
571 date: Thu Jan 01 00:00:14 1970 +0000
605 date: Thu Jan 01 00:00:14 1970 +0000
572 summary: middle-only
606 summary: middle-only
573
607
574 diff -r 82c065d0b850 -r f34a7937ec33 plain
608 diff -r 82c065d0b850 -r f34a7937ec33 plain
575 --- a/plain Thu Jan 01 00:00:13 1970 +0000
609 --- a/plain Thu Jan 01 00:00:13 1970 +0000
576 +++ b/plain Thu Jan 01 00:00:14 1970 +0000
610 +++ b/plain Thu Jan 01 00:00:14 1970 +0000
577 @@ -1,5 +1,10 @@
611 @@ -1,5 +1,10 @@
578 +1
612 +1
579 +2
613 +2
580 +3
614 +3
581 4
615 4
582 5
616 5
583 +5.new
617 +5.new
584 +5.reallynew
618 +5.reallynew
585 6
619 6
586 7
620 7
587 8
621 8
588
622
589
623
590 Record end
624 Record end
591
625
592 $ hg record -d '15 0' -m end-only plain <<EOF
626 $ hg record -d '15 0' -m end-only plain <<EOF
593 > y
627 > y
594 > y
628 > y
595 > EOF
629 > EOF
596 diff --git a/plain b/plain
630 diff --git a/plain b/plain
597 1 hunks, 2 lines changed
631 1 hunks, 2 lines changed
598 examine changes to 'plain'? [Ynesfdaq?]
632 examine changes to 'plain'? [Ynesfdaq?] y
633
599 @@ -9,3 +9,5 @@
634 @@ -9,3 +9,5 @@
600 7
635 7
601 8
636 8
602 9
637 9
603 +10
638 +10
604 +11
639 +11
605 record this change to 'plain'? [Ynesfdaq?]
640 record this change to 'plain'? [Ynesfdaq?] y
641
606
642
607 $ hg tip -p
643 $ hg tip -p
608 changeset: 16:f9900b71a04c
644 changeset: 16:f9900b71a04c
609 tag: tip
645 tag: tip
610 user: test
646 user: test
611 date: Thu Jan 01 00:00:15 1970 +0000
647 date: Thu Jan 01 00:00:15 1970 +0000
612 summary: end-only
648 summary: end-only
613
649
614 diff -r f34a7937ec33 -r f9900b71a04c plain
650 diff -r f34a7937ec33 -r f9900b71a04c plain
615 --- a/plain Thu Jan 01 00:00:14 1970 +0000
651 --- a/plain Thu Jan 01 00:00:14 1970 +0000
616 +++ b/plain Thu Jan 01 00:00:15 1970 +0000
652 +++ b/plain Thu Jan 01 00:00:15 1970 +0000
617 @@ -9,3 +9,5 @@
653 @@ -9,3 +9,5 @@
618 7
654 7
619 8
655 8
620 9
656 9
621 +10
657 +10
622 +11
658 +11
623
659
624
660
625 $ mkdir subdir
661 $ mkdir subdir
626 $ cd subdir
662 $ cd subdir
627 $ echo a > a
663 $ echo a > a
628 $ hg ci -d '16 0' -Amsubdir
664 $ hg ci -d '16 0' -Amsubdir
629 adding subdir/a
665 adding subdir/a
630
666
631 $ echo a >> a
667 $ echo a >> a
632 $ hg record -d '16 0' -m subdir-change a <<EOF
668 $ hg record -d '16 0' -m subdir-change a <<EOF
633 > y
669 > y
634 > y
670 > y
635 > EOF
671 > EOF
636 diff --git a/subdir/a b/subdir/a
672 diff --git a/subdir/a b/subdir/a
637 1 hunks, 1 lines changed
673 1 hunks, 1 lines changed
638 examine changes to 'subdir/a'? [Ynesfdaq?]
674 examine changes to 'subdir/a'? [Ynesfdaq?] y
675
639 @@ -1,1 +1,2 @@
676 @@ -1,1 +1,2 @@
640 a
677 a
641 +a
678 +a
642 record this change to 'subdir/a'? [Ynesfdaq?]
679 record this change to 'subdir/a'? [Ynesfdaq?] y
680
643
681
644 $ hg tip -p
682 $ hg tip -p
645 changeset: 18:61be427a9deb
683 changeset: 18:61be427a9deb
646 tag: tip
684 tag: tip
647 user: test
685 user: test
648 date: Thu Jan 01 00:00:16 1970 +0000
686 date: Thu Jan 01 00:00:16 1970 +0000
649 summary: subdir-change
687 summary: subdir-change
650
688
651 diff -r a7ffae4d61cb -r 61be427a9deb subdir/a
689 diff -r a7ffae4d61cb -r 61be427a9deb subdir/a
652 --- a/subdir/a Thu Jan 01 00:00:16 1970 +0000
690 --- a/subdir/a Thu Jan 01 00:00:16 1970 +0000
653 +++ b/subdir/a Thu Jan 01 00:00:16 1970 +0000
691 +++ b/subdir/a Thu Jan 01 00:00:16 1970 +0000
654 @@ -1,1 +1,2 @@
692 @@ -1,1 +1,2 @@
655 a
693 a
656 +a
694 +a
657
695
658
696
659 $ echo a > f1
697 $ echo a > f1
660 $ echo b > f2
698 $ echo b > f2
661 $ hg add f1 f2
699 $ hg add f1 f2
662
700
663 $ hg ci -mz -d '17 0'
701 $ hg ci -mz -d '17 0'
664
702
665 $ echo a >> f1
703 $ echo a >> f1
666 $ echo b >> f2
704 $ echo b >> f2
667
705
668 Help, quit
706 Help, quit
669
707
670 $ hg record <<EOF
708 $ hg record <<EOF
671 > ?
709 > ?
672 > q
710 > q
673 > EOF
711 > EOF
674 diff --git a/subdir/f1 b/subdir/f1
712 diff --git a/subdir/f1 b/subdir/f1
675 1 hunks, 1 lines changed
713 1 hunks, 1 lines changed
676 examine changes to 'subdir/f1'? [Ynesfdaq?]
714 examine changes to 'subdir/f1'? [Ynesfdaq?] ?
715
677 y - yes, record this change
716 y - yes, record this change
678 n - no, skip this change
717 n - no, skip this change
679 e - edit this change manually
718 e - edit this change manually
680 s - skip remaining changes to this file
719 s - skip remaining changes to this file
681 f - record remaining changes to this file
720 f - record remaining changes to this file
682 d - done, skip remaining changes and files
721 d - done, skip remaining changes and files
683 a - record all changes to all remaining files
722 a - record all changes to all remaining files
684 q - quit, recording no changes
723 q - quit, recording no changes
685 ? - ? (display help)
724 ? - ? (display help)
686 examine changes to 'subdir/f1'? [Ynesfdaq?]
725 examine changes to 'subdir/f1'? [Ynesfdaq?] q
726
687 abort: user quit
727 abort: user quit
688 [255]
728 [255]
689
729
690 Skip
730 Skip
691
731
692 $ hg record <<EOF
732 $ hg record <<EOF
693 > s
733 > s
694 > EOF
734 > EOF
695 diff --git a/subdir/f1 b/subdir/f1
735 diff --git a/subdir/f1 b/subdir/f1
696 1 hunks, 1 lines changed
736 1 hunks, 1 lines changed
697 examine changes to 'subdir/f1'? [Ynesfdaq?]
737 examine changes to 'subdir/f1'? [Ynesfdaq?] s
738
698 diff --git a/subdir/f2 b/subdir/f2
739 diff --git a/subdir/f2 b/subdir/f2
699 1 hunks, 1 lines changed
740 1 hunks, 1 lines changed
700 examine changes to 'subdir/f2'? [Ynesfdaq?] abort: response expected
741 examine changes to 'subdir/f2'? [Ynesfdaq?] abort: response expected
701 [255]
742 [255]
702
743
703 No
744 No
704
745
705 $ hg record <<EOF
746 $ hg record <<EOF
706 > n
747 > n
707 > EOF
748 > EOF
708 diff --git a/subdir/f1 b/subdir/f1
749 diff --git a/subdir/f1 b/subdir/f1
709 1 hunks, 1 lines changed
750 1 hunks, 1 lines changed
710 examine changes to 'subdir/f1'? [Ynesfdaq?]
751 examine changes to 'subdir/f1'? [Ynesfdaq?] n
752
711 diff --git a/subdir/f2 b/subdir/f2
753 diff --git a/subdir/f2 b/subdir/f2
712 1 hunks, 1 lines changed
754 1 hunks, 1 lines changed
713 examine changes to 'subdir/f2'? [Ynesfdaq?] abort: response expected
755 examine changes to 'subdir/f2'? [Ynesfdaq?] abort: response expected
714 [255]
756 [255]
715
757
716 f, quit
758 f, quit
717
759
718 $ hg record <<EOF
760 $ hg record <<EOF
719 > f
761 > f
720 > q
762 > q
721 > EOF
763 > EOF
722 diff --git a/subdir/f1 b/subdir/f1
764 diff --git a/subdir/f1 b/subdir/f1
723 1 hunks, 1 lines changed
765 1 hunks, 1 lines changed
724 examine changes to 'subdir/f1'? [Ynesfdaq?]
766 examine changes to 'subdir/f1'? [Ynesfdaq?] f
767
725 diff --git a/subdir/f2 b/subdir/f2
768 diff --git a/subdir/f2 b/subdir/f2
726 1 hunks, 1 lines changed
769 1 hunks, 1 lines changed
727 examine changes to 'subdir/f2'? [Ynesfdaq?]
770 examine changes to 'subdir/f2'? [Ynesfdaq?] q
771
728 abort: user quit
772 abort: user quit
729 [255]
773 [255]
730
774
731 s, all
775 s, all
732
776
733 $ hg record -d '18 0' -mx <<EOF
777 $ hg record -d '18 0' -mx <<EOF
734 > s
778 > s
735 > a
779 > a
736 > EOF
780 > EOF
737 diff --git a/subdir/f1 b/subdir/f1
781 diff --git a/subdir/f1 b/subdir/f1
738 1 hunks, 1 lines changed
782 1 hunks, 1 lines changed
739 examine changes to 'subdir/f1'? [Ynesfdaq?]
783 examine changes to 'subdir/f1'? [Ynesfdaq?] s
784
740 diff --git a/subdir/f2 b/subdir/f2
785 diff --git a/subdir/f2 b/subdir/f2
741 1 hunks, 1 lines changed
786 1 hunks, 1 lines changed
742 examine changes to 'subdir/f2'? [Ynesfdaq?]
787 examine changes to 'subdir/f2'? [Ynesfdaq?] a
788
743
789
744 $ hg tip -p
790 $ hg tip -p
745 changeset: 20:b3df3dda369a
791 changeset: 20:b3df3dda369a
746 tag: tip
792 tag: tip
747 user: test
793 user: test
748 date: Thu Jan 01 00:00:18 1970 +0000
794 date: Thu Jan 01 00:00:18 1970 +0000
749 summary: x
795 summary: x
750
796
751 diff -r 6e02d6c9906d -r b3df3dda369a subdir/f2
797 diff -r 6e02d6c9906d -r b3df3dda369a subdir/f2
752 --- a/subdir/f2 Thu Jan 01 00:00:17 1970 +0000
798 --- a/subdir/f2 Thu Jan 01 00:00:17 1970 +0000
753 +++ b/subdir/f2 Thu Jan 01 00:00:18 1970 +0000
799 +++ b/subdir/f2 Thu Jan 01 00:00:18 1970 +0000
754 @@ -1,1 +1,2 @@
800 @@ -1,1 +1,2 @@
755 b
801 b
756 +b
802 +b
757
803
758
804
759 f
805 f
760
806
761 $ hg record -d '19 0' -my <<EOF
807 $ hg record -d '19 0' -my <<EOF
762 > f
808 > f
763 > EOF
809 > EOF
764 diff --git a/subdir/f1 b/subdir/f1
810 diff --git a/subdir/f1 b/subdir/f1
765 1 hunks, 1 lines changed
811 1 hunks, 1 lines changed
766 examine changes to 'subdir/f1'? [Ynesfdaq?]
812 examine changes to 'subdir/f1'? [Ynesfdaq?] f
813
767
814
768 $ hg tip -p
815 $ hg tip -p
769 changeset: 21:38ec577f126b
816 changeset: 21:38ec577f126b
770 tag: tip
817 tag: tip
771 user: test
818 user: test
772 date: Thu Jan 01 00:00:19 1970 +0000
819 date: Thu Jan 01 00:00:19 1970 +0000
773 summary: y
820 summary: y
774
821
775 diff -r b3df3dda369a -r 38ec577f126b subdir/f1
822 diff -r b3df3dda369a -r 38ec577f126b subdir/f1
776 --- a/subdir/f1 Thu Jan 01 00:00:18 1970 +0000
823 --- a/subdir/f1 Thu Jan 01 00:00:18 1970 +0000
777 +++ b/subdir/f1 Thu Jan 01 00:00:19 1970 +0000
824 +++ b/subdir/f1 Thu Jan 01 00:00:19 1970 +0000
778 @@ -1,1 +1,2 @@
825 @@ -1,1 +1,2 @@
779 a
826 a
780 +a
827 +a
781
828
782
829
783 #if execbit
830 #if execbit
784
831
785 Preserve chmod +x
832 Preserve chmod +x
786
833
787 $ chmod +x f1
834 $ chmod +x f1
788 $ echo a >> f1
835 $ echo a >> f1
789 $ hg record -d '20 0' -mz <<EOF
836 $ hg record -d '20 0' -mz <<EOF
790 > y
837 > y
791 > y
838 > y
792 > y
839 > y
793 > EOF
840 > EOF
794 diff --git a/subdir/f1 b/subdir/f1
841 diff --git a/subdir/f1 b/subdir/f1
795 old mode 100644
842 old mode 100644
796 new mode 100755
843 new mode 100755
797 1 hunks, 1 lines changed
844 1 hunks, 1 lines changed
798 examine changes to 'subdir/f1'? [Ynesfdaq?]
845 examine changes to 'subdir/f1'? [Ynesfdaq?] y
846
799 @@ -1,2 +1,3 @@
847 @@ -1,2 +1,3 @@
800 a
848 a
801 a
849 a
802 +a
850 +a
803 record this change to 'subdir/f1'? [Ynesfdaq?]
851 record this change to 'subdir/f1'? [Ynesfdaq?] y
852
804
853
805 $ hg tip --config diff.git=True -p
854 $ hg tip --config diff.git=True -p
806 changeset: 22:3261adceb075
855 changeset: 22:3261adceb075
807 tag: tip
856 tag: tip
808 user: test
857 user: test
809 date: Thu Jan 01 00:00:20 1970 +0000
858 date: Thu Jan 01 00:00:20 1970 +0000
810 summary: z
859 summary: z
811
860
812 diff --git a/subdir/f1 b/subdir/f1
861 diff --git a/subdir/f1 b/subdir/f1
813 old mode 100644
862 old mode 100644
814 new mode 100755
863 new mode 100755
815 --- a/subdir/f1
864 --- a/subdir/f1
816 +++ b/subdir/f1
865 +++ b/subdir/f1
817 @@ -1,2 +1,3 @@
866 @@ -1,2 +1,3 @@
818 a
867 a
819 a
868 a
820 +a
869 +a
821
870
822
871
823 Preserve execute permission on original
872 Preserve execute permission on original
824
873
825 $ echo b >> f1
874 $ echo b >> f1
826 $ hg record -d '21 0' -maa <<EOF
875 $ hg record -d '21 0' -maa <<EOF
827 > y
876 > y
828 > y
877 > y
829 > y
878 > y
830 > EOF
879 > EOF
831 diff --git a/subdir/f1 b/subdir/f1
880 diff --git a/subdir/f1 b/subdir/f1
832 1 hunks, 1 lines changed
881 1 hunks, 1 lines changed
833 examine changes to 'subdir/f1'? [Ynesfdaq?]
882 examine changes to 'subdir/f1'? [Ynesfdaq?] y
883
834 @@ -1,3 +1,4 @@
884 @@ -1,3 +1,4 @@
835 a
885 a
836 a
886 a
837 a
887 a
838 +b
888 +b
839 record this change to 'subdir/f1'? [Ynesfdaq?]
889 record this change to 'subdir/f1'? [Ynesfdaq?] y
890
840
891
841 $ hg tip --config diff.git=True -p
892 $ hg tip --config diff.git=True -p
842 changeset: 23:b429867550db
893 changeset: 23:b429867550db
843 tag: tip
894 tag: tip
844 user: test
895 user: test
845 date: Thu Jan 01 00:00:21 1970 +0000
896 date: Thu Jan 01 00:00:21 1970 +0000
846 summary: aa
897 summary: aa
847
898
848 diff --git a/subdir/f1 b/subdir/f1
899 diff --git a/subdir/f1 b/subdir/f1
849 --- a/subdir/f1
900 --- a/subdir/f1
850 +++ b/subdir/f1
901 +++ b/subdir/f1
851 @@ -1,3 +1,4 @@
902 @@ -1,3 +1,4 @@
852 a
903 a
853 a
904 a
854 a
905 a
855 +b
906 +b
856
907
857
908
858 Preserve chmod -x
909 Preserve chmod -x
859
910
860 $ chmod -x f1
911 $ chmod -x f1
861 $ echo c >> f1
912 $ echo c >> f1
862 $ hg record -d '22 0' -mab <<EOF
913 $ hg record -d '22 0' -mab <<EOF
863 > y
914 > y
864 > y
915 > y
865 > y
916 > y
866 > EOF
917 > EOF
867 diff --git a/subdir/f1 b/subdir/f1
918 diff --git a/subdir/f1 b/subdir/f1
868 old mode 100755
919 old mode 100755
869 new mode 100644
920 new mode 100644
870 1 hunks, 1 lines changed
921 1 hunks, 1 lines changed
871 examine changes to 'subdir/f1'? [Ynesfdaq?]
922 examine changes to 'subdir/f1'? [Ynesfdaq?] y
923
872 @@ -2,3 +2,4 @@
924 @@ -2,3 +2,4 @@
873 a
925 a
874 a
926 a
875 b
927 b
876 +c
928 +c
877 record this change to 'subdir/f1'? [Ynesfdaq?]
929 record this change to 'subdir/f1'? [Ynesfdaq?] y
930
878
931
879 $ hg tip --config diff.git=True -p
932 $ hg tip --config diff.git=True -p
880 changeset: 24:0b082130c20a
933 changeset: 24:0b082130c20a
881 tag: tip
934 tag: tip
882 user: test
935 user: test
883 date: Thu Jan 01 00:00:22 1970 +0000
936 date: Thu Jan 01 00:00:22 1970 +0000
884 summary: ab
937 summary: ab
885
938
886 diff --git a/subdir/f1 b/subdir/f1
939 diff --git a/subdir/f1 b/subdir/f1
887 old mode 100755
940 old mode 100755
888 new mode 100644
941 new mode 100644
889 --- a/subdir/f1
942 --- a/subdir/f1
890 +++ b/subdir/f1
943 +++ b/subdir/f1
891 @@ -2,3 +2,4 @@
944 @@ -2,3 +2,4 @@
892 a
945 a
893 a
946 a
894 b
947 b
895 +c
948 +c
896
949
897
950
898 #else
951 #else
899
952
900 Slightly bogus tests to get almost same repo structure as when x bit is used
953 Slightly bogus tests to get almost same repo structure as when x bit is used
901 - but with different hashes.
954 - but with different hashes.
902
955
903 Mock "Preserve chmod +x"
956 Mock "Preserve chmod +x"
904
957
905 $ echo a >> f1
958 $ echo a >> f1
906 $ hg record -d '20 0' -mz <<EOF
959 $ hg record -d '20 0' -mz <<EOF
907 > y
960 > y
908 > y
961 > y
909 > y
962 > y
910 > EOF
963 > EOF
911 diff --git a/subdir/f1 b/subdir/f1
964 diff --git a/subdir/f1 b/subdir/f1
912 1 hunks, 1 lines changed
965 1 hunks, 1 lines changed
913 examine changes to 'subdir/f1'? [Ynesfdaq?]
966 examine changes to 'subdir/f1'? [Ynesfdaq?]
914 @@ -1,2 +1,3 @@
967 @@ -1,2 +1,3 @@
915 a
968 a
916 a
969 a
917 +a
970 +a
918 record this change to 'subdir/f1'? [Ynesfdaq?]
971 record this change to 'subdir/f1'? [Ynesfdaq?]
919
972
920 $ hg tip --config diff.git=True -p
973 $ hg tip --config diff.git=True -p
921 changeset: 22:0d463bd428f5
974 changeset: 22:0d463bd428f5
922 tag: tip
975 tag: tip
923 user: test
976 user: test
924 date: Thu Jan 01 00:00:20 1970 +0000
977 date: Thu Jan 01 00:00:20 1970 +0000
925 summary: z
978 summary: z
926
979
927 diff --git a/subdir/f1 b/subdir/f1
980 diff --git a/subdir/f1 b/subdir/f1
928 --- a/subdir/f1
981 --- a/subdir/f1
929 +++ b/subdir/f1
982 +++ b/subdir/f1
930 @@ -1,2 +1,3 @@
983 @@ -1,2 +1,3 @@
931 a
984 a
932 a
985 a
933 +a
986 +a
934
987
935
988
936 Mock "Preserve execute permission on original"
989 Mock "Preserve execute permission on original"
937
990
938 $ echo b >> f1
991 $ echo b >> f1
939 $ hg record -d '21 0' -maa <<EOF
992 $ hg record -d '21 0' -maa <<EOF
940 > y
993 > y
941 > y
994 > y
942 > y
995 > y
943 > EOF
996 > EOF
944 diff --git a/subdir/f1 b/subdir/f1
997 diff --git a/subdir/f1 b/subdir/f1
945 1 hunks, 1 lines changed
998 1 hunks, 1 lines changed
946 examine changes to 'subdir/f1'? [Ynesfdaq?]
999 examine changes to 'subdir/f1'? [Ynesfdaq?]
947 @@ -1,3 +1,4 @@
1000 @@ -1,3 +1,4 @@
948 a
1001 a
949 a
1002 a
950 a
1003 a
951 +b
1004 +b
952 record this change to 'subdir/f1'? [Ynesfdaq?]
1005 record this change to 'subdir/f1'? [Ynesfdaq?]
953
1006
954 $ hg tip --config diff.git=True -p
1007 $ hg tip --config diff.git=True -p
955 changeset: 23:0eab41a3e524
1008 changeset: 23:0eab41a3e524
956 tag: tip
1009 tag: tip
957 user: test
1010 user: test
958 date: Thu Jan 01 00:00:21 1970 +0000
1011 date: Thu Jan 01 00:00:21 1970 +0000
959 summary: aa
1012 summary: aa
960
1013
961 diff --git a/subdir/f1 b/subdir/f1
1014 diff --git a/subdir/f1 b/subdir/f1
962 --- a/subdir/f1
1015 --- a/subdir/f1
963 +++ b/subdir/f1
1016 +++ b/subdir/f1
964 @@ -1,3 +1,4 @@
1017 @@ -1,3 +1,4 @@
965 a
1018 a
966 a
1019 a
967 a
1020 a
968 +b
1021 +b
969
1022
970
1023
971 Mock "Preserve chmod -x"
1024 Mock "Preserve chmod -x"
972
1025
973 $ chmod -x f1
1026 $ chmod -x f1
974 $ echo c >> f1
1027 $ echo c >> f1
975 $ hg record -d '22 0' -mab <<EOF
1028 $ hg record -d '22 0' -mab <<EOF
976 > y
1029 > y
977 > y
1030 > y
978 > y
1031 > y
979 > EOF
1032 > EOF
980 diff --git a/subdir/f1 b/subdir/f1
1033 diff --git a/subdir/f1 b/subdir/f1
981 1 hunks, 1 lines changed
1034 1 hunks, 1 lines changed
982 examine changes to 'subdir/f1'? [Ynesfdaq?]
1035 examine changes to 'subdir/f1'? [Ynesfdaq?]
983 @@ -2,3 +2,4 @@
1036 @@ -2,3 +2,4 @@
984 a
1037 a
985 a
1038 a
986 b
1039 b
987 +c
1040 +c
988 record this change to 'subdir/f1'? [Ynesfdaq?]
1041 record this change to 'subdir/f1'? [Ynesfdaq?]
989
1042
990 $ hg tip --config diff.git=True -p
1043 $ hg tip --config diff.git=True -p
991 changeset: 24:f4f718f27b7c
1044 changeset: 24:f4f718f27b7c
992 tag: tip
1045 tag: tip
993 user: test
1046 user: test
994 date: Thu Jan 01 00:00:22 1970 +0000
1047 date: Thu Jan 01 00:00:22 1970 +0000
995 summary: ab
1048 summary: ab
996
1049
997 diff --git a/subdir/f1 b/subdir/f1
1050 diff --git a/subdir/f1 b/subdir/f1
998 --- a/subdir/f1
1051 --- a/subdir/f1
999 +++ b/subdir/f1
1052 +++ b/subdir/f1
1000 @@ -2,3 +2,4 @@
1053 @@ -2,3 +2,4 @@
1001 a
1054 a
1002 a
1055 a
1003 b
1056 b
1004 +c
1057 +c
1005
1058
1006
1059
1007 #endif
1060 #endif
1008
1061
1009 $ cd ..
1062 $ cd ..
1010
1063
1011
1064
1012 Abort early when a merge is in progress
1065 Abort early when a merge is in progress
1013
1066
1014 $ hg up 4
1067 $ hg up 4
1015 1 files updated, 0 files merged, 6 files removed, 0 files unresolved
1068 1 files updated, 0 files merged, 6 files removed, 0 files unresolved
1016
1069
1017 $ touch iwillmergethat
1070 $ touch iwillmergethat
1018 $ hg add iwillmergethat
1071 $ hg add iwillmergethat
1019
1072
1020 $ hg branch thatbranch
1073 $ hg branch thatbranch
1021 marked working directory as branch thatbranch
1074 marked working directory as branch thatbranch
1022 (branches are permanent and global, did you want a bookmark?)
1075 (branches are permanent and global, did you want a bookmark?)
1023
1076
1024 $ hg ci -m'new head'
1077 $ hg ci -m'new head'
1025
1078
1026 $ hg up default
1079 $ hg up default
1027 6 files updated, 0 files merged, 2 files removed, 0 files unresolved
1080 6 files updated, 0 files merged, 2 files removed, 0 files unresolved
1028
1081
1029 $ hg merge thatbranch
1082 $ hg merge thatbranch
1030 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1083 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1031 (branch merge, don't forget to commit)
1084 (branch merge, don't forget to commit)
1032
1085
1033 $ hg record -m'will abort'
1086 $ hg record -m'will abort'
1034 abort: cannot partially commit a merge (use "hg commit" instead)
1087 abort: cannot partially commit a merge (use "hg commit" instead)
1035 [255]
1088 [255]
1036
1089
1037 $ hg up -C
1090 $ hg up -C
1038 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1091 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1039
1092
1040 Editing patch (and ignoring trailing text)
1093 Editing patch (and ignoring trailing text)
1041
1094
1042 $ cat > editor.sh << '__EOF__'
1095 $ cat > editor.sh << '__EOF__'
1043 > sed -e 7d -e '5s/^-/ /' -e '/^# ---/i\
1096 > sed -e 7d -e '5s/^-/ /' -e '/^# ---/i\
1044 > trailing\nditto' "$1" > tmp
1097 > trailing\nditto' "$1" > tmp
1045 > mv tmp "$1"
1098 > mv tmp "$1"
1046 > __EOF__
1099 > __EOF__
1047 $ cat > editedfile << '__EOF__'
1100 $ cat > editedfile << '__EOF__'
1048 > This is the first line
1101 > This is the first line
1049 > This is the second line
1102 > This is the second line
1050 > This is the third line
1103 > This is the third line
1051 > __EOF__
1104 > __EOF__
1052 $ hg add editedfile
1105 $ hg add editedfile
1053 $ hg commit -medit-patch-1
1106 $ hg commit -medit-patch-1
1054 $ cat > editedfile << '__EOF__'
1107 $ cat > editedfile << '__EOF__'
1055 > This line has changed
1108 > This line has changed
1056 > This change will be committed
1109 > This change will be committed
1057 > This is the third line
1110 > This is the third line
1058 > __EOF__
1111 > __EOF__
1059 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record -d '23 0' -medit-patch-2 <<EOF
1112 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record -d '23 0' -medit-patch-2 <<EOF
1060 > y
1113 > y
1061 > e
1114 > e
1062 > EOF
1115 > EOF
1063 diff --git a/editedfile b/editedfile
1116 diff --git a/editedfile b/editedfile
1064 1 hunks, 2 lines changed
1117 1 hunks, 2 lines changed
1065 examine changes to 'editedfile'? [Ynesfdaq?]
1118 examine changes to 'editedfile'? [Ynesfdaq?] y
1119
1066 @@ -1,3 +1,3 @@
1120 @@ -1,3 +1,3 @@
1067 -This is the first line
1121 -This is the first line
1068 -This is the second line
1122 -This is the second line
1069 +This line has changed
1123 +This line has changed
1070 +This change will be committed
1124 +This change will be committed
1071 This is the third line
1125 This is the third line
1072 record this change to 'editedfile'? [Ynesfdaq?]
1126 record this change to 'editedfile'? [Ynesfdaq?] e
1127
1073 $ cat editedfile
1128 $ cat editedfile
1074 This line has changed
1129 This line has changed
1075 This change will be committed
1130 This change will be committed
1076 This is the third line
1131 This is the third line
1077 $ hg cat -r tip editedfile
1132 $ hg cat -r tip editedfile
1078 This is the first line
1133 This is the first line
1079 This change will be committed
1134 This change will be committed
1080 This is the third line
1135 This is the third line
1081 $ hg revert editedfile
1136 $ hg revert editedfile
1082
1137
1083 Trying to edit patch for whole file
1138 Trying to edit patch for whole file
1084
1139
1085 $ echo "This is the fourth line" >> editedfile
1140 $ echo "This is the fourth line" >> editedfile
1086 $ hg record <<EOF
1141 $ hg record <<EOF
1087 > e
1142 > e
1088 > q
1143 > q
1089 > EOF
1144 > EOF
1090 diff --git a/editedfile b/editedfile
1145 diff --git a/editedfile b/editedfile
1091 1 hunks, 1 lines changed
1146 1 hunks, 1 lines changed
1092 examine changes to 'editedfile'? [Ynesfdaq?]
1147 examine changes to 'editedfile'? [Ynesfdaq?] e
1148
1093 cannot edit patch for whole file
1149 cannot edit patch for whole file
1094 examine changes to 'editedfile'? [Ynesfdaq?]
1150 examine changes to 'editedfile'? [Ynesfdaq?] q
1151
1095 abort: user quit
1152 abort: user quit
1096 [255]
1153 [255]
1097 $ hg revert editedfile
1154 $ hg revert editedfile
1098
1155
1099 Removing changes from patch
1156 Removing changes from patch
1100
1157
1101 $ sed -e '3s/third/second/' -e '2s/will/will not/' -e 1d editedfile > tmp
1158 $ sed -e '3s/third/second/' -e '2s/will/will not/' -e 1d editedfile > tmp
1102 $ mv tmp editedfile
1159 $ mv tmp editedfile
1103 $ echo "This line has been added" >> editedfile
1160 $ echo "This line has been added" >> editedfile
1104 $ cat > editor.sh << '__EOF__'
1161 $ cat > editor.sh << '__EOF__'
1105 > sed -e 's/^[-+]/ /' "$1" > tmp
1162 > sed -e 's/^[-+]/ /' "$1" > tmp
1106 > mv tmp "$1"
1163 > mv tmp "$1"
1107 > __EOF__
1164 > __EOF__
1108 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF
1165 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF
1109 > y
1166 > y
1110 > e
1167 > e
1111 > EOF
1168 > EOF
1112 diff --git a/editedfile b/editedfile
1169 diff --git a/editedfile b/editedfile
1113 1 hunks, 3 lines changed
1170 1 hunks, 3 lines changed
1114 examine changes to 'editedfile'? [Ynesfdaq?]
1171 examine changes to 'editedfile'? [Ynesfdaq?] y
1172
1115 @@ -1,3 +1,3 @@
1173 @@ -1,3 +1,3 @@
1116 -This is the first line
1174 -This is the first line
1117 -This change will be committed
1175 -This change will be committed
1118 -This is the third line
1176 -This is the third line
1119 +This change will not be committed
1177 +This change will not be committed
1120 +This is the second line
1178 +This is the second line
1121 +This line has been added
1179 +This line has been added
1122 record this change to 'editedfile'? [Ynesfdaq?]
1180 record this change to 'editedfile'? [Ynesfdaq?] e
1181
1123 no changes to record
1182 no changes to record
1124 $ cat editedfile
1183 $ cat editedfile
1125 This change will not be committed
1184 This change will not be committed
1126 This is the second line
1185 This is the second line
1127 This line has been added
1186 This line has been added
1128 $ hg cat -r tip editedfile
1187 $ hg cat -r tip editedfile
1129 This is the first line
1188 This is the first line
1130 This change will be committed
1189 This change will be committed
1131 This is the third line
1190 This is the third line
1132 $ hg revert editedfile
1191 $ hg revert editedfile
1133
1192
1134 Invalid patch
1193 Invalid patch
1135
1194
1136 $ sed -e '3s/third/second/' -e '2s/will/will not/' -e 1d editedfile > tmp
1195 $ sed -e '3s/third/second/' -e '2s/will/will not/' -e 1d editedfile > tmp
1137 $ mv tmp editedfile
1196 $ mv tmp editedfile
1138 $ echo "This line has been added" >> editedfile
1197 $ echo "This line has been added" >> editedfile
1139 $ cat > editor.sh << '__EOF__'
1198 $ cat > editor.sh << '__EOF__'
1140 > sed s/This/That/ "$1" > tmp
1199 > sed s/This/That/ "$1" > tmp
1141 > mv tmp "$1"
1200 > mv tmp "$1"
1142 > __EOF__
1201 > __EOF__
1143 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF
1202 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF
1144 > y
1203 > y
1145 > e
1204 > e
1146 > EOF
1205 > EOF
1147 diff --git a/editedfile b/editedfile
1206 diff --git a/editedfile b/editedfile
1148 1 hunks, 3 lines changed
1207 1 hunks, 3 lines changed
1149 examine changes to 'editedfile'? [Ynesfdaq?]
1208 examine changes to 'editedfile'? [Ynesfdaq?] y
1209
1150 @@ -1,3 +1,3 @@
1210 @@ -1,3 +1,3 @@
1151 -This is the first line
1211 -This is the first line
1152 -This change will be committed
1212 -This change will be committed
1153 -This is the third line
1213 -This is the third line
1154 +This change will not be committed
1214 +This change will not be committed
1155 +This is the second line
1215 +This is the second line
1156 +This line has been added
1216 +This line has been added
1157 record this change to 'editedfile'? [Ynesfdaq?]
1217 record this change to 'editedfile'? [Ynesfdaq?] e
1218
1158 patching file editedfile
1219 patching file editedfile
1159 Hunk #1 FAILED at 0
1220 Hunk #1 FAILED at 0
1160 1 out of 1 hunks FAILED -- saving rejects to file editedfile.rej
1221 1 out of 1 hunks FAILED -- saving rejects to file editedfile.rej
1161 abort: patch failed to apply
1222 abort: patch failed to apply
1162 [255]
1223 [255]
1163 $ cat editedfile
1224 $ cat editedfile
1164 This change will not be committed
1225 This change will not be committed
1165 This is the second line
1226 This is the second line
1166 This line has been added
1227 This line has been added
1167 $ hg cat -r tip editedfile
1228 $ hg cat -r tip editedfile
1168 This is the first line
1229 This is the first line
1169 This change will be committed
1230 This change will be committed
1170 This is the third line
1231 This is the third line
1171 $ cat editedfile.rej
1232 $ cat editedfile.rej
1172 --- editedfile
1233 --- editedfile
1173 +++ editedfile
1234 +++ editedfile
1174 @@ -1,3 +1,3 @@
1235 @@ -1,3 +1,3 @@
1175 -That is the first line
1236 -That is the first line
1176 -That change will be committed
1237 -That change will be committed
1177 -That is the third line
1238 -That is the third line
1178 +That change will not be committed
1239 +That change will not be committed
1179 +That is the second line
1240 +That is the second line
1180 +That line has been added
1241 +That line has been added
1181
1242
1182 Malformed patch - error handling
1243 Malformed patch - error handling
1183
1244
1184 $ cat > editor.sh << '__EOF__'
1245 $ cat > editor.sh << '__EOF__'
1185 > sed -e '/^@/p' "$1" > tmp
1246 > sed -e '/^@/p' "$1" > tmp
1186 > mv tmp "$1"
1247 > mv tmp "$1"
1187 > __EOF__
1248 > __EOF__
1188 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF
1249 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF
1189 > y
1250 > y
1190 > e
1251 > e
1191 > EOF
1252 > EOF
1192 diff --git a/editedfile b/editedfile
1253 diff --git a/editedfile b/editedfile
1193 1 hunks, 3 lines changed
1254 1 hunks, 3 lines changed
1194 examine changes to 'editedfile'? [Ynesfdaq?]
1255 examine changes to 'editedfile'? [Ynesfdaq?] y
1256
1195 @@ -1,3 +1,3 @@
1257 @@ -1,3 +1,3 @@
1196 -This is the first line
1258 -This is the first line
1197 -This change will be committed
1259 -This change will be committed
1198 -This is the third line
1260 -This is the third line
1199 +This change will not be committed
1261 +This change will not be committed
1200 +This is the second line
1262 +This is the second line
1201 +This line has been added
1263 +This line has been added
1202 record this change to 'editedfile'? [Ynesfdaq?]
1264 record this change to 'editedfile'? [Ynesfdaq?] e
1265
1203 abort: error parsing patch: unhandled transition: range -> range
1266 abort: error parsing patch: unhandled transition: range -> range
1204 [255]
1267 [255]
1205
1268
1206 random text in random positions is still an error
1269 random text in random positions is still an error
1207
1270
1208 $ cat > editor.sh << '__EOF__'
1271 $ cat > editor.sh << '__EOF__'
1209 > sed -e '/^@/i\
1272 > sed -e '/^@/i\
1210 > other' "$1" > tmp
1273 > other' "$1" > tmp
1211 > mv tmp "$1"
1274 > mv tmp "$1"
1212 > __EOF__
1275 > __EOF__
1213 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF
1276 $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF
1214 > y
1277 > y
1215 > e
1278 > e
1216 > EOF
1279 > EOF
1217 diff --git a/editedfile b/editedfile
1280 diff --git a/editedfile b/editedfile
1218 1 hunks, 3 lines changed
1281 1 hunks, 3 lines changed
1219 examine changes to 'editedfile'? [Ynesfdaq?]
1282 examine changes to 'editedfile'? [Ynesfdaq?] y
1283
1220 @@ -1,3 +1,3 @@
1284 @@ -1,3 +1,3 @@
1221 -This is the first line
1285 -This is the first line
1222 -This change will be committed
1286 -This change will be committed
1223 -This is the third line
1287 -This is the third line
1224 +This change will not be committed
1288 +This change will not be committed
1225 +This is the second line
1289 +This is the second line
1226 +This line has been added
1290 +This line has been added
1227 record this change to 'editedfile'? [Ynesfdaq?]
1291 record this change to 'editedfile'? [Ynesfdaq?] e
1292
1228 abort: error parsing patch: unhandled transition: file -> other
1293 abort: error parsing patch: unhandled transition: file -> other
1229 [255]
1294 [255]
1230
1295
1231 $ hg up -C
1296 $ hg up -C
1232 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1297 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1233
1298
1234 With win32text
1299 With win32text
1235
1300
1236 $ echo '[extensions]' >> .hg/hgrc
1301 $ echo '[extensions]' >> .hg/hgrc
1237 $ echo 'win32text = ' >> .hg/hgrc
1302 $ echo 'win32text = ' >> .hg/hgrc
1238 $ echo '[decode]' >> .hg/hgrc
1303 $ echo '[decode]' >> .hg/hgrc
1239 $ echo '** = cleverdecode:' >> .hg/hgrc
1304 $ echo '** = cleverdecode:' >> .hg/hgrc
1240 $ echo '[encode]' >> .hg/hgrc
1305 $ echo '[encode]' >> .hg/hgrc
1241 $ echo '** = cleverencode:' >> .hg/hgrc
1306 $ echo '** = cleverencode:' >> .hg/hgrc
1242 $ echo '[patch]' >> .hg/hgrc
1307 $ echo '[patch]' >> .hg/hgrc
1243 $ echo 'eol = crlf' >> .hg/hgrc
1308 $ echo 'eol = crlf' >> .hg/hgrc
1244
1309
1245 Ignore win32text deprecation warning for now:
1310 Ignore win32text deprecation warning for now:
1246
1311
1247 $ echo '[win32text]' >> .hg/hgrc
1312 $ echo '[win32text]' >> .hg/hgrc
1248 $ echo 'warn = no' >> .hg/hgrc
1313 $ echo 'warn = no' >> .hg/hgrc
1249
1314
1250 $ echo d >> subdir/f1
1315 $ echo d >> subdir/f1
1251 $ hg record -d '24 0' -mw1 <<EOF
1316 $ hg record -d '24 0' -mw1 <<EOF
1252 > y
1317 > y
1253 > y
1318 > y
1254 > EOF
1319 > EOF
1255 diff --git a/subdir/f1 b/subdir/f1
1320 diff --git a/subdir/f1 b/subdir/f1
1256 1 hunks, 1 lines changed
1321 1 hunks, 1 lines changed
1257 examine changes to 'subdir/f1'? [Ynesfdaq?]
1322 examine changes to 'subdir/f1'? [Ynesfdaq?] y
1323
1258 @@ -3,3 +3,4 @@
1324 @@ -3,3 +3,4 @@
1259 a
1325 a
1260 b
1326 b
1261 c
1327 c
1262 +d
1328 +d
1263 record this change to 'subdir/f1'? [Ynesfdaq?]
1329 record this change to 'subdir/f1'? [Ynesfdaq?] y
1330
1264
1331
1265 $ hg tip -p
1332 $ hg tip -p
1266 changeset: 28:* (glob)
1333 changeset: 28:* (glob)
1267 tag: tip
1334 tag: tip
1268 user: test
1335 user: test
1269 date: Thu Jan 01 00:00:24 1970 +0000
1336 date: Thu Jan 01 00:00:24 1970 +0000
1270 summary: w1
1337 summary: w1
1271
1338
1272 diff -r ???????????? -r ???????????? subdir/f1 (glob)
1339 diff -r ???????????? -r ???????????? subdir/f1 (glob)
1273 --- a/subdir/f1 Thu Jan 01 00:00:23 1970 +0000
1340 --- a/subdir/f1 Thu Jan 01 00:00:23 1970 +0000
1274 +++ b/subdir/f1 Thu Jan 01 00:00:24 1970 +0000
1341 +++ b/subdir/f1 Thu Jan 01 00:00:24 1970 +0000
1275 @@ -3,3 +3,4 @@
1342 @@ -3,3 +3,4 @@
1276 a
1343 a
1277 b
1344 b
1278 c
1345 c
1279 +d
1346 +d
1280
1347
1281 Test --user when ui.username not set
1348 Test --user when ui.username not set
1282 $ unset HGUSER
1349 $ unset HGUSER
1283 $ echo e >> subdir/f1
1350 $ echo e >> subdir/f1
1284 $ hg record --config ui.username= -d '8 0' --user xyz -m "user flag" <<EOF
1351 $ hg record --config ui.username= -d '8 0' --user xyz -m "user flag" <<EOF
1285 > y
1352 > y
1286 > y
1353 > y
1287 > EOF
1354 > EOF
1288 diff --git a/subdir/f1 b/subdir/f1
1355 diff --git a/subdir/f1 b/subdir/f1
1289 1 hunks, 1 lines changed
1356 1 hunks, 1 lines changed
1290 examine changes to 'subdir/f1'? [Ynesfdaq?]
1357 examine changes to 'subdir/f1'? [Ynesfdaq?] y
1358
1291 @@ -4,3 +4,4 @@
1359 @@ -4,3 +4,4 @@
1292 b
1360 b
1293 c
1361 c
1294 d
1362 d
1295 +e
1363 +e
1296 record this change to 'subdir/f1'? [Ynesfdaq?]
1364 record this change to 'subdir/f1'? [Ynesfdaq?] y
1365
1297 $ hg log --template '{author}\n' -l 1
1366 $ hg log --template '{author}\n' -l 1
1298 xyz
1367 xyz
1299 $ HGUSER="test"
1368 $ HGUSER="test"
1300 $ export HGUSER
1369 $ export HGUSER
1301
1370
1302 $ cd ..
1371 $ cd ..
@@ -1,763 +1,771 b''
1 #require killdaemons
1 #require killdaemons
2
2
3 $ cat <<EOF >> $HGRCPATH
3 $ cat <<EOF >> $HGRCPATH
4 > [extensions]
4 > [extensions]
5 > transplant=
5 > transplant=
6 > EOF
6 > EOF
7
7
8 $ hg init t
8 $ hg init t
9 $ cd t
9 $ cd t
10 $ echo r1 > r1
10 $ echo r1 > r1
11 $ hg ci -Amr1 -d'0 0'
11 $ hg ci -Amr1 -d'0 0'
12 adding r1
12 adding r1
13 $ echo r2 > r2
13 $ echo r2 > r2
14 $ hg ci -Amr2 -d'1 0'
14 $ hg ci -Amr2 -d'1 0'
15 adding r2
15 adding r2
16 $ hg up 0
16 $ hg up 0
17 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
17 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
18
18
19 $ echo b1 > b1
19 $ echo b1 > b1
20 $ hg ci -Amb1 -d '0 0'
20 $ hg ci -Amb1 -d '0 0'
21 adding b1
21 adding b1
22 created new head
22 created new head
23 $ echo b2 > b2
23 $ echo b2 > b2
24 $ hg ci -Amb2 -d '1 0'
24 $ hg ci -Amb2 -d '1 0'
25 adding b2
25 adding b2
26 $ echo b3 > b3
26 $ echo b3 > b3
27 $ hg ci -Amb3 -d '2 0'
27 $ hg ci -Amb3 -d '2 0'
28 adding b3
28 adding b3
29
29
30 $ hg log --template '{rev} {parents} {desc}\n'
30 $ hg log --template '{rev} {parents} {desc}\n'
31 4 b3
31 4 b3
32 3 b2
32 3 b2
33 2 0:17ab29e464c6 b1
33 2 0:17ab29e464c6 b1
34 1 r2
34 1 r2
35 0 r1
35 0 r1
36
36
37 $ hg clone . ../rebase
37 $ hg clone . ../rebase
38 updating to branch default
38 updating to branch default
39 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
39 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
40 $ cd ../rebase
40 $ cd ../rebase
41
41
42 $ hg up -C 1
42 $ hg up -C 1
43 1 files updated, 0 files merged, 3 files removed, 0 files unresolved
43 1 files updated, 0 files merged, 3 files removed, 0 files unresolved
44
44
45 rebase b onto r1
45 rebase b onto r1
46 (this also tests that editor is not invoked if '--edit' is not specified)
46 (this also tests that editor is not invoked if '--edit' is not specified)
47
47
48 $ HGEDITOR=cat hg transplant -a -b tip
48 $ HGEDITOR=cat hg transplant -a -b tip
49 applying 37a1297eb21b
49 applying 37a1297eb21b
50 37a1297eb21b transplanted to e234d668f844
50 37a1297eb21b transplanted to e234d668f844
51 applying 722f4667af76
51 applying 722f4667af76
52 722f4667af76 transplanted to 539f377d78df
52 722f4667af76 transplanted to 539f377d78df
53 applying a53251cdf717
53 applying a53251cdf717
54 a53251cdf717 transplanted to ffd6818a3975
54 a53251cdf717 transplanted to ffd6818a3975
55 $ hg log --template '{rev} {parents} {desc}\n'
55 $ hg log --template '{rev} {parents} {desc}\n'
56 7 b3
56 7 b3
57 6 b2
57 6 b2
58 5 1:d11e3596cc1a b1
58 5 1:d11e3596cc1a b1
59 4 b3
59 4 b3
60 3 b2
60 3 b2
61 2 0:17ab29e464c6 b1
61 2 0:17ab29e464c6 b1
62 1 r2
62 1 r2
63 0 r1
63 0 r1
64
64
65 test transplanted revset
65 test transplanted revset
66
66
67 $ hg log -r 'transplanted()' --template '{rev} {parents} {desc}\n'
67 $ hg log -r 'transplanted()' --template '{rev} {parents} {desc}\n'
68 5 1:d11e3596cc1a b1
68 5 1:d11e3596cc1a b1
69 6 b2
69 6 b2
70 7 b3
70 7 b3
71 $ hg help revsets | grep transplanted
71 $ hg help revsets | grep transplanted
72 "transplanted([set])"
72 "transplanted([set])"
73 Transplanted changesets in set, or all transplanted changesets.
73 Transplanted changesets in set, or all transplanted changesets.
74
74
75 test transplanted keyword
75 test transplanted keyword
76
76
77 $ hg log --template '{rev} {transplanted}\n'
77 $ hg log --template '{rev} {transplanted}\n'
78 7 a53251cdf717679d1907b289f991534be05c997a
78 7 a53251cdf717679d1907b289f991534be05c997a
79 6 722f4667af767100cb15b6a79324bf8abbfe1ef4
79 6 722f4667af767100cb15b6a79324bf8abbfe1ef4
80 5 37a1297eb21b3ef5c5d2ffac22121a0988ed9f21
80 5 37a1297eb21b3ef5c5d2ffac22121a0988ed9f21
81 4
81 4
82 3
82 3
83 2
83 2
84 1
84 1
85 0
85 0
86
86
87 test destination() revset predicate with a transplant of a transplant; new
87 test destination() revset predicate with a transplant of a transplant; new
88 clone so subsequent rollback isn't affected
88 clone so subsequent rollback isn't affected
89 (this also tests that editor is invoked if '--edit' is specified)
89 (this also tests that editor is invoked if '--edit' is specified)
90
90
91 $ hg clone -q . ../destination
91 $ hg clone -q . ../destination
92 $ cd ../destination
92 $ cd ../destination
93 $ hg up -Cq 0
93 $ hg up -Cq 0
94 $ hg branch -q b4
94 $ hg branch -q b4
95 $ hg ci -qm "b4"
95 $ hg ci -qm "b4"
96 $ hg status --rev "7^1" --rev 7
96 $ hg status --rev "7^1" --rev 7
97 A b3
97 A b3
98 $ cat > $TESTTMP/checkeditform.sh <<EOF
98 $ cat > $TESTTMP/checkeditform.sh <<EOF
99 > env | grep HGEDITFORM
99 > env | grep HGEDITFORM
100 > true
100 > true
101 > EOF
101 > EOF
102 $ HGEDITOR="sh $TESTTMP/checkeditform.sh; cat" hg transplant --edit 7
102 $ HGEDITOR="sh $TESTTMP/checkeditform.sh; cat" hg transplant --edit 7
103 applying ffd6818a3975
103 applying ffd6818a3975
104 HGEDITFORM=transplant.normal
104 HGEDITFORM=transplant.normal
105 b3
105 b3
106
106
107
107
108 HG: Enter commit message. Lines beginning with 'HG:' are removed.
108 HG: Enter commit message. Lines beginning with 'HG:' are removed.
109 HG: Leave message empty to abort commit.
109 HG: Leave message empty to abort commit.
110 HG: --
110 HG: --
111 HG: user: test
111 HG: user: test
112 HG: branch 'b4'
112 HG: branch 'b4'
113 HG: added b3
113 HG: added b3
114 ffd6818a3975 transplanted to 502236fa76bb
114 ffd6818a3975 transplanted to 502236fa76bb
115
115
116
116
117 $ hg log -r 'destination()'
117 $ hg log -r 'destination()'
118 changeset: 5:e234d668f844
118 changeset: 5:e234d668f844
119 parent: 1:d11e3596cc1a
119 parent: 1:d11e3596cc1a
120 user: test
120 user: test
121 date: Thu Jan 01 00:00:00 1970 +0000
121 date: Thu Jan 01 00:00:00 1970 +0000
122 summary: b1
122 summary: b1
123
123
124 changeset: 6:539f377d78df
124 changeset: 6:539f377d78df
125 user: test
125 user: test
126 date: Thu Jan 01 00:00:01 1970 +0000
126 date: Thu Jan 01 00:00:01 1970 +0000
127 summary: b2
127 summary: b2
128
128
129 changeset: 7:ffd6818a3975
129 changeset: 7:ffd6818a3975
130 user: test
130 user: test
131 date: Thu Jan 01 00:00:02 1970 +0000
131 date: Thu Jan 01 00:00:02 1970 +0000
132 summary: b3
132 summary: b3
133
133
134 changeset: 9:502236fa76bb
134 changeset: 9:502236fa76bb
135 branch: b4
135 branch: b4
136 tag: tip
136 tag: tip
137 user: test
137 user: test
138 date: Thu Jan 01 00:00:02 1970 +0000
138 date: Thu Jan 01 00:00:02 1970 +0000
139 summary: b3
139 summary: b3
140
140
141 $ hg log -r 'destination(a53251cdf717)'
141 $ hg log -r 'destination(a53251cdf717)'
142 changeset: 7:ffd6818a3975
142 changeset: 7:ffd6818a3975
143 user: test
143 user: test
144 date: Thu Jan 01 00:00:02 1970 +0000
144 date: Thu Jan 01 00:00:02 1970 +0000
145 summary: b3
145 summary: b3
146
146
147 changeset: 9:502236fa76bb
147 changeset: 9:502236fa76bb
148 branch: b4
148 branch: b4
149 tag: tip
149 tag: tip
150 user: test
150 user: test
151 date: Thu Jan 01 00:00:02 1970 +0000
151 date: Thu Jan 01 00:00:02 1970 +0000
152 summary: b3
152 summary: b3
153
153
154
154
155 test subset parameter in reverse order
155 test subset parameter in reverse order
156 $ hg log -r 'reverse(all()) and destination(a53251cdf717)'
156 $ hg log -r 'reverse(all()) and destination(a53251cdf717)'
157 changeset: 9:502236fa76bb
157 changeset: 9:502236fa76bb
158 branch: b4
158 branch: b4
159 tag: tip
159 tag: tip
160 user: test
160 user: test
161 date: Thu Jan 01 00:00:02 1970 +0000
161 date: Thu Jan 01 00:00:02 1970 +0000
162 summary: b3
162 summary: b3
163
163
164 changeset: 7:ffd6818a3975
164 changeset: 7:ffd6818a3975
165 user: test
165 user: test
166 date: Thu Jan 01 00:00:02 1970 +0000
166 date: Thu Jan 01 00:00:02 1970 +0000
167 summary: b3
167 summary: b3
168
168
169
169
170 back to the original dir
170 back to the original dir
171 $ cd ../rebase
171 $ cd ../rebase
172
172
173 rollback the transplant
173 rollback the transplant
174 $ hg rollback
174 $ hg rollback
175 repository tip rolled back to revision 4 (undo transplant)
175 repository tip rolled back to revision 4 (undo transplant)
176 working directory now based on revision 1
176 working directory now based on revision 1
177 $ hg tip -q
177 $ hg tip -q
178 4:a53251cdf717
178 4:a53251cdf717
179 $ hg parents -q
179 $ hg parents -q
180 1:d11e3596cc1a
180 1:d11e3596cc1a
181 $ hg status
181 $ hg status
182 ? b1
182 ? b1
183 ? b2
183 ? b2
184 ? b3
184 ? b3
185
185
186 $ hg clone ../t ../prune
186 $ hg clone ../t ../prune
187 updating to branch default
187 updating to branch default
188 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
188 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
189 $ cd ../prune
189 $ cd ../prune
190
190
191 $ hg up -C 1
191 $ hg up -C 1
192 1 files updated, 0 files merged, 3 files removed, 0 files unresolved
192 1 files updated, 0 files merged, 3 files removed, 0 files unresolved
193
193
194 rebase b onto r1, skipping b2
194 rebase b onto r1, skipping b2
195
195
196 $ hg transplant -a -b tip -p 3
196 $ hg transplant -a -b tip -p 3
197 applying 37a1297eb21b
197 applying 37a1297eb21b
198 37a1297eb21b transplanted to e234d668f844
198 37a1297eb21b transplanted to e234d668f844
199 applying a53251cdf717
199 applying a53251cdf717
200 a53251cdf717 transplanted to 7275fda4d04f
200 a53251cdf717 transplanted to 7275fda4d04f
201 $ hg log --template '{rev} {parents} {desc}\n'
201 $ hg log --template '{rev} {parents} {desc}\n'
202 6 b3
202 6 b3
203 5 1:d11e3596cc1a b1
203 5 1:d11e3596cc1a b1
204 4 b3
204 4 b3
205 3 b2
205 3 b2
206 2 0:17ab29e464c6 b1
206 2 0:17ab29e464c6 b1
207 1 r2
207 1 r2
208 0 r1
208 0 r1
209
209
210 test same-parent transplant with --log
210 test same-parent transplant with --log
211
211
212 $ hg clone -r 1 ../t ../sameparent
212 $ hg clone -r 1 ../t ../sameparent
213 adding changesets
213 adding changesets
214 adding manifests
214 adding manifests
215 adding file changes
215 adding file changes
216 added 2 changesets with 2 changes to 2 files
216 added 2 changesets with 2 changes to 2 files
217 updating to branch default
217 updating to branch default
218 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
218 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
219 $ cd ../sameparent
219 $ cd ../sameparent
220 $ hg transplant --log -s ../prune 5
220 $ hg transplant --log -s ../prune 5
221 searching for changes
221 searching for changes
222 applying e234d668f844
222 applying e234d668f844
223 e234d668f844 transplanted to e07aea8ecf9c
223 e234d668f844 transplanted to e07aea8ecf9c
224 $ hg log --template '{rev} {parents} {desc}\n'
224 $ hg log --template '{rev} {parents} {desc}\n'
225 2 b1
225 2 b1
226 (transplanted from e234d668f844e1b1a765f01db83a32c0c7bfa170)
226 (transplanted from e234d668f844e1b1a765f01db83a32c0c7bfa170)
227 1 r2
227 1 r2
228 0 r1
228 0 r1
229 remote transplant
229 remote transplant
230
230
231 $ hg clone -r 1 ../t ../remote
231 $ hg clone -r 1 ../t ../remote
232 adding changesets
232 adding changesets
233 adding manifests
233 adding manifests
234 adding file changes
234 adding file changes
235 added 2 changesets with 2 changes to 2 files
235 added 2 changesets with 2 changes to 2 files
236 updating to branch default
236 updating to branch default
237 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
237 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
238 $ cd ../remote
238 $ cd ../remote
239 $ hg transplant --log -s ../t 2 4
239 $ hg transplant --log -s ../t 2 4
240 searching for changes
240 searching for changes
241 applying 37a1297eb21b
241 applying 37a1297eb21b
242 37a1297eb21b transplanted to c19cf0ccb069
242 37a1297eb21b transplanted to c19cf0ccb069
243 applying a53251cdf717
243 applying a53251cdf717
244 a53251cdf717 transplanted to f7fe5bf98525
244 a53251cdf717 transplanted to f7fe5bf98525
245 $ hg log --template '{rev} {parents} {desc}\n'
245 $ hg log --template '{rev} {parents} {desc}\n'
246 3 b3
246 3 b3
247 (transplanted from a53251cdf717679d1907b289f991534be05c997a)
247 (transplanted from a53251cdf717679d1907b289f991534be05c997a)
248 2 b1
248 2 b1
249 (transplanted from 37a1297eb21b3ef5c5d2ffac22121a0988ed9f21)
249 (transplanted from 37a1297eb21b3ef5c5d2ffac22121a0988ed9f21)
250 1 r2
250 1 r2
251 0 r1
251 0 r1
252
252
253 skip previous transplants
253 skip previous transplants
254
254
255 $ hg transplant -s ../t -a -b 4
255 $ hg transplant -s ../t -a -b 4
256 searching for changes
256 searching for changes
257 applying 722f4667af76
257 applying 722f4667af76
258 722f4667af76 transplanted to 47156cd86c0b
258 722f4667af76 transplanted to 47156cd86c0b
259 $ hg log --template '{rev} {parents} {desc}\n'
259 $ hg log --template '{rev} {parents} {desc}\n'
260 4 b2
260 4 b2
261 3 b3
261 3 b3
262 (transplanted from a53251cdf717679d1907b289f991534be05c997a)
262 (transplanted from a53251cdf717679d1907b289f991534be05c997a)
263 2 b1
263 2 b1
264 (transplanted from 37a1297eb21b3ef5c5d2ffac22121a0988ed9f21)
264 (transplanted from 37a1297eb21b3ef5c5d2ffac22121a0988ed9f21)
265 1 r2
265 1 r2
266 0 r1
266 0 r1
267
267
268 skip local changes transplanted to the source
268 skip local changes transplanted to the source
269
269
270 $ echo b4 > b4
270 $ echo b4 > b4
271 $ hg ci -Amb4 -d '3 0'
271 $ hg ci -Amb4 -d '3 0'
272 adding b4
272 adding b4
273 $ hg clone ../t ../pullback
273 $ hg clone ../t ../pullback
274 updating to branch default
274 updating to branch default
275 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
275 4 files updated, 0 files merged, 0 files removed, 0 files unresolved
276 $ cd ../pullback
276 $ cd ../pullback
277 $ hg transplant -s ../remote -a -b tip
277 $ hg transplant -s ../remote -a -b tip
278 searching for changes
278 searching for changes
279 applying 4333daefcb15
279 applying 4333daefcb15
280 4333daefcb15 transplanted to 5f42c04e07cc
280 4333daefcb15 transplanted to 5f42c04e07cc
281
281
282
282
283 remote transplant with pull
283 remote transplant with pull
284
284
285 $ hg -R ../t serve -p $HGPORT -d --pid-file=../t.pid
285 $ hg -R ../t serve -p $HGPORT -d --pid-file=../t.pid
286 $ cat ../t.pid >> $DAEMON_PIDS
286 $ cat ../t.pid >> $DAEMON_PIDS
287
287
288 $ hg clone -r 0 ../t ../rp
288 $ hg clone -r 0 ../t ../rp
289 adding changesets
289 adding changesets
290 adding manifests
290 adding manifests
291 adding file changes
291 adding file changes
292 added 1 changesets with 1 changes to 1 files
292 added 1 changesets with 1 changes to 1 files
293 updating to branch default
293 updating to branch default
294 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
294 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
295 $ cd ../rp
295 $ cd ../rp
296 $ hg transplant -s http://localhost:$HGPORT/ 2 4
296 $ hg transplant -s http://localhost:$HGPORT/ 2 4
297 searching for changes
297 searching for changes
298 searching for changes
298 searching for changes
299 adding changesets
299 adding changesets
300 adding manifests
300 adding manifests
301 adding file changes
301 adding file changes
302 added 1 changesets with 1 changes to 1 files
302 added 1 changesets with 1 changes to 1 files
303 applying a53251cdf717
303 applying a53251cdf717
304 a53251cdf717 transplanted to 8d9279348abb
304 a53251cdf717 transplanted to 8d9279348abb
305 $ hg log --template '{rev} {parents} {desc}\n'
305 $ hg log --template '{rev} {parents} {desc}\n'
306 2 b3
306 2 b3
307 1 b1
307 1 b1
308 0 r1
308 0 r1
309
309
310 remote transplant without pull
310 remote transplant without pull
311
311
312 $ hg pull -q http://localhost:$HGPORT/
312 $ hg pull -q http://localhost:$HGPORT/
313 $ hg transplant -s http://localhost:$HGPORT/ 2 4
313 $ hg transplant -s http://localhost:$HGPORT/ 2 4
314 searching for changes
314 searching for changes
315 skipping already applied revision 2:8d9279348abb
315 skipping already applied revision 2:8d9279348abb
316 applying 722f4667af76
316 applying 722f4667af76
317 722f4667af76 transplanted to 76e321915884
317 722f4667af76 transplanted to 76e321915884
318
318
319 transplant --continue
319 transplant --continue
320
320
321 $ hg init ../tc
321 $ hg init ../tc
322 $ cd ../tc
322 $ cd ../tc
323 $ cat <<EOF > foo
323 $ cat <<EOF > foo
324 > foo
324 > foo
325 > bar
325 > bar
326 > baz
326 > baz
327 > EOF
327 > EOF
328 $ echo toremove > toremove
328 $ echo toremove > toremove
329 $ echo baz > baz
329 $ echo baz > baz
330 $ hg ci -Amfoo
330 $ hg ci -Amfoo
331 adding baz
331 adding baz
332 adding foo
332 adding foo
333 adding toremove
333 adding toremove
334 $ cat <<EOF > foo
334 $ cat <<EOF > foo
335 > foo2
335 > foo2
336 > bar2
336 > bar2
337 > baz2
337 > baz2
338 > EOF
338 > EOF
339 $ rm toremove
339 $ rm toremove
340 $ echo added > added
340 $ echo added > added
341 $ hg ci -Amfoo2
341 $ hg ci -Amfoo2
342 adding added
342 adding added
343 removing toremove
343 removing toremove
344 $ echo bar > bar
344 $ echo bar > bar
345 $ cat > baz <<EOF
345 $ cat > baz <<EOF
346 > before baz
346 > before baz
347 > baz
347 > baz
348 > after baz
348 > after baz
349 > EOF
349 > EOF
350 $ hg ci -Ambar
350 $ hg ci -Ambar
351 adding bar
351 adding bar
352 $ echo bar2 >> bar
352 $ echo bar2 >> bar
353 $ hg ci -mbar2
353 $ hg ci -mbar2
354 $ hg up 0
354 $ hg up 0
355 3 files updated, 0 files merged, 2 files removed, 0 files unresolved
355 3 files updated, 0 files merged, 2 files removed, 0 files unresolved
356 $ echo foobar > foo
356 $ echo foobar > foo
357 $ hg ci -mfoobar
357 $ hg ci -mfoobar
358 created new head
358 created new head
359 $ hg transplant 1:3
359 $ hg transplant 1:3
360 applying 46ae92138f3c
360 applying 46ae92138f3c
361 patching file foo
361 patching file foo
362 Hunk #1 FAILED at 0
362 Hunk #1 FAILED at 0
363 1 out of 1 hunks FAILED -- saving rejects to file foo.rej
363 1 out of 1 hunks FAILED -- saving rejects to file foo.rej
364 patch failed to apply
364 patch failed to apply
365 abort: fix up the merge and run hg transplant --continue
365 abort: fix up the merge and run hg transplant --continue
366 [255]
366 [255]
367
367
368 transplant -c shouldn't use an old changeset
368 transplant -c shouldn't use an old changeset
369
369
370 $ hg up -C
370 $ hg up -C
371 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
371 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
372 $ rm added
372 $ rm added
373 $ hg transplant 1
373 $ hg transplant 1
374 applying 46ae92138f3c
374 applying 46ae92138f3c
375 patching file foo
375 patching file foo
376 Hunk #1 FAILED at 0
376 Hunk #1 FAILED at 0
377 1 out of 1 hunks FAILED -- saving rejects to file foo.rej
377 1 out of 1 hunks FAILED -- saving rejects to file foo.rej
378 patch failed to apply
378 patch failed to apply
379 abort: fix up the merge and run hg transplant --continue
379 abort: fix up the merge and run hg transplant --continue
380 [255]
380 [255]
381 $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg transplant --continue -e
381 $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg transplant --continue -e
382 HGEDITFORM=transplant.normal
382 HGEDITFORM=transplant.normal
383 46ae92138f3c transplanted as 9159dada197d
383 46ae92138f3c transplanted as 9159dada197d
384 $ hg transplant 1:3
384 $ hg transplant 1:3
385 skipping already applied revision 1:46ae92138f3c
385 skipping already applied revision 1:46ae92138f3c
386 applying 9d6d6b5a8275
386 applying 9d6d6b5a8275
387 9d6d6b5a8275 transplanted to 2d17a10c922f
387 9d6d6b5a8275 transplanted to 2d17a10c922f
388 applying 1dab759070cf
388 applying 1dab759070cf
389 1dab759070cf transplanted to e06a69927eb0
389 1dab759070cf transplanted to e06a69927eb0
390 $ hg locate
390 $ hg locate
391 added
391 added
392 bar
392 bar
393 baz
393 baz
394 foo
394 foo
395
395
396 test multiple revisions and --continue
396 test multiple revisions and --continue
397
397
398 $ hg up -qC 0
398 $ hg up -qC 0
399 $ echo bazbaz > baz
399 $ echo bazbaz > baz
400 $ hg ci -Am anotherbaz baz
400 $ hg ci -Am anotherbaz baz
401 created new head
401 created new head
402 $ hg transplant 1:3
402 $ hg transplant 1:3
403 applying 46ae92138f3c
403 applying 46ae92138f3c
404 46ae92138f3c transplanted to 1024233ea0ba
404 46ae92138f3c transplanted to 1024233ea0ba
405 applying 9d6d6b5a8275
405 applying 9d6d6b5a8275
406 patching file baz
406 patching file baz
407 Hunk #1 FAILED at 0
407 Hunk #1 FAILED at 0
408 1 out of 1 hunks FAILED -- saving rejects to file baz.rej
408 1 out of 1 hunks FAILED -- saving rejects to file baz.rej
409 patch failed to apply
409 patch failed to apply
410 abort: fix up the merge and run hg transplant --continue
410 abort: fix up the merge and run hg transplant --continue
411 [255]
411 [255]
412 $ echo fixed > baz
412 $ echo fixed > baz
413 $ hg transplant --continue
413 $ hg transplant --continue
414 9d6d6b5a8275 transplanted as d80c49962290
414 9d6d6b5a8275 transplanted as d80c49962290
415 applying 1dab759070cf
415 applying 1dab759070cf
416 1dab759070cf transplanted to aa0ffe6bd5ae
416 1dab759070cf transplanted to aa0ffe6bd5ae
417
417
418 $ cd ..
418 $ cd ..
419
419
420 Issue1111: Test transplant --merge
420 Issue1111: Test transplant --merge
421
421
422 $ hg init t1111
422 $ hg init t1111
423 $ cd t1111
423 $ cd t1111
424 $ echo a > a
424 $ echo a > a
425 $ hg ci -Am adda
425 $ hg ci -Am adda
426 adding a
426 adding a
427 $ echo b >> a
427 $ echo b >> a
428 $ hg ci -m appendb
428 $ hg ci -m appendb
429 $ echo c >> a
429 $ echo c >> a
430 $ hg ci -m appendc
430 $ hg ci -m appendc
431 $ hg up -C 0
431 $ hg up -C 0
432 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
432 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
433 $ echo d >> a
433 $ echo d >> a
434 $ hg ci -m appendd
434 $ hg ci -m appendd
435 created new head
435 created new head
436
436
437 transplant
437 transplant
438
438
439 $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg transplant -m 1 -e
439 $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg transplant -m 1 -e
440 applying 42dc4432fd35
440 applying 42dc4432fd35
441 HGEDITFORM=transplant.merge
441 HGEDITFORM=transplant.merge
442 1:42dc4432fd35 merged at a9f4acbac129
442 1:42dc4432fd35 merged at a9f4acbac129
443 $ hg update -q -C 2
443 $ hg update -q -C 2
444 $ cat > a <<EOF
444 $ cat > a <<EOF
445 > x
445 > x
446 > y
446 > y
447 > z
447 > z
448 > EOF
448 > EOF
449 $ hg commit -m replace
449 $ hg commit -m replace
450 $ hg update -q -C 4
450 $ hg update -q -C 4
451 $ hg transplant -m 5
451 $ hg transplant -m 5
452 applying 600a3cdcb41d
452 applying 600a3cdcb41d
453 patching file a
453 patching file a
454 Hunk #1 FAILED at 0
454 Hunk #1 FAILED at 0
455 1 out of 1 hunks FAILED -- saving rejects to file a.rej
455 1 out of 1 hunks FAILED -- saving rejects to file a.rej
456 patch failed to apply
456 patch failed to apply
457 abort: fix up the merge and run hg transplant --continue
457 abort: fix up the merge and run hg transplant --continue
458 [255]
458 [255]
459 $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg transplant --continue -e
459 $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg transplant --continue -e
460 HGEDITFORM=transplant.merge
460 HGEDITFORM=transplant.merge
461 600a3cdcb41d transplanted as a3f88be652e0
461 600a3cdcb41d transplanted as a3f88be652e0
462
462
463 $ cd ..
463 $ cd ..
464
464
465 test transplant into empty repository
465 test transplant into empty repository
466
466
467 $ hg init empty
467 $ hg init empty
468 $ cd empty
468 $ cd empty
469 $ hg transplant -s ../t -b tip -a
469 $ hg transplant -s ../t -b tip -a
470 adding changesets
470 adding changesets
471 adding manifests
471 adding manifests
472 adding file changes
472 adding file changes
473 added 4 changesets with 4 changes to 4 files
473 added 4 changesets with 4 changes to 4 files
474
474
475 test "--merge" causing pull from source repository on local host
475 test "--merge" causing pull from source repository on local host
476
476
477 $ hg --config extensions.mq= -q strip 2
477 $ hg --config extensions.mq= -q strip 2
478 $ hg transplant -s ../t --merge tip
478 $ hg transplant -s ../t --merge tip
479 searching for changes
479 searching for changes
480 searching for changes
480 searching for changes
481 adding changesets
481 adding changesets
482 adding manifests
482 adding manifests
483 adding file changes
483 adding file changes
484 added 2 changesets with 2 changes to 2 files
484 added 2 changesets with 2 changes to 2 files
485 applying a53251cdf717
485 applying a53251cdf717
486 4:a53251cdf717 merged at 4831f4dc831a
486 4:a53251cdf717 merged at 4831f4dc831a
487
487
488 test interactive transplant
488 test interactive transplant
489
489
490 $ hg --config extensions.strip= -q strip 0
490 $ hg --config extensions.strip= -q strip 0
491 $ hg -R ../t log -G --template "{rev}:{node|short}"
491 $ hg -R ../t log -G --template "{rev}:{node|short}"
492 @ 4:a53251cdf717
492 @ 4:a53251cdf717
493 |
493 |
494 o 3:722f4667af76
494 o 3:722f4667af76
495 |
495 |
496 o 2:37a1297eb21b
496 o 2:37a1297eb21b
497 |
497 |
498 | o 1:d11e3596cc1a
498 | o 1:d11e3596cc1a
499 |/
499 |/
500 o 0:17ab29e464c6
500 o 0:17ab29e464c6
501
501
502 $ hg transplant -q --config ui.interactive=true -s ../t <<EOF
502 $ hg transplant -q --config ui.interactive=true -s ../t <<EOF
503 > p
503 > p
504 > y
504 > y
505 > n
505 > n
506 > n
506 > n
507 > m
507 > m
508 > c
508 > c
509 > EOF
509 > EOF
510 0:17ab29e464c6
510 0:17ab29e464c6
511 apply changeset? [ynmpcq?]: --- /dev/null Thu Jan 01 00:00:00 1970 +0000
511 apply changeset? [ynmpcq?]: p
512 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
512 +++ b/r1 Thu Jan 01 00:00:00 1970 +0000
513 +++ b/r1 Thu Jan 01 00:00:00 1970 +0000
513 @@ -0,0 +1,1 @@
514 @@ -0,0 +1,1 @@
514 +r1
515 +r1
515 apply changeset? [ynmpcq?]: 1:d11e3596cc1a
516 apply changeset? [ynmpcq?]: y
516 apply changeset? [ynmpcq?]: 2:37a1297eb21b
517 1:d11e3596cc1a
517 apply changeset? [ynmpcq?]: 3:722f4667af76
518 apply changeset? [ynmpcq?]: n
518 apply changeset? [ynmpcq?]: 4:a53251cdf717
519 2:37a1297eb21b
519 apply changeset? [ynmpcq?]: (no-eol)
520 apply changeset? [ynmpcq?]: n
521 3:722f4667af76
522 apply changeset? [ynmpcq?]: m
523 4:a53251cdf717
524 apply changeset? [ynmpcq?]: c
520 $ hg log -G --template "{node|short}"
525 $ hg log -G --template "{node|short}"
521 @ 88be5dde5260
526 @ 88be5dde5260
522 |\
527 |\
523 | o 722f4667af76
528 | o 722f4667af76
524 | |
529 | |
525 | o 37a1297eb21b
530 | o 37a1297eb21b
526 |/
531 |/
527 o 17ab29e464c6
532 o 17ab29e464c6
528
533
529 $ hg transplant -q --config ui.interactive=true -s ../t <<EOF
534 $ hg transplant -q --config ui.interactive=true -s ../t <<EOF
530 > x
535 > x
531 > ?
536 > ?
532 > y
537 > y
533 > q
538 > q
534 > EOF
539 > EOF
535 1:d11e3596cc1a
540 1:d11e3596cc1a
536 apply changeset? [ynmpcq?]: unrecognized response
541 apply changeset? [ynmpcq?]: x
537 apply changeset? [ynmpcq?]: y: yes, transplant this changeset
542 unrecognized response
543 apply changeset? [ynmpcq?]: ?
544 y: yes, transplant this changeset
538 n: no, skip this changeset
545 n: no, skip this changeset
539 m: merge at this changeset
546 m: merge at this changeset
540 p: show patch
547 p: show patch
541 c: commit selected changesets
548 c: commit selected changesets
542 q: quit and cancel transplant
549 q: quit and cancel transplant
543 ?: ? (show this help)
550 ?: ? (show this help)
544 apply changeset? [ynmpcq?]: 4:a53251cdf717
551 apply changeset? [ynmpcq?]: y
545 apply changeset? [ynmpcq?]: (no-eol)
552 4:a53251cdf717
553 apply changeset? [ynmpcq?]: q
546 $ hg heads --template "{node|short}\n"
554 $ hg heads --template "{node|short}\n"
547 88be5dde5260
555 88be5dde5260
548
556
549 $ cd ..
557 $ cd ..
550
558
551
559
552 #if unix-permissions system-sh
560 #if unix-permissions system-sh
553
561
554 test filter
562 test filter
555
563
556 $ hg init filter
564 $ hg init filter
557 $ cd filter
565 $ cd filter
558 $ cat <<'EOF' >test-filter
566 $ cat <<'EOF' >test-filter
559 > #!/bin/sh
567 > #!/bin/sh
560 > sed 's/r1/r2/' $1 > $1.new
568 > sed 's/r1/r2/' $1 > $1.new
561 > mv $1.new $1
569 > mv $1.new $1
562 > EOF
570 > EOF
563 $ chmod +x test-filter
571 $ chmod +x test-filter
564 $ hg transplant -s ../t -b tip -a --filter ./test-filter
572 $ hg transplant -s ../t -b tip -a --filter ./test-filter
565 filtering * (glob)
573 filtering * (glob)
566 applying 17ab29e464c6
574 applying 17ab29e464c6
567 17ab29e464c6 transplanted to e9ffc54ea104
575 17ab29e464c6 transplanted to e9ffc54ea104
568 filtering * (glob)
576 filtering * (glob)
569 applying 37a1297eb21b
577 applying 37a1297eb21b
570 37a1297eb21b transplanted to 348b36d0b6a5
578 37a1297eb21b transplanted to 348b36d0b6a5
571 filtering * (glob)
579 filtering * (glob)
572 applying 722f4667af76
580 applying 722f4667af76
573 722f4667af76 transplanted to 0aa6979afb95
581 722f4667af76 transplanted to 0aa6979afb95
574 filtering * (glob)
582 filtering * (glob)
575 applying a53251cdf717
583 applying a53251cdf717
576 a53251cdf717 transplanted to 14f8512272b5
584 a53251cdf717 transplanted to 14f8512272b5
577 $ hg log --template '{rev} {parents} {desc}\n'
585 $ hg log --template '{rev} {parents} {desc}\n'
578 3 b3
586 3 b3
579 2 b2
587 2 b2
580 1 b1
588 1 b1
581 0 r2
589 0 r2
582 $ cd ..
590 $ cd ..
583
591
584
592
585 test filter with failed patch
593 test filter with failed patch
586
594
587 $ cd filter
595 $ cd filter
588 $ hg up 0
596 $ hg up 0
589 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
597 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
590 $ echo foo > b1
598 $ echo foo > b1
591 $ hg ci -Am foo
599 $ hg ci -Am foo
592 adding b1
600 adding b1
593 adding test-filter
601 adding test-filter
594 created new head
602 created new head
595 $ hg transplant 1 --filter ./test-filter
603 $ hg transplant 1 --filter ./test-filter
596 filtering * (glob)
604 filtering * (glob)
597 applying 348b36d0b6a5
605 applying 348b36d0b6a5
598 file b1 already exists
606 file b1 already exists
599 1 out of 1 hunks FAILED -- saving rejects to file b1.rej
607 1 out of 1 hunks FAILED -- saving rejects to file b1.rej
600 patch failed to apply
608 patch failed to apply
601 abort: fix up the merge and run hg transplant --continue
609 abort: fix up the merge and run hg transplant --continue
602 [255]
610 [255]
603 $ cd ..
611 $ cd ..
604
612
605 test environment passed to filter
613 test environment passed to filter
606
614
607 $ hg init filter-environment
615 $ hg init filter-environment
608 $ cd filter-environment
616 $ cd filter-environment
609 $ cat <<'EOF' >test-filter-environment
617 $ cat <<'EOF' >test-filter-environment
610 > #!/bin/sh
618 > #!/bin/sh
611 > echo "Transplant by $HGUSER" >> $1
619 > echo "Transplant by $HGUSER" >> $1
612 > echo "Transplant from rev $HGREVISION" >> $1
620 > echo "Transplant from rev $HGREVISION" >> $1
613 > EOF
621 > EOF
614 $ chmod +x test-filter-environment
622 $ chmod +x test-filter-environment
615 $ hg transplant -s ../t --filter ./test-filter-environment 0
623 $ hg transplant -s ../t --filter ./test-filter-environment 0
616 filtering * (glob)
624 filtering * (glob)
617 applying 17ab29e464c6
625 applying 17ab29e464c6
618 17ab29e464c6 transplanted to 5190e68026a0
626 17ab29e464c6 transplanted to 5190e68026a0
619
627
620 $ hg log --template '{rev} {parents} {desc}\n'
628 $ hg log --template '{rev} {parents} {desc}\n'
621 0 r1
629 0 r1
622 Transplant by test
630 Transplant by test
623 Transplant from rev 17ab29e464c6ca53e329470efe2a9918ac617a6f
631 Transplant from rev 17ab29e464c6ca53e329470efe2a9918ac617a6f
624 $ cd ..
632 $ cd ..
625
633
626 test transplant with filter handles invalid changelog
634 test transplant with filter handles invalid changelog
627
635
628 $ hg init filter-invalid-log
636 $ hg init filter-invalid-log
629 $ cd filter-invalid-log
637 $ cd filter-invalid-log
630 $ cat <<'EOF' >test-filter-invalid-log
638 $ cat <<'EOF' >test-filter-invalid-log
631 > #!/bin/sh
639 > #!/bin/sh
632 > echo "" > $1
640 > echo "" > $1
633 > EOF
641 > EOF
634 $ chmod +x test-filter-invalid-log
642 $ chmod +x test-filter-invalid-log
635 $ hg transplant -s ../t --filter ./test-filter-invalid-log 0
643 $ hg transplant -s ../t --filter ./test-filter-invalid-log 0
636 filtering * (glob)
644 filtering * (glob)
637 abort: filter corrupted changeset (no user or date)
645 abort: filter corrupted changeset (no user or date)
638 [255]
646 [255]
639 $ cd ..
647 $ cd ..
640
648
641 #endif
649 #endif
642
650
643
651
644 test with a win32ext like setup (differing EOLs)
652 test with a win32ext like setup (differing EOLs)
645
653
646 $ hg init twin1
654 $ hg init twin1
647 $ cd twin1
655 $ cd twin1
648 $ echo a > a
656 $ echo a > a
649 $ echo b > b
657 $ echo b > b
650 $ echo b >> b
658 $ echo b >> b
651 $ hg ci -Am t
659 $ hg ci -Am t
652 adding a
660 adding a
653 adding b
661 adding b
654 $ echo a > b
662 $ echo a > b
655 $ echo b >> b
663 $ echo b >> b
656 $ hg ci -m changeb
664 $ hg ci -m changeb
657 $ cd ..
665 $ cd ..
658
666
659 $ hg init twin2
667 $ hg init twin2
660 $ cd twin2
668 $ cd twin2
661 $ echo '[patch]' >> .hg/hgrc
669 $ echo '[patch]' >> .hg/hgrc
662 $ echo 'eol = crlf' >> .hg/hgrc
670 $ echo 'eol = crlf' >> .hg/hgrc
663 $ python -c "file('b', 'wb').write('b\r\nb\r\n')"
671 $ python -c "file('b', 'wb').write('b\r\nb\r\n')"
664 $ hg ci -Am addb
672 $ hg ci -Am addb
665 adding b
673 adding b
666 $ hg transplant -s ../twin1 tip
674 $ hg transplant -s ../twin1 tip
667 searching for changes
675 searching for changes
668 warning: repository is unrelated
676 warning: repository is unrelated
669 applying 2e849d776c17
677 applying 2e849d776c17
670 2e849d776c17 transplanted to 8e65bebc063e
678 2e849d776c17 transplanted to 8e65bebc063e
671 $ cat b
679 $ cat b
672 a\r (esc)
680 a\r (esc)
673 b\r (esc)
681 b\r (esc)
674 $ cd ..
682 $ cd ..
675
683
676 test transplant with merge changeset is skipped
684 test transplant with merge changeset is skipped
677
685
678 $ hg init merge1a
686 $ hg init merge1a
679 $ cd merge1a
687 $ cd merge1a
680 $ echo a > a
688 $ echo a > a
681 $ hg ci -Am a
689 $ hg ci -Am a
682 adding a
690 adding a
683 $ hg branch b
691 $ hg branch b
684 marked working directory as branch b
692 marked working directory as branch b
685 (branches are permanent and global, did you want a bookmark?)
693 (branches are permanent and global, did you want a bookmark?)
686 $ hg ci -m branchb
694 $ hg ci -m branchb
687 $ echo b > b
695 $ echo b > b
688 $ hg ci -Am b
696 $ hg ci -Am b
689 adding b
697 adding b
690 $ hg update default
698 $ hg update default
691 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
699 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
692 $ hg merge b
700 $ hg merge b
693 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
701 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
694 (branch merge, don't forget to commit)
702 (branch merge, don't forget to commit)
695 $ hg ci -m mergeb
703 $ hg ci -m mergeb
696 $ cd ..
704 $ cd ..
697
705
698 $ hg init merge1b
706 $ hg init merge1b
699 $ cd merge1b
707 $ cd merge1b
700 $ hg transplant -s ../merge1a tip
708 $ hg transplant -s ../merge1a tip
701 $ cd ..
709 $ cd ..
702
710
703 test transplant with merge changeset accepts --parent
711 test transplant with merge changeset accepts --parent
704
712
705 $ hg init merge2a
713 $ hg init merge2a
706 $ cd merge2a
714 $ cd merge2a
707 $ echo a > a
715 $ echo a > a
708 $ hg ci -Am a
716 $ hg ci -Am a
709 adding a
717 adding a
710 $ hg branch b
718 $ hg branch b
711 marked working directory as branch b
719 marked working directory as branch b
712 (branches are permanent and global, did you want a bookmark?)
720 (branches are permanent and global, did you want a bookmark?)
713 $ hg ci -m branchb
721 $ hg ci -m branchb
714 $ echo b > b
722 $ echo b > b
715 $ hg ci -Am b
723 $ hg ci -Am b
716 adding b
724 adding b
717 $ hg update default
725 $ hg update default
718 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
726 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
719 $ hg merge b
727 $ hg merge b
720 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
728 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
721 (branch merge, don't forget to commit)
729 (branch merge, don't forget to commit)
722 $ hg ci -m mergeb
730 $ hg ci -m mergeb
723 $ cd ..
731 $ cd ..
724
732
725 $ hg init merge2b
733 $ hg init merge2b
726 $ cd merge2b
734 $ cd merge2b
727 $ hg transplant -s ../merge2a --parent 0 tip
735 $ hg transplant -s ../merge2a --parent 0 tip
728 applying be9f9b39483f
736 applying be9f9b39483f
729 be9f9b39483f transplanted to 9959e51f94d1
737 be9f9b39483f transplanted to 9959e51f94d1
730 $ cd ..
738 $ cd ..
731
739
732 test transplanting a patch turning into a no-op
740 test transplanting a patch turning into a no-op
733
741
734 $ hg init binarysource
742 $ hg init binarysource
735 $ cd binarysource
743 $ cd binarysource
736 $ echo a > a
744 $ echo a > a
737 $ hg ci -Am adda a
745 $ hg ci -Am adda a
738 >>> file('b', 'wb').write('\0b1')
746 >>> file('b', 'wb').write('\0b1')
739 $ hg ci -Am addb b
747 $ hg ci -Am addb b
740 >>> file('b', 'wb').write('\0b2')
748 >>> file('b', 'wb').write('\0b2')
741 $ hg ci -m changeb b
749 $ hg ci -m changeb b
742 $ cd ..
750 $ cd ..
743
751
744 $ hg clone -r0 binarysource binarydest
752 $ hg clone -r0 binarysource binarydest
745 adding changesets
753 adding changesets
746 adding manifests
754 adding manifests
747 adding file changes
755 adding file changes
748 added 1 changesets with 1 changes to 1 files
756 added 1 changesets with 1 changes to 1 files
749 updating to branch default
757 updating to branch default
750 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
758 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
751 $ cd binarydest
759 $ cd binarydest
752 $ cp ../binarysource/b b
760 $ cp ../binarysource/b b
753 $ hg ci -Am addb2 b
761 $ hg ci -Am addb2 b
754 $ hg transplant -s ../binarysource 2
762 $ hg transplant -s ../binarysource 2
755 searching for changes
763 searching for changes
756 applying 7a7d57e15850
764 applying 7a7d57e15850
757 skipping emptied changeset 7a7d57e15850
765 skipping emptied changeset 7a7d57e15850
758 $ cd ..
766 $ cd ..
759
767
760 Explicitly kill daemons to let the test exit on Windows
768 Explicitly kill daemons to let the test exit on Windows
761
769
762 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
770 $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS
763
771
General Comments 0
You need to be logged in to leave comments. Login now