##// END OF EJS Templates
progress: stop excessive clearing (issue4801)...
Matt Mackall -
r29089:222b8170 stable
parent child Browse files
Show More
@@ -1,256 +1,256 b''
1 # progress.py progress bars related code
1 # progress.py progress bars related code
2 #
2 #
3 # Copyright (C) 2010 Augie Fackler <durin42@gmail.com>
3 # Copyright (C) 2010 Augie Fackler <durin42@gmail.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 __future__ import absolute_import
8 from __future__ import absolute_import
9
9
10 import sys
10 import sys
11 import threading
11 import threading
12 import time
12 import time
13
13
14 from .i18n import _
14 from .i18n import _
15 from . import encoding
15 from . import encoding
16
16
17 def spacejoin(*args):
17 def spacejoin(*args):
18 return ' '.join(s for s in args if s)
18 return ' '.join(s for s in args if s)
19
19
20 def shouldprint(ui):
20 def shouldprint(ui):
21 return not (ui.quiet or ui.plain('progress')) and (
21 return not (ui.quiet or ui.plain('progress')) and (
22 ui._isatty(sys.stderr) or ui.configbool('progress', 'assume-tty'))
22 ui._isatty(sys.stderr) or ui.configbool('progress', 'assume-tty'))
23
23
24 def fmtremaining(seconds):
24 def fmtremaining(seconds):
25 """format a number of remaining seconds in human readable way
25 """format a number of remaining seconds in human readable way
26
26
27 This will properly display seconds, minutes, hours, days if needed"""
27 This will properly display seconds, minutes, hours, days if needed"""
28 if seconds < 60:
28 if seconds < 60:
29 # i18n: format XX seconds as "XXs"
29 # i18n: format XX seconds as "XXs"
30 return _("%02ds") % (seconds)
30 return _("%02ds") % (seconds)
31 minutes = seconds // 60
31 minutes = seconds // 60
32 if minutes < 60:
32 if minutes < 60:
33 seconds -= minutes * 60
33 seconds -= minutes * 60
34 # i18n: format X minutes and YY seconds as "XmYYs"
34 # i18n: format X minutes and YY seconds as "XmYYs"
35 return _("%dm%02ds") % (minutes, seconds)
35 return _("%dm%02ds") % (minutes, seconds)
36 # we're going to ignore seconds in this case
36 # we're going to ignore seconds in this case
37 minutes += 1
37 minutes += 1
38 hours = minutes // 60
38 hours = minutes // 60
39 minutes -= hours * 60
39 minutes -= hours * 60
40 if hours < 30:
40 if hours < 30:
41 # i18n: format X hours and YY minutes as "XhYYm"
41 # i18n: format X hours and YY minutes as "XhYYm"
42 return _("%dh%02dm") % (hours, minutes)
42 return _("%dh%02dm") % (hours, minutes)
43 # we're going to ignore minutes in this case
43 # we're going to ignore minutes in this case
44 hours += 1
44 hours += 1
45 days = hours // 24
45 days = hours // 24
46 hours -= days * 24
46 hours -= days * 24
47 if days < 15:
47 if days < 15:
48 # i18n: format X days and YY hours as "XdYYh"
48 # i18n: format X days and YY hours as "XdYYh"
49 return _("%dd%02dh") % (days, hours)
49 return _("%dd%02dh") % (days, hours)
50 # we're going to ignore hours in this case
50 # we're going to ignore hours in this case
51 days += 1
51 days += 1
52 weeks = days // 7
52 weeks = days // 7
53 days -= weeks * 7
53 days -= weeks * 7
54 if weeks < 55:
54 if weeks < 55:
55 # i18n: format X weeks and YY days as "XwYYd"
55 # i18n: format X weeks and YY days as "XwYYd"
56 return _("%dw%02dd") % (weeks, days)
56 return _("%dw%02dd") % (weeks, days)
57 # we're going to ignore days and treat a year as 52 weeks
57 # we're going to ignore days and treat a year as 52 weeks
58 weeks += 1
58 weeks += 1
59 years = weeks // 52
59 years = weeks // 52
60 weeks -= years * 52
60 weeks -= years * 52
61 # i18n: format X years and YY weeks as "XyYYw"
61 # i18n: format X years and YY weeks as "XyYYw"
62 return _("%dy%02dw") % (years, weeks)
62 return _("%dy%02dw") % (years, weeks)
63
63
64 class progbar(object):
64 class progbar(object):
65 def __init__(self, ui):
65 def __init__(self, ui):
66 self.ui = ui
66 self.ui = ui
67 self._refreshlock = threading.Lock()
67 self._refreshlock = threading.Lock()
68 self.resetstate()
68 self.resetstate()
69
69
70 def resetstate(self):
70 def resetstate(self):
71 self.topics = []
71 self.topics = []
72 self.topicstates = {}
72 self.topicstates = {}
73 self.starttimes = {}
73 self.starttimes = {}
74 self.startvals = {}
74 self.startvals = {}
75 self.printed = False
75 self.printed = False
76 self.lastprint = time.time() + float(self.ui.config(
76 self.lastprint = time.time() + float(self.ui.config(
77 'progress', 'delay', default=3))
77 'progress', 'delay', default=3))
78 self.curtopic = None
78 self.curtopic = None
79 self.lasttopic = None
79 self.lasttopic = None
80 self.indetcount = 0
80 self.indetcount = 0
81 self.refresh = float(self.ui.config(
81 self.refresh = float(self.ui.config(
82 'progress', 'refresh', default=0.1))
82 'progress', 'refresh', default=0.1))
83 self.changedelay = max(3 * self.refresh,
83 self.changedelay = max(3 * self.refresh,
84 float(self.ui.config(
84 float(self.ui.config(
85 'progress', 'changedelay', default=1)))
85 'progress', 'changedelay', default=1)))
86 self.order = self.ui.configlist(
86 self.order = self.ui.configlist(
87 'progress', 'format',
87 'progress', 'format',
88 default=['topic', 'bar', 'number', 'estimate'])
88 default=['topic', 'bar', 'number', 'estimate'])
89
89
90 def show(self, now, topic, pos, item, unit, total):
90 def show(self, now, topic, pos, item, unit, total):
91 if not shouldprint(self.ui):
91 if not shouldprint(self.ui):
92 return
92 return
93 termwidth = self.width()
93 termwidth = self.width()
94 self.printed = True
94 self.printed = True
95 head = ''
95 head = ''
96 needprogress = False
96 needprogress = False
97 tail = ''
97 tail = ''
98 for indicator in self.order:
98 for indicator in self.order:
99 add = ''
99 add = ''
100 if indicator == 'topic':
100 if indicator == 'topic':
101 add = topic
101 add = topic
102 elif indicator == 'number':
102 elif indicator == 'number':
103 if total:
103 if total:
104 add = ('% ' + str(len(str(total))) +
104 add = ('% ' + str(len(str(total))) +
105 's/%s') % (pos, total)
105 's/%s') % (pos, total)
106 else:
106 else:
107 add = str(pos)
107 add = str(pos)
108 elif indicator.startswith('item') and item:
108 elif indicator.startswith('item') and item:
109 slice = 'end'
109 slice = 'end'
110 if '-' in indicator:
110 if '-' in indicator:
111 wid = int(indicator.split('-')[1])
111 wid = int(indicator.split('-')[1])
112 elif '+' in indicator:
112 elif '+' in indicator:
113 slice = 'beginning'
113 slice = 'beginning'
114 wid = int(indicator.split('+')[1])
114 wid = int(indicator.split('+')[1])
115 else:
115 else:
116 wid = 20
116 wid = 20
117 if slice == 'end':
117 if slice == 'end':
118 add = encoding.trim(item, wid, leftside=True)
118 add = encoding.trim(item, wid, leftside=True)
119 else:
119 else:
120 add = encoding.trim(item, wid)
120 add = encoding.trim(item, wid)
121 add += (wid - encoding.colwidth(add)) * ' '
121 add += (wid - encoding.colwidth(add)) * ' '
122 elif indicator == 'bar':
122 elif indicator == 'bar':
123 add = ''
123 add = ''
124 needprogress = True
124 needprogress = True
125 elif indicator == 'unit' and unit:
125 elif indicator == 'unit' and unit:
126 add = unit
126 add = unit
127 elif indicator == 'estimate':
127 elif indicator == 'estimate':
128 add = self.estimate(topic, pos, total, now)
128 add = self.estimate(topic, pos, total, now)
129 elif indicator == 'speed':
129 elif indicator == 'speed':
130 add = self.speed(topic, pos, unit, now)
130 add = self.speed(topic, pos, unit, now)
131 if not needprogress:
131 if not needprogress:
132 head = spacejoin(head, add)
132 head = spacejoin(head, add)
133 else:
133 else:
134 tail = spacejoin(tail, add)
134 tail = spacejoin(tail, add)
135 if needprogress:
135 if needprogress:
136 used = 0
136 used = 0
137 if head:
137 if head:
138 used += encoding.colwidth(head) + 1
138 used += encoding.colwidth(head) + 1
139 if tail:
139 if tail:
140 used += encoding.colwidth(tail) + 1
140 used += encoding.colwidth(tail) + 1
141 progwidth = termwidth - used - 3
141 progwidth = termwidth - used - 3
142 if total and pos <= total:
142 if total and pos <= total:
143 amt = pos * progwidth // total
143 amt = pos * progwidth // total
144 bar = '=' * (amt - 1)
144 bar = '=' * (amt - 1)
145 if amt > 0:
145 if amt > 0:
146 bar += '>'
146 bar += '>'
147 bar += ' ' * (progwidth - amt)
147 bar += ' ' * (progwidth - amt)
148 else:
148 else:
149 progwidth -= 3
149 progwidth -= 3
150 self.indetcount += 1
150 self.indetcount += 1
151 # mod the count by twice the width so we can make the
151 # mod the count by twice the width so we can make the
152 # cursor bounce between the right and left sides
152 # cursor bounce between the right and left sides
153 amt = self.indetcount % (2 * progwidth)
153 amt = self.indetcount % (2 * progwidth)
154 amt -= progwidth
154 amt -= progwidth
155 bar = (' ' * int(progwidth - abs(amt)) + '<=>' +
155 bar = (' ' * int(progwidth - abs(amt)) + '<=>' +
156 ' ' * int(abs(amt)))
156 ' ' * int(abs(amt)))
157 prog = ''.join(('[', bar , ']'))
157 prog = ''.join(('[', bar , ']'))
158 out = spacejoin(head, prog, tail)
158 out = spacejoin(head, prog, tail)
159 else:
159 else:
160 out = spacejoin(head, tail)
160 out = spacejoin(head, tail)
161 sys.stderr.write('\r' + encoding.trim(out, termwidth))
161 sys.stderr.write('\r' + encoding.trim(out, termwidth))
162 self.lasttopic = topic
162 self.lasttopic = topic
163 sys.stderr.flush()
163 sys.stderr.flush()
164
164
165 def clear(self):
165 def clear(self):
166 if not shouldprint(self.ui):
166 if not self.printed or not self.lastprint or not shouldprint(self.ui):
167 return
167 return
168 sys.stderr.write('\r%s\r' % (' ' * self.width()))
168 sys.stderr.write('\r%s\r' % (' ' * self.width()))
169 if self.printed:
169 if self.printed:
170 # force immediate re-paint of progress bar
170 # force immediate re-paint of progress bar
171 self.lastprint = 0
171 self.lastprint = 0
172
172
173 def complete(self):
173 def complete(self):
174 if not shouldprint(self.ui):
174 if not shouldprint(self.ui):
175 return
175 return
176 if self.ui.configbool('progress', 'clear-complete', default=True):
176 if self.ui.configbool('progress', 'clear-complete', default=True):
177 self.clear()
177 self.clear()
178 else:
178 else:
179 sys.stderr.write('\n')
179 sys.stderr.write('\n')
180 sys.stderr.flush()
180 sys.stderr.flush()
181
181
182 def width(self):
182 def width(self):
183 tw = self.ui.termwidth()
183 tw = self.ui.termwidth()
184 return min(int(self.ui.config('progress', 'width', default=tw)), tw)
184 return min(int(self.ui.config('progress', 'width', default=tw)), tw)
185
185
186 def estimate(self, topic, pos, total, now):
186 def estimate(self, topic, pos, total, now):
187 if total is None:
187 if total is None:
188 return ''
188 return ''
189 initialpos = self.startvals[topic]
189 initialpos = self.startvals[topic]
190 target = total - initialpos
190 target = total - initialpos
191 delta = pos - initialpos
191 delta = pos - initialpos
192 if delta > 0:
192 if delta > 0:
193 elapsed = now - self.starttimes[topic]
193 elapsed = now - self.starttimes[topic]
194 # experimental config: progress.estimate
194 # experimental config: progress.estimate
195 if elapsed > float(
195 if elapsed > float(
196 self.ui.config('progress', 'estimate', default=2)):
196 self.ui.config('progress', 'estimate', default=2)):
197 seconds = (elapsed * (target - delta)) // delta + 1
197 seconds = (elapsed * (target - delta)) // delta + 1
198 return fmtremaining(seconds)
198 return fmtremaining(seconds)
199 return ''
199 return ''
200
200
201 def speed(self, topic, pos, unit, now):
201 def speed(self, topic, pos, unit, now):
202 initialpos = self.startvals[topic]
202 initialpos = self.startvals[topic]
203 delta = pos - initialpos
203 delta = pos - initialpos
204 elapsed = now - self.starttimes[topic]
204 elapsed = now - self.starttimes[topic]
205 if elapsed > float(
205 if elapsed > float(
206 self.ui.config('progress', 'estimate', default=2)):
206 self.ui.config('progress', 'estimate', default=2)):
207 return _('%d %s/sec') % (delta / elapsed, unit)
207 return _('%d %s/sec') % (delta / elapsed, unit)
208 return ''
208 return ''
209
209
210 def _oktoprint(self, now):
210 def _oktoprint(self, now):
211 '''Check if conditions are met to print - e.g. changedelay elapsed'''
211 '''Check if conditions are met to print - e.g. changedelay elapsed'''
212 if (self.lasttopic is None # first time we printed
212 if (self.lasttopic is None # first time we printed
213 # not a topic change
213 # not a topic change
214 or self.curtopic == self.lasttopic
214 or self.curtopic == self.lasttopic
215 # it's been long enough we should print anyway
215 # it's been long enough we should print anyway
216 or now - self.lastprint >= self.changedelay):
216 or now - self.lastprint >= self.changedelay):
217 return True
217 return True
218 else:
218 else:
219 return False
219 return False
220
220
221 def progress(self, topic, pos, item='', unit='', total=None):
221 def progress(self, topic, pos, item='', unit='', total=None):
222 now = time.time()
222 now = time.time()
223 self._refreshlock.acquire()
223 self._refreshlock.acquire()
224 try:
224 try:
225 if pos is None:
225 if pos is None:
226 self.starttimes.pop(topic, None)
226 self.starttimes.pop(topic, None)
227 self.startvals.pop(topic, None)
227 self.startvals.pop(topic, None)
228 self.topicstates.pop(topic, None)
228 self.topicstates.pop(topic, None)
229 # reset the progress bar if this is the outermost topic
229 # reset the progress bar if this is the outermost topic
230 if self.topics and self.topics[0] == topic and self.printed:
230 if self.topics and self.topics[0] == topic and self.printed:
231 self.complete()
231 self.complete()
232 self.resetstate()
232 self.resetstate()
233 # truncate the list of topics assuming all topics within
233 # truncate the list of topics assuming all topics within
234 # this one are also closed
234 # this one are also closed
235 if topic in self.topics:
235 if topic in self.topics:
236 self.topics = self.topics[:self.topics.index(topic)]
236 self.topics = self.topics[:self.topics.index(topic)]
237 # reset the last topic to the one we just unwound to,
237 # reset the last topic to the one we just unwound to,
238 # so that higher-level topics will be stickier than
238 # so that higher-level topics will be stickier than
239 # lower-level topics
239 # lower-level topics
240 if self.topics:
240 if self.topics:
241 self.lasttopic = self.topics[-1]
241 self.lasttopic = self.topics[-1]
242 else:
242 else:
243 self.lasttopic = None
243 self.lasttopic = None
244 else:
244 else:
245 if topic not in self.topics:
245 if topic not in self.topics:
246 self.starttimes[topic] = now
246 self.starttimes[topic] = now
247 self.startvals[topic] = pos
247 self.startvals[topic] = pos
248 self.topics.append(topic)
248 self.topics.append(topic)
249 self.topicstates[topic] = pos, item, unit, total
249 self.topicstates[topic] = pos, item, unit, total
250 self.curtopic = topic
250 self.curtopic = topic
251 if now - self.lastprint >= self.refresh and self.topics:
251 if now - self.lastprint >= self.refresh and self.topics:
252 if self._oktoprint(now):
252 if self._oktoprint(now):
253 self.lastprint = now
253 self.lastprint = now
254 self.show(now, topic, *self.topicstates[topic])
254 self.show(now, topic, *self.topicstates[topic])
255 finally:
255 finally:
256 self._refreshlock.release()
256 self._refreshlock.release()
@@ -1,477 +1,465 b''
1 $ remove() {
1 $ remove() {
2 > hg rm $@
2 > hg rm $@
3 > echo "exit code: $?"
3 > echo "exit code: $?"
4 > hg st
4 > hg st
5 > # do not use ls -R, which recurses in .hg subdirs on Mac OS X 10.5
5 > # do not use ls -R, which recurses in .hg subdirs on Mac OS X 10.5
6 > find . -name .hg -prune -o -type f -print | sort
6 > find . -name .hg -prune -o -type f -print | sort
7 > hg up -C
7 > hg up -C
8 > }
8 > }
9
9
10 $ cat >> $HGRCPATH <<EOF
10 $ cat >> $HGRCPATH <<EOF
11 > [progress]
11 > [progress]
12 > disable=False
12 > disable=False
13 > assume-tty = 1
13 > assume-tty = 1
14 > delay = 0
14 > delay = 0
15 > # set changedelay really large so we don't see nested topics
15 > # set changedelay really large so we don't see nested topics
16 > changedelay = 30000
16 > changedelay = 30000
17 > format = topic bar number
17 > format = topic bar number
18 > refresh = 0
18 > refresh = 0
19 > width = 60
19 > width = 60
20 > EOF
20 > EOF
21
21
22 $ hg init a
22 $ hg init a
23 $ cd a
23 $ cd a
24 $ echo a > foo
24 $ echo a > foo
25
25
26 file not managed
26 file not managed
27
27
28 $ remove foo
28 $ remove foo
29 \r (no-eol) (esc)
29 \r (no-eol) (esc)
30 deleting [===========================================>] 1/1\r (no-eol) (esc)
30 deleting [===========================================>] 1/1\r (no-eol) (esc)
31 \r (no-eol) (esc)
31 \r (no-eol) (esc)
32 not removing foo: file is untracked
32 not removing foo: file is untracked
33 exit code: 1
33 exit code: 1
34 ? foo
34 ? foo
35 ./foo
35 ./foo
36 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
36 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
37
37
38 $ hg add foo
38 $ hg add foo
39 $ hg commit -m1
39 $ hg commit -m1
40
40
41 the table cases
41 the table cases
42 00 state added, options none
42 00 state added, options none
43
43
44 $ echo b > bar
44 $ echo b > bar
45 $ hg add bar
45 $ hg add bar
46 $ remove bar
46 $ remove bar
47 \r (no-eol) (esc)
47 \r (no-eol) (esc)
48 deleting [===========================================>] 1/1\r (no-eol) (esc)
48 deleting [===========================================>] 1/1\r (no-eol) (esc)
49 \r (no-eol) (esc)
49 \r (no-eol) (esc)
50 \r (no-eol) (esc)
50 \r (no-eol) (esc)
51 skipping [===========================================>] 1/1\r (no-eol) (esc)
51 skipping [===========================================>] 1/1\r (no-eol) (esc)
52 \r (no-eol) (esc)
52 \r (no-eol) (esc)
53 not removing bar: file has been marked for add (use forget to undo)
53 not removing bar: file has been marked for add (use forget to undo)
54 exit code: 1
54 exit code: 1
55 A bar
55 A bar
56 ./bar
56 ./bar
57 ./foo
57 ./foo
58 \r (no-eol) (esc)
58 \r (no-eol) (esc)
59 updating [===========================================>] 1/1\r (no-eol) (esc)
59 updating [===========================================>] 1/1\r (no-eol) (esc)
60 \r (no-eol) (esc)
60 \r (no-eol) (esc)
61 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
61 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
62
62
63 01 state clean, options none
63 01 state clean, options none
64
64
65 $ remove foo
65 $ remove foo
66 \r (no-eol) (esc)
66 \r (no-eol) (esc)
67 deleting [===========================================>] 1/1\r (no-eol) (esc)
67 deleting [===========================================>] 1/1\r (no-eol) (esc)
68 \r (no-eol) (esc)
68 \r (no-eol) (esc)
69 exit code: 0
69 exit code: 0
70 R foo
70 R foo
71 ? bar
71 ? bar
72 ./bar
72 ./bar
73 \r (no-eol) (esc)
73 \r (no-eol) (esc)
74 updating [===========================================>] 1/1\r (no-eol) (esc)
74 updating [===========================================>] 1/1\r (no-eol) (esc)
75 \r (no-eol) (esc)
75 \r (no-eol) (esc)
76 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
76 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
77
77
78 02 state modified, options none
78 02 state modified, options none
79
79
80 $ echo b >> foo
80 $ echo b >> foo
81 $ remove foo
81 $ remove foo
82 \r (no-eol) (esc)
82 \r (no-eol) (esc)
83 deleting [===========================================>] 1/1\r (no-eol) (esc)
83 deleting [===========================================>] 1/1\r (no-eol) (esc)
84 \r (no-eol) (esc)
84 \r (no-eol) (esc)
85 \r (no-eol) (esc)
85 \r (no-eol) (esc)
86 skipping [===========================================>] 1/1\r (no-eol) (esc)
86 skipping [===========================================>] 1/1\r (no-eol) (esc)
87 \r (no-eol) (esc)
87 \r (no-eol) (esc)
88 not removing foo: file is modified (use -f to force removal)
88 not removing foo: file is modified (use -f to force removal)
89 exit code: 1
89 exit code: 1
90 M foo
90 M foo
91 ? bar
91 ? bar
92 ./bar
92 ./bar
93 ./foo
93 ./foo
94 \r (no-eol) (esc)
94 \r (no-eol) (esc)
95 updating [===========================================>] 1/1\r (no-eol) (esc)
95 updating [===========================================>] 1/1\r (no-eol) (esc)
96 \r (no-eol) (esc)
96 \r (no-eol) (esc)
97 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
97 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
98
98
99 03 state missing, options none
99 03 state missing, options none
100
100
101 $ rm foo
101 $ rm foo
102 $ remove foo
102 $ remove foo
103 \r (no-eol) (esc)
103 \r (no-eol) (esc)
104 deleting [===========================================>] 1/1\r (no-eol) (esc)
104 deleting [===========================================>] 1/1\r (no-eol) (esc)
105 \r (no-eol) (esc)
105 \r (no-eol) (esc)
106 exit code: 0
106 exit code: 0
107 R foo
107 R foo
108 ? bar
108 ? bar
109 ./bar
109 ./bar
110 \r (no-eol) (esc)
110 \r (no-eol) (esc)
111 updating [===========================================>] 1/1\r (no-eol) (esc)
111 updating [===========================================>] 1/1\r (no-eol) (esc)
112 \r (no-eol) (esc)
112 \r (no-eol) (esc)
113 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
113 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
114
114
115 10 state added, options -f
115 10 state added, options -f
116
116
117 $ echo b > bar
117 $ echo b > bar
118 $ hg add bar
118 $ hg add bar
119 $ remove -f bar
119 $ remove -f bar
120 \r (no-eol) (esc)
120 \r (no-eol) (esc)
121 deleting [===========================================>] 1/1\r (no-eol) (esc)
121 deleting [===========================================>] 1/1\r (no-eol) (esc)
122 \r (no-eol) (esc)
122 \r (no-eol) (esc)
123 exit code: 0
123 exit code: 0
124 ? bar
124 ? bar
125 ./bar
125 ./bar
126 ./foo
126 ./foo
127 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
127 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
128 $ rm bar
128 $ rm bar
129
129
130 11 state clean, options -f
130 11 state clean, options -f
131
131
132 $ remove -f foo
132 $ remove -f foo
133 \r (no-eol) (esc)
133 \r (no-eol) (esc)
134 deleting [===========================================>] 1/1\r (no-eol) (esc)
134 deleting [===========================================>] 1/1\r (no-eol) (esc)
135 \r (no-eol) (esc)
135 \r (no-eol) (esc)
136 exit code: 0
136 exit code: 0
137 R foo
137 R foo
138 \r (no-eol) (esc)
138 \r (no-eol) (esc)
139 updating [===========================================>] 1/1\r (no-eol) (esc)
139 updating [===========================================>] 1/1\r (no-eol) (esc)
140 \r (no-eol) (esc)
140 \r (no-eol) (esc)
141 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
141 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
142
142
143 12 state modified, options -f
143 12 state modified, options -f
144
144
145 $ echo b >> foo
145 $ echo b >> foo
146 $ remove -f foo
146 $ remove -f foo
147 \r (no-eol) (esc)
147 \r (no-eol) (esc)
148 deleting [===========================================>] 1/1\r (no-eol) (esc)
148 deleting [===========================================>] 1/1\r (no-eol) (esc)
149 \r (no-eol) (esc)
149 \r (no-eol) (esc)
150 exit code: 0
150 exit code: 0
151 R foo
151 R foo
152 \r (no-eol) (esc)
152 \r (no-eol) (esc)
153 updating [===========================================>] 1/1\r (no-eol) (esc)
153 updating [===========================================>] 1/1\r (no-eol) (esc)
154 \r (no-eol) (esc)
154 \r (no-eol) (esc)
155 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
155 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
156
156
157 13 state missing, options -f
157 13 state missing, options -f
158
158
159 $ rm foo
159 $ rm foo
160 $ remove -f foo
160 $ remove -f foo
161 \r (no-eol) (esc)
161 \r (no-eol) (esc)
162 deleting [===========================================>] 1/1\r (no-eol) (esc)
162 deleting [===========================================>] 1/1\r (no-eol) (esc)
163 \r (no-eol) (esc)
163 \r (no-eol) (esc)
164 exit code: 0
164 exit code: 0
165 R foo
165 R foo
166 \r (no-eol) (esc)
166 \r (no-eol) (esc)
167 updating [===========================================>] 1/1\r (no-eol) (esc)
167 updating [===========================================>] 1/1\r (no-eol) (esc)
168 \r (no-eol) (esc)
168 \r (no-eol) (esc)
169 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
169 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
170
170
171 20 state added, options -A
171 20 state added, options -A
172
172
173 $ echo b > bar
173 $ echo b > bar
174 $ hg add bar
174 $ hg add bar
175 $ remove -A bar
175 $ remove -A bar
176 \r (no-eol) (esc)
176 \r (no-eol) (esc)
177 deleting [===========================================>] 1/1\r (no-eol) (esc)
177 deleting [===========================================>] 1/1\r (no-eol) (esc)
178 \r (no-eol) (esc)
178 \r (no-eol) (esc)
179 \r (no-eol) (esc)
179 \r (no-eol) (esc)
180 skipping [===========================================>] 1/1\r (no-eol) (esc)
180 skipping [===========================================>] 1/1\r (no-eol) (esc)
181 \r (no-eol) (esc)
181 \r (no-eol) (esc)
182 not removing bar: file still exists
182 not removing bar: file still exists
183 exit code: 1
183 exit code: 1
184 A bar
184 A bar
185 ./bar
185 ./bar
186 ./foo
186 ./foo
187 \r (no-eol) (esc)
187 \r (no-eol) (esc)
188 updating [===========================================>] 1/1\r (no-eol) (esc)
188 updating [===========================================>] 1/1\r (no-eol) (esc)
189 \r (no-eol) (esc)
189 \r (no-eol) (esc)
190 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
190 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
191
191
192 21 state clean, options -A
192 21 state clean, options -A
193
193
194 $ remove -A foo
194 $ remove -A foo
195 \r (no-eol) (esc)
195 \r (no-eol) (esc)
196 deleting [===========================================>] 1/1\r (no-eol) (esc)
196 deleting [===========================================>] 1/1\r (no-eol) (esc)
197 \r (no-eol) (esc)
197 \r (no-eol) (esc)
198 \r (no-eol) (esc)
198 \r (no-eol) (esc)
199 skipping [===========================================>] 1/1\r (no-eol) (esc)
199 skipping [===========================================>] 1/1\r (no-eol) (esc)
200 \r (no-eol) (esc)
200 \r (no-eol) (esc)
201 not removing foo: file still exists
201 not removing foo: file still exists
202 exit code: 1
202 exit code: 1
203 ? bar
203 ? bar
204 ./bar
204 ./bar
205 ./foo
205 ./foo
206 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
206 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
207
207
208 22 state modified, options -A
208 22 state modified, options -A
209
209
210 $ echo b >> foo
210 $ echo b >> foo
211 $ remove -A foo
211 $ remove -A foo
212 \r (no-eol) (esc)
212 \r (no-eol) (esc)
213 deleting [===========================================>] 1/1\r (no-eol) (esc)
213 deleting [===========================================>] 1/1\r (no-eol) (esc)
214 \r (no-eol) (esc)
214 \r (no-eol) (esc)
215 \r (no-eol) (esc)
215 \r (no-eol) (esc)
216 skipping [===========================================>] 1/1\r (no-eol) (esc)
216 skipping [===========================================>] 1/1\r (no-eol) (esc)
217 \r (no-eol) (esc)
217 \r (no-eol) (esc)
218 not removing foo: file still exists
218 not removing foo: file still exists
219 exit code: 1
219 exit code: 1
220 M foo
220 M foo
221 ? bar
221 ? bar
222 ./bar
222 ./bar
223 ./foo
223 ./foo
224 \r (no-eol) (esc)
224 \r (no-eol) (esc)
225 updating [===========================================>] 1/1\r (no-eol) (esc)
225 updating [===========================================>] 1/1\r (no-eol) (esc)
226 \r (no-eol) (esc)
226 \r (no-eol) (esc)
227 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
227 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
228
228
229 23 state missing, options -A
229 23 state missing, options -A
230
230
231 $ rm foo
231 $ rm foo
232 $ remove -A foo
232 $ remove -A foo
233 \r (no-eol) (esc)
233 \r (no-eol) (esc)
234 deleting [===========================================>] 1/1\r (no-eol) (esc)
234 deleting [===========================================>] 1/1\r (no-eol) (esc)
235 \r (no-eol) (esc)
235 \r (no-eol) (esc)
236 exit code: 0
236 exit code: 0
237 R foo
237 R foo
238 ? bar
238 ? bar
239 ./bar
239 ./bar
240 \r (no-eol) (esc)
240 \r (no-eol) (esc)
241 updating [===========================================>] 1/1\r (no-eol) (esc)
241 updating [===========================================>] 1/1\r (no-eol) (esc)
242 \r (no-eol) (esc)
242 \r (no-eol) (esc)
243 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
243 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
244
244
245 30 state added, options -Af
245 30 state added, options -Af
246
246
247 $ echo b > bar
247 $ echo b > bar
248 $ hg add bar
248 $ hg add bar
249 $ remove -Af bar
249 $ remove -Af bar
250 \r (no-eol) (esc)
250 \r (no-eol) (esc)
251 deleting [===========================================>] 1/1\r (no-eol) (esc)
251 deleting [===========================================>] 1/1\r (no-eol) (esc)
252 \r (no-eol) (esc)
252 \r (no-eol) (esc)
253 exit code: 0
253 exit code: 0
254 ? bar
254 ? bar
255 ./bar
255 ./bar
256 ./foo
256 ./foo
257 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
257 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
258 $ rm bar
258 $ rm bar
259
259
260 31 state clean, options -Af
260 31 state clean, options -Af
261
261
262 $ remove -Af foo
262 $ remove -Af foo
263 \r (no-eol) (esc)
263 \r (no-eol) (esc)
264 deleting [===========================================>] 1/1\r (no-eol) (esc)
264 deleting [===========================================>] 1/1\r (no-eol) (esc)
265 \r (no-eol) (esc)
265 \r (no-eol) (esc)
266 exit code: 0
266 exit code: 0
267 R foo
267 R foo
268 ./foo
268 ./foo
269 \r (no-eol) (esc)
269 \r (no-eol) (esc)
270 updating [===========================================>] 1/1\r (no-eol) (esc)
270 updating [===========================================>] 1/1\r (no-eol) (esc)
271 \r (no-eol) (esc)
271 \r (no-eol) (esc)
272 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
272 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
273
273
274 32 state modified, options -Af
274 32 state modified, options -Af
275
275
276 $ echo b >> foo
276 $ echo b >> foo
277 $ remove -Af foo
277 $ remove -Af foo
278 \r (no-eol) (esc)
278 \r (no-eol) (esc)
279 deleting [===========================================>] 1/1\r (no-eol) (esc)
279 deleting [===========================================>] 1/1\r (no-eol) (esc)
280 \r (no-eol) (esc)
280 \r (no-eol) (esc)
281 exit code: 0
281 exit code: 0
282 R foo
282 R foo
283 ./foo
283 ./foo
284 \r (no-eol) (esc)
284 \r (no-eol) (esc)
285 updating [===========================================>] 1/1\r (no-eol) (esc)
285 updating [===========================================>] 1/1\r (no-eol) (esc)
286 \r (no-eol) (esc)
286 \r (no-eol) (esc)
287 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
287 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
288
288
289 33 state missing, options -Af
289 33 state missing, options -Af
290
290
291 $ rm foo
291 $ rm foo
292 $ remove -Af foo
292 $ remove -Af foo
293 \r (no-eol) (esc)
293 \r (no-eol) (esc)
294 deleting [===========================================>] 1/1\r (no-eol) (esc)
294 deleting [===========================================>] 1/1\r (no-eol) (esc)
295 \r (no-eol) (esc)
295 \r (no-eol) (esc)
296 exit code: 0
296 exit code: 0
297 R foo
297 R foo
298 \r (no-eol) (esc)
298 \r (no-eol) (esc)
299 updating [===========================================>] 1/1\r (no-eol) (esc)
299 updating [===========================================>] 1/1\r (no-eol) (esc)
300 \r (no-eol) (esc)
300 \r (no-eol) (esc)
301 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
301 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
302
302
303 test some directory stuff
303 test some directory stuff
304
304
305 $ mkdir test
305 $ mkdir test
306 $ echo a > test/foo
306 $ echo a > test/foo
307 $ echo b > test/bar
307 $ echo b > test/bar
308 $ hg ci -Am2
308 $ hg ci -Am2
309 adding test/bar
309 adding test/bar
310 adding test/foo
310 adding test/foo
311
311
312 dir, options none
312 dir, options none
313
313
314 $ rm test/bar
314 $ rm test/bar
315 $ remove test
315 $ remove test
316 \r (no-eol) (esc)
316 \r (no-eol) (esc)
317 deleting [===========================================>] 1/1\r (no-eol) (esc)
317 deleting [===========================================>] 1/1\r (no-eol) (esc)
318 \r (no-eol) (esc)
318 \r (no-eol) (esc)
319 \r (no-eol) (esc)
319 \r (no-eol) (esc)
320 deleting [=====================> ] 1/2\r (no-eol) (esc)
320 deleting [=====================> ] 1/2\r (no-eol) (esc)
321 \r (no-eol) (esc)
321 \r (no-eol) (esc)
322 \r (no-eol) (esc)
322 \r (no-eol) (esc)
323 deleting [===========================================>] 2/2\r (no-eol) (esc)
323 deleting [===========================================>] 2/2\r (no-eol) (esc)
324 \r (no-eol) (esc)
324 \r (no-eol) (esc)
325 \r (no-eol) (esc)
326 \r (no-eol) (esc)
327 removing test/bar (glob)
325 removing test/bar (glob)
328 removing test/foo (glob)
326 removing test/foo (glob)
329 exit code: 0
327 exit code: 0
330 R test/bar
328 R test/bar
331 R test/foo
329 R test/foo
332 ./foo
330 ./foo
333 \r (no-eol) (esc)
331 \r (no-eol) (esc)
334 updating [===========================================>] 2/2\r (no-eol) (esc)
332 updating [===========================================>] 2/2\r (no-eol) (esc)
335 \r (no-eol) (esc)
333 \r (no-eol) (esc)
336 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
334 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
337
335
338 dir, options -f
336 dir, options -f
339
337
340 $ rm test/bar
338 $ rm test/bar
341 $ remove -f test
339 $ remove -f test
342 \r (no-eol) (esc)
340 \r (no-eol) (esc)
343 deleting [===========================================>] 1/1\r (no-eol) (esc)
341 deleting [===========================================>] 1/1\r (no-eol) (esc)
344 \r (no-eol) (esc)
342 \r (no-eol) (esc)
345 \r (no-eol) (esc)
343 \r (no-eol) (esc)
346 deleting [=====================> ] 1/2\r (no-eol) (esc)
344 deleting [=====================> ] 1/2\r (no-eol) (esc)
347 \r (no-eol) (esc)
345 \r (no-eol) (esc)
348 \r (no-eol) (esc)
346 \r (no-eol) (esc)
349 deleting [===========================================>] 2/2\r (no-eol) (esc)
347 deleting [===========================================>] 2/2\r (no-eol) (esc)
350 \r (no-eol) (esc)
348 \r (no-eol) (esc)
351 \r (no-eol) (esc)
352 \r (no-eol) (esc)
353 removing test/bar (glob)
349 removing test/bar (glob)
354 removing test/foo (glob)
350 removing test/foo (glob)
355 exit code: 0
351 exit code: 0
356 R test/bar
352 R test/bar
357 R test/foo
353 R test/foo
358 ./foo
354 ./foo
359 \r (no-eol) (esc)
355 \r (no-eol) (esc)
360 updating [===========================================>] 2/2\r (no-eol) (esc)
356 updating [===========================================>] 2/2\r (no-eol) (esc)
361 \r (no-eol) (esc)
357 \r (no-eol) (esc)
362 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
358 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
363
359
364 dir, options -A
360 dir, options -A
365
361
366 $ rm test/bar
362 $ rm test/bar
367 $ remove -A test
363 $ remove -A test
368 \r (no-eol) (esc)
364 \r (no-eol) (esc)
369 deleting [===========================================>] 1/1\r (no-eol) (esc)
365 deleting [===========================================>] 1/1\r (no-eol) (esc)
370 \r (no-eol) (esc)
366 \r (no-eol) (esc)
371 \r (no-eol) (esc)
367 \r (no-eol) (esc)
372 skipping [===========================================>] 1/1\r (no-eol) (esc)
368 skipping [===========================================>] 1/1\r (no-eol) (esc)
373 \r (no-eol) (esc)
369 \r (no-eol) (esc)
374 \r (no-eol) (esc)
370 \r (no-eol) (esc)
375 deleting [===========================================>] 1/1\r (no-eol) (esc)
371 deleting [===========================================>] 1/1\r (no-eol) (esc)
376 \r (no-eol) (esc)
372 \r (no-eol) (esc)
377 \r (no-eol) (esc)
378 \r (no-eol) (esc)
379 removing test/bar (glob)
373 removing test/bar (glob)
380 not removing test/foo: file still exists (glob)
374 not removing test/foo: file still exists (glob)
381 exit code: 1
375 exit code: 1
382 R test/bar
376 R test/bar
383 ./foo
377 ./foo
384 ./test/foo
378 ./test/foo
385 \r (no-eol) (esc)
379 \r (no-eol) (esc)
386 updating [===========================================>] 1/1\r (no-eol) (esc)
380 updating [===========================================>] 1/1\r (no-eol) (esc)
387 \r (no-eol) (esc)
381 \r (no-eol) (esc)
388 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
382 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
389
383
390 dir, options -Af
384 dir, options -Af
391
385
392 $ rm test/bar
386 $ rm test/bar
393 $ remove -Af test
387 $ remove -Af test
394 \r (no-eol) (esc)
388 \r (no-eol) (esc)
395 deleting [===========================================>] 1/1\r (no-eol) (esc)
389 deleting [===========================================>] 1/1\r (no-eol) (esc)
396 \r (no-eol) (esc)
390 \r (no-eol) (esc)
397 \r (no-eol) (esc)
391 \r (no-eol) (esc)
398 deleting [=====================> ] 1/2\r (no-eol) (esc)
392 deleting [=====================> ] 1/2\r (no-eol) (esc)
399 \r (no-eol) (esc)
393 \r (no-eol) (esc)
400 \r (no-eol) (esc)
394 \r (no-eol) (esc)
401 deleting [===========================================>] 2/2\r (no-eol) (esc)
395 deleting [===========================================>] 2/2\r (no-eol) (esc)
402 \r (no-eol) (esc)
396 \r (no-eol) (esc)
403 \r (no-eol) (esc)
404 \r (no-eol) (esc)
405 removing test/bar (glob)
397 removing test/bar (glob)
406 removing test/foo (glob)
398 removing test/foo (glob)
407 exit code: 0
399 exit code: 0
408 R test/bar
400 R test/bar
409 R test/foo
401 R test/foo
410 ./foo
402 ./foo
411 ./test/foo
403 ./test/foo
412 \r (no-eol) (esc)
404 \r (no-eol) (esc)
413 updating [===========================================>] 2/2\r (no-eol) (esc)
405 updating [===========================================>] 2/2\r (no-eol) (esc)
414 \r (no-eol) (esc)
406 \r (no-eol) (esc)
415 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
407 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
416
408
417 test remove dropping empty trees (issue1861)
409 test remove dropping empty trees (issue1861)
418
410
419 $ mkdir -p issue1861/b/c
411 $ mkdir -p issue1861/b/c
420 $ echo x > issue1861/x
412 $ echo x > issue1861/x
421 $ echo y > issue1861/b/c/y
413 $ echo y > issue1861/b/c/y
422 $ hg ci -Am add
414 $ hg ci -Am add
423 adding issue1861/b/c/y
415 adding issue1861/b/c/y
424 adding issue1861/x
416 adding issue1861/x
425 $ hg rm issue1861/b
417 $ hg rm issue1861/b
426 \r (no-eol) (esc)
418 \r (no-eol) (esc)
427 deleting [===========================================>] 1/1\r (no-eol) (esc)
419 deleting [===========================================>] 1/1\r (no-eol) (esc)
428 \r (no-eol) (esc)
420 \r (no-eol) (esc)
429 \r (no-eol) (esc)
421 \r (no-eol) (esc)
430 deleting [===========================================>] 1/1\r (no-eol) (esc)
422 deleting [===========================================>] 1/1\r (no-eol) (esc)
431 \r (no-eol) (esc)
423 \r (no-eol) (esc)
432 \r (no-eol) (esc)
433 \r (no-eol) (esc)
434 removing issue1861/b/c/y (glob)
424 removing issue1861/b/c/y (glob)
435 $ hg ci -m remove
425 $ hg ci -m remove
436 $ ls issue1861
426 $ ls issue1861
437 x
427 x
438
428
439 test that commit does not crash if the user removes a newly added file
429 test that commit does not crash if the user removes a newly added file
440
430
441 $ touch f1
431 $ touch f1
442 $ hg add f1
432 $ hg add f1
443 $ rm f1
433 $ rm f1
444 $ hg ci -A -mx
434 $ hg ci -A -mx
445 removing f1
435 removing f1
446 nothing changed
436 nothing changed
447 [1]
437 [1]
448
438
449 handling of untracked directories and missing files
439 handling of untracked directories and missing files
450
440
451 $ mkdir d1
441 $ mkdir d1
452 $ echo a > d1/a
442 $ echo a > d1/a
453 $ hg rm --after d1
443 $ hg rm --after d1
454 \r (no-eol) (esc)
444 \r (no-eol) (esc)
455 deleting [===========================================>] 1/1\r (no-eol) (esc)
445 deleting [===========================================>] 1/1\r (no-eol) (esc)
456 \r (no-eol) (esc)
446 \r (no-eol) (esc)
457 not removing d1: no tracked files
447 not removing d1: no tracked files
458 [1]
448 [1]
459 $ hg add d1/a
449 $ hg add d1/a
460 $ rm d1/a
450 $ rm d1/a
461 $ hg rm --after d1
451 $ hg rm --after d1
462 \r (no-eol) (esc)
452 \r (no-eol) (esc)
463 deleting [===========================================>] 1/1\r (no-eol) (esc)
453 deleting [===========================================>] 1/1\r (no-eol) (esc)
464 \r (no-eol) (esc)
454 \r (no-eol) (esc)
465 \r (no-eol) (esc)
455 \r (no-eol) (esc)
466 deleting [===========================================>] 1/1\r (no-eol) (esc)
456 deleting [===========================================>] 1/1\r (no-eol) (esc)
467 \r (no-eol) (esc)
457 \r (no-eol) (esc)
468 \r (no-eol) (esc)
469 \r (no-eol) (esc)
470 removing d1/a (glob)
458 removing d1/a (glob)
471
459
472 $ hg rm --after nosuch
460 $ hg rm --after nosuch
473 nosuch: * (glob)
461 nosuch: * (glob)
474 \r (no-eol) (esc)
462 \r (no-eol) (esc)
475 deleting [===========================================>] 1/1\r (no-eol) (esc)
463 deleting [===========================================>] 1/1\r (no-eol) (esc)
476 \r (no-eol) (esc)
464 \r (no-eol) (esc)
477 [1]
465 [1]
@@ -1,1099 +1,1097 b''
1 $ cat >> $HGRCPATH <<EOF
1 $ cat >> $HGRCPATH <<EOF
2 > [extdiff]
2 > [extdiff]
3 > # for portability:
3 > # for portability:
4 > pdiff = sh "$RUNTESTDIR/pdiff"
4 > pdiff = sh "$RUNTESTDIR/pdiff"
5 > [progress]
5 > [progress]
6 > disable=False
6 > disable=False
7 > assume-tty = 1
7 > assume-tty = 1
8 > delay = 0
8 > delay = 0
9 > # set changedelay really large so we don't see nested topics
9 > # set changedelay really large so we don't see nested topics
10 > changedelay = 30000
10 > changedelay = 30000
11 > format = topic bar number
11 > format = topic bar number
12 > refresh = 0
12 > refresh = 0
13 > width = 60
13 > width = 60
14 > EOF
14 > EOF
15
15
16 Preparing the subrepository 'sub2'
16 Preparing the subrepository 'sub2'
17
17
18 $ hg init sub2
18 $ hg init sub2
19 $ echo sub2 > sub2/sub2
19 $ echo sub2 > sub2/sub2
20 $ hg add -R sub2
20 $ hg add -R sub2
21 adding sub2/sub2 (glob)
21 adding sub2/sub2 (glob)
22 $ hg commit -R sub2 -m "sub2 import"
22 $ hg commit -R sub2 -m "sub2 import"
23
23
24 Preparing the 'sub1' repo which depends on the subrepo 'sub2'
24 Preparing the 'sub1' repo which depends on the subrepo 'sub2'
25
25
26 $ hg init sub1
26 $ hg init sub1
27 $ echo sub1 > sub1/sub1
27 $ echo sub1 > sub1/sub1
28 $ echo "sub2 = ../sub2" > sub1/.hgsub
28 $ echo "sub2 = ../sub2" > sub1/.hgsub
29 $ hg clone sub2 sub1/sub2
29 $ hg clone sub2 sub1/sub2
30 \r (no-eol) (esc)
30 \r (no-eol) (esc)
31 linking [ <=> ] 1\r (no-eol) (esc)
31 linking [ <=> ] 1\r (no-eol) (esc)
32 linking [ <=> ] 2\r (no-eol) (esc)
32 linking [ <=> ] 2\r (no-eol) (esc)
33 linking [ <=> ] 3\r (no-eol) (esc)
33 linking [ <=> ] 3\r (no-eol) (esc)
34 linking [ <=> ] 4\r (no-eol) (esc)
34 linking [ <=> ] 4\r (no-eol) (esc)
35 linking [ <=> ] 5\r (no-eol) (esc)
35 linking [ <=> ] 5\r (no-eol) (esc)
36 linking [ <=> ] 6\r (no-eol) (esc)
36 linking [ <=> ] 6\r (no-eol) (esc)
37 \r (no-eol) (esc)
37 \r (no-eol) (esc)
38 \r (no-eol) (esc)
38 \r (no-eol) (esc)
39 updating [===========================================>] 1/1\r (no-eol) (esc)
39 updating [===========================================>] 1/1\r (no-eol) (esc)
40 \r (no-eol) (esc)
40 \r (no-eol) (esc)
41 updating to branch default
41 updating to branch default
42 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
42 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
43 $ hg add -R sub1
43 $ hg add -R sub1
44 adding sub1/.hgsub (glob)
44 adding sub1/.hgsub (glob)
45 adding sub1/sub1 (glob)
45 adding sub1/sub1 (glob)
46 $ hg commit -R sub1 -m "sub1 import"
46 $ hg commit -R sub1 -m "sub1 import"
47
47
48 Preparing the 'main' repo which depends on the subrepo 'sub1'
48 Preparing the 'main' repo which depends on the subrepo 'sub1'
49
49
50 $ hg init main
50 $ hg init main
51 $ echo main > main/main
51 $ echo main > main/main
52 $ echo "sub1 = ../sub1" > main/.hgsub
52 $ echo "sub1 = ../sub1" > main/.hgsub
53 $ hg clone sub1 main/sub1
53 $ hg clone sub1 main/sub1
54 \r (no-eol) (esc)
54 \r (no-eol) (esc)
55 linking [ <=> ] 1\r (no-eol) (esc)
55 linking [ <=> ] 1\r (no-eol) (esc)
56 linking [ <=> ] 2\r (no-eol) (esc)
56 linking [ <=> ] 2\r (no-eol) (esc)
57 linking [ <=> ] 3\r (no-eol) (esc)
57 linking [ <=> ] 3\r (no-eol) (esc)
58 linking [ <=> ] 4\r (no-eol) (esc)
58 linking [ <=> ] 4\r (no-eol) (esc)
59 linking [ <=> ] 5\r (no-eol) (esc)
59 linking [ <=> ] 5\r (no-eol) (esc)
60 linking [ <=> ] 6\r (no-eol) (esc)
60 linking [ <=> ] 6\r (no-eol) (esc)
61 linking [ <=> ] 7\r (no-eol) (esc)
61 linking [ <=> ] 7\r (no-eol) (esc)
62 linking [ <=> ] 8\r (no-eol) (esc)
62 linking [ <=> ] 8\r (no-eol) (esc)
63 \r (no-eol) (esc)
63 \r (no-eol) (esc)
64 \r (no-eol) (esc)
64 \r (no-eol) (esc)
65 updating [===========================================>] 3/3\r (no-eol) (esc)
65 updating [===========================================>] 3/3\r (no-eol) (esc)
66 updating [===========================================>] 1/1\r (no-eol) (esc)
66 updating [===========================================>] 1/1\r (no-eol) (esc)
67 \r (no-eol) (esc)
67 \r (no-eol) (esc)
68 updating to branch default
68 updating to branch default
69 cloning subrepo sub2 from $TESTTMP/sub2
69 cloning subrepo sub2 from $TESTTMP/sub2
70 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
70 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
71 $ hg add -R main
71 $ hg add -R main
72 adding main/.hgsub (glob)
72 adding main/.hgsub (glob)
73 adding main/main (glob)
73 adding main/main (glob)
74 $ hg commit -R main -m "main import"
74 $ hg commit -R main -m "main import"
75
75
76 Cleaning both repositories, just as a clone -U
76 Cleaning both repositories, just as a clone -U
77
77
78 $ hg up -C -R sub2 null
78 $ hg up -C -R sub2 null
79 \r (no-eol) (esc)
79 \r (no-eol) (esc)
80 updating [===========================================>] 1/1\r (no-eol) (esc)
80 updating [===========================================>] 1/1\r (no-eol) (esc)
81 \r (no-eol) (esc)
81 \r (no-eol) (esc)
82 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
82 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
83 $ hg up -C -R sub1 null
83 $ hg up -C -R sub1 null
84 \r (no-eol) (esc)
84 \r (no-eol) (esc)
85 updating [===========================================>] 1/1\r (no-eol) (esc)
85 updating [===========================================>] 1/1\r (no-eol) (esc)
86 \r (no-eol) (esc)
86 \r (no-eol) (esc)
87 \r (no-eol) (esc)
87 \r (no-eol) (esc)
88 updating [===========================================>] 3/3\r (no-eol) (esc)
88 updating [===========================================>] 3/3\r (no-eol) (esc)
89 \r (no-eol) (esc)
89 \r (no-eol) (esc)
90 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
90 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
91 $ hg up -C -R main null
91 $ hg up -C -R main null
92 \r (no-eol) (esc)
92 \r (no-eol) (esc)
93 updating [===========================================>] 1/1\r (no-eol) (esc)
93 updating [===========================================>] 1/1\r (no-eol) (esc)
94 \r (no-eol) (esc)
94 \r (no-eol) (esc)
95 \r (no-eol) (esc)
95 \r (no-eol) (esc)
96 updating [===========================================>] 3/3\r (no-eol) (esc)
96 updating [===========================================>] 3/3\r (no-eol) (esc)
97 \r (no-eol) (esc)
97 \r (no-eol) (esc)
98 \r (no-eol) (esc)
98 \r (no-eol) (esc)
99 updating [===========================================>] 3/3\r (no-eol) (esc)
99 updating [===========================================>] 3/3\r (no-eol) (esc)
100 \r (no-eol) (esc)
100 \r (no-eol) (esc)
101 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
101 0 files updated, 0 files merged, 3 files removed, 0 files unresolved
102 $ rm -rf main/sub1
102 $ rm -rf main/sub1
103 $ rm -rf sub1/sub2
103 $ rm -rf sub1/sub2
104
104
105 Clone main
105 Clone main
106
106
107 $ hg --config extensions.largefiles= clone main cloned
107 $ hg --config extensions.largefiles= clone main cloned
108 \r (no-eol) (esc)
108 \r (no-eol) (esc)
109 linking [ <=> ] 1\r (no-eol) (esc)
109 linking [ <=> ] 1\r (no-eol) (esc)
110 linking [ <=> ] 2\r (no-eol) (esc)
110 linking [ <=> ] 2\r (no-eol) (esc)
111 linking [ <=> ] 3\r (no-eol) (esc)
111 linking [ <=> ] 3\r (no-eol) (esc)
112 linking [ <=> ] 4\r (no-eol) (esc)
112 linking [ <=> ] 4\r (no-eol) (esc)
113 linking [ <=> ] 5\r (no-eol) (esc)
113 linking [ <=> ] 5\r (no-eol) (esc)
114 linking [ <=> ] 6\r (no-eol) (esc)
114 linking [ <=> ] 6\r (no-eol) (esc)
115 linking [ <=> ] 7\r (no-eol) (esc)
115 linking [ <=> ] 7\r (no-eol) (esc)
116 linking [ <=> ] 8\r (no-eol) (esc)
116 linking [ <=> ] 8\r (no-eol) (esc)
117 \r (no-eol) (esc)
117 \r (no-eol) (esc)
118 \r (no-eol) (esc)
118 \r (no-eol) (esc)
119 updating [===========================================>] 3/3\r (no-eol) (esc)
119 updating [===========================================>] 3/3\r (no-eol) (esc)
120 updating [===========================================>] 3/3\r (no-eol) (esc)
120 updating [===========================================>] 3/3\r (no-eol) (esc)
121 updating [===========================================>] 1/1\r (no-eol) (esc)
121 updating [===========================================>] 1/1\r (no-eol) (esc)
122 \r (no-eol) (esc)
122 \r (no-eol) (esc)
123 updating to branch default
123 updating to branch default
124 cloning subrepo sub1 from $TESTTMP/sub1
124 cloning subrepo sub1 from $TESTTMP/sub1
125 cloning subrepo sub1/sub2 from $TESTTMP/sub2 (glob)
125 cloning subrepo sub1/sub2 from $TESTTMP/sub2 (glob)
126 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
126 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
127
127
128 Largefiles is NOT enabled in the clone if the source repo doesn't require it
128 Largefiles is NOT enabled in the clone if the source repo doesn't require it
129 $ cat cloned/.hg/hgrc
129 $ cat cloned/.hg/hgrc
130 # example repository config (see "hg help config" for more info)
130 # example repository config (see "hg help config" for more info)
131 [paths]
131 [paths]
132 default = $TESTTMP/main (glob)
132 default = $TESTTMP/main (glob)
133
133
134 # path aliases to other clones of this repo in URLs or filesystem paths
134 # path aliases to other clones of this repo in URLs or filesystem paths
135 # (see "hg help config.paths" for more info)
135 # (see "hg help config.paths" for more info)
136 #
136 #
137 # default-push = ssh://jdoe@example.net/hg/jdoes-fork
137 # default-push = ssh://jdoe@example.net/hg/jdoes-fork
138 # my-fork = ssh://jdoe@example.net/hg/jdoes-fork
138 # my-fork = ssh://jdoe@example.net/hg/jdoes-fork
139 # my-clone = /home/jdoe/jdoes-clone
139 # my-clone = /home/jdoe/jdoes-clone
140
140
141 [ui]
141 [ui]
142 # name and email (local to this repository, optional), e.g.
142 # name and email (local to this repository, optional), e.g.
143 # username = Jane Doe <jdoe@example.com>
143 # username = Jane Doe <jdoe@example.com>
144
144
145 Checking cloned repo ids
145 Checking cloned repo ids
146
146
147 $ printf "cloned " ; hg id -R cloned
147 $ printf "cloned " ; hg id -R cloned
148 cloned 7f491f53a367 tip
148 cloned 7f491f53a367 tip
149 $ printf "cloned/sub1 " ; hg id -R cloned/sub1
149 $ printf "cloned/sub1 " ; hg id -R cloned/sub1
150 cloned/sub1 fc3b4ce2696f tip
150 cloned/sub1 fc3b4ce2696f tip
151 $ printf "cloned/sub1/sub2 " ; hg id -R cloned/sub1/sub2
151 $ printf "cloned/sub1/sub2 " ; hg id -R cloned/sub1/sub2
152 cloned/sub1/sub2 c57a0840e3ba tip
152 cloned/sub1/sub2 c57a0840e3ba tip
153
153
154 debugsub output for main and sub1
154 debugsub output for main and sub1
155
155
156 $ hg debugsub -R cloned
156 $ hg debugsub -R cloned
157 path sub1
157 path sub1
158 source ../sub1
158 source ../sub1
159 revision fc3b4ce2696f7741438c79207583768f2ce6b0dd
159 revision fc3b4ce2696f7741438c79207583768f2ce6b0dd
160 $ hg debugsub -R cloned/sub1
160 $ hg debugsub -R cloned/sub1
161 path sub2
161 path sub2
162 source ../sub2
162 source ../sub2
163 revision c57a0840e3badd667ef3c3ef65471609acb2ba3c
163 revision c57a0840e3badd667ef3c3ef65471609acb2ba3c
164
164
165 Modifying deeply nested 'sub2'
165 Modifying deeply nested 'sub2'
166
166
167 $ echo modified > cloned/sub1/sub2/sub2
167 $ echo modified > cloned/sub1/sub2/sub2
168 $ hg commit --subrepos -m "deep nested modif should trigger a commit" -R cloned
168 $ hg commit --subrepos -m "deep nested modif should trigger a commit" -R cloned
169 committing subrepository sub1
169 committing subrepository sub1
170 committing subrepository sub1/sub2 (glob)
170 committing subrepository sub1/sub2 (glob)
171
171
172 Checking modified node ids
172 Checking modified node ids
173
173
174 $ printf "cloned " ; hg id -R cloned
174 $ printf "cloned " ; hg id -R cloned
175 cloned ffe6649062fe tip
175 cloned ffe6649062fe tip
176 $ printf "cloned/sub1 " ; hg id -R cloned/sub1
176 $ printf "cloned/sub1 " ; hg id -R cloned/sub1
177 cloned/sub1 2ecb03bf44a9 tip
177 cloned/sub1 2ecb03bf44a9 tip
178 $ printf "cloned/sub1/sub2 " ; hg id -R cloned/sub1/sub2
178 $ printf "cloned/sub1/sub2 " ; hg id -R cloned/sub1/sub2
179 cloned/sub1/sub2 53dd3430bcaf tip
179 cloned/sub1/sub2 53dd3430bcaf tip
180
180
181 debugsub output for main and sub1
181 debugsub output for main and sub1
182
182
183 $ hg debugsub -R cloned
183 $ hg debugsub -R cloned
184 path sub1
184 path sub1
185 source ../sub1
185 source ../sub1
186 revision 2ecb03bf44a94e749e8669481dd9069526ce7cb9
186 revision 2ecb03bf44a94e749e8669481dd9069526ce7cb9
187 $ hg debugsub -R cloned/sub1
187 $ hg debugsub -R cloned/sub1
188 path sub2
188 path sub2
189 source ../sub2
189 source ../sub2
190 revision 53dd3430bcaf5ab4a7c48262bcad6d441f510487
190 revision 53dd3430bcaf5ab4a7c48262bcad6d441f510487
191
191
192 Check that deep archiving works
192 Check that deep archiving works
193
193
194 $ cd cloned
194 $ cd cloned
195 $ echo 'test' > sub1/sub2/test.txt
195 $ echo 'test' > sub1/sub2/test.txt
196 $ hg --config extensions.largefiles=! add sub1/sub2/test.txt
196 $ hg --config extensions.largefiles=! add sub1/sub2/test.txt
197 $ mkdir sub1/sub2/folder
197 $ mkdir sub1/sub2/folder
198 $ echo 'subfolder' > sub1/sub2/folder/test.txt
198 $ echo 'subfolder' > sub1/sub2/folder/test.txt
199 $ hg ci -ASm "add test.txt"
199 $ hg ci -ASm "add test.txt"
200 adding sub1/sub2/folder/test.txt
200 adding sub1/sub2/folder/test.txt
201 committing subrepository sub1
201 committing subrepository sub1
202 committing subrepository sub1/sub2 (glob)
202 committing subrepository sub1/sub2 (glob)
203
203
204 .. but first take a detour through some deep removal testing
204 .. but first take a detour through some deep removal testing
205
205
206 $ hg remove -S -I 're:.*.txt' .
206 $ hg remove -S -I 're:.*.txt' .
207 \r (no-eol) (esc)
207 \r (no-eol) (esc)
208 searching [==========================================>] 1/1\r (no-eol) (esc)
208 searching [==========================================>] 1/1\r (no-eol) (esc)
209 searching [==========================================>] 1/1\r (no-eol) (esc)
209 searching [==========================================>] 1/1\r (no-eol) (esc)
210 \r (no-eol) (esc)
210 \r (no-eol) (esc)
211 \r (no-eol) (esc)
211 \r (no-eol) (esc)
212 deleting [=====================> ] 1/2\r (no-eol) (esc)
212 deleting [=====================> ] 1/2\r (no-eol) (esc)
213 \r (no-eol) (esc)
213 \r (no-eol) (esc)
214 \r (no-eol) (esc)
214 \r (no-eol) (esc)
215 deleting [===========================================>] 2/2\r (no-eol) (esc)
215 deleting [===========================================>] 2/2\r (no-eol) (esc)
216 \r (no-eol) (esc)
216 \r (no-eol) (esc)
217 \r (no-eol) (esc)
218 \r (no-eol) (esc)
219 removing sub1/sub2/folder/test.txt (glob)
217 removing sub1/sub2/folder/test.txt (glob)
220 removing sub1/sub2/test.txt (glob)
218 removing sub1/sub2/test.txt (glob)
221 $ hg status -S
219 $ hg status -S
222 R sub1/sub2/folder/test.txt
220 R sub1/sub2/folder/test.txt
223 R sub1/sub2/test.txt
221 R sub1/sub2/test.txt
224 $ hg update -Cq
222 $ hg update -Cq
225 $ hg remove -I 're:.*.txt' sub1
223 $ hg remove -I 're:.*.txt' sub1
226 \r (no-eol) (esc)
224 \r (no-eol) (esc)
227 searching [==========================================>] 1/1\r (no-eol) (esc)
225 searching [==========================================>] 1/1\r (no-eol) (esc)
228 \r (no-eol) (esc)
226 \r (no-eol) (esc)
229 \r (no-eol) (esc)
227 \r (no-eol) (esc)
230 deleting [===========================================>] 1/1\r (no-eol) (esc)
228 deleting [===========================================>] 1/1\r (no-eol) (esc)
231 \r (no-eol) (esc)
229 \r (no-eol) (esc)
232 $ hg status -S
230 $ hg status -S
233 $ hg remove sub1/sub2/folder/test.txt
231 $ hg remove sub1/sub2/folder/test.txt
234 \r (no-eol) (esc)
232 \r (no-eol) (esc)
235 searching [==========================================>] 1/1\r (no-eol) (esc)
233 searching [==========================================>] 1/1\r (no-eol) (esc)
236 searching [==========================================>] 1/1\r (no-eol) (esc)
234 searching [==========================================>] 1/1\r (no-eol) (esc)
237 \r (no-eol) (esc)
235 \r (no-eol) (esc)
238 \r (no-eol) (esc)
236 \r (no-eol) (esc)
239 deleting [===========================================>] 1/1\r (no-eol) (esc)
237 deleting [===========================================>] 1/1\r (no-eol) (esc)
240 \r (no-eol) (esc)
238 \r (no-eol) (esc)
241 \r (no-eol) (esc)
239 \r (no-eol) (esc)
242 deleting [===========================================>] 1/1\r (no-eol) (esc)
240 deleting [===========================================>] 1/1\r (no-eol) (esc)
243 \r (no-eol) (esc)
241 \r (no-eol) (esc)
244 \r (no-eol) (esc)
242 \r (no-eol) (esc)
245 deleting [===========================================>] 1/1\r (no-eol) (esc)
243 deleting [===========================================>] 1/1\r (no-eol) (esc)
246 \r (no-eol) (esc)
244 \r (no-eol) (esc)
247 $ hg remove sub1/.hgsubstate
245 $ hg remove sub1/.hgsubstate
248 \r (no-eol) (esc)
246 \r (no-eol) (esc)
249 searching [==========================================>] 1/1\r (no-eol) (esc)
247 searching [==========================================>] 1/1\r (no-eol) (esc)
250 \r (no-eol) (esc)
248 \r (no-eol) (esc)
251 \r (no-eol) (esc)
249 \r (no-eol) (esc)
252 deleting [===========================================>] 1/1\r (no-eol) (esc)
250 deleting [===========================================>] 1/1\r (no-eol) (esc)
253 \r (no-eol) (esc)
251 \r (no-eol) (esc)
254 \r (no-eol) (esc)
252 \r (no-eol) (esc)
255 deleting [===========================================>] 1/1\r (no-eol) (esc)
253 deleting [===========================================>] 1/1\r (no-eol) (esc)
256 \r (no-eol) (esc)
254 \r (no-eol) (esc)
257 $ mv sub1/.hgsub sub1/x.hgsub
255 $ mv sub1/.hgsub sub1/x.hgsub
258 $ hg status -S
256 $ hg status -S
259 warning: subrepo spec file 'sub1/.hgsub' not found
257 warning: subrepo spec file 'sub1/.hgsub' not found
260 R sub1/.hgsubstate
258 R sub1/.hgsubstate
261 R sub1/sub2/folder/test.txt
259 R sub1/sub2/folder/test.txt
262 ! sub1/.hgsub
260 ! sub1/.hgsub
263 ? sub1/x.hgsub
261 ? sub1/x.hgsub
264 $ mv sub1/x.hgsub sub1/.hgsub
262 $ mv sub1/x.hgsub sub1/.hgsub
265 $ hg update -Cq
263 $ hg update -Cq
266 $ touch sub1/foo
264 $ touch sub1/foo
267 $ hg forget sub1/sub2/folder/test.txt
265 $ hg forget sub1/sub2/folder/test.txt
268 $ rm sub1/sub2/test.txt
266 $ rm sub1/sub2/test.txt
269
267
270 Test relative path printing + subrepos
268 Test relative path printing + subrepos
271 $ mkdir -p foo/bar
269 $ mkdir -p foo/bar
272 $ cd foo
270 $ cd foo
273 $ touch bar/abc
271 $ touch bar/abc
274 $ hg addremove -S ..
272 $ hg addremove -S ..
275 \r (no-eol) (esc)
273 \r (no-eol) (esc)
276 searching for exact renames [ ] 0/1\r (no-eol) (esc)
274 searching for exact renames [ ] 0/1\r (no-eol) (esc)
277 \r (no-eol) (esc)
275 \r (no-eol) (esc)
278 adding ../sub1/sub2/folder/test.txt (glob)
276 adding ../sub1/sub2/folder/test.txt (glob)
279 removing ../sub1/sub2/test.txt (glob)
277 removing ../sub1/sub2/test.txt (glob)
280 adding ../sub1/foo (glob)
278 adding ../sub1/foo (glob)
281 adding bar/abc (glob)
279 adding bar/abc (glob)
282 $ cd ..
280 $ cd ..
283 $ hg status -S
281 $ hg status -S
284 A foo/bar/abc
282 A foo/bar/abc
285 A sub1/foo
283 A sub1/foo
286 R sub1/sub2/test.txt
284 R sub1/sub2/test.txt
287
285
288 Archive wdir() with subrepos
286 Archive wdir() with subrepos
289 $ hg rm main
287 $ hg rm main
290 \r (no-eol) (esc)
288 \r (no-eol) (esc)
291 deleting [===========================================>] 1/1\r (no-eol) (esc)
289 deleting [===========================================>] 1/1\r (no-eol) (esc)
292 \r (no-eol) (esc)
290 \r (no-eol) (esc)
293 $ hg archive -S -r 'wdir()' ../wdir
291 $ hg archive -S -r 'wdir()' ../wdir
294 \r (no-eol) (esc)
292 \r (no-eol) (esc)
295 archiving [ ] 0/3\r (no-eol) (esc)
293 archiving [ ] 0/3\r (no-eol) (esc)
296 archiving [=============> ] 1/3\r (no-eol) (esc)
294 archiving [=============> ] 1/3\r (no-eol) (esc)
297 archiving [===========================> ] 2/3\r (no-eol) (esc)
295 archiving [===========================> ] 2/3\r (no-eol) (esc)
298 archiving [==========================================>] 3/3\r (no-eol) (esc)
296 archiving [==========================================>] 3/3\r (no-eol) (esc)
299 \r (no-eol) (esc)
297 \r (no-eol) (esc)
300 \r (no-eol) (esc)
298 \r (no-eol) (esc)
301 archiving (sub1) [ ] 0/4\r (no-eol) (esc)
299 archiving (sub1) [ ] 0/4\r (no-eol) (esc)
302 archiving (sub1) [========> ] 1/4\r (no-eol) (esc)
300 archiving (sub1) [========> ] 1/4\r (no-eol) (esc)
303 archiving (sub1) [=================> ] 2/4\r (no-eol) (esc)
301 archiving (sub1) [=================> ] 2/4\r (no-eol) (esc)
304 archiving (sub1) [==========================> ] 3/4\r (no-eol) (esc)
302 archiving (sub1) [==========================> ] 3/4\r (no-eol) (esc)
305 archiving (sub1) [===================================>] 4/4\r (no-eol) (esc)
303 archiving (sub1) [===================================>] 4/4\r (no-eol) (esc)
306 \r (no-eol) (esc)
304 \r (no-eol) (esc)
307 \r (no-eol) (esc)
305 \r (no-eol) (esc)
308 archiving (sub1/sub2) [ ] 0/2\r (no-eol) (esc)
306 archiving (sub1/sub2) [ ] 0/2\r (no-eol) (esc)
309 archiving (sub1/sub2) [==============> ] 1/2\r (no-eol) (esc)
307 archiving (sub1/sub2) [==============> ] 1/2\r (no-eol) (esc)
310 archiving (sub1/sub2) [==============================>] 2/2\r (no-eol) (esc)
308 archiving (sub1/sub2) [==============================>] 2/2\r (no-eol) (esc)
311 \r (no-eol) (esc)
309 \r (no-eol) (esc)
312 $ diff -r . ../wdir | egrep -v '\.hg$|^Common subdirectories:'
310 $ diff -r . ../wdir | egrep -v '\.hg$|^Common subdirectories:'
313 Only in ../wdir: .hg_archival.txt
311 Only in ../wdir: .hg_archival.txt
314
312
315 $ find ../wdir -type f | sort
313 $ find ../wdir -type f | sort
316 ../wdir/.hg_archival.txt
314 ../wdir/.hg_archival.txt
317 ../wdir/.hgsub
315 ../wdir/.hgsub
318 ../wdir/.hgsubstate
316 ../wdir/.hgsubstate
319 ../wdir/foo/bar/abc
317 ../wdir/foo/bar/abc
320 ../wdir/sub1/.hgsub
318 ../wdir/sub1/.hgsub
321 ../wdir/sub1/.hgsubstate
319 ../wdir/sub1/.hgsubstate
322 ../wdir/sub1/foo
320 ../wdir/sub1/foo
323 ../wdir/sub1/sub1
321 ../wdir/sub1/sub1
324 ../wdir/sub1/sub2/folder/test.txt
322 ../wdir/sub1/sub2/folder/test.txt
325 ../wdir/sub1/sub2/sub2
323 ../wdir/sub1/sub2/sub2
326
324
327 $ cat ../wdir/.hg_archival.txt
325 $ cat ../wdir/.hg_archival.txt
328 repo: 7f491f53a367861f47ee64a80eb997d1f341b77a
326 repo: 7f491f53a367861f47ee64a80eb997d1f341b77a
329 node: 9bb10eebee29dc0f1201dcf5977b811a540255fd+
327 node: 9bb10eebee29dc0f1201dcf5977b811a540255fd+
330 branch: default
328 branch: default
331 latesttag: null
329 latesttag: null
332 latesttagdistance: 4
330 latesttagdistance: 4
333 changessincelatesttag: 4
331 changessincelatesttag: 4
334
332
335 Attempting to archive 'wdir()' with a missing file is handled gracefully
333 Attempting to archive 'wdir()' with a missing file is handled gracefully
336 $ rm sub1/sub1
334 $ rm sub1/sub1
337 $ rm -r ../wdir
335 $ rm -r ../wdir
338 $ hg archive -v -S -r 'wdir()' ../wdir
336 $ hg archive -v -S -r 'wdir()' ../wdir
339 \r (no-eol) (esc)
337 \r (no-eol) (esc)
340 archiving [ ] 0/3\r (no-eol) (esc)
338 archiving [ ] 0/3\r (no-eol) (esc)
341 archiving [=============> ] 1/3\r (no-eol) (esc)
339 archiving [=============> ] 1/3\r (no-eol) (esc)
342 archiving [===========================> ] 2/3\r (no-eol) (esc)
340 archiving [===========================> ] 2/3\r (no-eol) (esc)
343 archiving [==========================================>] 3/3\r (no-eol) (esc)
341 archiving [==========================================>] 3/3\r (no-eol) (esc)
344 \r (no-eol) (esc)
342 \r (no-eol) (esc)
345 \r (no-eol) (esc)
343 \r (no-eol) (esc)
346 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
344 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
347 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
345 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
348 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
346 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
349 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
347 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
350 \r (no-eol) (esc)
348 \r (no-eol) (esc)
351 \r (no-eol) (esc)
349 \r (no-eol) (esc)
352 archiving (sub1/sub2) [ ] 0/2\r (no-eol) (esc)
350 archiving (sub1/sub2) [ ] 0/2\r (no-eol) (esc)
353 archiving (sub1/sub2) [==============> ] 1/2\r (no-eol) (esc)
351 archiving (sub1/sub2) [==============> ] 1/2\r (no-eol) (esc)
354 archiving (sub1/sub2) [==============================>] 2/2\r (no-eol) (esc)
352 archiving (sub1/sub2) [==============================>] 2/2\r (no-eol) (esc)
355 \r (no-eol) (esc)
353 \r (no-eol) (esc)
356 $ find ../wdir -type f | sort
354 $ find ../wdir -type f | sort
357 ../wdir/.hg_archival.txt
355 ../wdir/.hg_archival.txt
358 ../wdir/.hgsub
356 ../wdir/.hgsub
359 ../wdir/.hgsubstate
357 ../wdir/.hgsubstate
360 ../wdir/foo/bar/abc
358 ../wdir/foo/bar/abc
361 ../wdir/sub1/.hgsub
359 ../wdir/sub1/.hgsub
362 ../wdir/sub1/.hgsubstate
360 ../wdir/sub1/.hgsubstate
363 ../wdir/sub1/foo
361 ../wdir/sub1/foo
364 ../wdir/sub1/sub2/folder/test.txt
362 ../wdir/sub1/sub2/folder/test.txt
365 ../wdir/sub1/sub2/sub2
363 ../wdir/sub1/sub2/sub2
366
364
367 Continue relative path printing + subrepos
365 Continue relative path printing + subrepos
368 $ hg update -Cq
366 $ hg update -Cq
369 $ rm -r ../wdir
367 $ rm -r ../wdir
370 $ hg archive -S -r 'wdir()' ../wdir
368 $ hg archive -S -r 'wdir()' ../wdir
371 \r (no-eol) (esc)
369 \r (no-eol) (esc)
372 archiving [ ] 0/3\r (no-eol) (esc)
370 archiving [ ] 0/3\r (no-eol) (esc)
373 archiving [=============> ] 1/3\r (no-eol) (esc)
371 archiving [=============> ] 1/3\r (no-eol) (esc)
374 archiving [===========================> ] 2/3\r (no-eol) (esc)
372 archiving [===========================> ] 2/3\r (no-eol) (esc)
375 archiving [==========================================>] 3/3\r (no-eol) (esc)
373 archiving [==========================================>] 3/3\r (no-eol) (esc)
376 \r (no-eol) (esc)
374 \r (no-eol) (esc)
377 \r (no-eol) (esc)
375 \r (no-eol) (esc)
378 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
376 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
379 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
377 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
380 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
378 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
381 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
379 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
382 \r (no-eol) (esc)
380 \r (no-eol) (esc)
383 \r (no-eol) (esc)
381 \r (no-eol) (esc)
384 archiving (sub1/sub2) [ ] 0/3\r (no-eol) (esc)
382 archiving (sub1/sub2) [ ] 0/3\r (no-eol) (esc)
385 archiving (sub1/sub2) [=========> ] 1/3\r (no-eol) (esc)
383 archiving (sub1/sub2) [=========> ] 1/3\r (no-eol) (esc)
386 archiving (sub1/sub2) [===================> ] 2/3\r (no-eol) (esc)
384 archiving (sub1/sub2) [===================> ] 2/3\r (no-eol) (esc)
387 archiving (sub1/sub2) [==============================>] 3/3\r (no-eol) (esc)
385 archiving (sub1/sub2) [==============================>] 3/3\r (no-eol) (esc)
388 \r (no-eol) (esc)
386 \r (no-eol) (esc)
389 $ cat ../wdir/.hg_archival.txt
387 $ cat ../wdir/.hg_archival.txt
390 repo: 7f491f53a367861f47ee64a80eb997d1f341b77a
388 repo: 7f491f53a367861f47ee64a80eb997d1f341b77a
391 node: 9bb10eebee29dc0f1201dcf5977b811a540255fd
389 node: 9bb10eebee29dc0f1201dcf5977b811a540255fd
392 branch: default
390 branch: default
393 latesttag: null
391 latesttag: null
394 latesttagdistance: 4
392 latesttagdistance: 4
395 changessincelatesttag: 4
393 changessincelatesttag: 4
396
394
397 $ touch sub1/sub2/folder/bar
395 $ touch sub1/sub2/folder/bar
398 $ hg addremove sub1/sub2
396 $ hg addremove sub1/sub2
399 adding sub1/sub2/folder/bar (glob)
397 adding sub1/sub2/folder/bar (glob)
400 $ hg status -S
398 $ hg status -S
401 A sub1/sub2/folder/bar
399 A sub1/sub2/folder/bar
402 ? foo/bar/abc
400 ? foo/bar/abc
403 ? sub1/foo
401 ? sub1/foo
404 $ hg update -Cq
402 $ hg update -Cq
405 $ hg addremove sub1
403 $ hg addremove sub1
406 adding sub1/sub2/folder/bar (glob)
404 adding sub1/sub2/folder/bar (glob)
407 adding sub1/foo (glob)
405 adding sub1/foo (glob)
408 $ hg update -Cq
406 $ hg update -Cq
409 $ rm sub1/sub2/folder/test.txt
407 $ rm sub1/sub2/folder/test.txt
410 $ rm sub1/sub2/test.txt
408 $ rm sub1/sub2/test.txt
411 $ hg ci -ASm "remove test.txt"
409 $ hg ci -ASm "remove test.txt"
412 adding sub1/sub2/folder/bar
410 adding sub1/sub2/folder/bar
413 removing sub1/sub2/folder/test.txt
411 removing sub1/sub2/folder/test.txt
414 removing sub1/sub2/test.txt
412 removing sub1/sub2/test.txt
415 adding sub1/foo
413 adding sub1/foo
416 adding foo/bar/abc
414 adding foo/bar/abc
417 committing subrepository sub1
415 committing subrepository sub1
418 committing subrepository sub1/sub2 (glob)
416 committing subrepository sub1/sub2 (glob)
419
417
420 $ hg forget sub1/sub2/sub2
418 $ hg forget sub1/sub2/sub2
421 $ echo x > sub1/sub2/x.txt
419 $ echo x > sub1/sub2/x.txt
422 $ hg add sub1/sub2/x.txt
420 $ hg add sub1/sub2/x.txt
423
421
424 Files sees uncommitted adds and removes in subrepos
422 Files sees uncommitted adds and removes in subrepos
425 $ hg files -S
423 $ hg files -S
426 .hgsub
424 .hgsub
427 .hgsubstate
425 .hgsubstate
428 foo/bar/abc (glob)
426 foo/bar/abc (glob)
429 main
427 main
430 sub1/.hgsub (glob)
428 sub1/.hgsub (glob)
431 sub1/.hgsubstate (glob)
429 sub1/.hgsubstate (glob)
432 sub1/foo (glob)
430 sub1/foo (glob)
433 sub1/sub1 (glob)
431 sub1/sub1 (glob)
434 sub1/sub2/folder/bar (glob)
432 sub1/sub2/folder/bar (glob)
435 sub1/sub2/x.txt (glob)
433 sub1/sub2/x.txt (glob)
436
434
437 $ hg files -S "set:eol('dos') or eol('unix') or size('<= 0')"
435 $ hg files -S "set:eol('dos') or eol('unix') or size('<= 0')"
438 .hgsub
436 .hgsub
439 .hgsubstate
437 .hgsubstate
440 foo/bar/abc (glob)
438 foo/bar/abc (glob)
441 main
439 main
442 sub1/.hgsub (glob)
440 sub1/.hgsub (glob)
443 sub1/.hgsubstate (glob)
441 sub1/.hgsubstate (glob)
444 sub1/foo (glob)
442 sub1/foo (glob)
445 sub1/sub1 (glob)
443 sub1/sub1 (glob)
446 sub1/sub2/folder/bar (glob)
444 sub1/sub2/folder/bar (glob)
447 sub1/sub2/x.txt (glob)
445 sub1/sub2/x.txt (glob)
448
446
449 $ hg files -r '.^' -S "set:eol('dos') or eol('unix')"
447 $ hg files -r '.^' -S "set:eol('dos') or eol('unix')"
450 .hgsub
448 .hgsub
451 .hgsubstate
449 .hgsubstate
452 main
450 main
453 sub1/.hgsub (glob)
451 sub1/.hgsub (glob)
454 sub1/.hgsubstate (glob)
452 sub1/.hgsubstate (glob)
455 sub1/sub1 (glob)
453 sub1/sub1 (glob)
456 sub1/sub2/folder/test.txt (glob)
454 sub1/sub2/folder/test.txt (glob)
457 sub1/sub2/sub2 (glob)
455 sub1/sub2/sub2 (glob)
458 sub1/sub2/test.txt (glob)
456 sub1/sub2/test.txt (glob)
459
457
460 $ hg files sub1
458 $ hg files sub1
461 sub1/.hgsub (glob)
459 sub1/.hgsub (glob)
462 sub1/.hgsubstate (glob)
460 sub1/.hgsubstate (glob)
463 sub1/foo (glob)
461 sub1/foo (glob)
464 sub1/sub1 (glob)
462 sub1/sub1 (glob)
465 sub1/sub2/folder/bar (glob)
463 sub1/sub2/folder/bar (glob)
466 sub1/sub2/x.txt (glob)
464 sub1/sub2/x.txt (glob)
467
465
468 $ hg files sub1/sub2
466 $ hg files sub1/sub2
469 sub1/sub2/folder/bar (glob)
467 sub1/sub2/folder/bar (glob)
470 sub1/sub2/x.txt (glob)
468 sub1/sub2/x.txt (glob)
471
469
472 $ hg files
470 $ hg files
473 .hgsub
471 .hgsub
474 .hgsubstate
472 .hgsubstate
475 foo/bar/abc (glob)
473 foo/bar/abc (glob)
476 main
474 main
477
475
478 $ hg files -S -r '.^' sub1/sub2/folder
476 $ hg files -S -r '.^' sub1/sub2/folder
479 sub1/sub2/folder/test.txt (glob)
477 sub1/sub2/folder/test.txt (glob)
480
478
481 $ hg files -S -r '.^' sub1/sub2/missing
479 $ hg files -S -r '.^' sub1/sub2/missing
482 sub1/sub2/missing: no such file in rev 78026e779ea6 (glob)
480 sub1/sub2/missing: no such file in rev 78026e779ea6 (glob)
483 [1]
481 [1]
484
482
485 $ hg files -r '.^' sub1/
483 $ hg files -r '.^' sub1/
486 sub1/.hgsub (glob)
484 sub1/.hgsub (glob)
487 sub1/.hgsubstate (glob)
485 sub1/.hgsubstate (glob)
488 sub1/sub1 (glob)
486 sub1/sub1 (glob)
489 sub1/sub2/folder/test.txt (glob)
487 sub1/sub2/folder/test.txt (glob)
490 sub1/sub2/sub2 (glob)
488 sub1/sub2/sub2 (glob)
491 sub1/sub2/test.txt (glob)
489 sub1/sub2/test.txt (glob)
492
490
493 $ hg files -r '.^' sub1/sub2
491 $ hg files -r '.^' sub1/sub2
494 sub1/sub2/folder/test.txt (glob)
492 sub1/sub2/folder/test.txt (glob)
495 sub1/sub2/sub2 (glob)
493 sub1/sub2/sub2 (glob)
496 sub1/sub2/test.txt (glob)
494 sub1/sub2/test.txt (glob)
497
495
498 $ hg rollback -q
496 $ hg rollback -q
499 $ hg up -Cq
497 $ hg up -Cq
500
498
501 $ hg --config extensions.largefiles=! archive -S ../archive_all
499 $ hg --config extensions.largefiles=! archive -S ../archive_all
502 \r (no-eol) (esc)
500 \r (no-eol) (esc)
503 archiving [ ] 0/3\r (no-eol) (esc)
501 archiving [ ] 0/3\r (no-eol) (esc)
504 archiving [=============> ] 1/3\r (no-eol) (esc)
502 archiving [=============> ] 1/3\r (no-eol) (esc)
505 archiving [===========================> ] 2/3\r (no-eol) (esc)
503 archiving [===========================> ] 2/3\r (no-eol) (esc)
506 archiving [==========================================>] 3/3\r (no-eol) (esc)
504 archiving [==========================================>] 3/3\r (no-eol) (esc)
507 \r (no-eol) (esc)
505 \r (no-eol) (esc)
508 \r (no-eol) (esc)
506 \r (no-eol) (esc)
509 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
507 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
510 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
508 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
511 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
509 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
512 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
510 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
513 \r (no-eol) (esc)
511 \r (no-eol) (esc)
514 \r (no-eol) (esc)
512 \r (no-eol) (esc)
515 archiving (sub1/sub2) [ ] 0/3\r (no-eol) (esc)
513 archiving (sub1/sub2) [ ] 0/3\r (no-eol) (esc)
516 archiving (sub1/sub2) [=========> ] 1/3\r (no-eol) (esc)
514 archiving (sub1/sub2) [=========> ] 1/3\r (no-eol) (esc)
517 archiving (sub1/sub2) [===================> ] 2/3\r (no-eol) (esc)
515 archiving (sub1/sub2) [===================> ] 2/3\r (no-eol) (esc)
518 archiving (sub1/sub2) [==============================>] 3/3\r (no-eol) (esc)
516 archiving (sub1/sub2) [==============================>] 3/3\r (no-eol) (esc)
519 \r (no-eol) (esc)
517 \r (no-eol) (esc)
520 $ find ../archive_all | sort
518 $ find ../archive_all | sort
521 ../archive_all
519 ../archive_all
522 ../archive_all/.hg_archival.txt
520 ../archive_all/.hg_archival.txt
523 ../archive_all/.hgsub
521 ../archive_all/.hgsub
524 ../archive_all/.hgsubstate
522 ../archive_all/.hgsubstate
525 ../archive_all/main
523 ../archive_all/main
526 ../archive_all/sub1
524 ../archive_all/sub1
527 ../archive_all/sub1/.hgsub
525 ../archive_all/sub1/.hgsub
528 ../archive_all/sub1/.hgsubstate
526 ../archive_all/sub1/.hgsubstate
529 ../archive_all/sub1/sub1
527 ../archive_all/sub1/sub1
530 ../archive_all/sub1/sub2
528 ../archive_all/sub1/sub2
531 ../archive_all/sub1/sub2/folder
529 ../archive_all/sub1/sub2/folder
532 ../archive_all/sub1/sub2/folder/test.txt
530 ../archive_all/sub1/sub2/folder/test.txt
533 ../archive_all/sub1/sub2/sub2
531 ../archive_all/sub1/sub2/sub2
534 ../archive_all/sub1/sub2/test.txt
532 ../archive_all/sub1/sub2/test.txt
535
533
536 Check that archive -X works in deep subrepos
534 Check that archive -X works in deep subrepos
537
535
538 $ hg --config extensions.largefiles=! archive -S -X '**test*' ../archive_exclude
536 $ hg --config extensions.largefiles=! archive -S -X '**test*' ../archive_exclude
539 \r (no-eol) (esc)
537 \r (no-eol) (esc)
540 archiving [ ] 0/3\r (no-eol) (esc)
538 archiving [ ] 0/3\r (no-eol) (esc)
541 archiving [=============> ] 1/3\r (no-eol) (esc)
539 archiving [=============> ] 1/3\r (no-eol) (esc)
542 archiving [===========================> ] 2/3\r (no-eol) (esc)
540 archiving [===========================> ] 2/3\r (no-eol) (esc)
543 archiving [==========================================>] 3/3\r (no-eol) (esc)
541 archiving [==========================================>] 3/3\r (no-eol) (esc)
544 \r (no-eol) (esc)
542 \r (no-eol) (esc)
545 \r (no-eol) (esc)
543 \r (no-eol) (esc)
546 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
544 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
547 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
545 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
548 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
546 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
549 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
547 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
550 \r (no-eol) (esc)
548 \r (no-eol) (esc)
551 \r (no-eol) (esc)
549 \r (no-eol) (esc)
552 archiving (sub1/sub2) [ ] 0/1\r (no-eol) (esc)
550 archiving (sub1/sub2) [ ] 0/1\r (no-eol) (esc)
553 archiving (sub1/sub2) [==============================>] 1/1\r (no-eol) (esc)
551 archiving (sub1/sub2) [==============================>] 1/1\r (no-eol) (esc)
554 \r (no-eol) (esc)
552 \r (no-eol) (esc)
555 $ find ../archive_exclude | sort
553 $ find ../archive_exclude | sort
556 ../archive_exclude
554 ../archive_exclude
557 ../archive_exclude/.hg_archival.txt
555 ../archive_exclude/.hg_archival.txt
558 ../archive_exclude/.hgsub
556 ../archive_exclude/.hgsub
559 ../archive_exclude/.hgsubstate
557 ../archive_exclude/.hgsubstate
560 ../archive_exclude/main
558 ../archive_exclude/main
561 ../archive_exclude/sub1
559 ../archive_exclude/sub1
562 ../archive_exclude/sub1/.hgsub
560 ../archive_exclude/sub1/.hgsub
563 ../archive_exclude/sub1/.hgsubstate
561 ../archive_exclude/sub1/.hgsubstate
564 ../archive_exclude/sub1/sub1
562 ../archive_exclude/sub1/sub1
565 ../archive_exclude/sub1/sub2
563 ../archive_exclude/sub1/sub2
566 ../archive_exclude/sub1/sub2/sub2
564 ../archive_exclude/sub1/sub2/sub2
567
565
568 $ hg --config extensions.largefiles=! archive -S -I '**test*' ../archive_include
566 $ hg --config extensions.largefiles=! archive -S -I '**test*' ../archive_include
569 \r (no-eol) (esc)
567 \r (no-eol) (esc)
570 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
568 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
571 \r (no-eol) (esc)
569 \r (no-eol) (esc)
572 \r (no-eol) (esc)
570 \r (no-eol) (esc)
573 archiving (sub1/sub2) [ ] 0/2\r (no-eol) (esc)
571 archiving (sub1/sub2) [ ] 0/2\r (no-eol) (esc)
574 archiving (sub1/sub2) [==============> ] 1/2\r (no-eol) (esc)
572 archiving (sub1/sub2) [==============> ] 1/2\r (no-eol) (esc)
575 archiving (sub1/sub2) [==============================>] 2/2\r (no-eol) (esc)
573 archiving (sub1/sub2) [==============================>] 2/2\r (no-eol) (esc)
576 \r (no-eol) (esc)
574 \r (no-eol) (esc)
577 $ find ../archive_include | sort
575 $ find ../archive_include | sort
578 ../archive_include
576 ../archive_include
579 ../archive_include/sub1
577 ../archive_include/sub1
580 ../archive_include/sub1/sub2
578 ../archive_include/sub1/sub2
581 ../archive_include/sub1/sub2/folder
579 ../archive_include/sub1/sub2/folder
582 ../archive_include/sub1/sub2/folder/test.txt
580 ../archive_include/sub1/sub2/folder/test.txt
583 ../archive_include/sub1/sub2/test.txt
581 ../archive_include/sub1/sub2/test.txt
584
582
585 Check that deep archive works with largefiles (which overrides hgsubrepo impl)
583 Check that deep archive works with largefiles (which overrides hgsubrepo impl)
586 This also tests the repo.ui regression in 43fb170a23bd, and that lf subrepo
584 This also tests the repo.ui regression in 43fb170a23bd, and that lf subrepo
587 subrepos are archived properly.
585 subrepos are archived properly.
588 Note that add --large through a subrepo currently adds the file as a normal file
586 Note that add --large through a subrepo currently adds the file as a normal file
589
587
590 $ echo "large" > sub1/sub2/large.bin
588 $ echo "large" > sub1/sub2/large.bin
591 $ hg --config extensions.largefiles= add --large -R sub1/sub2 sub1/sub2/large.bin
589 $ hg --config extensions.largefiles= add --large -R sub1/sub2 sub1/sub2/large.bin
592 $ echo "large" > large.bin
590 $ echo "large" > large.bin
593 $ hg --config extensions.largefiles= add --large large.bin
591 $ hg --config extensions.largefiles= add --large large.bin
594 $ hg --config extensions.largefiles= ci -S -m "add large files"
592 $ hg --config extensions.largefiles= ci -S -m "add large files"
595 committing subrepository sub1
593 committing subrepository sub1
596 committing subrepository sub1/sub2 (glob)
594 committing subrepository sub1/sub2 (glob)
597
595
598 $ hg --config extensions.largefiles= archive -S ../archive_lf
596 $ hg --config extensions.largefiles= archive -S ../archive_lf
599 $ find ../archive_lf | sort
597 $ find ../archive_lf | sort
600 ../archive_lf
598 ../archive_lf
601 ../archive_lf/.hg_archival.txt
599 ../archive_lf/.hg_archival.txt
602 ../archive_lf/.hgsub
600 ../archive_lf/.hgsub
603 ../archive_lf/.hgsubstate
601 ../archive_lf/.hgsubstate
604 ../archive_lf/large.bin
602 ../archive_lf/large.bin
605 ../archive_lf/main
603 ../archive_lf/main
606 ../archive_lf/sub1
604 ../archive_lf/sub1
607 ../archive_lf/sub1/.hgsub
605 ../archive_lf/sub1/.hgsub
608 ../archive_lf/sub1/.hgsubstate
606 ../archive_lf/sub1/.hgsubstate
609 ../archive_lf/sub1/sub1
607 ../archive_lf/sub1/sub1
610 ../archive_lf/sub1/sub2
608 ../archive_lf/sub1/sub2
611 ../archive_lf/sub1/sub2/folder
609 ../archive_lf/sub1/sub2/folder
612 ../archive_lf/sub1/sub2/folder/test.txt
610 ../archive_lf/sub1/sub2/folder/test.txt
613 ../archive_lf/sub1/sub2/large.bin
611 ../archive_lf/sub1/sub2/large.bin
614 ../archive_lf/sub1/sub2/sub2
612 ../archive_lf/sub1/sub2/sub2
615 ../archive_lf/sub1/sub2/test.txt
613 ../archive_lf/sub1/sub2/test.txt
616 $ rm -rf ../archive_lf
614 $ rm -rf ../archive_lf
617
615
618 Exclude large files from main and sub-sub repo
616 Exclude large files from main and sub-sub repo
619
617
620 $ hg --config extensions.largefiles= archive -S -X '**.bin' ../archive_lf
618 $ hg --config extensions.largefiles= archive -S -X '**.bin' ../archive_lf
621 $ find ../archive_lf | sort
619 $ find ../archive_lf | sort
622 ../archive_lf
620 ../archive_lf
623 ../archive_lf/.hg_archival.txt
621 ../archive_lf/.hg_archival.txt
624 ../archive_lf/.hgsub
622 ../archive_lf/.hgsub
625 ../archive_lf/.hgsubstate
623 ../archive_lf/.hgsubstate
626 ../archive_lf/main
624 ../archive_lf/main
627 ../archive_lf/sub1
625 ../archive_lf/sub1
628 ../archive_lf/sub1/.hgsub
626 ../archive_lf/sub1/.hgsub
629 ../archive_lf/sub1/.hgsubstate
627 ../archive_lf/sub1/.hgsubstate
630 ../archive_lf/sub1/sub1
628 ../archive_lf/sub1/sub1
631 ../archive_lf/sub1/sub2
629 ../archive_lf/sub1/sub2
632 ../archive_lf/sub1/sub2/folder
630 ../archive_lf/sub1/sub2/folder
633 ../archive_lf/sub1/sub2/folder/test.txt
631 ../archive_lf/sub1/sub2/folder/test.txt
634 ../archive_lf/sub1/sub2/sub2
632 ../archive_lf/sub1/sub2/sub2
635 ../archive_lf/sub1/sub2/test.txt
633 ../archive_lf/sub1/sub2/test.txt
636 $ rm -rf ../archive_lf
634 $ rm -rf ../archive_lf
637
635
638 Exclude normal files from main and sub-sub repo
636 Exclude normal files from main and sub-sub repo
639
637
640 $ hg --config extensions.largefiles= archive -S -X '**.txt' -p '.' ../archive_lf.tgz
638 $ hg --config extensions.largefiles= archive -S -X '**.txt' -p '.' ../archive_lf.tgz
641 $ tar -tzf ../archive_lf.tgz | sort
639 $ tar -tzf ../archive_lf.tgz | sort
642 .hgsub
640 .hgsub
643 .hgsubstate
641 .hgsubstate
644 large.bin
642 large.bin
645 main
643 main
646 sub1/.hgsub
644 sub1/.hgsub
647 sub1/.hgsubstate
645 sub1/.hgsubstate
648 sub1/sub1
646 sub1/sub1
649 sub1/sub2/large.bin
647 sub1/sub2/large.bin
650 sub1/sub2/sub2
648 sub1/sub2/sub2
651
649
652 Include normal files from within a largefiles subrepo
650 Include normal files from within a largefiles subrepo
653
651
654 $ hg --config extensions.largefiles= archive -S -I '**.txt' ../archive_lf
652 $ hg --config extensions.largefiles= archive -S -I '**.txt' ../archive_lf
655 $ find ../archive_lf | sort
653 $ find ../archive_lf | sort
656 ../archive_lf
654 ../archive_lf
657 ../archive_lf/.hg_archival.txt
655 ../archive_lf/.hg_archival.txt
658 ../archive_lf/sub1
656 ../archive_lf/sub1
659 ../archive_lf/sub1/sub2
657 ../archive_lf/sub1/sub2
660 ../archive_lf/sub1/sub2/folder
658 ../archive_lf/sub1/sub2/folder
661 ../archive_lf/sub1/sub2/folder/test.txt
659 ../archive_lf/sub1/sub2/folder/test.txt
662 ../archive_lf/sub1/sub2/test.txt
660 ../archive_lf/sub1/sub2/test.txt
663 $ rm -rf ../archive_lf
661 $ rm -rf ../archive_lf
664
662
665 Include large files from within a largefiles subrepo
663 Include large files from within a largefiles subrepo
666
664
667 $ hg --config extensions.largefiles= archive -S -I '**.bin' ../archive_lf
665 $ hg --config extensions.largefiles= archive -S -I '**.bin' ../archive_lf
668 $ find ../archive_lf | sort
666 $ find ../archive_lf | sort
669 ../archive_lf
667 ../archive_lf
670 ../archive_lf/large.bin
668 ../archive_lf/large.bin
671 ../archive_lf/sub1
669 ../archive_lf/sub1
672 ../archive_lf/sub1/sub2
670 ../archive_lf/sub1/sub2
673 ../archive_lf/sub1/sub2/large.bin
671 ../archive_lf/sub1/sub2/large.bin
674 $ rm -rf ../archive_lf
672 $ rm -rf ../archive_lf
675
673
676 Find an exact largefile match in a largefiles subrepo
674 Find an exact largefile match in a largefiles subrepo
677
675
678 $ hg --config extensions.largefiles= archive -S -I 'sub1/sub2/large.bin' ../archive_lf
676 $ hg --config extensions.largefiles= archive -S -I 'sub1/sub2/large.bin' ../archive_lf
679 $ find ../archive_lf | sort
677 $ find ../archive_lf | sort
680 ../archive_lf
678 ../archive_lf
681 ../archive_lf/sub1
679 ../archive_lf/sub1
682 ../archive_lf/sub1/sub2
680 ../archive_lf/sub1/sub2
683 ../archive_lf/sub1/sub2/large.bin
681 ../archive_lf/sub1/sub2/large.bin
684 $ rm -rf ../archive_lf
682 $ rm -rf ../archive_lf
685
683
686 The local repo enables largefiles if a largefiles repo is cloned
684 The local repo enables largefiles if a largefiles repo is cloned
687 $ hg showconfig extensions
685 $ hg showconfig extensions
688 abort: repository requires features unknown to this Mercurial: largefiles!
686 abort: repository requires features unknown to this Mercurial: largefiles!
689 (see https://mercurial-scm.org/wiki/MissingRequirement for more information)
687 (see https://mercurial-scm.org/wiki/MissingRequirement for more information)
690 [255]
688 [255]
691 $ hg --config extensions.largefiles= clone -qU . ../lfclone
689 $ hg --config extensions.largefiles= clone -qU . ../lfclone
692 $ cat ../lfclone/.hg/hgrc
690 $ cat ../lfclone/.hg/hgrc
693 # example repository config (see "hg help config" for more info)
691 # example repository config (see "hg help config" for more info)
694 [paths]
692 [paths]
695 default = $TESTTMP/cloned (glob)
693 default = $TESTTMP/cloned (glob)
696
694
697 # path aliases to other clones of this repo in URLs or filesystem paths
695 # path aliases to other clones of this repo in URLs or filesystem paths
698 # (see "hg help config.paths" for more info)
696 # (see "hg help config.paths" for more info)
699 #
697 #
700 # default-push = ssh://jdoe@example.net/hg/jdoes-fork
698 # default-push = ssh://jdoe@example.net/hg/jdoes-fork
701 # my-fork = ssh://jdoe@example.net/hg/jdoes-fork
699 # my-fork = ssh://jdoe@example.net/hg/jdoes-fork
702 # my-clone = /home/jdoe/jdoes-clone
700 # my-clone = /home/jdoe/jdoes-clone
703
701
704 [ui]
702 [ui]
705 # name and email (local to this repository, optional), e.g.
703 # name and email (local to this repository, optional), e.g.
706 # username = Jane Doe <jdoe@example.com>
704 # username = Jane Doe <jdoe@example.com>
707
705
708 [extensions]
706 [extensions]
709 largefiles=
707 largefiles=
710
708
711 Find an exact match to a standin (should archive nothing)
709 Find an exact match to a standin (should archive nothing)
712 $ hg --config extensions.largefiles= archive -S -I 'sub/sub2/.hglf/large.bin' ../archive_lf
710 $ hg --config extensions.largefiles= archive -S -I 'sub/sub2/.hglf/large.bin' ../archive_lf
713 $ find ../archive_lf 2> /dev/null | sort
711 $ find ../archive_lf 2> /dev/null | sort
714
712
715 $ cat >> $HGRCPATH <<EOF
713 $ cat >> $HGRCPATH <<EOF
716 > [extensions]
714 > [extensions]
717 > largefiles=
715 > largefiles=
718 > [largefiles]
716 > [largefiles]
719 > patterns=glob:**.dat
717 > patterns=glob:**.dat
720 > EOF
718 > EOF
721
719
722 Test forget through a deep subrepo with the largefiles extension, both a
720 Test forget through a deep subrepo with the largefiles extension, both a
723 largefile and a normal file. Then a largefile that hasn't been committed yet.
721 largefile and a normal file. Then a largefile that hasn't been committed yet.
724 $ touch sub1/sub2/untracked.txt
722 $ touch sub1/sub2/untracked.txt
725 $ touch sub1/sub2/large.dat
723 $ touch sub1/sub2/large.dat
726 $ hg forget sub1/sub2/large.bin sub1/sub2/test.txt sub1/sub2/untracked.txt
724 $ hg forget sub1/sub2/large.bin sub1/sub2/test.txt sub1/sub2/untracked.txt
727 not removing sub1/sub2/untracked.txt: file is already untracked (glob)
725 not removing sub1/sub2/untracked.txt: file is already untracked (glob)
728 [1]
726 [1]
729 $ hg add --large --dry-run -v sub1/sub2/untracked.txt
727 $ hg add --large --dry-run -v sub1/sub2/untracked.txt
730 adding sub1/sub2/untracked.txt as a largefile (glob)
728 adding sub1/sub2/untracked.txt as a largefile (glob)
731 $ hg add --large -v sub1/sub2/untracked.txt
729 $ hg add --large -v sub1/sub2/untracked.txt
732 adding sub1/sub2/untracked.txt as a largefile (glob)
730 adding sub1/sub2/untracked.txt as a largefile (glob)
733 $ hg add --normal -v sub1/sub2/large.dat
731 $ hg add --normal -v sub1/sub2/large.dat
734 adding sub1/sub2/large.dat (glob)
732 adding sub1/sub2/large.dat (glob)
735 $ hg forget -v sub1/sub2/untracked.txt
733 $ hg forget -v sub1/sub2/untracked.txt
736 removing sub1/sub2/untracked.txt (glob)
734 removing sub1/sub2/untracked.txt (glob)
737 $ hg status -S
735 $ hg status -S
738 A sub1/sub2/large.dat
736 A sub1/sub2/large.dat
739 R sub1/sub2/large.bin
737 R sub1/sub2/large.bin
740 R sub1/sub2/test.txt
738 R sub1/sub2/test.txt
741 ? foo/bar/abc
739 ? foo/bar/abc
742 ? sub1/sub2/untracked.txt
740 ? sub1/sub2/untracked.txt
743 ? sub1/sub2/x.txt
741 ? sub1/sub2/x.txt
744 $ hg add sub1/sub2
742 $ hg add sub1/sub2
745
743
746 $ hg archive -S -r 'wdir()' ../wdir2
744 $ hg archive -S -r 'wdir()' ../wdir2
747 $ diff -r . ../wdir2 | egrep -v '\.hg$|^Common subdirectories:'
745 $ diff -r . ../wdir2 | egrep -v '\.hg$|^Common subdirectories:'
748 Only in ../wdir2: .hg_archival.txt
746 Only in ../wdir2: .hg_archival.txt
749 Only in .: .hglf
747 Only in .: .hglf
750 Only in .: foo
748 Only in .: foo
751 Only in ./sub1/sub2: large.bin
749 Only in ./sub1/sub2: large.bin
752 Only in ./sub1/sub2: test.txt
750 Only in ./sub1/sub2: test.txt
753 Only in ./sub1/sub2: untracked.txt
751 Only in ./sub1/sub2: untracked.txt
754 Only in ./sub1/sub2: x.txt
752 Only in ./sub1/sub2: x.txt
755 $ find ../wdir2 -type f | sort
753 $ find ../wdir2 -type f | sort
756 ../wdir2/.hg_archival.txt
754 ../wdir2/.hg_archival.txt
757 ../wdir2/.hgsub
755 ../wdir2/.hgsub
758 ../wdir2/.hgsubstate
756 ../wdir2/.hgsubstate
759 ../wdir2/large.bin
757 ../wdir2/large.bin
760 ../wdir2/main
758 ../wdir2/main
761 ../wdir2/sub1/.hgsub
759 ../wdir2/sub1/.hgsub
762 ../wdir2/sub1/.hgsubstate
760 ../wdir2/sub1/.hgsubstate
763 ../wdir2/sub1/sub1
761 ../wdir2/sub1/sub1
764 ../wdir2/sub1/sub2/folder/test.txt
762 ../wdir2/sub1/sub2/folder/test.txt
765 ../wdir2/sub1/sub2/large.dat
763 ../wdir2/sub1/sub2/large.dat
766 ../wdir2/sub1/sub2/sub2
764 ../wdir2/sub1/sub2/sub2
767 $ hg status -S -mac -n | sort
765 $ hg status -S -mac -n | sort
768 .hgsub
766 .hgsub
769 .hgsubstate
767 .hgsubstate
770 large.bin
768 large.bin
771 main
769 main
772 sub1/.hgsub
770 sub1/.hgsub
773 sub1/.hgsubstate
771 sub1/.hgsubstate
774 sub1/sub1
772 sub1/sub1
775 sub1/sub2/folder/test.txt
773 sub1/sub2/folder/test.txt
776 sub1/sub2/large.dat
774 sub1/sub2/large.dat
777 sub1/sub2/sub2
775 sub1/sub2/sub2
778
776
779 $ hg ci -Sqm 'forget testing'
777 $ hg ci -Sqm 'forget testing'
780
778
781 Test 'wdir()' modified file archiving with largefiles
779 Test 'wdir()' modified file archiving with largefiles
782 $ echo 'mod' > main
780 $ echo 'mod' > main
783 $ echo 'mod' > large.bin
781 $ echo 'mod' > large.bin
784 $ echo 'mod' > sub1/sub2/large.dat
782 $ echo 'mod' > sub1/sub2/large.dat
785 $ hg archive -S -r 'wdir()' ../wdir3
783 $ hg archive -S -r 'wdir()' ../wdir3
786 $ diff -r . ../wdir3 | egrep -v '\.hg$|^Common subdirectories'
784 $ diff -r . ../wdir3 | egrep -v '\.hg$|^Common subdirectories'
787 Only in ../wdir3: .hg_archival.txt
785 Only in ../wdir3: .hg_archival.txt
788 Only in .: .hglf
786 Only in .: .hglf
789 Only in .: foo
787 Only in .: foo
790 Only in ./sub1/sub2: large.bin
788 Only in ./sub1/sub2: large.bin
791 Only in ./sub1/sub2: test.txt
789 Only in ./sub1/sub2: test.txt
792 Only in ./sub1/sub2: untracked.txt
790 Only in ./sub1/sub2: untracked.txt
793 Only in ./sub1/sub2: x.txt
791 Only in ./sub1/sub2: x.txt
794 $ find ../wdir3 -type f | sort
792 $ find ../wdir3 -type f | sort
795 ../wdir3/.hg_archival.txt
793 ../wdir3/.hg_archival.txt
796 ../wdir3/.hgsub
794 ../wdir3/.hgsub
797 ../wdir3/.hgsubstate
795 ../wdir3/.hgsubstate
798 ../wdir3/large.bin
796 ../wdir3/large.bin
799 ../wdir3/main
797 ../wdir3/main
800 ../wdir3/sub1/.hgsub
798 ../wdir3/sub1/.hgsub
801 ../wdir3/sub1/.hgsubstate
799 ../wdir3/sub1/.hgsubstate
802 ../wdir3/sub1/sub1
800 ../wdir3/sub1/sub1
803 ../wdir3/sub1/sub2/folder/test.txt
801 ../wdir3/sub1/sub2/folder/test.txt
804 ../wdir3/sub1/sub2/large.dat
802 ../wdir3/sub1/sub2/large.dat
805 ../wdir3/sub1/sub2/sub2
803 ../wdir3/sub1/sub2/sub2
806 $ hg up -Cq
804 $ hg up -Cq
807
805
808 Test issue4330: commit a directory where only normal files have changed
806 Test issue4330: commit a directory where only normal files have changed
809 $ touch foo/bar/large.dat
807 $ touch foo/bar/large.dat
810 $ hg add --large foo/bar/large.dat
808 $ hg add --large foo/bar/large.dat
811 $ hg ci -m 'add foo/bar/large.dat'
809 $ hg ci -m 'add foo/bar/large.dat'
812 $ touch a.txt
810 $ touch a.txt
813 $ touch a.dat
811 $ touch a.dat
814 $ hg add -v foo/bar/abc a.txt a.dat
812 $ hg add -v foo/bar/abc a.txt a.dat
815 adding a.dat as a largefile
813 adding a.dat as a largefile
816 adding a.txt
814 adding a.txt
817 adding foo/bar/abc (glob)
815 adding foo/bar/abc (glob)
818 $ hg ci -m 'dir commit with only normal file deltas' foo/bar
816 $ hg ci -m 'dir commit with only normal file deltas' foo/bar
819 $ hg status
817 $ hg status
820 A a.dat
818 A a.dat
821 A a.txt
819 A a.txt
822
820
823 Test a directory commit with a changed largefile and a changed normal file
821 Test a directory commit with a changed largefile and a changed normal file
824 $ echo changed > foo/bar/large.dat
822 $ echo changed > foo/bar/large.dat
825 $ echo changed > foo/bar/abc
823 $ echo changed > foo/bar/abc
826 $ hg ci -m 'dir commit with normal and lf file deltas' foo
824 $ hg ci -m 'dir commit with normal and lf file deltas' foo
827 $ hg status
825 $ hg status
828 A a.dat
826 A a.dat
829 A a.txt
827 A a.txt
830
828
831 $ hg ci -m "add a.*"
829 $ hg ci -m "add a.*"
832 $ hg mv a.dat b.dat
830 $ hg mv a.dat b.dat
833 $ hg mv foo/bar/abc foo/bar/def
831 $ hg mv foo/bar/abc foo/bar/def
834 $ hg status -C
832 $ hg status -C
835 A b.dat
833 A b.dat
836 a.dat
834 a.dat
837 A foo/bar/def
835 A foo/bar/def
838 foo/bar/abc
836 foo/bar/abc
839 R a.dat
837 R a.dat
840 R foo/bar/abc
838 R foo/bar/abc
841
839
842 $ hg ci -m "move large and normal"
840 $ hg ci -m "move large and normal"
843 $ hg status -C --rev '.^' --rev .
841 $ hg status -C --rev '.^' --rev .
844 A b.dat
842 A b.dat
845 a.dat
843 a.dat
846 A foo/bar/def
844 A foo/bar/def
847 foo/bar/abc
845 foo/bar/abc
848 R a.dat
846 R a.dat
849 R foo/bar/abc
847 R foo/bar/abc
850
848
851
849
852 $ echo foo > main
850 $ echo foo > main
853 $ hg ci -m "mod parent only"
851 $ hg ci -m "mod parent only"
854 $ hg init sub3
852 $ hg init sub3
855 $ echo "sub3 = sub3" >> .hgsub
853 $ echo "sub3 = sub3" >> .hgsub
856 $ echo xyz > sub3/a.txt
854 $ echo xyz > sub3/a.txt
857 $ hg add sub3/a.txt
855 $ hg add sub3/a.txt
858 $ hg ci -Sm "add sub3"
856 $ hg ci -Sm "add sub3"
859 committing subrepository sub3
857 committing subrepository sub3
860 $ cat .hgsub | grep -v sub3 > .hgsub1
858 $ cat .hgsub | grep -v sub3 > .hgsub1
861 $ mv .hgsub1 .hgsub
859 $ mv .hgsub1 .hgsub
862 $ hg ci -m "remove sub3"
860 $ hg ci -m "remove sub3"
863
861
864 $ hg log -r "subrepo()" --style compact
862 $ hg log -r "subrepo()" --style compact
865 0 7f491f53a367 1970-01-01 00:00 +0000 test
863 0 7f491f53a367 1970-01-01 00:00 +0000 test
866 main import
864 main import
867
865
868 1 ffe6649062fe 1970-01-01 00:00 +0000 test
866 1 ffe6649062fe 1970-01-01 00:00 +0000 test
869 deep nested modif should trigger a commit
867 deep nested modif should trigger a commit
870
868
871 2 9bb10eebee29 1970-01-01 00:00 +0000 test
869 2 9bb10eebee29 1970-01-01 00:00 +0000 test
872 add test.txt
870 add test.txt
873
871
874 3 7c64f035294f 1970-01-01 00:00 +0000 test
872 3 7c64f035294f 1970-01-01 00:00 +0000 test
875 add large files
873 add large files
876
874
877 4 f734a59e2e35 1970-01-01 00:00 +0000 test
875 4 f734a59e2e35 1970-01-01 00:00 +0000 test
878 forget testing
876 forget testing
879
877
880 11 9685a22af5db 1970-01-01 00:00 +0000 test
878 11 9685a22af5db 1970-01-01 00:00 +0000 test
881 add sub3
879 add sub3
882
880
883 12[tip] 2e0485b475b9 1970-01-01 00:00 +0000 test
881 12[tip] 2e0485b475b9 1970-01-01 00:00 +0000 test
884 remove sub3
882 remove sub3
885
883
886 $ hg log -r "subrepo('sub3')" --style compact
884 $ hg log -r "subrepo('sub3')" --style compact
887 11 9685a22af5db 1970-01-01 00:00 +0000 test
885 11 9685a22af5db 1970-01-01 00:00 +0000 test
888 add sub3
886 add sub3
889
887
890 12[tip] 2e0485b475b9 1970-01-01 00:00 +0000 test
888 12[tip] 2e0485b475b9 1970-01-01 00:00 +0000 test
891 remove sub3
889 remove sub3
892
890
893 $ hg log -r "subrepo('bogus')" --style compact
891 $ hg log -r "subrepo('bogus')" --style compact
894
892
895
893
896 Test .hgsubstate in the R state
894 Test .hgsubstate in the R state
897
895
898 $ hg rm .hgsub .hgsubstate
896 $ hg rm .hgsub .hgsubstate
899 \r (no-eol) (esc)
897 \r (no-eol) (esc)
900 deleting [=====================> ] 1/2\r (no-eol) (esc)
898 deleting [=====================> ] 1/2\r (no-eol) (esc)
901 deleting [===========================================>] 2/2\r (no-eol) (esc)
899 deleting [===========================================>] 2/2\r (no-eol) (esc)
902 \r (no-eol) (esc)
900 \r (no-eol) (esc)
903 $ hg ci -m 'trash subrepo tracking'
901 $ hg ci -m 'trash subrepo tracking'
904
902
905 $ hg log -r "subrepo('re:sub\d+')" --style compact
903 $ hg log -r "subrepo('re:sub\d+')" --style compact
906 0 7f491f53a367 1970-01-01 00:00 +0000 test
904 0 7f491f53a367 1970-01-01 00:00 +0000 test
907 main import
905 main import
908
906
909 1 ffe6649062fe 1970-01-01 00:00 +0000 test
907 1 ffe6649062fe 1970-01-01 00:00 +0000 test
910 deep nested modif should trigger a commit
908 deep nested modif should trigger a commit
911
909
912 2 9bb10eebee29 1970-01-01 00:00 +0000 test
910 2 9bb10eebee29 1970-01-01 00:00 +0000 test
913 add test.txt
911 add test.txt
914
912
915 3 7c64f035294f 1970-01-01 00:00 +0000 test
913 3 7c64f035294f 1970-01-01 00:00 +0000 test
916 add large files
914 add large files
917
915
918 4 f734a59e2e35 1970-01-01 00:00 +0000 test
916 4 f734a59e2e35 1970-01-01 00:00 +0000 test
919 forget testing
917 forget testing
920
918
921 11 9685a22af5db 1970-01-01 00:00 +0000 test
919 11 9685a22af5db 1970-01-01 00:00 +0000 test
922 add sub3
920 add sub3
923
921
924 12 2e0485b475b9 1970-01-01 00:00 +0000 test
922 12 2e0485b475b9 1970-01-01 00:00 +0000 test
925 remove sub3
923 remove sub3
926
924
927 13[tip] a68b2c361653 1970-01-01 00:00 +0000 test
925 13[tip] a68b2c361653 1970-01-01 00:00 +0000 test
928 trash subrepo tracking
926 trash subrepo tracking
929
927
930
928
931 Restore the trashed subrepo tracking
929 Restore the trashed subrepo tracking
932
930
933 $ hg rollback -q
931 $ hg rollback -q
934 $ hg update -Cq .
932 $ hg update -Cq .
935
933
936 Interaction with extdiff, largefiles and subrepos
934 Interaction with extdiff, largefiles and subrepos
937
935
938 $ hg --config extensions.extdiff= pdiff -S
936 $ hg --config extensions.extdiff= pdiff -S
939
937
940 $ hg --config extensions.extdiff= pdiff -r '.^' -S
938 $ hg --config extensions.extdiff= pdiff -r '.^' -S
941 \r (no-eol) (esc)
939 \r (no-eol) (esc)
942 archiving [ ] 0/2\r (no-eol) (esc)
940 archiving [ ] 0/2\r (no-eol) (esc)
943 archiving [====================> ] 1/2\r (no-eol) (esc)
941 archiving [====================> ] 1/2\r (no-eol) (esc)
944 archiving [==========================================>] 2/2\r (no-eol) (esc)
942 archiving [==========================================>] 2/2\r (no-eol) (esc)
945 \r (no-eol) (esc)
943 \r (no-eol) (esc)
946 \r (no-eol) (esc)
944 \r (no-eol) (esc)
947 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
945 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
948 \r (no-eol) (esc)
946 \r (no-eol) (esc)
949 \r (no-eol) (esc)
947 \r (no-eol) (esc)
950 archiving (sub1/sub2) [ <=> ] 0\r (no-eol) (esc)
948 archiving (sub1/sub2) [ <=> ] 0\r (no-eol) (esc)
951 \r (no-eol) (esc)
949 \r (no-eol) (esc)
952 \r (no-eol) (esc)
950 \r (no-eol) (esc)
953 archiving (sub3) [ <=> ] 0\r (no-eol) (esc)
951 archiving (sub3) [ <=> ] 0\r (no-eol) (esc)
954 \r (no-eol) (esc)
952 \r (no-eol) (esc)
955 \r (no-eol) (esc)
953 \r (no-eol) (esc)
956 archiving [ ] 0/2\r (no-eol) (esc)
954 archiving [ ] 0/2\r (no-eol) (esc)
957 archiving [====================> ] 1/2\r (no-eol) (esc)
955 archiving [====================> ] 1/2\r (no-eol) (esc)
958 archiving [==========================================>] 2/2\r (no-eol) (esc)
956 archiving [==========================================>] 2/2\r (no-eol) (esc)
959 \r (no-eol) (esc)
957 \r (no-eol) (esc)
960 \r (no-eol) (esc)
958 \r (no-eol) (esc)
961 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
959 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
962 \r (no-eol) (esc)
960 \r (no-eol) (esc)
963 \r (no-eol) (esc)
961 \r (no-eol) (esc)
964 archiving (sub1/sub2) [ <=> ] 0\r (no-eol) (esc)
962 archiving (sub1/sub2) [ <=> ] 0\r (no-eol) (esc)
965 \r (no-eol) (esc)
963 \r (no-eol) (esc)
966 diff -Nru cloned.*/.hgsub cloned/.hgsub (glob)
964 diff -Nru cloned.*/.hgsub cloned/.hgsub (glob)
967 --- cloned.*/.hgsub * (glob)
965 --- cloned.*/.hgsub * (glob)
968 +++ cloned/.hgsub * (glob)
966 +++ cloned/.hgsub * (glob)
969 @@ -1,2 +1* @@ (glob)
967 @@ -1,2 +1* @@ (glob)
970 sub1 = ../sub1
968 sub1 = ../sub1
971 -sub3 = sub3
969 -sub3 = sub3
972 diff -Nru cloned.*/.hgsubstate cloned/.hgsubstate (glob)
970 diff -Nru cloned.*/.hgsubstate cloned/.hgsubstate (glob)
973 --- cloned.*/.hgsubstate * (glob)
971 --- cloned.*/.hgsubstate * (glob)
974 +++ cloned/.hgsubstate * (glob)
972 +++ cloned/.hgsubstate * (glob)
975 @@ -1,2 +1* @@ (glob)
973 @@ -1,2 +1* @@ (glob)
976 7a36fa02b66e61f27f3d4a822809f159479b8ab2 sub1
974 7a36fa02b66e61f27f3d4a822809f159479b8ab2 sub1
977 -b1a26de6f2a045a9f079323693614ee322f1ff7e sub3
975 -b1a26de6f2a045a9f079323693614ee322f1ff7e sub3
978 [1]
976 [1]
979
977
980 $ hg --config extensions.extdiff= pdiff -r 0 -r '.^' -S
978 $ hg --config extensions.extdiff= pdiff -r 0 -r '.^' -S
981 \r (no-eol) (esc)
979 \r (no-eol) (esc)
982 archiving [ ] 0/3\r (no-eol) (esc)
980 archiving [ ] 0/3\r (no-eol) (esc)
983 archiving [=============> ] 1/3\r (no-eol) (esc)
981 archiving [=============> ] 1/3\r (no-eol) (esc)
984 archiving [===========================> ] 2/3\r (no-eol) (esc)
982 archiving [===========================> ] 2/3\r (no-eol) (esc)
985 archiving [==========================================>] 3/3\r (no-eol) (esc)
983 archiving [==========================================>] 3/3\r (no-eol) (esc)
986 \r (no-eol) (esc)
984 \r (no-eol) (esc)
987 \r (no-eol) (esc)
985 \r (no-eol) (esc)
988 archiving (sub1) [ ] 0/1\r (no-eol) (esc)
986 archiving (sub1) [ ] 0/1\r (no-eol) (esc)
989 archiving (sub1) [===================================>] 1/1\r (no-eol) (esc)
987 archiving (sub1) [===================================>] 1/1\r (no-eol) (esc)
990 \r (no-eol) (esc)
988 \r (no-eol) (esc)
991 \r (no-eol) (esc)
989 \r (no-eol) (esc)
992 archiving (sub1/sub2) [ ] 0/1\r (no-eol) (esc)
990 archiving (sub1/sub2) [ ] 0/1\r (no-eol) (esc)
993 archiving (sub1/sub2) [==============================>] 1/1\r (no-eol) (esc)
991 archiving (sub1/sub2) [==============================>] 1/1\r (no-eol) (esc)
994 \r (no-eol) (esc)
992 \r (no-eol) (esc)
995 \r (no-eol) (esc)
993 \r (no-eol) (esc)
996 archiving [ ] 0/8\r (no-eol) (esc)
994 archiving [ ] 0/8\r (no-eol) (esc)
997 archiving [====> ] 1/8\r (no-eol) (esc)
995 archiving [====> ] 1/8\r (no-eol) (esc)
998 archiving [=========> ] 2/8\r (no-eol) (esc)
996 archiving [=========> ] 2/8\r (no-eol) (esc)
999 archiving [===============> ] 3/8\r (no-eol) (esc)
997 archiving [===============> ] 3/8\r (no-eol) (esc)
1000 archiving [====================> ] 4/8\r (no-eol) (esc)
998 archiving [====================> ] 4/8\r (no-eol) (esc)
1001 archiving [=========================> ] 5/8\r (no-eol) (esc)
999 archiving [=========================> ] 5/8\r (no-eol) (esc)
1002 archiving [===============================> ] 6/8\r (no-eol) (esc)
1000 archiving [===============================> ] 6/8\r (no-eol) (esc)
1003 archiving [====================================> ] 7/8\r (no-eol) (esc)
1001 archiving [====================================> ] 7/8\r (no-eol) (esc)
1004 archiving [==========================================>] 8/8\r (no-eol) (esc)
1002 archiving [==========================================>] 8/8\r (no-eol) (esc)
1005 \r (no-eol) (esc)
1003 \r (no-eol) (esc)
1006 \r (no-eol) (esc)
1004 \r (no-eol) (esc)
1007 archiving (sub1) [ ] 0/1\r (no-eol) (esc)
1005 archiving (sub1) [ ] 0/1\r (no-eol) (esc)
1008 archiving (sub1) [===================================>] 1/1\r (no-eol) (esc)
1006 archiving (sub1) [===================================>] 1/1\r (no-eol) (esc)
1009 \r (no-eol) (esc)
1007 \r (no-eol) (esc)
1010 \r (no-eol) (esc)
1008 \r (no-eol) (esc)
1011 archiving (sub1/sub2) [ ] 0/3\r (no-eol) (esc)
1009 archiving (sub1/sub2) [ ] 0/3\r (no-eol) (esc)
1012 archiving (sub1/sub2) [=========> ] 1/3\r (no-eol) (esc)
1010 archiving (sub1/sub2) [=========> ] 1/3\r (no-eol) (esc)
1013 archiving (sub1/sub2) [===================> ] 2/3\r (no-eol) (esc)
1011 archiving (sub1/sub2) [===================> ] 2/3\r (no-eol) (esc)
1014 archiving (sub1/sub2) [==============================>] 3/3\r (no-eol) (esc)
1012 archiving (sub1/sub2) [==============================>] 3/3\r (no-eol) (esc)
1015 \r (no-eol) (esc)
1013 \r (no-eol) (esc)
1016 \r (no-eol) (esc)
1014 \r (no-eol) (esc)
1017 archiving (sub3) [ ] 0/1\r (no-eol) (esc)
1015 archiving (sub3) [ ] 0/1\r (no-eol) (esc)
1018 archiving (sub3) [===================================>] 1/1\r (no-eol) (esc)
1016 archiving (sub3) [===================================>] 1/1\r (no-eol) (esc)
1019 \r (no-eol) (esc)
1017 \r (no-eol) (esc)
1020 diff -Nru cloned.*/.hglf/b.dat cloned.*/.hglf/b.dat (glob)
1018 diff -Nru cloned.*/.hglf/b.dat cloned.*/.hglf/b.dat (glob)
1021 --- cloned.*/.hglf/b.dat * (glob)
1019 --- cloned.*/.hglf/b.dat * (glob)
1022 +++ cloned.*/.hglf/b.dat * (glob)
1020 +++ cloned.*/.hglf/b.dat * (glob)
1023 @@ -*,0 +1* @@ (glob)
1021 @@ -*,0 +1* @@ (glob)
1024 +da39a3ee5e6b4b0d3255bfef95601890afd80709
1022 +da39a3ee5e6b4b0d3255bfef95601890afd80709
1025 diff -Nru cloned.*/.hglf/foo/bar/large.dat cloned.*/.hglf/foo/bar/large.dat (glob)
1023 diff -Nru cloned.*/.hglf/foo/bar/large.dat cloned.*/.hglf/foo/bar/large.dat (glob)
1026 --- cloned.*/.hglf/foo/bar/large.dat * (glob)
1024 --- cloned.*/.hglf/foo/bar/large.dat * (glob)
1027 +++ cloned.*/.hglf/foo/bar/large.dat * (glob)
1025 +++ cloned.*/.hglf/foo/bar/large.dat * (glob)
1028 @@ -*,0 +1* @@ (glob)
1026 @@ -*,0 +1* @@ (glob)
1029 +2f6933b5ee0f5fdd823d9717d8729f3c2523811b
1027 +2f6933b5ee0f5fdd823d9717d8729f3c2523811b
1030 diff -Nru cloned.*/.hglf/large.bin cloned.*/.hglf/large.bin (glob)
1028 diff -Nru cloned.*/.hglf/large.bin cloned.*/.hglf/large.bin (glob)
1031 --- cloned.*/.hglf/large.bin * (glob)
1029 --- cloned.*/.hglf/large.bin * (glob)
1032 +++ cloned.*/.hglf/large.bin * (glob)
1030 +++ cloned.*/.hglf/large.bin * (glob)
1033 @@ -*,0 +1* @@ (glob)
1031 @@ -*,0 +1* @@ (glob)
1034 +7f7097b041ccf68cc5561e9600da4655d21c6d18
1032 +7f7097b041ccf68cc5561e9600da4655d21c6d18
1035 diff -Nru cloned.*/.hgsub cloned.*/.hgsub (glob)
1033 diff -Nru cloned.*/.hgsub cloned.*/.hgsub (glob)
1036 --- cloned.*/.hgsub * (glob)
1034 --- cloned.*/.hgsub * (glob)
1037 +++ cloned.*/.hgsub * (glob)
1035 +++ cloned.*/.hgsub * (glob)
1038 @@ -1* +1,2 @@ (glob)
1036 @@ -1* +1,2 @@ (glob)
1039 sub1 = ../sub1
1037 sub1 = ../sub1
1040 +sub3 = sub3
1038 +sub3 = sub3
1041 diff -Nru cloned.*/.hgsubstate cloned.*/.hgsubstate (glob)
1039 diff -Nru cloned.*/.hgsubstate cloned.*/.hgsubstate (glob)
1042 --- cloned.*/.hgsubstate * (glob)
1040 --- cloned.*/.hgsubstate * (glob)
1043 +++ cloned.*/.hgsubstate * (glob)
1041 +++ cloned.*/.hgsubstate * (glob)
1044 @@ -1* +1,2 @@ (glob)
1042 @@ -1* +1,2 @@ (glob)
1045 -fc3b4ce2696f7741438c79207583768f2ce6b0dd sub1
1043 -fc3b4ce2696f7741438c79207583768f2ce6b0dd sub1
1046 +7a36fa02b66e61f27f3d4a822809f159479b8ab2 sub1
1044 +7a36fa02b66e61f27f3d4a822809f159479b8ab2 sub1
1047 +b1a26de6f2a045a9f079323693614ee322f1ff7e sub3
1045 +b1a26de6f2a045a9f079323693614ee322f1ff7e sub3
1048 diff -Nru cloned.*/foo/bar/def cloned.*/foo/bar/def (glob)
1046 diff -Nru cloned.*/foo/bar/def cloned.*/foo/bar/def (glob)
1049 --- cloned.*/foo/bar/def * (glob)
1047 --- cloned.*/foo/bar/def * (glob)
1050 +++ cloned.*/foo/bar/def * (glob)
1048 +++ cloned.*/foo/bar/def * (glob)
1051 @@ -*,0 +1* @@ (glob)
1049 @@ -*,0 +1* @@ (glob)
1052 +changed
1050 +changed
1053 diff -Nru cloned.*/main cloned.*/main (glob)
1051 diff -Nru cloned.*/main cloned.*/main (glob)
1054 --- cloned.*/main * (glob)
1052 --- cloned.*/main * (glob)
1055 +++ cloned.*/main * (glob)
1053 +++ cloned.*/main * (glob)
1056 @@ -1* +1* @@ (glob)
1054 @@ -1* +1* @@ (glob)
1057 -main
1055 -main
1058 +foo
1056 +foo
1059 diff -Nru cloned.*/sub1/.hgsubstate cloned.*/sub1/.hgsubstate (glob)
1057 diff -Nru cloned.*/sub1/.hgsubstate cloned.*/sub1/.hgsubstate (glob)
1060 --- cloned.*/sub1/.hgsubstate * (glob)
1058 --- cloned.*/sub1/.hgsubstate * (glob)
1061 +++ cloned.*/sub1/.hgsubstate * (glob)
1059 +++ cloned.*/sub1/.hgsubstate * (glob)
1062 @@ -1* +1* @@ (glob)
1060 @@ -1* +1* @@ (glob)
1063 -c57a0840e3badd667ef3c3ef65471609acb2ba3c sub2
1061 -c57a0840e3badd667ef3c3ef65471609acb2ba3c sub2
1064 +c77908c81ccea3794a896c79e98b0e004aee2e9e sub2
1062 +c77908c81ccea3794a896c79e98b0e004aee2e9e sub2
1065 diff -Nru cloned.*/sub1/sub2/folder/test.txt cloned.*/sub1/sub2/folder/test.txt (glob)
1063 diff -Nru cloned.*/sub1/sub2/folder/test.txt cloned.*/sub1/sub2/folder/test.txt (glob)
1066 --- cloned.*/sub1/sub2/folder/test.txt * (glob)
1064 --- cloned.*/sub1/sub2/folder/test.txt * (glob)
1067 +++ cloned.*/sub1/sub2/folder/test.txt * (glob)
1065 +++ cloned.*/sub1/sub2/folder/test.txt * (glob)
1068 @@ -*,0 +1* @@ (glob)
1066 @@ -*,0 +1* @@ (glob)
1069 +subfolder
1067 +subfolder
1070 diff -Nru cloned.*/sub1/sub2/sub2 cloned.*/sub1/sub2/sub2 (glob)
1068 diff -Nru cloned.*/sub1/sub2/sub2 cloned.*/sub1/sub2/sub2 (glob)
1071 --- cloned.*/sub1/sub2/sub2 * (glob)
1069 --- cloned.*/sub1/sub2/sub2 * (glob)
1072 +++ cloned.*/sub1/sub2/sub2 * (glob)
1070 +++ cloned.*/sub1/sub2/sub2 * (glob)
1073 @@ -1* +1* @@ (glob)
1071 @@ -1* +1* @@ (glob)
1074 -sub2
1072 -sub2
1075 +modified
1073 +modified
1076 diff -Nru cloned.*/sub3/a.txt cloned.*/sub3/a.txt (glob)
1074 diff -Nru cloned.*/sub3/a.txt cloned.*/sub3/a.txt (glob)
1077 --- cloned.*/sub3/a.txt * (glob)
1075 --- cloned.*/sub3/a.txt * (glob)
1078 +++ cloned.*/sub3/a.txt * (glob)
1076 +++ cloned.*/sub3/a.txt * (glob)
1079 @@ -*,0 +1* @@ (glob)
1077 @@ -*,0 +1* @@ (glob)
1080 +xyz
1078 +xyz
1081 [1]
1079 [1]
1082
1080
1083 $ echo mod > sub1/sub2/sub2
1081 $ echo mod > sub1/sub2/sub2
1084 $ hg --config extensions.extdiff= pdiff -S
1082 $ hg --config extensions.extdiff= pdiff -S
1085 \r (no-eol) (esc)
1083 \r (no-eol) (esc)
1086 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
1084 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
1087 \r (no-eol) (esc)
1085 \r (no-eol) (esc)
1088 \r (no-eol) (esc)
1086 \r (no-eol) (esc)
1089 archiving (sub1/sub2) [ ] 0/1\r (no-eol) (esc)
1087 archiving (sub1/sub2) [ ] 0/1\r (no-eol) (esc)
1090 archiving (sub1/sub2) [==============================>] 1/1\r (no-eol) (esc)
1088 archiving (sub1/sub2) [==============================>] 1/1\r (no-eol) (esc)
1091 \r (no-eol) (esc)
1089 \r (no-eol) (esc)
1092 --- */cloned.*/sub1/sub2/sub2 * (glob)
1090 --- */cloned.*/sub1/sub2/sub2 * (glob)
1093 +++ */cloned/sub1/sub2/sub2 * (glob)
1091 +++ */cloned/sub1/sub2/sub2 * (glob)
1094 @@ -1* +1* @@ (glob)
1092 @@ -1* +1* @@ (glob)
1095 -modified
1093 -modified
1096 +mod
1094 +mod
1097 [1]
1095 [1]
1098
1096
1099 $ cd ..
1097 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now