##// END OF EJS Templates
tests: add globs for Windows
Matt Harbison -
r29102:22c53b3a default
parent child Browse files
Show More
@@ -1,97 +1,97 b''
1 mock bugzilla driver for testing template output:
1 mock bugzilla driver for testing template output:
2
2
3 $ cat <<EOF > bzmock.py
3 $ cat <<EOF > bzmock.py
4 > from __future__ import absolute_import
4 > from __future__ import absolute_import
5 > from mercurial import extensions
5 > from mercurial import extensions
6 >
6 >
7 > def extsetup(ui):
7 > def extsetup(ui):
8 > bugzilla = extensions.find('bugzilla')
8 > bugzilla = extensions.find('bugzilla')
9 > class bzmock(bugzilla.bzaccess):
9 > class bzmock(bugzilla.bzaccess):
10 > def __init__(self, ui):
10 > def __init__(self, ui):
11 > super(bzmock, self).__init__(ui)
11 > super(bzmock, self).__init__(ui)
12 > self._logfile = ui.config('bugzilla', 'mocklog')
12 > self._logfile = ui.config('bugzilla', 'mocklog')
13 > def updatebug(self, bugid, newstate, text, committer):
13 > def updatebug(self, bugid, newstate, text, committer):
14 > with open(self._logfile, 'a') as f:
14 > with open(self._logfile, 'a') as f:
15 > f.write('update bugid=%r, newstate=%r, committer=%r\n'
15 > f.write('update bugid=%r, newstate=%r, committer=%r\n'
16 > % (bugid, newstate, committer))
16 > % (bugid, newstate, committer))
17 > f.write('----\n' + text + '\n----\n')
17 > f.write('----\n' + text + '\n----\n')
18 > def notify(self, bugs, committer):
18 > def notify(self, bugs, committer):
19 > with open(self._logfile, 'a') as f:
19 > with open(self._logfile, 'a') as f:
20 > f.write('notify bugs=%r, committer=%r\n'
20 > f.write('notify bugs=%r, committer=%r\n'
21 > % (bugs, committer))
21 > % (bugs, committer))
22 > bugzilla.bugzilla._versions['mock'] = bzmock
22 > bugzilla.bugzilla._versions['mock'] = bzmock
23 > EOF
23 > EOF
24
24
25 set up mock repository:
25 set up mock repository:
26
26
27 $ hg init mockremote
27 $ hg init mockremote
28 $ cat <<EOF > mockremote/.hg/hgrc
28 $ cat <<EOF > mockremote/.hg/hgrc
29 > [extensions]
29 > [extensions]
30 > bugzilla =
30 > bugzilla =
31 > bzmock = $TESTTMP/bzmock.py
31 > bzmock = $TESTTMP/bzmock.py
32 >
32 >
33 > [bugzilla]
33 > [bugzilla]
34 > version = mock
34 > version = mock
35 > mocklog = $TESTTMP/bzmock.log
35 > mocklog = $TESTTMP/bzmock.log
36 >
36 >
37 > [hooks]
37 > [hooks]
38 > incoming.bugzilla = python:hgext.bugzilla.hook
38 > incoming.bugzilla = python:hgext.bugzilla.hook
39 >
39 >
40 > [web]
40 > [web]
41 > baseurl=http://example.org/hg
41 > baseurl=http://example.org/hg
42 >
42 >
43 > %include $TESTTMP/bzstyle.hgrc
43 > %include $TESTTMP/bzstyle.hgrc
44 > EOF
44 > EOF
45
45
46 $ hg clone -q mockremote mocklocal
46 $ hg clone -q mockremote mocklocal
47
47
48 push with default template:
48 push with default template:
49
49
50 $ echo '[bugzilla]' > bzstyle.hgrc
50 $ echo '[bugzilla]' > bzstyle.hgrc
51 $ echo foo > mocklocal/foo
51 $ echo foo > mocklocal/foo
52 $ hg ci -R mocklocal -Aqm 'Fixes bug 123'
52 $ hg ci -R mocklocal -Aqm 'Fixes bug 123'
53 $ hg -R mocklocal push -q
53 $ hg -R mocklocal push -q
54 $ cat bzmock.log && rm bzmock.log
54 $ cat bzmock.log && rm bzmock.log
55 update bugid=123, newstate={}, committer='test'
55 update bugid=123, newstate={}, committer='test'
56 ----
56 ----
57 changeset 7875a8342c6f in repo $TESTTMP/mockremote refers to bug 123.
57 changeset 7875a8342c6f in repo $TESTTMP/mockremote refers to bug 123. (glob)
58 details:
58 details:
59 Fixes bug 123
59 Fixes bug 123
60 ----
60 ----
61 notify bugs={123: {}}, committer='test'
61 notify bugs={123: {}}, committer='test'
62
62
63 push with style:
63 push with style:
64
64
65 $ cat <<EOF > bzstyle.map
65 $ cat <<EOF > bzstyle.map
66 > changeset = "{node|short} refers to bug {bug}."
66 > changeset = "{node|short} refers to bug {bug}."
67 > EOF
67 > EOF
68 $ echo "style = $TESTTMP/bzstyle.map" >> bzstyle.hgrc
68 $ echo "style = $TESTTMP/bzstyle.map" >> bzstyle.hgrc
69 $ echo foo >> mocklocal/foo
69 $ echo foo >> mocklocal/foo
70 $ hg ci -R mocklocal -qm 'Fixes bug 456'
70 $ hg ci -R mocklocal -qm 'Fixes bug 456'
71 $ hg -R mocklocal push -q
71 $ hg -R mocklocal push -q
72 $ cat bzmock.log && rm bzmock.log
72 $ cat bzmock.log && rm bzmock.log
73 update bugid=456, newstate={}, committer='test'
73 update bugid=456, newstate={}, committer='test'
74 ----
74 ----
75 2808b172464b refers to bug 456.
75 2808b172464b refers to bug 456.
76 ----
76 ----
77 notify bugs={456: {}}, committer='test'
77 notify bugs={456: {}}, committer='test'
78
78
79 push with template (overrides style):
79 push with template (overrides style):
80
80
81 $ cat <<EOF >> bzstyle.hgrc
81 $ cat <<EOF >> bzstyle.hgrc
82 > template = Changeset {node|short} in {root|basename}.
82 > template = Changeset {node|short} in {root|basename}.
83 > {hgweb}/rev/{node|short}\n
83 > {hgweb}/rev/{node|short}\n
84 > {desc}
84 > {desc}
85 > EOF
85 > EOF
86 $ echo foo >> mocklocal/foo
86 $ echo foo >> mocklocal/foo
87 $ hg ci -R mocklocal -qm 'Fixes bug 789'
87 $ hg ci -R mocklocal -qm 'Fixes bug 789'
88 $ hg -R mocklocal push -q
88 $ hg -R mocklocal push -q
89 $ cat bzmock.log && rm bzmock.log
89 $ cat bzmock.log && rm bzmock.log
90 update bugid=789, newstate={}, committer='test'
90 update bugid=789, newstate={}, committer='test'
91 ----
91 ----
92 Changeset a770f3e409f2 in mockremote.
92 Changeset a770f3e409f2 in mockremote.
93 http://example.org/hg/rev/a770f3e409f2
93 http://example.org/hg/rev/a770f3e409f2
94
94
95 Fixes bug 789
95 Fixes bug 789
96 ----
96 ----
97 notify bugs={789: {}}, committer='test'
97 notify bugs={789: {}}, committer='test'
@@ -1,535 +1,535 b''
1 $ cat >> $HGRCPATH <<EOF
1 $ cat >> $HGRCPATH <<EOF
2 > [extensions]
2 > [extensions]
3 > convert=
3 > convert=
4 > [convert]
4 > [convert]
5 > hg.saverev=False
5 > hg.saverev=False
6 > EOF
6 > EOF
7 $ hg help convert
7 $ hg help convert
8 hg convert [OPTION]... SOURCE [DEST [REVMAP]]
8 hg convert [OPTION]... SOURCE [DEST [REVMAP]]
9
9
10 convert a foreign SCM repository to a Mercurial one.
10 convert a foreign SCM repository to a Mercurial one.
11
11
12 Accepted source formats [identifiers]:
12 Accepted source formats [identifiers]:
13
13
14 - Mercurial [hg]
14 - Mercurial [hg]
15 - CVS [cvs]
15 - CVS [cvs]
16 - Darcs [darcs]
16 - Darcs [darcs]
17 - git [git]
17 - git [git]
18 - Subversion [svn]
18 - Subversion [svn]
19 - Monotone [mtn]
19 - Monotone [mtn]
20 - GNU Arch [gnuarch]
20 - GNU Arch [gnuarch]
21 - Bazaar [bzr]
21 - Bazaar [bzr]
22 - Perforce [p4]
22 - Perforce [p4]
23
23
24 Accepted destination formats [identifiers]:
24 Accepted destination formats [identifiers]:
25
25
26 - Mercurial [hg]
26 - Mercurial [hg]
27 - Subversion [svn] (history on branches is not preserved)
27 - Subversion [svn] (history on branches is not preserved)
28
28
29 If no revision is given, all revisions will be converted. Otherwise,
29 If no revision is given, all revisions will be converted. Otherwise,
30 convert will only import up to the named revision (given in a format
30 convert will only import up to the named revision (given in a format
31 understood by the source).
31 understood by the source).
32
32
33 If no destination directory name is specified, it defaults to the basename
33 If no destination directory name is specified, it defaults to the basename
34 of the source with "-hg" appended. If the destination repository doesn't
34 of the source with "-hg" appended. If the destination repository doesn't
35 exist, it will be created.
35 exist, it will be created.
36
36
37 By default, all sources except Mercurial will use --branchsort. Mercurial
37 By default, all sources except Mercurial will use --branchsort. Mercurial
38 uses --sourcesort to preserve original revision numbers order. Sort modes
38 uses --sourcesort to preserve original revision numbers order. Sort modes
39 have the following effects:
39 have the following effects:
40
40
41 --branchsort convert from parent to child revision when possible, which
41 --branchsort convert from parent to child revision when possible, which
42 means branches are usually converted one after the other.
42 means branches are usually converted one after the other.
43 It generates more compact repositories.
43 It generates more compact repositories.
44 --datesort sort revisions by date. Converted repositories have good-
44 --datesort sort revisions by date. Converted repositories have good-
45 looking changelogs but are often an order of magnitude
45 looking changelogs but are often an order of magnitude
46 larger than the same ones generated by --branchsort.
46 larger than the same ones generated by --branchsort.
47 --sourcesort try to preserve source revisions order, only supported by
47 --sourcesort try to preserve source revisions order, only supported by
48 Mercurial sources.
48 Mercurial sources.
49 --closesort try to move closed revisions as close as possible to parent
49 --closesort try to move closed revisions as close as possible to parent
50 branches, only supported by Mercurial sources.
50 branches, only supported by Mercurial sources.
51
51
52 If "REVMAP" isn't given, it will be put in a default location
52 If "REVMAP" isn't given, it will be put in a default location
53 ("<dest>/.hg/shamap" by default). The "REVMAP" is a simple text file that
53 ("<dest>/.hg/shamap" by default). The "REVMAP" is a simple text file that
54 maps each source commit ID to the destination ID for that revision, like
54 maps each source commit ID to the destination ID for that revision, like
55 so:
55 so:
56
56
57 <source ID> <destination ID>
57 <source ID> <destination ID>
58
58
59 If the file doesn't exist, it's automatically created. It's updated on
59 If the file doesn't exist, it's automatically created. It's updated on
60 each commit copied, so 'hg convert' can be interrupted and can be run
60 each commit copied, so 'hg convert' can be interrupted and can be run
61 repeatedly to copy new commits.
61 repeatedly to copy new commits.
62
62
63 The authormap is a simple text file that maps each source commit author to
63 The authormap is a simple text file that maps each source commit author to
64 a destination commit author. It is handy for source SCMs that use unix
64 a destination commit author. It is handy for source SCMs that use unix
65 logins to identify authors (e.g.: CVS). One line per author mapping and
65 logins to identify authors (e.g.: CVS). One line per author mapping and
66 the line format is:
66 the line format is:
67
67
68 source author = destination author
68 source author = destination author
69
69
70 Empty lines and lines starting with a "#" are ignored.
70 Empty lines and lines starting with a "#" are ignored.
71
71
72 The filemap is a file that allows filtering and remapping of files and
72 The filemap is a file that allows filtering and remapping of files and
73 directories. Each line can contain one of the following directives:
73 directories. Each line can contain one of the following directives:
74
74
75 include path/to/file-or-dir
75 include path/to/file-or-dir
76
76
77 exclude path/to/file-or-dir
77 exclude path/to/file-or-dir
78
78
79 rename path/to/source path/to/destination
79 rename path/to/source path/to/destination
80
80
81 Comment lines start with "#". A specified path matches if it equals the
81 Comment lines start with "#". A specified path matches if it equals the
82 full relative name of a file or one of its parent directories. The
82 full relative name of a file or one of its parent directories. The
83 "include" or "exclude" directive with the longest matching path applies,
83 "include" or "exclude" directive with the longest matching path applies,
84 so line order does not matter.
84 so line order does not matter.
85
85
86 The "include" directive causes a file, or all files under a directory, to
86 The "include" directive causes a file, or all files under a directory, to
87 be included in the destination repository. The default if there are no
87 be included in the destination repository. The default if there are no
88 "include" statements is to include everything. If there are any "include"
88 "include" statements is to include everything. If there are any "include"
89 statements, nothing else is included. The "exclude" directive causes files
89 statements, nothing else is included. The "exclude" directive causes files
90 or directories to be omitted. The "rename" directive renames a file or
90 or directories to be omitted. The "rename" directive renames a file or
91 directory if it is converted. To rename from a subdirectory into the root
91 directory if it is converted. To rename from a subdirectory into the root
92 of the repository, use "." as the path to rename to.
92 of the repository, use "." as the path to rename to.
93
93
94 "--full" will make sure the converted changesets contain exactly the right
94 "--full" will make sure the converted changesets contain exactly the right
95 files with the right content. It will make a full conversion of all files,
95 files with the right content. It will make a full conversion of all files,
96 not just the ones that have changed. Files that already are correct will
96 not just the ones that have changed. Files that already are correct will
97 not be changed. This can be used to apply filemap changes when converting
97 not be changed. This can be used to apply filemap changes when converting
98 incrementally. This is currently only supported for Mercurial and
98 incrementally. This is currently only supported for Mercurial and
99 Subversion.
99 Subversion.
100
100
101 The splicemap is a file that allows insertion of synthetic history,
101 The splicemap is a file that allows insertion of synthetic history,
102 letting you specify the parents of a revision. This is useful if you want
102 letting you specify the parents of a revision. This is useful if you want
103 to e.g. give a Subversion merge two parents, or graft two disconnected
103 to e.g. give a Subversion merge two parents, or graft two disconnected
104 series of history together. Each entry contains a key, followed by a
104 series of history together. Each entry contains a key, followed by a
105 space, followed by one or two comma-separated values:
105 space, followed by one or two comma-separated values:
106
106
107 key parent1, parent2
107 key parent1, parent2
108
108
109 The key is the revision ID in the source revision control system whose
109 The key is the revision ID in the source revision control system whose
110 parents should be modified (same format as a key in .hg/shamap). The
110 parents should be modified (same format as a key in .hg/shamap). The
111 values are the revision IDs (in either the source or destination revision
111 values are the revision IDs (in either the source or destination revision
112 control system) that should be used as the new parents for that node. For
112 control system) that should be used as the new parents for that node. For
113 example, if you have merged "release-1.0" into "trunk", then you should
113 example, if you have merged "release-1.0" into "trunk", then you should
114 specify the revision on "trunk" as the first parent and the one on the
114 specify the revision on "trunk" as the first parent and the one on the
115 "release-1.0" branch as the second.
115 "release-1.0" branch as the second.
116
116
117 The branchmap is a file that allows you to rename a branch when it is
117 The branchmap is a file that allows you to rename a branch when it is
118 being brought in from whatever external repository. When used in
118 being brought in from whatever external repository. When used in
119 conjunction with a splicemap, it allows for a powerful combination to help
119 conjunction with a splicemap, it allows for a powerful combination to help
120 fix even the most badly mismanaged repositories and turn them into nicely
120 fix even the most badly mismanaged repositories and turn them into nicely
121 structured Mercurial repositories. The branchmap contains lines of the
121 structured Mercurial repositories. The branchmap contains lines of the
122 form:
122 form:
123
123
124 original_branch_name new_branch_name
124 original_branch_name new_branch_name
125
125
126 where "original_branch_name" is the name of the branch in the source
126 where "original_branch_name" is the name of the branch in the source
127 repository, and "new_branch_name" is the name of the branch is the
127 repository, and "new_branch_name" is the name of the branch is the
128 destination repository. No whitespace is allowed in the branch names. This
128 destination repository. No whitespace is allowed in the branch names. This
129 can be used to (for instance) move code in one repository from "default"
129 can be used to (for instance) move code in one repository from "default"
130 to a named branch.
130 to a named branch.
131
131
132 Mercurial Source
132 Mercurial Source
133 ################
133 ################
134
134
135 The Mercurial source recognizes the following configuration options, which
135 The Mercurial source recognizes the following configuration options, which
136 you can set on the command line with "--config":
136 you can set on the command line with "--config":
137
137
138 convert.hg.ignoreerrors
138 convert.hg.ignoreerrors
139 ignore integrity errors when reading. Use it to fix
139 ignore integrity errors when reading. Use it to fix
140 Mercurial repositories with missing revlogs, by converting
140 Mercurial repositories with missing revlogs, by converting
141 from and to Mercurial. Default is False.
141 from and to Mercurial. Default is False.
142 convert.hg.saverev
142 convert.hg.saverev
143 store original revision ID in changeset (forces target IDs
143 store original revision ID in changeset (forces target IDs
144 to change). It takes a boolean argument and defaults to
144 to change). It takes a boolean argument and defaults to
145 False.
145 False.
146 convert.hg.startrev
146 convert.hg.startrev
147 specify the initial Mercurial revision. The default is 0.
147 specify the initial Mercurial revision. The default is 0.
148 convert.hg.revs
148 convert.hg.revs
149 revset specifying the source revisions to convert.
149 revset specifying the source revisions to convert.
150
150
151 CVS Source
151 CVS Source
152 ##########
152 ##########
153
153
154 CVS source will use a sandbox (i.e. a checked-out copy) from CVS to
154 CVS source will use a sandbox (i.e. a checked-out copy) from CVS to
155 indicate the starting point of what will be converted. Direct access to
155 indicate the starting point of what will be converted. Direct access to
156 the repository files is not needed, unless of course the repository is
156 the repository files is not needed, unless of course the repository is
157 ":local:". The conversion uses the top level directory in the sandbox to
157 ":local:". The conversion uses the top level directory in the sandbox to
158 find the CVS repository, and then uses CVS rlog commands to find files to
158 find the CVS repository, and then uses CVS rlog commands to find files to
159 convert. This means that unless a filemap is given, all files under the
159 convert. This means that unless a filemap is given, all files under the
160 starting directory will be converted, and that any directory
160 starting directory will be converted, and that any directory
161 reorganization in the CVS sandbox is ignored.
161 reorganization in the CVS sandbox is ignored.
162
162
163 The following options can be used with "--config":
163 The following options can be used with "--config":
164
164
165 convert.cvsps.cache
165 convert.cvsps.cache
166 Set to False to disable remote log caching, for testing and
166 Set to False to disable remote log caching, for testing and
167 debugging purposes. Default is True.
167 debugging purposes. Default is True.
168 convert.cvsps.fuzz
168 convert.cvsps.fuzz
169 Specify the maximum time (in seconds) that is allowed
169 Specify the maximum time (in seconds) that is allowed
170 between commits with identical user and log message in a
170 between commits with identical user and log message in a
171 single changeset. When very large files were checked in as
171 single changeset. When very large files were checked in as
172 part of a changeset then the default may not be long enough.
172 part of a changeset then the default may not be long enough.
173 The default is 60.
173 The default is 60.
174 convert.cvsps.mergeto
174 convert.cvsps.mergeto
175 Specify a regular expression to which commit log messages
175 Specify a regular expression to which commit log messages
176 are matched. If a match occurs, then the conversion process
176 are matched. If a match occurs, then the conversion process
177 will insert a dummy revision merging the branch on which
177 will insert a dummy revision merging the branch on which
178 this log message occurs to the branch indicated in the
178 this log message occurs to the branch indicated in the
179 regex. Default is "{{mergetobranch ([-\w]+)}}"
179 regex. Default is "{{mergetobranch ([-\w]+)}}"
180 convert.cvsps.mergefrom
180 convert.cvsps.mergefrom
181 Specify a regular expression to which commit log messages
181 Specify a regular expression to which commit log messages
182 are matched. If a match occurs, then the conversion process
182 are matched. If a match occurs, then the conversion process
183 will add the most recent revision on the branch indicated in
183 will add the most recent revision on the branch indicated in
184 the regex as the second parent of the changeset. Default is
184 the regex as the second parent of the changeset. Default is
185 "{{mergefrombranch ([-\w]+)}}"
185 "{{mergefrombranch ([-\w]+)}}"
186 convert.localtimezone
186 convert.localtimezone
187 use local time (as determined by the TZ environment
187 use local time (as determined by the TZ environment
188 variable) for changeset date/times. The default is False
188 variable) for changeset date/times. The default is False
189 (use UTC).
189 (use UTC).
190 hooks.cvslog Specify a Python function to be called at the end of
190 hooks.cvslog Specify a Python function to be called at the end of
191 gathering the CVS log. The function is passed a list with
191 gathering the CVS log. The function is passed a list with
192 the log entries, and can modify the entries in-place, or add
192 the log entries, and can modify the entries in-place, or add
193 or delete them.
193 or delete them.
194 hooks.cvschangesets
194 hooks.cvschangesets
195 Specify a Python function to be called after the changesets
195 Specify a Python function to be called after the changesets
196 are calculated from the CVS log. The function is passed a
196 are calculated from the CVS log. The function is passed a
197 list with the changeset entries, and can modify the
197 list with the changeset entries, and can modify the
198 changesets in-place, or add or delete them.
198 changesets in-place, or add or delete them.
199
199
200 An additional "debugcvsps" Mercurial command allows the builtin changeset
200 An additional "debugcvsps" Mercurial command allows the builtin changeset
201 merging code to be run without doing a conversion. Its parameters and
201 merging code to be run without doing a conversion. Its parameters and
202 output are similar to that of cvsps 2.1. Please see the command help for
202 output are similar to that of cvsps 2.1. Please see the command help for
203 more details.
203 more details.
204
204
205 Subversion Source
205 Subversion Source
206 #################
206 #################
207
207
208 Subversion source detects classical trunk/branches/tags layouts. By
208 Subversion source detects classical trunk/branches/tags layouts. By
209 default, the supplied "svn://repo/path/" source URL is converted as a
209 default, the supplied "svn://repo/path/" source URL is converted as a
210 single branch. If "svn://repo/path/trunk" exists it replaces the default
210 single branch. If "svn://repo/path/trunk" exists it replaces the default
211 branch. If "svn://repo/path/branches" exists, its subdirectories are
211 branch. If "svn://repo/path/branches" exists, its subdirectories are
212 listed as possible branches. If "svn://repo/path/tags" exists, it is
212 listed as possible branches. If "svn://repo/path/tags" exists, it is
213 looked for tags referencing converted branches. Default "trunk",
213 looked for tags referencing converted branches. Default "trunk",
214 "branches" and "tags" values can be overridden with following options. Set
214 "branches" and "tags" values can be overridden with following options. Set
215 them to paths relative to the source URL, or leave them blank to disable
215 them to paths relative to the source URL, or leave them blank to disable
216 auto detection.
216 auto detection.
217
217
218 The following options can be set with "--config":
218 The following options can be set with "--config":
219
219
220 convert.svn.branches
220 convert.svn.branches
221 specify the directory containing branches. The default is
221 specify the directory containing branches. The default is
222 "branches".
222 "branches".
223 convert.svn.tags
223 convert.svn.tags
224 specify the directory containing tags. The default is
224 specify the directory containing tags. The default is
225 "tags".
225 "tags".
226 convert.svn.trunk
226 convert.svn.trunk
227 specify the name of the trunk branch. The default is
227 specify the name of the trunk branch. The default is
228 "trunk".
228 "trunk".
229 convert.localtimezone
229 convert.localtimezone
230 use local time (as determined by the TZ environment
230 use local time (as determined by the TZ environment
231 variable) for changeset date/times. The default is False
231 variable) for changeset date/times. The default is False
232 (use UTC).
232 (use UTC).
233
233
234 Source history can be retrieved starting at a specific revision, instead
234 Source history can be retrieved starting at a specific revision, instead
235 of being integrally converted. Only single branch conversions are
235 of being integrally converted. Only single branch conversions are
236 supported.
236 supported.
237
237
238 convert.svn.startrev
238 convert.svn.startrev
239 specify start Subversion revision number. The default is 0.
239 specify start Subversion revision number. The default is 0.
240
240
241 Git Source
241 Git Source
242 ##########
242 ##########
243
243
244 The Git importer converts commits from all reachable branches (refs in
244 The Git importer converts commits from all reachable branches (refs in
245 refs/heads) and remotes (refs in refs/remotes) to Mercurial. Branches are
245 refs/heads) and remotes (refs in refs/remotes) to Mercurial. Branches are
246 converted to bookmarks with the same name, with the leading 'refs/heads'
246 converted to bookmarks with the same name, with the leading 'refs/heads'
247 stripped. Git submodules are converted to Git subrepos in Mercurial.
247 stripped. Git submodules are converted to Git subrepos in Mercurial.
248
248
249 The following options can be set with "--config":
249 The following options can be set with "--config":
250
250
251 convert.git.similarity
251 convert.git.similarity
252 specify how similar files modified in a commit must be to be
252 specify how similar files modified in a commit must be to be
253 imported as renames or copies, as a percentage between "0"
253 imported as renames or copies, as a percentage between "0"
254 (disabled) and "100" (files must be identical). For example,
254 (disabled) and "100" (files must be identical). For example,
255 "90" means that a delete/add pair will be imported as a
255 "90" means that a delete/add pair will be imported as a
256 rename if more than 90% of the file hasn't changed. The
256 rename if more than 90% of the file hasn't changed. The
257 default is "50".
257 default is "50".
258 convert.git.findcopiesharder
258 convert.git.findcopiesharder
259 while detecting copies, look at all files in the working
259 while detecting copies, look at all files in the working
260 copy instead of just changed ones. This is very expensive
260 copy instead of just changed ones. This is very expensive
261 for large projects, and is only effective when
261 for large projects, and is only effective when
262 "convert.git.similarity" is greater than 0. The default is
262 "convert.git.similarity" is greater than 0. The default is
263 False.
263 False.
264 convert.git.remoteprefix
264 convert.git.remoteprefix
265 remote refs are converted as bookmarks with
265 remote refs are converted as bookmarks with
266 "convert.git.remoteprefix" as a prefix followed by a /. The
266 "convert.git.remoteprefix" as a prefix followed by a /. The
267 default is 'remote'.
267 default is 'remote'.
268 convert.git.skipsubmodules
268 convert.git.skipsubmodules
269 does not convert root level .gitmodules files or files with
269 does not convert root level .gitmodules files or files with
270 160000 mode indicating a submodule. Default is False.
270 160000 mode indicating a submodule. Default is False.
271
271
272 Perforce Source
272 Perforce Source
273 ###############
273 ###############
274
274
275 The Perforce (P4) importer can be given a p4 depot path or a client
275 The Perforce (P4) importer can be given a p4 depot path or a client
276 specification as source. It will convert all files in the source to a flat
276 specification as source. It will convert all files in the source to a flat
277 Mercurial repository, ignoring labels, branches and integrations. Note
277 Mercurial repository, ignoring labels, branches and integrations. Note
278 that when a depot path is given you then usually should specify a target
278 that when a depot path is given you then usually should specify a target
279 directory, because otherwise the target may be named "...-hg".
279 directory, because otherwise the target may be named "...-hg".
280
280
281 The following options can be set with "--config":
281 The following options can be set with "--config":
282
282
283 convert.p4.encoding
283 convert.p4.encoding
284 specify the encoding to use when decoding standard output of
284 specify the encoding to use when decoding standard output of
285 the Perforce command line tool. The default is default
285 the Perforce command line tool. The default is default
286 system encoding.
286 system encoding.
287 convert.p4.startrev
287 convert.p4.startrev
288 specify initial Perforce revision (a Perforce changelist
288 specify initial Perforce revision (a Perforce changelist
289 number).
289 number).
290
290
291 Mercurial Destination
291 Mercurial Destination
292 #####################
292 #####################
293
293
294 The Mercurial destination will recognize Mercurial subrepositories in the
294 The Mercurial destination will recognize Mercurial subrepositories in the
295 destination directory, and update the .hgsubstate file automatically if
295 destination directory, and update the .hgsubstate file automatically if
296 the destination subrepositories contain the <dest>/<sub>/.hg/shamap file.
296 the destination subrepositories contain the <dest>/<sub>/.hg/shamap file.
297 Converting a repository with subrepositories requires converting a single
297 Converting a repository with subrepositories requires converting a single
298 repository at a time, from the bottom up.
298 repository at a time, from the bottom up.
299
299
300 The following options are supported:
300 The following options are supported:
301
301
302 convert.hg.clonebranches
302 convert.hg.clonebranches
303 dispatch source branches in separate clones. The default is
303 dispatch source branches in separate clones. The default is
304 False.
304 False.
305 convert.hg.tagsbranch
305 convert.hg.tagsbranch
306 branch name for tag revisions, defaults to "default".
306 branch name for tag revisions, defaults to "default".
307 convert.hg.usebranchnames
307 convert.hg.usebranchnames
308 preserve branch names. The default is True.
308 preserve branch names. The default is True.
309 convert.hg.sourcename
309 convert.hg.sourcename
310 records the given string as a 'convert_source' extra value
310 records the given string as a 'convert_source' extra value
311 on each commit made in the target repository. The default is
311 on each commit made in the target repository. The default is
312 None.
312 None.
313
313
314 All Destinations
314 All Destinations
315 ################
315 ################
316
316
317 All destination types accept the following options:
317 All destination types accept the following options:
318
318
319 convert.skiptags
319 convert.skiptags
320 does not convert tags from the source repo to the target
320 does not convert tags from the source repo to the target
321 repo. The default is False.
321 repo. The default is False.
322
322
323 options ([+] can be repeated):
323 options ([+] can be repeated):
324
324
325 -s --source-type TYPE source repository type
325 -s --source-type TYPE source repository type
326 -d --dest-type TYPE destination repository type
326 -d --dest-type TYPE destination repository type
327 -r --rev REV [+] import up to source revision REV
327 -r --rev REV [+] import up to source revision REV
328 -A --authormap FILE remap usernames using this file
328 -A --authormap FILE remap usernames using this file
329 --filemap FILE remap file names using contents of file
329 --filemap FILE remap file names using contents of file
330 --full apply filemap changes by converting all files again
330 --full apply filemap changes by converting all files again
331 --splicemap FILE splice synthesized history into place
331 --splicemap FILE splice synthesized history into place
332 --branchmap FILE change branch names while converting
332 --branchmap FILE change branch names while converting
333 --branchsort try to sort changesets by branches
333 --branchsort try to sort changesets by branches
334 --datesort try to sort changesets by date
334 --datesort try to sort changesets by date
335 --sourcesort preserve source changesets order
335 --sourcesort preserve source changesets order
336 --closesort try to reorder closed revisions
336 --closesort try to reorder closed revisions
337
337
338 (some details hidden, use --verbose to show complete help)
338 (some details hidden, use --verbose to show complete help)
339 $ hg init a
339 $ hg init a
340 $ cd a
340 $ cd a
341 $ echo a > a
341 $ echo a > a
342 $ hg ci -d'0 0' -Ama
342 $ hg ci -d'0 0' -Ama
343 adding a
343 adding a
344 $ hg cp a b
344 $ hg cp a b
345 $ hg ci -d'1 0' -mb
345 $ hg ci -d'1 0' -mb
346 $ hg rm a
346 $ hg rm a
347 $ hg ci -d'2 0' -mc
347 $ hg ci -d'2 0' -mc
348 $ hg mv b a
348 $ hg mv b a
349 $ hg ci -d'3 0' -md
349 $ hg ci -d'3 0' -md
350 $ echo a >> a
350 $ echo a >> a
351 $ hg ci -d'4 0' -me
351 $ hg ci -d'4 0' -me
352 $ cd ..
352 $ cd ..
353 $ hg convert a 2>&1 | grep -v 'subversion python bindings could not be loaded'
353 $ hg convert a 2>&1 | grep -v 'subversion python bindings could not be loaded'
354 assuming destination a-hg
354 assuming destination a-hg
355 initializing destination a-hg repository
355 initializing destination a-hg repository
356 scanning source...
356 scanning source...
357 sorting...
357 sorting...
358 converting...
358 converting...
359 4 a
359 4 a
360 3 b
360 3 b
361 2 c
361 2 c
362 1 d
362 1 d
363 0 e
363 0 e
364 $ hg --cwd a-hg pull ../a
364 $ hg --cwd a-hg pull ../a
365 pulling from ../a
365 pulling from ../a
366 searching for changes
366 searching for changes
367 no changes found
367 no changes found
368
368
369 conversion to existing file should fail
369 conversion to existing file should fail
370
370
371 $ touch bogusfile
371 $ touch bogusfile
372 $ hg convert a bogusfile
372 $ hg convert a bogusfile
373 initializing destination bogusfile repository
373 initializing destination bogusfile repository
374 abort: cannot create new bundle repository
374 abort: cannot create new bundle repository
375 [255]
375 [255]
376
376
377 #if unix-permissions no-root
377 #if unix-permissions no-root
378
378
379 conversion to dir without permissions should fail
379 conversion to dir without permissions should fail
380
380
381 $ mkdir bogusdir
381 $ mkdir bogusdir
382 $ chmod 000 bogusdir
382 $ chmod 000 bogusdir
383
383
384 $ hg convert a bogusdir
384 $ hg convert a bogusdir
385 abort: Permission denied: 'bogusdir'
385 abort: Permission denied: 'bogusdir'
386 [255]
386 [255]
387
387
388 user permissions should succeed
388 user permissions should succeed
389
389
390 $ chmod 700 bogusdir
390 $ chmod 700 bogusdir
391 $ hg convert a bogusdir
391 $ hg convert a bogusdir
392 initializing destination bogusdir repository
392 initializing destination bogusdir repository
393 scanning source...
393 scanning source...
394 sorting...
394 sorting...
395 converting...
395 converting...
396 4 a
396 4 a
397 3 b
397 3 b
398 2 c
398 2 c
399 1 d
399 1 d
400 0 e
400 0 e
401
401
402 #endif
402 #endif
403
403
404 test pre and post conversion actions
404 test pre and post conversion actions
405
405
406 $ echo 'include b' > filemap
406 $ echo 'include b' > filemap
407 $ hg convert --debug --filemap filemap a partialb | \
407 $ hg convert --debug --filemap filemap a partialb | \
408 > grep 'run hg'
408 > grep 'run hg'
409 run hg source pre-conversion action
409 run hg source pre-conversion action
410 run hg sink pre-conversion action
410 run hg sink pre-conversion action
411 run hg sink post-conversion action
411 run hg sink post-conversion action
412 run hg source post-conversion action
412 run hg source post-conversion action
413
413
414 converting empty dir should fail "nicely
414 converting empty dir should fail "nicely
415
415
416 $ mkdir emptydir
416 $ mkdir emptydir
417
417
418 override $PATH to ensure p4 not visible; use $PYTHON in case we're
418 override $PATH to ensure p4 not visible; use $PYTHON in case we're
419 running from a devel copy, not a temp installation
419 running from a devel copy, not a temp installation
420
420
421 $ PATH="$BINDIR" $PYTHON "$BINDIR"/hg convert emptydir
421 $ PATH="$BINDIR" $PYTHON "$BINDIR"/hg convert emptydir
422 assuming destination emptydir-hg
422 assuming destination emptydir-hg
423 initializing destination emptydir-hg repository
423 initializing destination emptydir-hg repository
424 emptydir does not look like a CVS checkout
424 emptydir does not look like a CVS checkout
425 $TESTTMP/emptydir does not look like a Git repository
425 $TESTTMP/emptydir does not look like a Git repository (glob)
426 emptydir does not look like a Subversion repository
426 emptydir does not look like a Subversion repository
427 emptydir is not a local Mercurial repository
427 emptydir is not a local Mercurial repository
428 emptydir does not look like a darcs repository
428 emptydir does not look like a darcs repository
429 emptydir does not look like a monotone repository
429 emptydir does not look like a monotone repository
430 emptydir does not look like a GNU Arch repository
430 emptydir does not look like a GNU Arch repository
431 emptydir does not look like a Bazaar repository
431 emptydir does not look like a Bazaar repository
432 cannot find required "p4" tool
432 cannot find required "p4" tool
433 abort: emptydir: missing or unsupported repository
433 abort: emptydir: missing or unsupported repository
434 [255]
434 [255]
435
435
436 convert with imaginary source type
436 convert with imaginary source type
437
437
438 $ hg convert --source-type foo a a-foo
438 $ hg convert --source-type foo a a-foo
439 initializing destination a-foo repository
439 initializing destination a-foo repository
440 abort: foo: invalid source repository type
440 abort: foo: invalid source repository type
441 [255]
441 [255]
442
442
443 convert with imaginary sink type
443 convert with imaginary sink type
444
444
445 $ hg convert --dest-type foo a a-foo
445 $ hg convert --dest-type foo a a-foo
446 abort: foo: invalid destination repository type
446 abort: foo: invalid destination repository type
447 [255]
447 [255]
448
448
449 testing: convert must not produce duplicate entries in fncache
449 testing: convert must not produce duplicate entries in fncache
450
450
451 $ hg convert a b
451 $ hg convert a b
452 initializing destination b repository
452 initializing destination b repository
453 scanning source...
453 scanning source...
454 sorting...
454 sorting...
455 converting...
455 converting...
456 4 a
456 4 a
457 3 b
457 3 b
458 2 c
458 2 c
459 1 d
459 1 d
460 0 e
460 0 e
461
461
462 contents of fncache file:
462 contents of fncache file:
463
463
464 $ cat b/.hg/store/fncache | sort
464 $ cat b/.hg/store/fncache | sort
465 data/a.i
465 data/a.i
466 data/b.i
466 data/b.i
467
467
468 test bogus URL
468 test bogus URL
469
469
470 $ hg convert -q bzr+ssh://foobar@selenic.com/baz baz
470 $ hg convert -q bzr+ssh://foobar@selenic.com/baz baz
471 abort: bzr+ssh://foobar@selenic.com/baz: missing or unsupported repository
471 abort: bzr+ssh://foobar@selenic.com/baz: missing or unsupported repository
472 [255]
472 [255]
473
473
474 test revset converted() lookup
474 test revset converted() lookup
475
475
476 $ hg --config convert.hg.saverev=True convert a c
476 $ hg --config convert.hg.saverev=True convert a c
477 initializing destination c repository
477 initializing destination c repository
478 scanning source...
478 scanning source...
479 sorting...
479 sorting...
480 converting...
480 converting...
481 4 a
481 4 a
482 3 b
482 3 b
483 2 c
483 2 c
484 1 d
484 1 d
485 0 e
485 0 e
486 $ echo f > c/f
486 $ echo f > c/f
487 $ hg -R c ci -d'0 0' -Amf
487 $ hg -R c ci -d'0 0' -Amf
488 adding f
488 adding f
489 created new head
489 created new head
490 $ hg -R c log -r "converted(09d945a62ce6)"
490 $ hg -R c log -r "converted(09d945a62ce6)"
491 changeset: 1:98c3dd46a874
491 changeset: 1:98c3dd46a874
492 user: test
492 user: test
493 date: Thu Jan 01 00:00:01 1970 +0000
493 date: Thu Jan 01 00:00:01 1970 +0000
494 summary: b
494 summary: b
495
495
496 $ hg -R c log -r "converted()"
496 $ hg -R c log -r "converted()"
497 changeset: 0:31ed57b2037c
497 changeset: 0:31ed57b2037c
498 user: test
498 user: test
499 date: Thu Jan 01 00:00:00 1970 +0000
499 date: Thu Jan 01 00:00:00 1970 +0000
500 summary: a
500 summary: a
501
501
502 changeset: 1:98c3dd46a874
502 changeset: 1:98c3dd46a874
503 user: test
503 user: test
504 date: Thu Jan 01 00:00:01 1970 +0000
504 date: Thu Jan 01 00:00:01 1970 +0000
505 summary: b
505 summary: b
506
506
507 changeset: 2:3b9ca06ef716
507 changeset: 2:3b9ca06ef716
508 user: test
508 user: test
509 date: Thu Jan 01 00:00:02 1970 +0000
509 date: Thu Jan 01 00:00:02 1970 +0000
510 summary: c
510 summary: c
511
511
512 changeset: 3:4e0debd37cf2
512 changeset: 3:4e0debd37cf2
513 user: test
513 user: test
514 date: Thu Jan 01 00:00:03 1970 +0000
514 date: Thu Jan 01 00:00:03 1970 +0000
515 summary: d
515 summary: d
516
516
517 changeset: 4:9de3bc9349c5
517 changeset: 4:9de3bc9349c5
518 user: test
518 user: test
519 date: Thu Jan 01 00:00:04 1970 +0000
519 date: Thu Jan 01 00:00:04 1970 +0000
520 summary: e
520 summary: e
521
521
522
522
523 test specifying a sourcename
523 test specifying a sourcename
524 $ echo g > a/g
524 $ echo g > a/g
525 $ hg -R a ci -d'0 0' -Amg
525 $ hg -R a ci -d'0 0' -Amg
526 adding g
526 adding g
527 $ hg --config convert.hg.sourcename=mysource --config convert.hg.saverev=True convert a c
527 $ hg --config convert.hg.sourcename=mysource --config convert.hg.saverev=True convert a c
528 scanning source...
528 scanning source...
529 sorting...
529 sorting...
530 converting...
530 converting...
531 0 g
531 0 g
532 $ hg -R c log -r tip --template '{extras % "{extra}\n"}'
532 $ hg -R c log -r tip --template '{extras % "{extra}\n"}'
533 branch=default
533 branch=default
534 convert_revision=a3bc6100aa8ec03e00aaf271f1f50046fb432072
534 convert_revision=a3bc6100aa8ec03e00aaf271f1f50046fb432072
535 convert_source=mysource
535 convert_source=mysource
@@ -1,628 +1,628 b''
1
1
2 $ cat <<EOF >> $HGRCPATH
2 $ cat <<EOF >> $HGRCPATH
3 > [extensions]
3 > [extensions]
4 > notify=
4 > notify=
5 >
5 >
6 > [hooks]
6 > [hooks]
7 > incoming.notify = python:hgext.notify.hook
7 > incoming.notify = python:hgext.notify.hook
8 >
8 >
9 > [notify]
9 > [notify]
10 > sources = pull
10 > sources = pull
11 > diffstat = False
11 > diffstat = False
12 >
12 >
13 > [usersubs]
13 > [usersubs]
14 > foo@bar = *
14 > foo@bar = *
15 >
15 >
16 > [reposubs]
16 > [reposubs]
17 > * = baz
17 > * = baz
18 > EOF
18 > EOF
19 $ hg help notify
19 $ hg help notify
20 notify extension - hooks for sending email push notifications
20 notify extension - hooks for sending email push notifications
21
21
22 This extension implements hooks to send email notifications when changesets
22 This extension implements hooks to send email notifications when changesets
23 are sent from or received by the local repository.
23 are sent from or received by the local repository.
24
24
25 First, enable the extension as explained in 'hg help extensions', and register
25 First, enable the extension as explained in 'hg help extensions', and register
26 the hook you want to run. "incoming" and "changegroup" hooks are run when
26 the hook you want to run. "incoming" and "changegroup" hooks are run when
27 changesets are received, while "outgoing" hooks are for changesets sent to
27 changesets are received, while "outgoing" hooks are for changesets sent to
28 another repository:
28 another repository:
29
29
30 [hooks]
30 [hooks]
31 # one email for each incoming changeset
31 # one email for each incoming changeset
32 incoming.notify = python:hgext.notify.hook
32 incoming.notify = python:hgext.notify.hook
33 # one email for all incoming changesets
33 # one email for all incoming changesets
34 changegroup.notify = python:hgext.notify.hook
34 changegroup.notify = python:hgext.notify.hook
35
35
36 # one email for all outgoing changesets
36 # one email for all outgoing changesets
37 outgoing.notify = python:hgext.notify.hook
37 outgoing.notify = python:hgext.notify.hook
38
38
39 This registers the hooks. To enable notification, subscribers must be assigned
39 This registers the hooks. To enable notification, subscribers must be assigned
40 to repositories. The "[usersubs]" section maps multiple repositories to a
40 to repositories. The "[usersubs]" section maps multiple repositories to a
41 given recipient. The "[reposubs]" section maps multiple recipients to a single
41 given recipient. The "[reposubs]" section maps multiple recipients to a single
42 repository:
42 repository:
43
43
44 [usersubs]
44 [usersubs]
45 # key is subscriber email, value is a comma-separated list of repo patterns
45 # key is subscriber email, value is a comma-separated list of repo patterns
46 user@host = pattern
46 user@host = pattern
47
47
48 [reposubs]
48 [reposubs]
49 # key is repo pattern, value is a comma-separated list of subscriber emails
49 # key is repo pattern, value is a comma-separated list of subscriber emails
50 pattern = user@host
50 pattern = user@host
51
51
52 A "pattern" is a "glob" matching the absolute path to a repository, optionally
52 A "pattern" is a "glob" matching the absolute path to a repository, optionally
53 combined with a revset expression. A revset expression, if present, is
53 combined with a revset expression. A revset expression, if present, is
54 separated from the glob by a hash. Example:
54 separated from the glob by a hash. Example:
55
55
56 [reposubs]
56 [reposubs]
57 */widgets#branch(release) = qa-team@example.com
57 */widgets#branch(release) = qa-team@example.com
58
58
59 This sends to "qa-team@example.com" whenever a changeset on the "release"
59 This sends to "qa-team@example.com" whenever a changeset on the "release"
60 branch triggers a notification in any repository ending in "widgets".
60 branch triggers a notification in any repository ending in "widgets".
61
61
62 In order to place them under direct user management, "[usersubs]" and
62 In order to place them under direct user management, "[usersubs]" and
63 "[reposubs]" sections may be placed in a separate "hgrc" file and incorporated
63 "[reposubs]" sections may be placed in a separate "hgrc" file and incorporated
64 by reference:
64 by reference:
65
65
66 [notify]
66 [notify]
67 config = /path/to/subscriptionsfile
67 config = /path/to/subscriptionsfile
68
68
69 Notifications will not be sent until the "notify.test" value is set to
69 Notifications will not be sent until the "notify.test" value is set to
70 "False"; see below.
70 "False"; see below.
71
71
72 Notifications content can be tweaked with the following configuration entries:
72 Notifications content can be tweaked with the following configuration entries:
73
73
74 notify.test
74 notify.test
75 If "True", print messages to stdout instead of sending them. Default: True.
75 If "True", print messages to stdout instead of sending them. Default: True.
76
76
77 notify.sources
77 notify.sources
78 Space-separated list of change sources. Notifications are activated only
78 Space-separated list of change sources. Notifications are activated only
79 when a changeset's source is in this list. Sources may be:
79 when a changeset's source is in this list. Sources may be:
80
80
81 "serve" changesets received via http or ssh
81 "serve" changesets received via http or ssh
82 "pull" changesets received via "hg pull"
82 "pull" changesets received via "hg pull"
83 "unbundle" changesets received via "hg unbundle"
83 "unbundle" changesets received via "hg unbundle"
84 "push" changesets sent or received via "hg push"
84 "push" changesets sent or received via "hg push"
85 "bundle" changesets sent via "hg unbundle"
85 "bundle" changesets sent via "hg unbundle"
86
86
87 Default: serve.
87 Default: serve.
88
88
89 notify.strip
89 notify.strip
90 Number of leading slashes to strip from url paths. By default, notifications
90 Number of leading slashes to strip from url paths. By default, notifications
91 reference repositories with their absolute path. "notify.strip" lets you
91 reference repositories with their absolute path. "notify.strip" lets you
92 turn them into relative paths. For example, "notify.strip=3" will change
92 turn them into relative paths. For example, "notify.strip=3" will change
93 "/long/path/repository" into "repository". Default: 0.
93 "/long/path/repository" into "repository". Default: 0.
94
94
95 notify.domain
95 notify.domain
96 Default email domain for sender or recipients with no explicit domain.
96 Default email domain for sender or recipients with no explicit domain.
97
97
98 notify.style
98 notify.style
99 Style file to use when formatting emails.
99 Style file to use when formatting emails.
100
100
101 notify.template
101 notify.template
102 Template to use when formatting emails.
102 Template to use when formatting emails.
103
103
104 notify.incoming
104 notify.incoming
105 Template to use when run as an incoming hook, overriding "notify.template".
105 Template to use when run as an incoming hook, overriding "notify.template".
106
106
107 notify.outgoing
107 notify.outgoing
108 Template to use when run as an outgoing hook, overriding "notify.template".
108 Template to use when run as an outgoing hook, overriding "notify.template".
109
109
110 notify.changegroup
110 notify.changegroup
111 Template to use when running as a changegroup hook, overriding
111 Template to use when running as a changegroup hook, overriding
112 "notify.template".
112 "notify.template".
113
113
114 notify.maxdiff
114 notify.maxdiff
115 Maximum number of diff lines to include in notification email. Set to 0 to
115 Maximum number of diff lines to include in notification email. Set to 0 to
116 disable the diff, or -1 to include all of it. Default: 300.
116 disable the diff, or -1 to include all of it. Default: 300.
117
117
118 notify.maxsubject
118 notify.maxsubject
119 Maximum number of characters in email's subject line. Default: 67.
119 Maximum number of characters in email's subject line. Default: 67.
120
120
121 notify.diffstat
121 notify.diffstat
122 Set to True to include a diffstat before diff content. Default: True.
122 Set to True to include a diffstat before diff content. Default: True.
123
123
124 notify.merge
124 notify.merge
125 If True, send notifications for merge changesets. Default: True.
125 If True, send notifications for merge changesets. Default: True.
126
126
127 notify.mbox
127 notify.mbox
128 If set, append mails to this mbox file instead of sending. Default: None.
128 If set, append mails to this mbox file instead of sending. Default: None.
129
129
130 notify.fromauthor
130 notify.fromauthor
131 If set, use the committer of the first changeset in a changegroup for the
131 If set, use the committer of the first changeset in a changegroup for the
132 "From" field of the notification mail. If not set, take the user from the
132 "From" field of the notification mail. If not set, take the user from the
133 pushing repo. Default: False.
133 pushing repo. Default: False.
134
134
135 If set, the following entries will also be used to customize the
135 If set, the following entries will also be used to customize the
136 notifications:
136 notifications:
137
137
138 email.from
138 email.from
139 Email "From" address to use if none can be found in the generated email
139 Email "From" address to use if none can be found in the generated email
140 content.
140 content.
141
141
142 web.baseurl
142 web.baseurl
143 Root repository URL to combine with repository paths when making references.
143 Root repository URL to combine with repository paths when making references.
144 See also "notify.strip".
144 See also "notify.strip".
145
145
146 no commands defined
146 no commands defined
147 $ hg init a
147 $ hg init a
148 $ echo a > a/a
148 $ echo a > a/a
149
149
150 commit
150 commit
151
151
152 $ hg --cwd a commit -Ama -d '0 0'
152 $ hg --cwd a commit -Ama -d '0 0'
153 adding a
153 adding a
154
154
155
155
156 clone
156 clone
157
157
158 $ hg --traceback clone a b
158 $ hg --traceback clone a b
159 updating to branch default
159 updating to branch default
160 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
160 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
161 $ echo a >> a/a
161 $ echo a >> a/a
162
162
163 commit
163 commit
164
164
165 $ hg --traceback --cwd a commit -Amb -d '1 0'
165 $ hg --traceback --cwd a commit -Amb -d '1 0'
166
166
167 on Mac OS X 10.5 the tmp path is very long so would get stripped in the subject line
167 on Mac OS X 10.5 the tmp path is very long so would get stripped in the subject line
168
168
169 $ cat <<EOF >> $HGRCPATH
169 $ cat <<EOF >> $HGRCPATH
170 > [notify]
170 > [notify]
171 > maxsubject = 200
171 > maxsubject = 200
172 > EOF
172 > EOF
173
173
174 the python call below wraps continuation lines, which appear on Mac OS X 10.5 because
174 the python call below wraps continuation lines, which appear on Mac OS X 10.5 because
175 of the very long subject line
175 of the very long subject line
176 pull (minimal config)
176 pull (minimal config)
177
177
178 $ hg --traceback --cwd b pull ../a | \
178 $ hg --traceback --cwd b pull ../a | \
179 > $PYTHON -c 'import sys,re; print re.sub("\n[\t ]", " ", sys.stdin.read()),'
179 > $PYTHON -c 'import sys,re; print re.sub("\n[\t ]", " ", sys.stdin.read()),'
180 pulling from ../a
180 pulling from ../a
181 searching for changes
181 searching for changes
182 adding changesets
182 adding changesets
183 adding manifests
183 adding manifests
184 adding file changes
184 adding file changes
185 added 1 changesets with 1 changes to 1 files
185 added 1 changesets with 1 changes to 1 files
186 Content-Type: text/plain; charset="us-ascii"
186 Content-Type: text/plain; charset="us-ascii"
187 MIME-Version: 1.0
187 MIME-Version: 1.0
188 Content-Transfer-Encoding: 7bit
188 Content-Transfer-Encoding: 7bit
189 Date: * (glob)
189 Date: * (glob)
190 Subject: changeset in $TESTTMP/b: b
190 Subject: changeset in $TESTTMP/b: b
191 From: test
191 From: test
192 X-Hg-Notification: changeset 0647d048b600
192 X-Hg-Notification: changeset 0647d048b600
193 Message-Id: <*> (glob)
193 Message-Id: <*> (glob)
194 To: baz, foo@bar
194 To: baz, foo@bar
195
195
196 changeset 0647d048b600 in $TESTTMP/b (glob)
196 changeset 0647d048b600 in $TESTTMP/b (glob)
197 details: $TESTTMP/b?cmd=changeset;node=0647d048b600
197 details: $TESTTMP/b?cmd=changeset;node=0647d048b600
198 description: b
198 description: b
199
199
200 diffs (6 lines):
200 diffs (6 lines):
201
201
202 diff -r cb9a9f314b8b -r 0647d048b600 a
202 diff -r cb9a9f314b8b -r 0647d048b600 a
203 --- a/a Thu Jan 01 00:00:00 1970 +0000
203 --- a/a Thu Jan 01 00:00:00 1970 +0000
204 +++ b/a Thu Jan 01 00:00:01 1970 +0000
204 +++ b/a Thu Jan 01 00:00:01 1970 +0000
205 @@ -1,1 +1,2 @@ a
205 @@ -1,1 +1,2 @@ a
206 +a
206 +a
207 (run 'hg update' to get a working copy)
207 (run 'hg update' to get a working copy)
208 $ cat <<EOF >> $HGRCPATH
208 $ cat <<EOF >> $HGRCPATH
209 > [notify]
209 > [notify]
210 > config = `pwd`/.notify.conf
210 > config = `pwd`/.notify.conf
211 > domain = test.com
211 > domain = test.com
212 > strip = 42
212 > strip = 42
213 > template = Subject: {desc|firstline|strip}\nFrom: {author}\nX-Test: foo\n\nchangeset {node|short} in {webroot}\ndescription:\n\t{desc|tabindent|strip}
213 > template = Subject: {desc|firstline|strip}\nFrom: {author}\nX-Test: foo\n\nchangeset {node|short} in {webroot}\ndescription:\n\t{desc|tabindent|strip}
214 >
214 >
215 > [web]
215 > [web]
216 > baseurl = http://test/
216 > baseurl = http://test/
217 > EOF
217 > EOF
218
218
219 fail for config file is missing
219 fail for config file is missing
220
220
221 $ hg --cwd b rollback
221 $ hg --cwd b rollback
222 repository tip rolled back to revision 0 (undo pull)
222 repository tip rolled back to revision 0 (undo pull)
223 $ hg --cwd b pull ../a 2>&1 | grep 'error.*\.notify\.conf' > /dev/null && echo pull failed
223 $ hg --cwd b pull ../a 2>&1 | grep 'error.*\.notify\.conf' > /dev/null && echo pull failed
224 pull failed
224 pull failed
225 $ touch ".notify.conf"
225 $ touch ".notify.conf"
226
226
227 pull
227 pull
228
228
229 $ hg --cwd b rollback
229 $ hg --cwd b rollback
230 repository tip rolled back to revision 0 (undo pull)
230 repository tip rolled back to revision 0 (undo pull)
231 $ hg --traceback --cwd b pull ../a | \
231 $ hg --traceback --cwd b pull ../a | \
232 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
232 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
233 pulling from ../a
233 pulling from ../a
234 searching for changes
234 searching for changes
235 adding changesets
235 adding changesets
236 adding manifests
236 adding manifests
237 adding file changes
237 adding file changes
238 added 1 changesets with 1 changes to 1 files
238 added 1 changesets with 1 changes to 1 files
239 Content-Type: text/plain; charset="us-ascii"
239 Content-Type: text/plain; charset="us-ascii"
240 MIME-Version: 1.0
240 MIME-Version: 1.0
241 Content-Transfer-Encoding: 7bit
241 Content-Transfer-Encoding: 7bit
242 X-Test: foo
242 X-Test: foo
243 Date: * (glob)
243 Date: * (glob)
244 Subject: b
244 Subject: b
245 From: test@test.com
245 From: test@test.com
246 X-Hg-Notification: changeset 0647d048b600
246 X-Hg-Notification: changeset 0647d048b600
247 Message-Id: <*> (glob)
247 Message-Id: <*> (glob)
248 To: baz@test.com, foo@bar
248 To: baz@test.com, foo@bar
249
249
250 changeset 0647d048b600 in b
250 changeset 0647d048b600 in b
251 description: b
251 description: b
252 diffs (6 lines):
252 diffs (6 lines):
253
253
254 diff -r cb9a9f314b8b -r 0647d048b600 a
254 diff -r cb9a9f314b8b -r 0647d048b600 a
255 --- a/a Thu Jan 01 00:00:00 1970 +0000
255 --- a/a Thu Jan 01 00:00:00 1970 +0000
256 +++ b/a Thu Jan 01 00:00:01 1970 +0000
256 +++ b/a Thu Jan 01 00:00:01 1970 +0000
257 @@ -1,1 +1,2 @@
257 @@ -1,1 +1,2 @@
258 a
258 a
259 +a
259 +a
260 (run 'hg update' to get a working copy)
260 (run 'hg update' to get a working copy)
261
261
262 $ cat << EOF >> $HGRCPATH
262 $ cat << EOF >> $HGRCPATH
263 > [hooks]
263 > [hooks]
264 > incoming.notify = python:hgext.notify.hook
264 > incoming.notify = python:hgext.notify.hook
265 >
265 >
266 > [notify]
266 > [notify]
267 > sources = pull
267 > sources = pull
268 > diffstat = True
268 > diffstat = True
269 > EOF
269 > EOF
270
270
271 pull
271 pull
272
272
273 $ hg --cwd b rollback
273 $ hg --cwd b rollback
274 repository tip rolled back to revision 0 (undo pull)
274 repository tip rolled back to revision 0 (undo pull)
275 $ hg --traceback --cwd b pull ../a | \
275 $ hg --traceback --cwd b pull ../a | \
276 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
276 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
277 pulling from ../a
277 pulling from ../a
278 searching for changes
278 searching for changes
279 adding changesets
279 adding changesets
280 adding manifests
280 adding manifests
281 adding file changes
281 adding file changes
282 added 1 changesets with 1 changes to 1 files
282 added 1 changesets with 1 changes to 1 files
283 Content-Type: text/plain; charset="us-ascii"
283 Content-Type: text/plain; charset="us-ascii"
284 MIME-Version: 1.0
284 MIME-Version: 1.0
285 Content-Transfer-Encoding: 7bit
285 Content-Transfer-Encoding: 7bit
286 X-Test: foo
286 X-Test: foo
287 Date: * (glob)
287 Date: * (glob)
288 Subject: b
288 Subject: b
289 From: test@test.com
289 From: test@test.com
290 X-Hg-Notification: changeset 0647d048b600
290 X-Hg-Notification: changeset 0647d048b600
291 Message-Id: <*> (glob)
291 Message-Id: <*> (glob)
292 To: baz@test.com, foo@bar
292 To: baz@test.com, foo@bar
293
293
294 changeset 0647d048b600 in b
294 changeset 0647d048b600 in b
295 description: b
295 description: b
296 diffstat:
296 diffstat:
297
297
298 a | 1 +
298 a | 1 +
299 1 files changed, 1 insertions(+), 0 deletions(-)
299 1 files changed, 1 insertions(+), 0 deletions(-)
300
300
301 diffs (6 lines):
301 diffs (6 lines):
302
302
303 diff -r cb9a9f314b8b -r 0647d048b600 a
303 diff -r cb9a9f314b8b -r 0647d048b600 a
304 --- a/a Thu Jan 01 00:00:00 1970 +0000
304 --- a/a Thu Jan 01 00:00:00 1970 +0000
305 +++ b/a Thu Jan 01 00:00:01 1970 +0000
305 +++ b/a Thu Jan 01 00:00:01 1970 +0000
306 @@ -1,1 +1,2 @@
306 @@ -1,1 +1,2 @@
307 a
307 a
308 +a
308 +a
309 (run 'hg update' to get a working copy)
309 (run 'hg update' to get a working copy)
310
310
311 test merge
311 test merge
312
312
313 $ cd a
313 $ cd a
314 $ hg up -C 0
314 $ hg up -C 0
315 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
315 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
316 $ echo a >> a
316 $ echo a >> a
317 $ hg ci -Am adda2 -d '2 0'
317 $ hg ci -Am adda2 -d '2 0'
318 created new head
318 created new head
319 $ hg merge
319 $ hg merge
320 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
320 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
321 (branch merge, don't forget to commit)
321 (branch merge, don't forget to commit)
322 $ hg ci -m merge -d '3 0'
322 $ hg ci -m merge -d '3 0'
323 $ cd ..
323 $ cd ..
324 $ hg --traceback --cwd b pull ../a | \
324 $ hg --traceback --cwd b pull ../a | \
325 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
325 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
326 pulling from ../a
326 pulling from ../a
327 searching for changes
327 searching for changes
328 adding changesets
328 adding changesets
329 adding manifests
329 adding manifests
330 adding file changes
330 adding file changes
331 added 2 changesets with 0 changes to 0 files
331 added 2 changesets with 0 changes to 0 files
332 Content-Type: text/plain; charset="us-ascii"
332 Content-Type: text/plain; charset="us-ascii"
333 MIME-Version: 1.0
333 MIME-Version: 1.0
334 Content-Transfer-Encoding: 7bit
334 Content-Transfer-Encoding: 7bit
335 X-Test: foo
335 X-Test: foo
336 Date: * (glob)
336 Date: * (glob)
337 Subject: adda2
337 Subject: adda2
338 From: test@test.com
338 From: test@test.com
339 X-Hg-Notification: changeset 0a184ce6067f
339 X-Hg-Notification: changeset 0a184ce6067f
340 Message-Id: <*> (glob)
340 Message-Id: <*> (glob)
341 To: baz@test.com, foo@bar
341 To: baz@test.com, foo@bar
342
342
343 changeset 0a184ce6067f in b
343 changeset 0a184ce6067f in b
344 description: adda2
344 description: adda2
345 diffstat:
345 diffstat:
346
346
347 a | 1 +
347 a | 1 +
348 1 files changed, 1 insertions(+), 0 deletions(-)
348 1 files changed, 1 insertions(+), 0 deletions(-)
349
349
350 diffs (6 lines):
350 diffs (6 lines):
351
351
352 diff -r cb9a9f314b8b -r 0a184ce6067f a
352 diff -r cb9a9f314b8b -r 0a184ce6067f a
353 --- a/a Thu Jan 01 00:00:00 1970 +0000
353 --- a/a Thu Jan 01 00:00:00 1970 +0000
354 +++ b/a Thu Jan 01 00:00:02 1970 +0000
354 +++ b/a Thu Jan 01 00:00:02 1970 +0000
355 @@ -1,1 +1,2 @@
355 @@ -1,1 +1,2 @@
356 a
356 a
357 +a
357 +a
358 Content-Type: text/plain; charset="us-ascii"
358 Content-Type: text/plain; charset="us-ascii"
359 MIME-Version: 1.0
359 MIME-Version: 1.0
360 Content-Transfer-Encoding: 7bit
360 Content-Transfer-Encoding: 7bit
361 X-Test: foo
361 X-Test: foo
362 Date: * (glob)
362 Date: * (glob)
363 Subject: merge
363 Subject: merge
364 From: test@test.com
364 From: test@test.com
365 X-Hg-Notification: changeset 6a0cf76b2701
365 X-Hg-Notification: changeset 6a0cf76b2701
366 Message-Id: <*> (glob)
366 Message-Id: <*> (glob)
367 To: baz@test.com, foo@bar
367 To: baz@test.com, foo@bar
368
368
369 changeset 6a0cf76b2701 in b
369 changeset 6a0cf76b2701 in b
370 description: merge
370 description: merge
371 (run 'hg update' to get a working copy)
371 (run 'hg update' to get a working copy)
372
372
373 non-ascii content and truncation of multi-byte subject
373 non-ascii content and truncation of multi-byte subject
374
374
375 $ cat <<EOF >> $HGRCPATH
375 $ cat <<EOF >> $HGRCPATH
376 > [notify]
376 > [notify]
377 > maxsubject = 4
377 > maxsubject = 4
378 > EOF
378 > EOF
379 $ echo a >> a/a
379 $ echo a >> a/a
380 $ hg --cwd a --encoding utf-8 commit -A -d '0 0' \
380 $ hg --cwd a --encoding utf-8 commit -A -d '0 0' \
381 > -m `$PYTHON -c 'print "\xc3\xa0\xc3\xa1\xc3\xa2\xc3\xa3\xc3\xa4"'`
381 > -m `$PYTHON -c 'print "\xc3\xa0\xc3\xa1\xc3\xa2\xc3\xa3\xc3\xa4"'`
382 $ hg --traceback --cwd b --encoding utf-8 pull ../a | \
382 $ hg --traceback --cwd b --encoding utf-8 pull ../a | \
383 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
383 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
384 pulling from ../a
384 pulling from ../a
385 searching for changes
385 searching for changes
386 adding changesets
386 adding changesets
387 adding manifests
387 adding manifests
388 adding file changes
388 adding file changes
389 added 1 changesets with 1 changes to 1 files
389 added 1 changesets with 1 changes to 1 files
390 Content-Type: text/plain; charset="us-ascii"
390 Content-Type: text/plain; charset="us-ascii"
391 MIME-Version: 1.0
391 MIME-Version: 1.0
392 Content-Transfer-Encoding: 8bit
392 Content-Transfer-Encoding: 8bit
393 X-Test: foo
393 X-Test: foo
394 Date: * (glob)
394 Date: * (glob)
395 Subject: \xc3\xa0... (esc)
395 Subject: \xc3\xa0... (esc)
396 From: test@test.com
396 From: test@test.com
397 X-Hg-Notification: changeset 7ea05ad269dc
397 X-Hg-Notification: changeset 7ea05ad269dc
398 Message-Id: <*> (glob)
398 Message-Id: <*> (glob)
399 To: baz@test.com, foo@bar
399 To: baz@test.com, foo@bar
400
400
401 changeset 7ea05ad269dc in b
401 changeset 7ea05ad269dc in b
402 description: \xc3\xa0\xc3\xa1\xc3\xa2\xc3\xa3\xc3\xa4 (esc)
402 description: \xc3\xa0\xc3\xa1\xc3\xa2\xc3\xa3\xc3\xa4 (esc)
403 diffstat:
403 diffstat:
404
404
405 a | 1 +
405 a | 1 +
406 1 files changed, 1 insertions(+), 0 deletions(-)
406 1 files changed, 1 insertions(+), 0 deletions(-)
407
407
408 diffs (7 lines):
408 diffs (7 lines):
409
409
410 diff -r 6a0cf76b2701 -r 7ea05ad269dc a
410 diff -r 6a0cf76b2701 -r 7ea05ad269dc a
411 --- a/a Thu Jan 01 00:00:03 1970 +0000
411 --- a/a Thu Jan 01 00:00:03 1970 +0000
412 +++ b/a Thu Jan 01 00:00:00 1970 +0000
412 +++ b/a Thu Jan 01 00:00:00 1970 +0000
413 @@ -1,2 +1,3 @@
413 @@ -1,2 +1,3 @@
414 a
414 a
415 a
415 a
416 +a
416 +a
417 (run 'hg update' to get a working copy)
417 (run 'hg update' to get a working copy)
418
418
419 long lines
419 long lines
420
420
421 $ cat <<EOF >> $HGRCPATH
421 $ cat <<EOF >> $HGRCPATH
422 > [notify]
422 > [notify]
423 > maxsubject = 67
423 > maxsubject = 67
424 > test = False
424 > test = False
425 > mbox = mbox
425 > mbox = mbox
426 > EOF
426 > EOF
427 $ $PYTHON -c 'file("a/a", "ab").write("no" * 500 + "\n")'
427 $ $PYTHON -c 'file("a/a", "ab").write("no" * 500 + "\n")'
428 $ hg --cwd a commit -A -m "long line"
428 $ hg --cwd a commit -A -m "long line"
429 $ hg --traceback --cwd b pull ../a
429 $ hg --traceback --cwd b pull ../a
430 pulling from ../a
430 pulling from ../a
431 searching for changes
431 searching for changes
432 adding changesets
432 adding changesets
433 adding manifests
433 adding manifests
434 adding file changes
434 adding file changes
435 added 1 changesets with 1 changes to 1 files
435 added 1 changesets with 1 changes to 1 files
436 notify: sending 2 subscribers 1 changes
436 notify: sending 2 subscribers 1 changes
437 (run 'hg update' to get a working copy)
437 (run 'hg update' to get a working copy)
438 $ $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", file("b/mbox").read()),'
438 $ $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", file("b/mbox").read()),'
439 From test@test.com ... ... .. ..:..:.. .... (re)
439 From test@test.com ... ... .. ..:..:.. .... (re)
440 Content-Type: text/plain; charset="us-ascii"
440 Content-Type: text/plain; charset="us-ascii"
441 MIME-Version: 1.0
441 MIME-Version: 1.0
442 Content-Transfer-Encoding: quoted-printable
442 Content-Transfer-Encoding: quoted-printable
443 X-Test: foo
443 X-Test: foo
444 Date: * (glob)
444 Date: * (glob)
445 Subject: long line
445 Subject: long line
446 From: test@test.com
446 From: test@test.com
447 X-Hg-Notification: changeset e0be44cf638b
447 X-Hg-Notification: changeset e0be44cf638b
448 Message-Id: <hg.e0be44cf638b.*.*@*> (glob)
448 Message-Id: <hg.e0be44cf638b.*.*@*> (glob)
449 To: baz@test.com, foo@bar
449 To: baz@test.com, foo@bar
450
450
451 changeset e0be44cf638b in b
451 changeset e0be44cf638b in b
452 description: long line
452 description: long line
453 diffstat:
453 diffstat:
454
454
455 a | 1 +
455 a | 1 +
456 1 files changed, 1 insertions(+), 0 deletions(-)
456 1 files changed, 1 insertions(+), 0 deletions(-)
457
457
458 diffs (8 lines):
458 diffs (8 lines):
459
459
460 diff -r 7ea05ad269dc -r e0be44cf638b a
460 diff -r 7ea05ad269dc -r e0be44cf638b a
461 --- a/a Thu Jan 01 00:00:00 1970 +0000
461 --- a/a Thu Jan 01 00:00:00 1970 +0000
462 +++ b/a Thu Jan 01 00:00:00 1970 +0000
462 +++ b/a Thu Jan 01 00:00:00 1970 +0000
463 @@ -1,3 +1,4 @@
463 @@ -1,3 +1,4 @@
464 a
464 a
465 a
465 a
466 a
466 a
467 +nonononononononononononononononononononononononononononononononononononono=
467 +nonononononononononononononononononononononononononononononononononononono=
468 nononononononononononononononononononononononononononononononononononononon=
468 nononononononononononononononononononononononononononononononononononononon=
469 ononononononononononononononononononononononononononononononononononononono=
469 ononononononononononononononononononononononononononononononononononononono=
470 nononononononononononononononononononononononononononononononononononononon=
470 nononononononononononononononononononononononononononononononononononononon=
471 ononononononononononononononononononononononononononononononononononononono=
471 ononononononononononononononononononononononononononononononononononononono=
472 nononononononononononononononononononononononononononononononononononononon=
472 nononononononononononononononononononononononononononononononononononononon=
473 ononononononononononononononononononononononononononononononononononononono=
473 ononononononononononononononononononononononononononononononononononononono=
474 nononononononononononononononononononononononononononononononononononononon=
474 nononononononononononononononononononononononononononononononononononononon=
475 ononononononononononononononononononononononononononononononononononononono=
475 ononononononononononononononononononononononononononononononononononononono=
476 nononononononononononononononononononononononononononononononononononononon=
476 nononononononononononononononononononononononononononononononononononononon=
477 ononononononononononononononononononononononononononononononononononononono=
477 ononononononononononononononononononononononononononononononononononononono=
478 nononononononononononononononononononononononononononononononononononononon=
478 nononononononononononononononononononononononononononononononononononononon=
479 ononononononononononononononononononononononononononononononononononononono=
479 ononononononononononononononononononononononononononononononononononononono=
480 nonononononononononononono
480 nonononononononononononono
481
481
482 revset selection: send to address that matches branch and repo
482 revset selection: send to address that matches branch and repo
483
483
484 $ cat << EOF >> $HGRCPATH
484 $ cat << EOF >> $HGRCPATH
485 > [hooks]
485 > [hooks]
486 > incoming.notify = python:hgext.notify.hook
486 > incoming.notify = python:hgext.notify.hook
487 >
487 >
488 > [notify]
488 > [notify]
489 > sources = pull
489 > sources = pull
490 > test = True
490 > test = True
491 > diffstat = False
491 > diffstat = False
492 > maxdiff = 0
492 > maxdiff = 0
493 >
493 >
494 > [reposubs]
494 > [reposubs]
495 > */a#branch(test) = will_no_be_send@example.com
495 > */a#branch(test) = will_no_be_send@example.com
496 > */b#branch(test) = notify@example.com
496 > */b#branch(test) = notify@example.com
497 > EOF
497 > EOF
498 $ hg --cwd a branch test
498 $ hg --cwd a branch test
499 marked working directory as branch test
499 marked working directory as branch test
500 (branches are permanent and global, did you want a bookmark?)
500 (branches are permanent and global, did you want a bookmark?)
501 $ echo a >> a/a
501 $ echo a >> a/a
502 $ hg --cwd a ci -m test -d '1 0'
502 $ hg --cwd a ci -m test -d '1 0'
503 $ hg --traceback --cwd b pull ../a | \
503 $ hg --traceback --cwd b pull ../a | \
504 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
504 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
505 pulling from ../a
505 pulling from ../a
506 searching for changes
506 searching for changes
507 adding changesets
507 adding changesets
508 adding manifests
508 adding manifests
509 adding file changes
509 adding file changes
510 added 1 changesets with 1 changes to 1 files
510 added 1 changesets with 1 changes to 1 files
511 Content-Type: text/plain; charset="us-ascii"
511 Content-Type: text/plain; charset="us-ascii"
512 MIME-Version: 1.0
512 MIME-Version: 1.0
513 Content-Transfer-Encoding: 7bit
513 Content-Transfer-Encoding: 7bit
514 X-Test: foo
514 X-Test: foo
515 Date: * (glob)
515 Date: * (glob)
516 Subject: test
516 Subject: test
517 From: test@test.com
517 From: test@test.com
518 X-Hg-Notification: changeset fbbcbc516f2f
518 X-Hg-Notification: changeset fbbcbc516f2f
519 Message-Id: <hg.fbbcbc516f2f.*.*@*> (glob)
519 Message-Id: <hg.fbbcbc516f2f.*.*@*> (glob)
520 To: baz@test.com, foo@bar, notify@example.com
520 To: baz@test.com, foo@bar, notify@example.com
521
521
522 changeset fbbcbc516f2f in b
522 changeset fbbcbc516f2f in b
523 description: test
523 description: test
524 (run 'hg update' to get a working copy)
524 (run 'hg update' to get a working copy)
525
525
526 revset selection: don't send to address that waits for mails
526 revset selection: don't send to address that waits for mails
527 from different branch
527 from different branch
528
528
529 $ hg --cwd a update default
529 $ hg --cwd a update default
530 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
530 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
531 $ echo a >> a/a
531 $ echo a >> a/a
532 $ hg --cwd a ci -m test -d '1 0'
532 $ hg --cwd a ci -m test -d '1 0'
533 $ hg --traceback --cwd b pull ../a | \
533 $ hg --traceback --cwd b pull ../a | \
534 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
534 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
535 pulling from ../a
535 pulling from ../a
536 searching for changes
536 searching for changes
537 adding changesets
537 adding changesets
538 adding manifests
538 adding manifests
539 adding file changes
539 adding file changes
540 added 1 changesets with 0 changes to 0 files (+1 heads)
540 added 1 changesets with 0 changes to 0 files (+1 heads)
541 Content-Type: text/plain; charset="us-ascii"
541 Content-Type: text/plain; charset="us-ascii"
542 MIME-Version: 1.0
542 MIME-Version: 1.0
543 Content-Transfer-Encoding: 7bit
543 Content-Transfer-Encoding: 7bit
544 X-Test: foo
544 X-Test: foo
545 Date: * (glob)
545 Date: * (glob)
546 Subject: test
546 Subject: test
547 From: test@test.com
547 From: test@test.com
548 X-Hg-Notification: changeset 38b42fa092de
548 X-Hg-Notification: changeset 38b42fa092de
549 Message-Id: <hg.38b42fa092de.*.*@*> (glob)
549 Message-Id: <hg.38b42fa092de.*.*@*> (glob)
550 To: baz@test.com, foo@bar
550 To: baz@test.com, foo@bar
551
551
552 changeset 38b42fa092de in b
552 changeset 38b42fa092de in b
553 description: test
553 description: test
554 (run 'hg heads' to see heads)
554 (run 'hg heads' to see heads)
555
555
556 default template:
556 default template:
557
557
558 $ grep -v '^template =' $HGRCPATH > "$HGRCPATH.new"
558 $ grep -v '^template =' $HGRCPATH > "$HGRCPATH.new"
559 $ mv "$HGRCPATH.new" $HGRCPATH
559 $ mv "$HGRCPATH.new" $HGRCPATH
560 $ echo a >> a/a
560 $ echo a >> a/a
561 $ hg --cwd a commit -m 'default template'
561 $ hg --cwd a commit -m 'default template'
562 $ hg --cwd b pull ../a -q | \
562 $ hg --cwd b pull ../a -q | \
563 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
563 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
564 Content-Type: text/plain; charset="us-ascii"
564 Content-Type: text/plain; charset="us-ascii"
565 MIME-Version: 1.0
565 MIME-Version: 1.0
566 Content-Transfer-Encoding: 7bit
566 Content-Transfer-Encoding: 7bit
567 Date: * (glob)
567 Date: * (glob)
568 Subject: changeset in b: default template
568 Subject: changeset in b: default template
569 From: test@test.com
569 From: test@test.com
570 X-Hg-Notification: changeset 3548c9e294b6
570 X-Hg-Notification: changeset 3548c9e294b6
571 Message-Id: <hg.3548c9e294b6.*.*@*> (glob)
571 Message-Id: <hg.3548c9e294b6.*.*@*> (glob)
572 To: baz@test.com, foo@bar
572 To: baz@test.com, foo@bar
573
573
574 changeset 3548c9e294b6 in $TESTTMP/b
574 changeset 3548c9e294b6 in $TESTTMP/b (glob)
575 details: http://test/b?cmd=changeset;node=3548c9e294b6
575 details: http://test/b?cmd=changeset;node=3548c9e294b6
576 description: default template
576 description: default template
577
577
578 with style:
578 with style:
579
579
580 $ cat <<EOF > notifystyle.map
580 $ cat <<EOF > notifystyle.map
581 > changeset = "Subject: {desc|firstline|strip}
581 > changeset = "Subject: {desc|firstline|strip}
582 > From: {author}
582 > From: {author}
583 > {""}
583 > {""}
584 > changeset {node|short}"
584 > changeset {node|short}"
585 > EOF
585 > EOF
586 $ cat <<EOF >> $HGRCPATH
586 $ cat <<EOF >> $HGRCPATH
587 > [notify]
587 > [notify]
588 > style = $TESTTMP/notifystyle.map
588 > style = $TESTTMP/notifystyle.map
589 > EOF
589 > EOF
590 $ echo a >> a/a
590 $ echo a >> a/a
591 $ hg --cwd a commit -m 'with style'
591 $ hg --cwd a commit -m 'with style'
592 $ hg --cwd b pull ../a -q | \
592 $ hg --cwd b pull ../a -q | \
593 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
593 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
594 Content-Type: text/plain; charset="us-ascii"
594 Content-Type: text/plain; charset="us-ascii"
595 MIME-Version: 1.0
595 MIME-Version: 1.0
596 Content-Transfer-Encoding: 7bit
596 Content-Transfer-Encoding: 7bit
597 Date: * (glob)
597 Date: * (glob)
598 Subject: with style
598 Subject: with style
599 From: test@test.com
599 From: test@test.com
600 X-Hg-Notification: changeset e917dbd961d3
600 X-Hg-Notification: changeset e917dbd961d3
601 Message-Id: <hg.e917dbd961d3.*.*@*> (glob)
601 Message-Id: <hg.e917dbd961d3.*.*@*> (glob)
602 To: baz@test.com, foo@bar
602 To: baz@test.com, foo@bar
603
603
604 changeset e917dbd961d3
604 changeset e917dbd961d3
605
605
606 with template (overrides style):
606 with template (overrides style):
607
607
608 $ cat <<EOF >> $HGRCPATH
608 $ cat <<EOF >> $HGRCPATH
609 > template = Subject: {node|short}: {desc|firstline|strip}
609 > template = Subject: {node|short}: {desc|firstline|strip}
610 > From: {author}
610 > From: {author}
611 > {""}
611 > {""}
612 > {desc}
612 > {desc}
613 > EOF
613 > EOF
614 $ echo a >> a/a
614 $ echo a >> a/a
615 $ hg --cwd a commit -m 'with template'
615 $ hg --cwd a commit -m 'with template'
616 $ hg --cwd b pull ../a -q | \
616 $ hg --cwd b pull ../a -q | \
617 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
617 > $PYTHON -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
618 Content-Type: text/plain; charset="us-ascii"
618 Content-Type: text/plain; charset="us-ascii"
619 MIME-Version: 1.0
619 MIME-Version: 1.0
620 Content-Transfer-Encoding: 7bit
620 Content-Transfer-Encoding: 7bit
621 Date: * (glob)
621 Date: * (glob)
622 Subject: a09743fd3edd: with template
622 Subject: a09743fd3edd: with template
623 From: test@test.com
623 From: test@test.com
624 X-Hg-Notification: changeset a09743fd3edd
624 X-Hg-Notification: changeset a09743fd3edd
625 Message-Id: <hg.a09743fd3edd.*.*@*> (glob)
625 Message-Id: <hg.a09743fd3edd.*.*@*> (glob)
626 To: baz@test.com, foo@bar
626 To: baz@test.com, foo@bar
627
627
628 with template
628 with template
@@ -1,1099 +1,1099 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)
217 \r (no-eol) (esc)
218 \r (no-eol) (esc)
218 \r (no-eol) (esc)
219 removing sub1/sub2/folder/test.txt (glob)
219 removing sub1/sub2/folder/test.txt (glob)
220 removing sub1/sub2/test.txt (glob)
220 removing sub1/sub2/test.txt (glob)
221 $ hg status -S
221 $ hg status -S
222 R sub1/sub2/folder/test.txt
222 R sub1/sub2/folder/test.txt
223 R sub1/sub2/test.txt
223 R sub1/sub2/test.txt
224 $ hg update -Cq
224 $ hg update -Cq
225 $ hg remove -I 're:.*.txt' sub1
225 $ hg remove -I 're:.*.txt' sub1
226 \r (no-eol) (esc)
226 \r (no-eol) (esc)
227 searching [==========================================>] 1/1\r (no-eol) (esc)
227 searching [==========================================>] 1/1\r (no-eol) (esc)
228 \r (no-eol) (esc)
228 \r (no-eol) (esc)
229 \r (no-eol) (esc)
229 \r (no-eol) (esc)
230 deleting [===========================================>] 1/1\r (no-eol) (esc)
230 deleting [===========================================>] 1/1\r (no-eol) (esc)
231 \r (no-eol) (esc)
231 \r (no-eol) (esc)
232 $ hg status -S
232 $ hg status -S
233 $ hg remove sub1/sub2/folder/test.txt
233 $ hg remove sub1/sub2/folder/test.txt
234 \r (no-eol) (esc)
234 \r (no-eol) (esc)
235 searching [==========================================>] 1/1\r (no-eol) (esc)
235 searching [==========================================>] 1/1\r (no-eol) (esc)
236 searching [==========================================>] 1/1\r (no-eol) (esc)
236 searching [==========================================>] 1/1\r (no-eol) (esc)
237 \r (no-eol) (esc)
237 \r (no-eol) (esc)
238 \r (no-eol) (esc)
238 \r (no-eol) (esc)
239 deleting [===========================================>] 1/1\r (no-eol) (esc)
239 deleting [===========================================>] 1/1\r (no-eol) (esc)
240 \r (no-eol) (esc)
240 \r (no-eol) (esc)
241 \r (no-eol) (esc)
241 \r (no-eol) (esc)
242 deleting [===========================================>] 1/1\r (no-eol) (esc)
242 deleting [===========================================>] 1/1\r (no-eol) (esc)
243 \r (no-eol) (esc)
243 \r (no-eol) (esc)
244 \r (no-eol) (esc)
244 \r (no-eol) (esc)
245 deleting [===========================================>] 1/1\r (no-eol) (esc)
245 deleting [===========================================>] 1/1\r (no-eol) (esc)
246 \r (no-eol) (esc)
246 \r (no-eol) (esc)
247 $ hg remove sub1/.hgsubstate
247 $ hg remove sub1/.hgsubstate
248 \r (no-eol) (esc)
248 \r (no-eol) (esc)
249 searching [==========================================>] 1/1\r (no-eol) (esc)
249 searching [==========================================>] 1/1\r (no-eol) (esc)
250 \r (no-eol) (esc)
250 \r (no-eol) (esc)
251 \r (no-eol) (esc)
251 \r (no-eol) (esc)
252 deleting [===========================================>] 1/1\r (no-eol) (esc)
252 deleting [===========================================>] 1/1\r (no-eol) (esc)
253 \r (no-eol) (esc)
253 \r (no-eol) (esc)
254 \r (no-eol) (esc)
254 \r (no-eol) (esc)
255 deleting [===========================================>] 1/1\r (no-eol) (esc)
255 deleting [===========================================>] 1/1\r (no-eol) (esc)
256 \r (no-eol) (esc)
256 \r (no-eol) (esc)
257 $ mv sub1/.hgsub sub1/x.hgsub
257 $ mv sub1/.hgsub sub1/x.hgsub
258 $ hg status -S
258 $ hg status -S
259 warning: subrepo spec file 'sub1/.hgsub' not found
259 warning: subrepo spec file 'sub1/.hgsub' not found
260 R sub1/.hgsubstate
260 R sub1/.hgsubstate
261 R sub1/sub2/folder/test.txt
261 R sub1/sub2/folder/test.txt
262 ! sub1/.hgsub
262 ! sub1/.hgsub
263 ? sub1/x.hgsub
263 ? sub1/x.hgsub
264 $ mv sub1/x.hgsub sub1/.hgsub
264 $ mv sub1/x.hgsub sub1/.hgsub
265 $ hg update -Cq
265 $ hg update -Cq
266 $ touch sub1/foo
266 $ touch sub1/foo
267 $ hg forget sub1/sub2/folder/test.txt
267 $ hg forget sub1/sub2/folder/test.txt
268 $ rm sub1/sub2/test.txt
268 $ rm sub1/sub2/test.txt
269
269
270 Test relative path printing + subrepos
270 Test relative path printing + subrepos
271 $ mkdir -p foo/bar
271 $ mkdir -p foo/bar
272 $ cd foo
272 $ cd foo
273 $ touch bar/abc
273 $ touch bar/abc
274 $ hg addremove -S ..
274 $ hg addremove -S ..
275 \r (no-eol) (esc)
275 \r (no-eol) (esc)
276 searching for exact renames [ ] 0/1\r (no-eol) (esc)
276 searching for exact renames [ ] 0/1\r (no-eol) (esc)
277 \r (no-eol) (esc)
277 \r (no-eol) (esc)
278 adding ../sub1/sub2/folder/test.txt (glob)
278 adding ../sub1/sub2/folder/test.txt (glob)
279 removing ../sub1/sub2/test.txt (glob)
279 removing ../sub1/sub2/test.txt (glob)
280 adding ../sub1/foo (glob)
280 adding ../sub1/foo (glob)
281 adding bar/abc (glob)
281 adding bar/abc (glob)
282 $ cd ..
282 $ cd ..
283 $ hg status -S
283 $ hg status -S
284 A foo/bar/abc
284 A foo/bar/abc
285 A sub1/foo
285 A sub1/foo
286 R sub1/sub2/test.txt
286 R sub1/sub2/test.txt
287
287
288 Archive wdir() with subrepos
288 Archive wdir() with subrepos
289 $ hg rm main
289 $ hg rm main
290 \r (no-eol) (esc)
290 \r (no-eol) (esc)
291 deleting [===========================================>] 1/1\r (no-eol) (esc)
291 deleting [===========================================>] 1/1\r (no-eol) (esc)
292 \r (no-eol) (esc)
292 \r (no-eol) (esc)
293 $ hg archive -S -r 'wdir()' ../wdir
293 $ hg archive -S -r 'wdir()' ../wdir
294 \r (no-eol) (esc)
294 \r (no-eol) (esc)
295 archiving [ ] 0/3\r (no-eol) (esc)
295 archiving [ ] 0/3\r (no-eol) (esc)
296 archiving [=============> ] 1/3\r (no-eol) (esc)
296 archiving [=============> ] 1/3\r (no-eol) (esc)
297 archiving [===========================> ] 2/3\r (no-eol) (esc)
297 archiving [===========================> ] 2/3\r (no-eol) (esc)
298 archiving [==========================================>] 3/3\r (no-eol) (esc)
298 archiving [==========================================>] 3/3\r (no-eol) (esc)
299 \r (no-eol) (esc)
299 \r (no-eol) (esc)
300 \r (no-eol) (esc)
300 \r (no-eol) (esc)
301 archiving (sub1) [ ] 0/4\r (no-eol) (esc)
301 archiving (sub1) [ ] 0/4\r (no-eol) (esc)
302 archiving (sub1) [========> ] 1/4\r (no-eol) (esc)
302 archiving (sub1) [========> ] 1/4\r (no-eol) (esc)
303 archiving (sub1) [=================> ] 2/4\r (no-eol) (esc)
303 archiving (sub1) [=================> ] 2/4\r (no-eol) (esc)
304 archiving (sub1) [==========================> ] 3/4\r (no-eol) (esc)
304 archiving (sub1) [==========================> ] 3/4\r (no-eol) (esc)
305 archiving (sub1) [===================================>] 4/4\r (no-eol) (esc)
305 archiving (sub1) [===================================>] 4/4\r (no-eol) (esc)
306 \r (no-eol) (esc)
306 \r (no-eol) (esc)
307 \r (no-eol) (esc)
307 \r (no-eol) (esc)
308 archiving (sub1/sub2) [ ] 0/2\r (no-eol) (esc)
308 archiving (sub1/sub2) [ ] 0/2\r (no-eol) (glob) (esc)
309 archiving (sub1/sub2) [==============> ] 1/2\r (no-eol) (esc)
309 archiving (sub1/sub2) [==============> ] 1/2\r (no-eol) (glob) (esc)
310 archiving (sub1/sub2) [==============================>] 2/2\r (no-eol) (esc)
310 archiving (sub1/sub2) [==============================>] 2/2\r (no-eol) (glob) (esc)
311 \r (no-eol) (esc)
311 \r (no-eol) (esc)
312 $ diff -r . ../wdir | egrep -v '\.hg$|^Common subdirectories:'
312 $ diff -r . ../wdir | egrep -v '\.hg$|^Common subdirectories:'
313 Only in ../wdir: .hg_archival.txt
313 Only in ../wdir: .hg_archival.txt
314
314
315 $ find ../wdir -type f | sort
315 $ find ../wdir -type f | sort
316 ../wdir/.hg_archival.txt
316 ../wdir/.hg_archival.txt
317 ../wdir/.hgsub
317 ../wdir/.hgsub
318 ../wdir/.hgsubstate
318 ../wdir/.hgsubstate
319 ../wdir/foo/bar/abc
319 ../wdir/foo/bar/abc
320 ../wdir/sub1/.hgsub
320 ../wdir/sub1/.hgsub
321 ../wdir/sub1/.hgsubstate
321 ../wdir/sub1/.hgsubstate
322 ../wdir/sub1/foo
322 ../wdir/sub1/foo
323 ../wdir/sub1/sub1
323 ../wdir/sub1/sub1
324 ../wdir/sub1/sub2/folder/test.txt
324 ../wdir/sub1/sub2/folder/test.txt
325 ../wdir/sub1/sub2/sub2
325 ../wdir/sub1/sub2/sub2
326
326
327 $ cat ../wdir/.hg_archival.txt
327 $ cat ../wdir/.hg_archival.txt
328 repo: 7f491f53a367861f47ee64a80eb997d1f341b77a
328 repo: 7f491f53a367861f47ee64a80eb997d1f341b77a
329 node: 9bb10eebee29dc0f1201dcf5977b811a540255fd+
329 node: 9bb10eebee29dc0f1201dcf5977b811a540255fd+
330 branch: default
330 branch: default
331 latesttag: null
331 latesttag: null
332 latesttagdistance: 4
332 latesttagdistance: 4
333 changessincelatesttag: 4
333 changessincelatesttag: 4
334
334
335 Attempting to archive 'wdir()' with a missing file is handled gracefully
335 Attempting to archive 'wdir()' with a missing file is handled gracefully
336 $ rm sub1/sub1
336 $ rm sub1/sub1
337 $ rm -r ../wdir
337 $ rm -r ../wdir
338 $ hg archive -v -S -r 'wdir()' ../wdir
338 $ hg archive -v -S -r 'wdir()' ../wdir
339 \r (no-eol) (esc)
339 \r (no-eol) (esc)
340 archiving [ ] 0/3\r (no-eol) (esc)
340 archiving [ ] 0/3\r (no-eol) (esc)
341 archiving [=============> ] 1/3\r (no-eol) (esc)
341 archiving [=============> ] 1/3\r (no-eol) (esc)
342 archiving [===========================> ] 2/3\r (no-eol) (esc)
342 archiving [===========================> ] 2/3\r (no-eol) (esc)
343 archiving [==========================================>] 3/3\r (no-eol) (esc)
343 archiving [==========================================>] 3/3\r (no-eol) (esc)
344 \r (no-eol) (esc)
344 \r (no-eol) (esc)
345 \r (no-eol) (esc)
345 \r (no-eol) (esc)
346 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
346 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
347 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
347 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
348 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
348 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
349 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
349 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
350 \r (no-eol) (esc)
350 \r (no-eol) (esc)
351 \r (no-eol) (esc)
351 \r (no-eol) (esc)
352 archiving (sub1/sub2) [ ] 0/2\r (no-eol) (esc)
352 archiving (sub1/sub2) [ ] 0/2\r (no-eol) (glob) (esc)
353 archiving (sub1/sub2) [==============> ] 1/2\r (no-eol) (esc)
353 archiving (sub1/sub2) [==============> ] 1/2\r (no-eol) (glob) (esc)
354 archiving (sub1/sub2) [==============================>] 2/2\r (no-eol) (esc)
354 archiving (sub1/sub2) [==============================>] 2/2\r (no-eol) (glob) (esc)
355 \r (no-eol) (esc)
355 \r (no-eol) (esc)
356 $ find ../wdir -type f | sort
356 $ find ../wdir -type f | sort
357 ../wdir/.hg_archival.txt
357 ../wdir/.hg_archival.txt
358 ../wdir/.hgsub
358 ../wdir/.hgsub
359 ../wdir/.hgsubstate
359 ../wdir/.hgsubstate
360 ../wdir/foo/bar/abc
360 ../wdir/foo/bar/abc
361 ../wdir/sub1/.hgsub
361 ../wdir/sub1/.hgsub
362 ../wdir/sub1/.hgsubstate
362 ../wdir/sub1/.hgsubstate
363 ../wdir/sub1/foo
363 ../wdir/sub1/foo
364 ../wdir/sub1/sub2/folder/test.txt
364 ../wdir/sub1/sub2/folder/test.txt
365 ../wdir/sub1/sub2/sub2
365 ../wdir/sub1/sub2/sub2
366
366
367 Continue relative path printing + subrepos
367 Continue relative path printing + subrepos
368 $ hg update -Cq
368 $ hg update -Cq
369 $ rm -r ../wdir
369 $ rm -r ../wdir
370 $ hg archive -S -r 'wdir()' ../wdir
370 $ hg archive -S -r 'wdir()' ../wdir
371 \r (no-eol) (esc)
371 \r (no-eol) (esc)
372 archiving [ ] 0/3\r (no-eol) (esc)
372 archiving [ ] 0/3\r (no-eol) (esc)
373 archiving [=============> ] 1/3\r (no-eol) (esc)
373 archiving [=============> ] 1/3\r (no-eol) (esc)
374 archiving [===========================> ] 2/3\r (no-eol) (esc)
374 archiving [===========================> ] 2/3\r (no-eol) (esc)
375 archiving [==========================================>] 3/3\r (no-eol) (esc)
375 archiving [==========================================>] 3/3\r (no-eol) (esc)
376 \r (no-eol) (esc)
376 \r (no-eol) (esc)
377 \r (no-eol) (esc)
377 \r (no-eol) (esc)
378 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
378 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
379 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
379 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
380 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
380 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
381 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
381 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
382 \r (no-eol) (esc)
382 \r (no-eol) (esc)
383 \r (no-eol) (esc)
383 \r (no-eol) (esc)
384 archiving (sub1/sub2) [ ] 0/3\r (no-eol) (esc)
384 archiving (sub1/sub2) [ ] 0/3\r (no-eol) (glob) (esc)
385 archiving (sub1/sub2) [=========> ] 1/3\r (no-eol) (esc)
385 archiving (sub1/sub2) [=========> ] 1/3\r (no-eol) (glob) (esc)
386 archiving (sub1/sub2) [===================> ] 2/3\r (no-eol) (esc)
386 archiving (sub1/sub2) [===================> ] 2/3\r (no-eol) (glob) (esc)
387 archiving (sub1/sub2) [==============================>] 3/3\r (no-eol) (esc)
387 archiving (sub1/sub2) [==============================>] 3/3\r (no-eol) (glob) (esc)
388 \r (no-eol) (esc)
388 \r (no-eol) (esc)
389 $ cat ../wdir/.hg_archival.txt
389 $ cat ../wdir/.hg_archival.txt
390 repo: 7f491f53a367861f47ee64a80eb997d1f341b77a
390 repo: 7f491f53a367861f47ee64a80eb997d1f341b77a
391 node: 9bb10eebee29dc0f1201dcf5977b811a540255fd
391 node: 9bb10eebee29dc0f1201dcf5977b811a540255fd
392 branch: default
392 branch: default
393 latesttag: null
393 latesttag: null
394 latesttagdistance: 4
394 latesttagdistance: 4
395 changessincelatesttag: 4
395 changessincelatesttag: 4
396
396
397 $ touch sub1/sub2/folder/bar
397 $ touch sub1/sub2/folder/bar
398 $ hg addremove sub1/sub2
398 $ hg addremove sub1/sub2
399 adding sub1/sub2/folder/bar (glob)
399 adding sub1/sub2/folder/bar (glob)
400 $ hg status -S
400 $ hg status -S
401 A sub1/sub2/folder/bar
401 A sub1/sub2/folder/bar
402 ? foo/bar/abc
402 ? foo/bar/abc
403 ? sub1/foo
403 ? sub1/foo
404 $ hg update -Cq
404 $ hg update -Cq
405 $ hg addremove sub1
405 $ hg addremove sub1
406 adding sub1/sub2/folder/bar (glob)
406 adding sub1/sub2/folder/bar (glob)
407 adding sub1/foo (glob)
407 adding sub1/foo (glob)
408 $ hg update -Cq
408 $ hg update -Cq
409 $ rm sub1/sub2/folder/test.txt
409 $ rm sub1/sub2/folder/test.txt
410 $ rm sub1/sub2/test.txt
410 $ rm sub1/sub2/test.txt
411 $ hg ci -ASm "remove test.txt"
411 $ hg ci -ASm "remove test.txt"
412 adding sub1/sub2/folder/bar
412 adding sub1/sub2/folder/bar
413 removing sub1/sub2/folder/test.txt
413 removing sub1/sub2/folder/test.txt
414 removing sub1/sub2/test.txt
414 removing sub1/sub2/test.txt
415 adding sub1/foo
415 adding sub1/foo
416 adding foo/bar/abc
416 adding foo/bar/abc
417 committing subrepository sub1
417 committing subrepository sub1
418 committing subrepository sub1/sub2 (glob)
418 committing subrepository sub1/sub2 (glob)
419
419
420 $ hg forget sub1/sub2/sub2
420 $ hg forget sub1/sub2/sub2
421 $ echo x > sub1/sub2/x.txt
421 $ echo x > sub1/sub2/x.txt
422 $ hg add sub1/sub2/x.txt
422 $ hg add sub1/sub2/x.txt
423
423
424 Files sees uncommitted adds and removes in subrepos
424 Files sees uncommitted adds and removes in subrepos
425 $ hg files -S
425 $ hg files -S
426 .hgsub
426 .hgsub
427 .hgsubstate
427 .hgsubstate
428 foo/bar/abc (glob)
428 foo/bar/abc (glob)
429 main
429 main
430 sub1/.hgsub (glob)
430 sub1/.hgsub (glob)
431 sub1/.hgsubstate (glob)
431 sub1/.hgsubstate (glob)
432 sub1/foo (glob)
432 sub1/foo (glob)
433 sub1/sub1 (glob)
433 sub1/sub1 (glob)
434 sub1/sub2/folder/bar (glob)
434 sub1/sub2/folder/bar (glob)
435 sub1/sub2/x.txt (glob)
435 sub1/sub2/x.txt (glob)
436
436
437 $ hg files -S "set:eol('dos') or eol('unix') or size('<= 0')"
437 $ hg files -S "set:eol('dos') or eol('unix') or size('<= 0')"
438 .hgsub
438 .hgsub
439 .hgsubstate
439 .hgsubstate
440 foo/bar/abc (glob)
440 foo/bar/abc (glob)
441 main
441 main
442 sub1/.hgsub (glob)
442 sub1/.hgsub (glob)
443 sub1/.hgsubstate (glob)
443 sub1/.hgsubstate (glob)
444 sub1/foo (glob)
444 sub1/foo (glob)
445 sub1/sub1 (glob)
445 sub1/sub1 (glob)
446 sub1/sub2/folder/bar (glob)
446 sub1/sub2/folder/bar (glob)
447 sub1/sub2/x.txt (glob)
447 sub1/sub2/x.txt (glob)
448
448
449 $ hg files -r '.^' -S "set:eol('dos') or eol('unix')"
449 $ hg files -r '.^' -S "set:eol('dos') or eol('unix')"
450 .hgsub
450 .hgsub
451 .hgsubstate
451 .hgsubstate
452 main
452 main
453 sub1/.hgsub (glob)
453 sub1/.hgsub (glob)
454 sub1/.hgsubstate (glob)
454 sub1/.hgsubstate (glob)
455 sub1/sub1 (glob)
455 sub1/sub1 (glob)
456 sub1/sub2/folder/test.txt (glob)
456 sub1/sub2/folder/test.txt (glob)
457 sub1/sub2/sub2 (glob)
457 sub1/sub2/sub2 (glob)
458 sub1/sub2/test.txt (glob)
458 sub1/sub2/test.txt (glob)
459
459
460 $ hg files sub1
460 $ hg files sub1
461 sub1/.hgsub (glob)
461 sub1/.hgsub (glob)
462 sub1/.hgsubstate (glob)
462 sub1/.hgsubstate (glob)
463 sub1/foo (glob)
463 sub1/foo (glob)
464 sub1/sub1 (glob)
464 sub1/sub1 (glob)
465 sub1/sub2/folder/bar (glob)
465 sub1/sub2/folder/bar (glob)
466 sub1/sub2/x.txt (glob)
466 sub1/sub2/x.txt (glob)
467
467
468 $ hg files sub1/sub2
468 $ hg files sub1/sub2
469 sub1/sub2/folder/bar (glob)
469 sub1/sub2/folder/bar (glob)
470 sub1/sub2/x.txt (glob)
470 sub1/sub2/x.txt (glob)
471
471
472 $ hg files
472 $ hg files
473 .hgsub
473 .hgsub
474 .hgsubstate
474 .hgsubstate
475 foo/bar/abc (glob)
475 foo/bar/abc (glob)
476 main
476 main
477
477
478 $ hg files -S -r '.^' sub1/sub2/folder
478 $ hg files -S -r '.^' sub1/sub2/folder
479 sub1/sub2/folder/test.txt (glob)
479 sub1/sub2/folder/test.txt (glob)
480
480
481 $ hg files -S -r '.^' sub1/sub2/missing
481 $ hg files -S -r '.^' sub1/sub2/missing
482 sub1/sub2/missing: no such file in rev 78026e779ea6 (glob)
482 sub1/sub2/missing: no such file in rev 78026e779ea6 (glob)
483 [1]
483 [1]
484
484
485 $ hg files -r '.^' sub1/
485 $ hg files -r '.^' sub1/
486 sub1/.hgsub (glob)
486 sub1/.hgsub (glob)
487 sub1/.hgsubstate (glob)
487 sub1/.hgsubstate (glob)
488 sub1/sub1 (glob)
488 sub1/sub1 (glob)
489 sub1/sub2/folder/test.txt (glob)
489 sub1/sub2/folder/test.txt (glob)
490 sub1/sub2/sub2 (glob)
490 sub1/sub2/sub2 (glob)
491 sub1/sub2/test.txt (glob)
491 sub1/sub2/test.txt (glob)
492
492
493 $ hg files -r '.^' sub1/sub2
493 $ hg files -r '.^' sub1/sub2
494 sub1/sub2/folder/test.txt (glob)
494 sub1/sub2/folder/test.txt (glob)
495 sub1/sub2/sub2 (glob)
495 sub1/sub2/sub2 (glob)
496 sub1/sub2/test.txt (glob)
496 sub1/sub2/test.txt (glob)
497
497
498 $ hg rollback -q
498 $ hg rollback -q
499 $ hg up -Cq
499 $ hg up -Cq
500
500
501 $ hg --config extensions.largefiles=! archive -S ../archive_all
501 $ hg --config extensions.largefiles=! archive -S ../archive_all
502 \r (no-eol) (esc)
502 \r (no-eol) (esc)
503 archiving [ ] 0/3\r (no-eol) (esc)
503 archiving [ ] 0/3\r (no-eol) (esc)
504 archiving [=============> ] 1/3\r (no-eol) (esc)
504 archiving [=============> ] 1/3\r (no-eol) (esc)
505 archiving [===========================> ] 2/3\r (no-eol) (esc)
505 archiving [===========================> ] 2/3\r (no-eol) (esc)
506 archiving [==========================================>] 3/3\r (no-eol) (esc)
506 archiving [==========================================>] 3/3\r (no-eol) (esc)
507 \r (no-eol) (esc)
507 \r (no-eol) (esc)
508 \r (no-eol) (esc)
508 \r (no-eol) (esc)
509 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
509 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
510 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
510 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
511 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
511 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
512 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
512 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
513 \r (no-eol) (esc)
513 \r (no-eol) (esc)
514 \r (no-eol) (esc)
514 \r (no-eol) (esc)
515 archiving (sub1/sub2) [ ] 0/3\r (no-eol) (esc)
515 archiving (sub1/sub2) [ ] 0/3\r (no-eol) (glob) (esc)
516 archiving (sub1/sub2) [=========> ] 1/3\r (no-eol) (esc)
516 archiving (sub1/sub2) [=========> ] 1/3\r (no-eol) (glob) (esc)
517 archiving (sub1/sub2) [===================> ] 2/3\r (no-eol) (esc)
517 archiving (sub1/sub2) [===================> ] 2/3\r (no-eol) (glob) (esc)
518 archiving (sub1/sub2) [==============================>] 3/3\r (no-eol) (esc)
518 archiving (sub1/sub2) [==============================>] 3/3\r (no-eol) (glob) (esc)
519 \r (no-eol) (esc)
519 \r (no-eol) (esc)
520 $ find ../archive_all | sort
520 $ find ../archive_all | sort
521 ../archive_all
521 ../archive_all
522 ../archive_all/.hg_archival.txt
522 ../archive_all/.hg_archival.txt
523 ../archive_all/.hgsub
523 ../archive_all/.hgsub
524 ../archive_all/.hgsubstate
524 ../archive_all/.hgsubstate
525 ../archive_all/main
525 ../archive_all/main
526 ../archive_all/sub1
526 ../archive_all/sub1
527 ../archive_all/sub1/.hgsub
527 ../archive_all/sub1/.hgsub
528 ../archive_all/sub1/.hgsubstate
528 ../archive_all/sub1/.hgsubstate
529 ../archive_all/sub1/sub1
529 ../archive_all/sub1/sub1
530 ../archive_all/sub1/sub2
530 ../archive_all/sub1/sub2
531 ../archive_all/sub1/sub2/folder
531 ../archive_all/sub1/sub2/folder
532 ../archive_all/sub1/sub2/folder/test.txt
532 ../archive_all/sub1/sub2/folder/test.txt
533 ../archive_all/sub1/sub2/sub2
533 ../archive_all/sub1/sub2/sub2
534 ../archive_all/sub1/sub2/test.txt
534 ../archive_all/sub1/sub2/test.txt
535
535
536 Check that archive -X works in deep subrepos
536 Check that archive -X works in deep subrepos
537
537
538 $ hg --config extensions.largefiles=! archive -S -X '**test*' ../archive_exclude
538 $ hg --config extensions.largefiles=! archive -S -X '**test*' ../archive_exclude
539 \r (no-eol) (esc)
539 \r (no-eol) (esc)
540 archiving [ ] 0/3\r (no-eol) (esc)
540 archiving [ ] 0/3\r (no-eol) (esc)
541 archiving [=============> ] 1/3\r (no-eol) (esc)
541 archiving [=============> ] 1/3\r (no-eol) (esc)
542 archiving [===========================> ] 2/3\r (no-eol) (esc)
542 archiving [===========================> ] 2/3\r (no-eol) (esc)
543 archiving [==========================================>] 3/3\r (no-eol) (esc)
543 archiving [==========================================>] 3/3\r (no-eol) (esc)
544 \r (no-eol) (esc)
544 \r (no-eol) (esc)
545 \r (no-eol) (esc)
545 \r (no-eol) (esc)
546 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
546 archiving (sub1) [ ] 0/3\r (no-eol) (esc)
547 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
547 archiving (sub1) [===========> ] 1/3\r (no-eol) (esc)
548 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
548 archiving (sub1) [=======================> ] 2/3\r (no-eol) (esc)
549 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
549 archiving (sub1) [===================================>] 3/3\r (no-eol) (esc)
550 \r (no-eol) (esc)
550 \r (no-eol) (esc)
551 \r (no-eol) (esc)
551 \r (no-eol) (esc)
552 archiving (sub1/sub2) [ ] 0/1\r (no-eol) (esc)
552 archiving (sub1/sub2) [ ] 0/1\r (no-eol) (glob) (esc)
553 archiving (sub1/sub2) [==============================>] 1/1\r (no-eol) (esc)
553 archiving (sub1/sub2) [==============================>] 1/1\r (no-eol) (glob) (esc)
554 \r (no-eol) (esc)
554 \r (no-eol) (esc)
555 $ find ../archive_exclude | sort
555 $ find ../archive_exclude | sort
556 ../archive_exclude
556 ../archive_exclude
557 ../archive_exclude/.hg_archival.txt
557 ../archive_exclude/.hg_archival.txt
558 ../archive_exclude/.hgsub
558 ../archive_exclude/.hgsub
559 ../archive_exclude/.hgsubstate
559 ../archive_exclude/.hgsubstate
560 ../archive_exclude/main
560 ../archive_exclude/main
561 ../archive_exclude/sub1
561 ../archive_exclude/sub1
562 ../archive_exclude/sub1/.hgsub
562 ../archive_exclude/sub1/.hgsub
563 ../archive_exclude/sub1/.hgsubstate
563 ../archive_exclude/sub1/.hgsubstate
564 ../archive_exclude/sub1/sub1
564 ../archive_exclude/sub1/sub1
565 ../archive_exclude/sub1/sub2
565 ../archive_exclude/sub1/sub2
566 ../archive_exclude/sub1/sub2/sub2
566 ../archive_exclude/sub1/sub2/sub2
567
567
568 $ hg --config extensions.largefiles=! archive -S -I '**test*' ../archive_include
568 $ hg --config extensions.largefiles=! archive -S -I '**test*' ../archive_include
569 \r (no-eol) (esc)
569 \r (no-eol) (esc)
570 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
570 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
571 \r (no-eol) (esc)
571 \r (no-eol) (esc)
572 \r (no-eol) (esc)
572 \r (no-eol) (esc)
573 archiving (sub1/sub2) [ ] 0/2\r (no-eol) (esc)
573 archiving (sub1/sub2) [ ] 0/2\r (no-eol) (glob) (esc)
574 archiving (sub1/sub2) [==============> ] 1/2\r (no-eol) (esc)
574 archiving (sub1/sub2) [==============> ] 1/2\r (no-eol) (glob) (esc)
575 archiving (sub1/sub2) [==============================>] 2/2\r (no-eol) (esc)
575 archiving (sub1/sub2) [==============================>] 2/2\r (no-eol) (glob) (esc)
576 \r (no-eol) (esc)
576 \r (no-eol) (esc)
577 $ find ../archive_include | sort
577 $ find ../archive_include | sort
578 ../archive_include
578 ../archive_include
579 ../archive_include/sub1
579 ../archive_include/sub1
580 ../archive_include/sub1/sub2
580 ../archive_include/sub1/sub2
581 ../archive_include/sub1/sub2/folder
581 ../archive_include/sub1/sub2/folder
582 ../archive_include/sub1/sub2/folder/test.txt
582 ../archive_include/sub1/sub2/folder/test.txt
583 ../archive_include/sub1/sub2/test.txt
583 ../archive_include/sub1/sub2/test.txt
584
584
585 Check that deep archive works with largefiles (which overrides hgsubrepo impl)
585 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
586 This also tests the repo.ui regression in 43fb170a23bd, and that lf subrepo
587 subrepos are archived properly.
587 subrepos are archived properly.
588 Note that add --large through a subrepo currently adds the file as a normal file
588 Note that add --large through a subrepo currently adds the file as a normal file
589
589
590 $ echo "large" > sub1/sub2/large.bin
590 $ echo "large" > sub1/sub2/large.bin
591 $ hg --config extensions.largefiles= add --large -R sub1/sub2 sub1/sub2/large.bin
591 $ hg --config extensions.largefiles= add --large -R sub1/sub2 sub1/sub2/large.bin
592 $ echo "large" > large.bin
592 $ echo "large" > large.bin
593 $ hg --config extensions.largefiles= add --large large.bin
593 $ hg --config extensions.largefiles= add --large large.bin
594 $ hg --config extensions.largefiles= ci -S -m "add large files"
594 $ hg --config extensions.largefiles= ci -S -m "add large files"
595 committing subrepository sub1
595 committing subrepository sub1
596 committing subrepository sub1/sub2 (glob)
596 committing subrepository sub1/sub2 (glob)
597
597
598 $ hg --config extensions.largefiles= archive -S ../archive_lf
598 $ hg --config extensions.largefiles= archive -S ../archive_lf
599 $ find ../archive_lf | sort
599 $ find ../archive_lf | sort
600 ../archive_lf
600 ../archive_lf
601 ../archive_lf/.hg_archival.txt
601 ../archive_lf/.hg_archival.txt
602 ../archive_lf/.hgsub
602 ../archive_lf/.hgsub
603 ../archive_lf/.hgsubstate
603 ../archive_lf/.hgsubstate
604 ../archive_lf/large.bin
604 ../archive_lf/large.bin
605 ../archive_lf/main
605 ../archive_lf/main
606 ../archive_lf/sub1
606 ../archive_lf/sub1
607 ../archive_lf/sub1/.hgsub
607 ../archive_lf/sub1/.hgsub
608 ../archive_lf/sub1/.hgsubstate
608 ../archive_lf/sub1/.hgsubstate
609 ../archive_lf/sub1/sub1
609 ../archive_lf/sub1/sub1
610 ../archive_lf/sub1/sub2
610 ../archive_lf/sub1/sub2
611 ../archive_lf/sub1/sub2/folder
611 ../archive_lf/sub1/sub2/folder
612 ../archive_lf/sub1/sub2/folder/test.txt
612 ../archive_lf/sub1/sub2/folder/test.txt
613 ../archive_lf/sub1/sub2/large.bin
613 ../archive_lf/sub1/sub2/large.bin
614 ../archive_lf/sub1/sub2/sub2
614 ../archive_lf/sub1/sub2/sub2
615 ../archive_lf/sub1/sub2/test.txt
615 ../archive_lf/sub1/sub2/test.txt
616 $ rm -rf ../archive_lf
616 $ rm -rf ../archive_lf
617
617
618 Exclude large files from main and sub-sub repo
618 Exclude large files from main and sub-sub repo
619
619
620 $ hg --config extensions.largefiles= archive -S -X '**.bin' ../archive_lf
620 $ hg --config extensions.largefiles= archive -S -X '**.bin' ../archive_lf
621 $ find ../archive_lf | sort
621 $ find ../archive_lf | sort
622 ../archive_lf
622 ../archive_lf
623 ../archive_lf/.hg_archival.txt
623 ../archive_lf/.hg_archival.txt
624 ../archive_lf/.hgsub
624 ../archive_lf/.hgsub
625 ../archive_lf/.hgsubstate
625 ../archive_lf/.hgsubstate
626 ../archive_lf/main
626 ../archive_lf/main
627 ../archive_lf/sub1
627 ../archive_lf/sub1
628 ../archive_lf/sub1/.hgsub
628 ../archive_lf/sub1/.hgsub
629 ../archive_lf/sub1/.hgsubstate
629 ../archive_lf/sub1/.hgsubstate
630 ../archive_lf/sub1/sub1
630 ../archive_lf/sub1/sub1
631 ../archive_lf/sub1/sub2
631 ../archive_lf/sub1/sub2
632 ../archive_lf/sub1/sub2/folder
632 ../archive_lf/sub1/sub2/folder
633 ../archive_lf/sub1/sub2/folder/test.txt
633 ../archive_lf/sub1/sub2/folder/test.txt
634 ../archive_lf/sub1/sub2/sub2
634 ../archive_lf/sub1/sub2/sub2
635 ../archive_lf/sub1/sub2/test.txt
635 ../archive_lf/sub1/sub2/test.txt
636 $ rm -rf ../archive_lf
636 $ rm -rf ../archive_lf
637
637
638 Exclude normal files from main and sub-sub repo
638 Exclude normal files from main and sub-sub repo
639
639
640 $ hg --config extensions.largefiles= archive -S -X '**.txt' -p '.' ../archive_lf.tgz
640 $ hg --config extensions.largefiles= archive -S -X '**.txt' -p '.' ../archive_lf.tgz
641 $ tar -tzf ../archive_lf.tgz | sort
641 $ tar -tzf ../archive_lf.tgz | sort
642 .hgsub
642 .hgsub
643 .hgsubstate
643 .hgsubstate
644 large.bin
644 large.bin
645 main
645 main
646 sub1/.hgsub
646 sub1/.hgsub
647 sub1/.hgsubstate
647 sub1/.hgsubstate
648 sub1/sub1
648 sub1/sub1
649 sub1/sub2/large.bin
649 sub1/sub2/large.bin
650 sub1/sub2/sub2
650 sub1/sub2/sub2
651
651
652 Include normal files from within a largefiles subrepo
652 Include normal files from within a largefiles subrepo
653
653
654 $ hg --config extensions.largefiles= archive -S -I '**.txt' ../archive_lf
654 $ hg --config extensions.largefiles= archive -S -I '**.txt' ../archive_lf
655 $ find ../archive_lf | sort
655 $ find ../archive_lf | sort
656 ../archive_lf
656 ../archive_lf
657 ../archive_lf/.hg_archival.txt
657 ../archive_lf/.hg_archival.txt
658 ../archive_lf/sub1
658 ../archive_lf/sub1
659 ../archive_lf/sub1/sub2
659 ../archive_lf/sub1/sub2
660 ../archive_lf/sub1/sub2/folder
660 ../archive_lf/sub1/sub2/folder
661 ../archive_lf/sub1/sub2/folder/test.txt
661 ../archive_lf/sub1/sub2/folder/test.txt
662 ../archive_lf/sub1/sub2/test.txt
662 ../archive_lf/sub1/sub2/test.txt
663 $ rm -rf ../archive_lf
663 $ rm -rf ../archive_lf
664
664
665 Include large files from within a largefiles subrepo
665 Include large files from within a largefiles subrepo
666
666
667 $ hg --config extensions.largefiles= archive -S -I '**.bin' ../archive_lf
667 $ hg --config extensions.largefiles= archive -S -I '**.bin' ../archive_lf
668 $ find ../archive_lf | sort
668 $ find ../archive_lf | sort
669 ../archive_lf
669 ../archive_lf
670 ../archive_lf/large.bin
670 ../archive_lf/large.bin
671 ../archive_lf/sub1
671 ../archive_lf/sub1
672 ../archive_lf/sub1/sub2
672 ../archive_lf/sub1/sub2
673 ../archive_lf/sub1/sub2/large.bin
673 ../archive_lf/sub1/sub2/large.bin
674 $ rm -rf ../archive_lf
674 $ rm -rf ../archive_lf
675
675
676 Find an exact largefile match in a largefiles subrepo
676 Find an exact largefile match in a largefiles subrepo
677
677
678 $ hg --config extensions.largefiles= archive -S -I 'sub1/sub2/large.bin' ../archive_lf
678 $ hg --config extensions.largefiles= archive -S -I 'sub1/sub2/large.bin' ../archive_lf
679 $ find ../archive_lf | sort
679 $ find ../archive_lf | sort
680 ../archive_lf
680 ../archive_lf
681 ../archive_lf/sub1
681 ../archive_lf/sub1
682 ../archive_lf/sub1/sub2
682 ../archive_lf/sub1/sub2
683 ../archive_lf/sub1/sub2/large.bin
683 ../archive_lf/sub1/sub2/large.bin
684 $ rm -rf ../archive_lf
684 $ rm -rf ../archive_lf
685
685
686 The local repo enables largefiles if a largefiles repo is cloned
686 The local repo enables largefiles if a largefiles repo is cloned
687 $ hg showconfig extensions
687 $ hg showconfig extensions
688 abort: repository requires features unknown to this Mercurial: largefiles!
688 abort: repository requires features unknown to this Mercurial: largefiles!
689 (see https://mercurial-scm.org/wiki/MissingRequirement for more information)
689 (see https://mercurial-scm.org/wiki/MissingRequirement for more information)
690 [255]
690 [255]
691 $ hg --config extensions.largefiles= clone -qU . ../lfclone
691 $ hg --config extensions.largefiles= clone -qU . ../lfclone
692 $ cat ../lfclone/.hg/hgrc
692 $ cat ../lfclone/.hg/hgrc
693 # example repository config (see "hg help config" for more info)
693 # example repository config (see "hg help config" for more info)
694 [paths]
694 [paths]
695 default = $TESTTMP/cloned (glob)
695 default = $TESTTMP/cloned (glob)
696
696
697 # path aliases to other clones of this repo in URLs or filesystem paths
697 # path aliases to other clones of this repo in URLs or filesystem paths
698 # (see "hg help config.paths" for more info)
698 # (see "hg help config.paths" for more info)
699 #
699 #
700 # default-push = ssh://jdoe@example.net/hg/jdoes-fork
700 # default-push = ssh://jdoe@example.net/hg/jdoes-fork
701 # my-fork = ssh://jdoe@example.net/hg/jdoes-fork
701 # my-fork = ssh://jdoe@example.net/hg/jdoes-fork
702 # my-clone = /home/jdoe/jdoes-clone
702 # my-clone = /home/jdoe/jdoes-clone
703
703
704 [ui]
704 [ui]
705 # name and email (local to this repository, optional), e.g.
705 # name and email (local to this repository, optional), e.g.
706 # username = Jane Doe <jdoe@example.com>
706 # username = Jane Doe <jdoe@example.com>
707
707
708 [extensions]
708 [extensions]
709 largefiles=
709 largefiles=
710
710
711 Find an exact match to a standin (should archive nothing)
711 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
712 $ hg --config extensions.largefiles= archive -S -I 'sub/sub2/.hglf/large.bin' ../archive_lf
713 $ find ../archive_lf 2> /dev/null | sort
713 $ find ../archive_lf 2> /dev/null | sort
714
714
715 $ cat >> $HGRCPATH <<EOF
715 $ cat >> $HGRCPATH <<EOF
716 > [extensions]
716 > [extensions]
717 > largefiles=
717 > largefiles=
718 > [largefiles]
718 > [largefiles]
719 > patterns=glob:**.dat
719 > patterns=glob:**.dat
720 > EOF
720 > EOF
721
721
722 Test forget through a deep subrepo with the largefiles extension, both a
722 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.
723 largefile and a normal file. Then a largefile that hasn't been committed yet.
724 $ touch sub1/sub2/untracked.txt
724 $ touch sub1/sub2/untracked.txt
725 $ touch sub1/sub2/large.dat
725 $ touch sub1/sub2/large.dat
726 $ hg forget sub1/sub2/large.bin sub1/sub2/test.txt sub1/sub2/untracked.txt
726 $ 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)
727 not removing sub1/sub2/untracked.txt: file is already untracked (glob)
728 [1]
728 [1]
729 $ hg add --large --dry-run -v sub1/sub2/untracked.txt
729 $ hg add --large --dry-run -v sub1/sub2/untracked.txt
730 adding sub1/sub2/untracked.txt as a largefile (glob)
730 adding sub1/sub2/untracked.txt as a largefile (glob)
731 $ hg add --large -v sub1/sub2/untracked.txt
731 $ hg add --large -v sub1/sub2/untracked.txt
732 adding sub1/sub2/untracked.txt as a largefile (glob)
732 adding sub1/sub2/untracked.txt as a largefile (glob)
733 $ hg add --normal -v sub1/sub2/large.dat
733 $ hg add --normal -v sub1/sub2/large.dat
734 adding sub1/sub2/large.dat (glob)
734 adding sub1/sub2/large.dat (glob)
735 $ hg forget -v sub1/sub2/untracked.txt
735 $ hg forget -v sub1/sub2/untracked.txt
736 removing sub1/sub2/untracked.txt (glob)
736 removing sub1/sub2/untracked.txt (glob)
737 $ hg status -S
737 $ hg status -S
738 A sub1/sub2/large.dat
738 A sub1/sub2/large.dat
739 R sub1/sub2/large.bin
739 R sub1/sub2/large.bin
740 R sub1/sub2/test.txt
740 R sub1/sub2/test.txt
741 ? foo/bar/abc
741 ? foo/bar/abc
742 ? sub1/sub2/untracked.txt
742 ? sub1/sub2/untracked.txt
743 ? sub1/sub2/x.txt
743 ? sub1/sub2/x.txt
744 $ hg add sub1/sub2
744 $ hg add sub1/sub2
745
745
746 $ hg archive -S -r 'wdir()' ../wdir2
746 $ hg archive -S -r 'wdir()' ../wdir2
747 $ diff -r . ../wdir2 | egrep -v '\.hg$|^Common subdirectories:'
747 $ diff -r . ../wdir2 | egrep -v '\.hg$|^Common subdirectories:'
748 Only in ../wdir2: .hg_archival.txt
748 Only in ../wdir2: .hg_archival.txt
749 Only in .: .hglf
749 Only in .: .hglf
750 Only in .: foo
750 Only in .: foo
751 Only in ./sub1/sub2: large.bin
751 Only in ./sub1/sub2: large.bin
752 Only in ./sub1/sub2: test.txt
752 Only in ./sub1/sub2: test.txt
753 Only in ./sub1/sub2: untracked.txt
753 Only in ./sub1/sub2: untracked.txt
754 Only in ./sub1/sub2: x.txt
754 Only in ./sub1/sub2: x.txt
755 $ find ../wdir2 -type f | sort
755 $ find ../wdir2 -type f | sort
756 ../wdir2/.hg_archival.txt
756 ../wdir2/.hg_archival.txt
757 ../wdir2/.hgsub
757 ../wdir2/.hgsub
758 ../wdir2/.hgsubstate
758 ../wdir2/.hgsubstate
759 ../wdir2/large.bin
759 ../wdir2/large.bin
760 ../wdir2/main
760 ../wdir2/main
761 ../wdir2/sub1/.hgsub
761 ../wdir2/sub1/.hgsub
762 ../wdir2/sub1/.hgsubstate
762 ../wdir2/sub1/.hgsubstate
763 ../wdir2/sub1/sub1
763 ../wdir2/sub1/sub1
764 ../wdir2/sub1/sub2/folder/test.txt
764 ../wdir2/sub1/sub2/folder/test.txt
765 ../wdir2/sub1/sub2/large.dat
765 ../wdir2/sub1/sub2/large.dat
766 ../wdir2/sub1/sub2/sub2
766 ../wdir2/sub1/sub2/sub2
767 $ hg status -S -mac -n | sort
767 $ hg status -S -mac -n | sort
768 .hgsub
768 .hgsub
769 .hgsubstate
769 .hgsubstate
770 large.bin
770 large.bin
771 main
771 main
772 sub1/.hgsub
772 sub1/.hgsub
773 sub1/.hgsubstate
773 sub1/.hgsubstate
774 sub1/sub1
774 sub1/sub1
775 sub1/sub2/folder/test.txt
775 sub1/sub2/folder/test.txt
776 sub1/sub2/large.dat
776 sub1/sub2/large.dat
777 sub1/sub2/sub2
777 sub1/sub2/sub2
778
778
779 $ hg ci -Sqm 'forget testing'
779 $ hg ci -Sqm 'forget testing'
780
780
781 Test 'wdir()' modified file archiving with largefiles
781 Test 'wdir()' modified file archiving with largefiles
782 $ echo 'mod' > main
782 $ echo 'mod' > main
783 $ echo 'mod' > large.bin
783 $ echo 'mod' > large.bin
784 $ echo 'mod' > sub1/sub2/large.dat
784 $ echo 'mod' > sub1/sub2/large.dat
785 $ hg archive -S -r 'wdir()' ../wdir3
785 $ hg archive -S -r 'wdir()' ../wdir3
786 $ diff -r . ../wdir3 | egrep -v '\.hg$|^Common subdirectories'
786 $ diff -r . ../wdir3 | egrep -v '\.hg$|^Common subdirectories'
787 Only in ../wdir3: .hg_archival.txt
787 Only in ../wdir3: .hg_archival.txt
788 Only in .: .hglf
788 Only in .: .hglf
789 Only in .: foo
789 Only in .: foo
790 Only in ./sub1/sub2: large.bin
790 Only in ./sub1/sub2: large.bin
791 Only in ./sub1/sub2: test.txt
791 Only in ./sub1/sub2: test.txt
792 Only in ./sub1/sub2: untracked.txt
792 Only in ./sub1/sub2: untracked.txt
793 Only in ./sub1/sub2: x.txt
793 Only in ./sub1/sub2: x.txt
794 $ find ../wdir3 -type f | sort
794 $ find ../wdir3 -type f | sort
795 ../wdir3/.hg_archival.txt
795 ../wdir3/.hg_archival.txt
796 ../wdir3/.hgsub
796 ../wdir3/.hgsub
797 ../wdir3/.hgsubstate
797 ../wdir3/.hgsubstate
798 ../wdir3/large.bin
798 ../wdir3/large.bin
799 ../wdir3/main
799 ../wdir3/main
800 ../wdir3/sub1/.hgsub
800 ../wdir3/sub1/.hgsub
801 ../wdir3/sub1/.hgsubstate
801 ../wdir3/sub1/.hgsubstate
802 ../wdir3/sub1/sub1
802 ../wdir3/sub1/sub1
803 ../wdir3/sub1/sub2/folder/test.txt
803 ../wdir3/sub1/sub2/folder/test.txt
804 ../wdir3/sub1/sub2/large.dat
804 ../wdir3/sub1/sub2/large.dat
805 ../wdir3/sub1/sub2/sub2
805 ../wdir3/sub1/sub2/sub2
806 $ hg up -Cq
806 $ hg up -Cq
807
807
808 Test issue4330: commit a directory where only normal files have changed
808 Test issue4330: commit a directory where only normal files have changed
809 $ touch foo/bar/large.dat
809 $ touch foo/bar/large.dat
810 $ hg add --large foo/bar/large.dat
810 $ hg add --large foo/bar/large.dat
811 $ hg ci -m 'add foo/bar/large.dat'
811 $ hg ci -m 'add foo/bar/large.dat'
812 $ touch a.txt
812 $ touch a.txt
813 $ touch a.dat
813 $ touch a.dat
814 $ hg add -v foo/bar/abc a.txt a.dat
814 $ hg add -v foo/bar/abc a.txt a.dat
815 adding a.dat as a largefile
815 adding a.dat as a largefile
816 adding a.txt
816 adding a.txt
817 adding foo/bar/abc (glob)
817 adding foo/bar/abc (glob)
818 $ hg ci -m 'dir commit with only normal file deltas' foo/bar
818 $ hg ci -m 'dir commit with only normal file deltas' foo/bar
819 $ hg status
819 $ hg status
820 A a.dat
820 A a.dat
821 A a.txt
821 A a.txt
822
822
823 Test a directory commit with a changed largefile and a changed normal file
823 Test a directory commit with a changed largefile and a changed normal file
824 $ echo changed > foo/bar/large.dat
824 $ echo changed > foo/bar/large.dat
825 $ echo changed > foo/bar/abc
825 $ echo changed > foo/bar/abc
826 $ hg ci -m 'dir commit with normal and lf file deltas' foo
826 $ hg ci -m 'dir commit with normal and lf file deltas' foo
827 $ hg status
827 $ hg status
828 A a.dat
828 A a.dat
829 A a.txt
829 A a.txt
830
830
831 $ hg ci -m "add a.*"
831 $ hg ci -m "add a.*"
832 $ hg mv a.dat b.dat
832 $ hg mv a.dat b.dat
833 $ hg mv foo/bar/abc foo/bar/def
833 $ hg mv foo/bar/abc foo/bar/def
834 $ hg status -C
834 $ hg status -C
835 A b.dat
835 A b.dat
836 a.dat
836 a.dat
837 A foo/bar/def
837 A foo/bar/def
838 foo/bar/abc
838 foo/bar/abc
839 R a.dat
839 R a.dat
840 R foo/bar/abc
840 R foo/bar/abc
841
841
842 $ hg ci -m "move large and normal"
842 $ hg ci -m "move large and normal"
843 $ hg status -C --rev '.^' --rev .
843 $ hg status -C --rev '.^' --rev .
844 A b.dat
844 A b.dat
845 a.dat
845 a.dat
846 A foo/bar/def
846 A foo/bar/def
847 foo/bar/abc
847 foo/bar/abc
848 R a.dat
848 R a.dat
849 R foo/bar/abc
849 R foo/bar/abc
850
850
851
851
852 $ echo foo > main
852 $ echo foo > main
853 $ hg ci -m "mod parent only"
853 $ hg ci -m "mod parent only"
854 $ hg init sub3
854 $ hg init sub3
855 $ echo "sub3 = sub3" >> .hgsub
855 $ echo "sub3 = sub3" >> .hgsub
856 $ echo xyz > sub3/a.txt
856 $ echo xyz > sub3/a.txt
857 $ hg add sub3/a.txt
857 $ hg add sub3/a.txt
858 $ hg ci -Sm "add sub3"
858 $ hg ci -Sm "add sub3"
859 committing subrepository sub3
859 committing subrepository sub3
860 $ cat .hgsub | grep -v sub3 > .hgsub1
860 $ cat .hgsub | grep -v sub3 > .hgsub1
861 $ mv .hgsub1 .hgsub
861 $ mv .hgsub1 .hgsub
862 $ hg ci -m "remove sub3"
862 $ hg ci -m "remove sub3"
863
863
864 $ hg log -r "subrepo()" --style compact
864 $ hg log -r "subrepo()" --style compact
865 0 7f491f53a367 1970-01-01 00:00 +0000 test
865 0 7f491f53a367 1970-01-01 00:00 +0000 test
866 main import
866 main import
867
867
868 1 ffe6649062fe 1970-01-01 00:00 +0000 test
868 1 ffe6649062fe 1970-01-01 00:00 +0000 test
869 deep nested modif should trigger a commit
869 deep nested modif should trigger a commit
870
870
871 2 9bb10eebee29 1970-01-01 00:00 +0000 test
871 2 9bb10eebee29 1970-01-01 00:00 +0000 test
872 add test.txt
872 add test.txt
873
873
874 3 7c64f035294f 1970-01-01 00:00 +0000 test
874 3 7c64f035294f 1970-01-01 00:00 +0000 test
875 add large files
875 add large files
876
876
877 4 f734a59e2e35 1970-01-01 00:00 +0000 test
877 4 f734a59e2e35 1970-01-01 00:00 +0000 test
878 forget testing
878 forget testing
879
879
880 11 9685a22af5db 1970-01-01 00:00 +0000 test
880 11 9685a22af5db 1970-01-01 00:00 +0000 test
881 add sub3
881 add sub3
882
882
883 12[tip] 2e0485b475b9 1970-01-01 00:00 +0000 test
883 12[tip] 2e0485b475b9 1970-01-01 00:00 +0000 test
884 remove sub3
884 remove sub3
885
885
886 $ hg log -r "subrepo('sub3')" --style compact
886 $ hg log -r "subrepo('sub3')" --style compact
887 11 9685a22af5db 1970-01-01 00:00 +0000 test
887 11 9685a22af5db 1970-01-01 00:00 +0000 test
888 add sub3
888 add sub3
889
889
890 12[tip] 2e0485b475b9 1970-01-01 00:00 +0000 test
890 12[tip] 2e0485b475b9 1970-01-01 00:00 +0000 test
891 remove sub3
891 remove sub3
892
892
893 $ hg log -r "subrepo('bogus')" --style compact
893 $ hg log -r "subrepo('bogus')" --style compact
894
894
895
895
896 Test .hgsubstate in the R state
896 Test .hgsubstate in the R state
897
897
898 $ hg rm .hgsub .hgsubstate
898 $ hg rm .hgsub .hgsubstate
899 \r (no-eol) (esc)
899 \r (no-eol) (esc)
900 deleting [=====================> ] 1/2\r (no-eol) (esc)
900 deleting [=====================> ] 1/2\r (no-eol) (esc)
901 deleting [===========================================>] 2/2\r (no-eol) (esc)
901 deleting [===========================================>] 2/2\r (no-eol) (esc)
902 \r (no-eol) (esc)
902 \r (no-eol) (esc)
903 $ hg ci -m 'trash subrepo tracking'
903 $ hg ci -m 'trash subrepo tracking'
904
904
905 $ hg log -r "subrepo('re:sub\d+')" --style compact
905 $ hg log -r "subrepo('re:sub\d+')" --style compact
906 0 7f491f53a367 1970-01-01 00:00 +0000 test
906 0 7f491f53a367 1970-01-01 00:00 +0000 test
907 main import
907 main import
908
908
909 1 ffe6649062fe 1970-01-01 00:00 +0000 test
909 1 ffe6649062fe 1970-01-01 00:00 +0000 test
910 deep nested modif should trigger a commit
910 deep nested modif should trigger a commit
911
911
912 2 9bb10eebee29 1970-01-01 00:00 +0000 test
912 2 9bb10eebee29 1970-01-01 00:00 +0000 test
913 add test.txt
913 add test.txt
914
914
915 3 7c64f035294f 1970-01-01 00:00 +0000 test
915 3 7c64f035294f 1970-01-01 00:00 +0000 test
916 add large files
916 add large files
917
917
918 4 f734a59e2e35 1970-01-01 00:00 +0000 test
918 4 f734a59e2e35 1970-01-01 00:00 +0000 test
919 forget testing
919 forget testing
920
920
921 11 9685a22af5db 1970-01-01 00:00 +0000 test
921 11 9685a22af5db 1970-01-01 00:00 +0000 test
922 add sub3
922 add sub3
923
923
924 12 2e0485b475b9 1970-01-01 00:00 +0000 test
924 12 2e0485b475b9 1970-01-01 00:00 +0000 test
925 remove sub3
925 remove sub3
926
926
927 13[tip] a68b2c361653 1970-01-01 00:00 +0000 test
927 13[tip] a68b2c361653 1970-01-01 00:00 +0000 test
928 trash subrepo tracking
928 trash subrepo tracking
929
929
930
930
931 Restore the trashed subrepo tracking
931 Restore the trashed subrepo tracking
932
932
933 $ hg rollback -q
933 $ hg rollback -q
934 $ hg update -Cq .
934 $ hg update -Cq .
935
935
936 Interaction with extdiff, largefiles and subrepos
936 Interaction with extdiff, largefiles and subrepos
937
937
938 $ hg --config extensions.extdiff= pdiff -S
938 $ hg --config extensions.extdiff= pdiff -S
939
939
940 $ hg --config extensions.extdiff= pdiff -r '.^' -S
940 $ hg --config extensions.extdiff= pdiff -r '.^' -S
941 \r (no-eol) (esc)
941 \r (no-eol) (esc)
942 archiving [ ] 0/2\r (no-eol) (esc)
942 archiving [ ] 0/2\r (no-eol) (esc)
943 archiving [====================> ] 1/2\r (no-eol) (esc)
943 archiving [====================> ] 1/2\r (no-eol) (esc)
944 archiving [==========================================>] 2/2\r (no-eol) (esc)
944 archiving [==========================================>] 2/2\r (no-eol) (esc)
945 \r (no-eol) (esc)
945 \r (no-eol) (esc)
946 \r (no-eol) (esc)
946 \r (no-eol) (esc)
947 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
947 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
948 \r (no-eol) (esc)
948 \r (no-eol) (esc)
949 \r (no-eol) (esc)
949 \r (no-eol) (esc)
950 archiving (sub1/sub2) [ <=> ] 0\r (no-eol) (esc)
950 archiving (sub1/sub2) [ <=> ] 0\r (no-eol) (glob) (esc)
951 \r (no-eol) (esc)
951 \r (no-eol) (esc)
952 \r (no-eol) (esc)
952 \r (no-eol) (esc)
953 archiving (sub3) [ <=> ] 0\r (no-eol) (esc)
953 archiving (sub3) [ <=> ] 0\r (no-eol) (esc)
954 \r (no-eol) (esc)
954 \r (no-eol) (esc)
955 \r (no-eol) (esc)
955 \r (no-eol) (esc)
956 archiving [ ] 0/2\r (no-eol) (esc)
956 archiving [ ] 0/2\r (no-eol) (esc)
957 archiving [====================> ] 1/2\r (no-eol) (esc)
957 archiving [====================> ] 1/2\r (no-eol) (esc)
958 archiving [==========================================>] 2/2\r (no-eol) (esc)
958 archiving [==========================================>] 2/2\r (no-eol) (esc)
959 \r (no-eol) (esc)
959 \r (no-eol) (esc)
960 \r (no-eol) (esc)
960 \r (no-eol) (esc)
961 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
961 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
962 \r (no-eol) (esc)
962 \r (no-eol) (esc)
963 \r (no-eol) (esc)
963 \r (no-eol) (esc)
964 archiving (sub1/sub2) [ <=> ] 0\r (no-eol) (esc)
964 archiving (sub1/sub2) [ <=> ] 0\r (no-eol) (glob) (esc)
965 \r (no-eol) (esc)
965 \r (no-eol) (esc)
966 diff -Nru cloned.*/.hgsub cloned/.hgsub (glob)
966 diff -Nru cloned.*/.hgsub cloned/.hgsub (glob)
967 --- cloned.*/.hgsub * (glob)
967 --- cloned.*/.hgsub * (glob)
968 +++ cloned/.hgsub * (glob)
968 +++ cloned/.hgsub * (glob)
969 @@ -1,2 +1* @@ (glob)
969 @@ -1,2 +1* @@ (glob)
970 sub1 = ../sub1
970 sub1 = ../sub1
971 -sub3 = sub3
971 -sub3 = sub3
972 diff -Nru cloned.*/.hgsubstate cloned/.hgsubstate (glob)
972 diff -Nru cloned.*/.hgsubstate cloned/.hgsubstate (glob)
973 --- cloned.*/.hgsubstate * (glob)
973 --- cloned.*/.hgsubstate * (glob)
974 +++ cloned/.hgsubstate * (glob)
974 +++ cloned/.hgsubstate * (glob)
975 @@ -1,2 +1* @@ (glob)
975 @@ -1,2 +1* @@ (glob)
976 7a36fa02b66e61f27f3d4a822809f159479b8ab2 sub1
976 7a36fa02b66e61f27f3d4a822809f159479b8ab2 sub1
977 -b1a26de6f2a045a9f079323693614ee322f1ff7e sub3
977 -b1a26de6f2a045a9f079323693614ee322f1ff7e sub3
978 [1]
978 [1]
979
979
980 $ hg --config extensions.extdiff= pdiff -r 0 -r '.^' -S
980 $ hg --config extensions.extdiff= pdiff -r 0 -r '.^' -S
981 \r (no-eol) (esc)
981 \r (no-eol) (esc)
982 archiving [ ] 0/3\r (no-eol) (esc)
982 archiving [ ] 0/3\r (no-eol) (esc)
983 archiving [=============> ] 1/3\r (no-eol) (esc)
983 archiving [=============> ] 1/3\r (no-eol) (esc)
984 archiving [===========================> ] 2/3\r (no-eol) (esc)
984 archiving [===========================> ] 2/3\r (no-eol) (esc)
985 archiving [==========================================>] 3/3\r (no-eol) (esc)
985 archiving [==========================================>] 3/3\r (no-eol) (esc)
986 \r (no-eol) (esc)
986 \r (no-eol) (esc)
987 \r (no-eol) (esc)
987 \r (no-eol) (esc)
988 archiving (sub1) [ ] 0/1\r (no-eol) (esc)
988 archiving (sub1) [ ] 0/1\r (no-eol) (esc)
989 archiving (sub1) [===================================>] 1/1\r (no-eol) (esc)
989 archiving (sub1) [===================================>] 1/1\r (no-eol) (esc)
990 \r (no-eol) (esc)
990 \r (no-eol) (esc)
991 \r (no-eol) (esc)
991 \r (no-eol) (esc)
992 archiving (sub1/sub2) [ ] 0/1\r (no-eol) (esc)
992 archiving (sub1/sub2) [ ] 0/1\r (no-eol) (glob) (esc)
993 archiving (sub1/sub2) [==============================>] 1/1\r (no-eol) (esc)
993 archiving (sub1/sub2) [==============================>] 1/1\r (no-eol) (glob) (esc)
994 \r (no-eol) (esc)
994 \r (no-eol) (esc)
995 \r (no-eol) (esc)
995 \r (no-eol) (esc)
996 archiving [ ] 0/8\r (no-eol) (esc)
996 archiving [ ] 0/8\r (no-eol) (esc)
997 archiving [====> ] 1/8\r (no-eol) (esc)
997 archiving [====> ] 1/8\r (no-eol) (esc)
998 archiving [=========> ] 2/8\r (no-eol) (esc)
998 archiving [=========> ] 2/8\r (no-eol) (esc)
999 archiving [===============> ] 3/8\r (no-eol) (esc)
999 archiving [===============> ] 3/8\r (no-eol) (esc)
1000 archiving [====================> ] 4/8\r (no-eol) (esc)
1000 archiving [====================> ] 4/8\r (no-eol) (esc)
1001 archiving [=========================> ] 5/8\r (no-eol) (esc)
1001 archiving [=========================> ] 5/8\r (no-eol) (esc)
1002 archiving [===============================> ] 6/8\r (no-eol) (esc)
1002 archiving [===============================> ] 6/8\r (no-eol) (esc)
1003 archiving [====================================> ] 7/8\r (no-eol) (esc)
1003 archiving [====================================> ] 7/8\r (no-eol) (esc)
1004 archiving [==========================================>] 8/8\r (no-eol) (esc)
1004 archiving [==========================================>] 8/8\r (no-eol) (esc)
1005 \r (no-eol) (esc)
1005 \r (no-eol) (esc)
1006 \r (no-eol) (esc)
1006 \r (no-eol) (esc)
1007 archiving (sub1) [ ] 0/1\r (no-eol) (esc)
1007 archiving (sub1) [ ] 0/1\r (no-eol) (esc)
1008 archiving (sub1) [===================================>] 1/1\r (no-eol) (esc)
1008 archiving (sub1) [===================================>] 1/1\r (no-eol) (esc)
1009 \r (no-eol) (esc)
1009 \r (no-eol) (esc)
1010 \r (no-eol) (esc)
1010 \r (no-eol) (esc)
1011 archiving (sub1/sub2) [ ] 0/3\r (no-eol) (esc)
1011 archiving (sub1/sub2) [ ] 0/3\r (no-eol) (glob) (esc)
1012 archiving (sub1/sub2) [=========> ] 1/3\r (no-eol) (esc)
1012 archiving (sub1/sub2) [=========> ] 1/3\r (no-eol) (glob) (esc)
1013 archiving (sub1/sub2) [===================> ] 2/3\r (no-eol) (esc)
1013 archiving (sub1/sub2) [===================> ] 2/3\r (no-eol) (glob) (esc)
1014 archiving (sub1/sub2) [==============================>] 3/3\r (no-eol) (esc)
1014 archiving (sub1/sub2) [==============================>] 3/3\r (no-eol) (glob) (esc)
1015 \r (no-eol) (esc)
1015 \r (no-eol) (esc)
1016 \r (no-eol) (esc)
1016 \r (no-eol) (esc)
1017 archiving (sub3) [ ] 0/1\r (no-eol) (esc)
1017 archiving (sub3) [ ] 0/1\r (no-eol) (esc)
1018 archiving (sub3) [===================================>] 1/1\r (no-eol) (esc)
1018 archiving (sub3) [===================================>] 1/1\r (no-eol) (esc)
1019 \r (no-eol) (esc)
1019 \r (no-eol) (esc)
1020 diff -Nru cloned.*/.hglf/b.dat cloned.*/.hglf/b.dat (glob)
1020 diff -Nru cloned.*/.hglf/b.dat cloned.*/.hglf/b.dat (glob)
1021 --- cloned.*/.hglf/b.dat * (glob)
1021 --- cloned.*/.hglf/b.dat * (glob)
1022 +++ cloned.*/.hglf/b.dat * (glob)
1022 +++ cloned.*/.hglf/b.dat * (glob)
1023 @@ -*,0 +1* @@ (glob)
1023 @@ -*,0 +1* @@ (glob)
1024 +da39a3ee5e6b4b0d3255bfef95601890afd80709
1024 +da39a3ee5e6b4b0d3255bfef95601890afd80709
1025 diff -Nru cloned.*/.hglf/foo/bar/large.dat cloned.*/.hglf/foo/bar/large.dat (glob)
1025 diff -Nru cloned.*/.hglf/foo/bar/large.dat cloned.*/.hglf/foo/bar/large.dat (glob)
1026 --- cloned.*/.hglf/foo/bar/large.dat * (glob)
1026 --- cloned.*/.hglf/foo/bar/large.dat * (glob)
1027 +++ cloned.*/.hglf/foo/bar/large.dat * (glob)
1027 +++ cloned.*/.hglf/foo/bar/large.dat * (glob)
1028 @@ -*,0 +1* @@ (glob)
1028 @@ -*,0 +1* @@ (glob)
1029 +2f6933b5ee0f5fdd823d9717d8729f3c2523811b
1029 +2f6933b5ee0f5fdd823d9717d8729f3c2523811b
1030 diff -Nru cloned.*/.hglf/large.bin cloned.*/.hglf/large.bin (glob)
1030 diff -Nru cloned.*/.hglf/large.bin cloned.*/.hglf/large.bin (glob)
1031 --- cloned.*/.hglf/large.bin * (glob)
1031 --- cloned.*/.hglf/large.bin * (glob)
1032 +++ cloned.*/.hglf/large.bin * (glob)
1032 +++ cloned.*/.hglf/large.bin * (glob)
1033 @@ -*,0 +1* @@ (glob)
1033 @@ -*,0 +1* @@ (glob)
1034 +7f7097b041ccf68cc5561e9600da4655d21c6d18
1034 +7f7097b041ccf68cc5561e9600da4655d21c6d18
1035 diff -Nru cloned.*/.hgsub cloned.*/.hgsub (glob)
1035 diff -Nru cloned.*/.hgsub cloned.*/.hgsub (glob)
1036 --- cloned.*/.hgsub * (glob)
1036 --- cloned.*/.hgsub * (glob)
1037 +++ cloned.*/.hgsub * (glob)
1037 +++ cloned.*/.hgsub * (glob)
1038 @@ -1* +1,2 @@ (glob)
1038 @@ -1* +1,2 @@ (glob)
1039 sub1 = ../sub1
1039 sub1 = ../sub1
1040 +sub3 = sub3
1040 +sub3 = sub3
1041 diff -Nru cloned.*/.hgsubstate cloned.*/.hgsubstate (glob)
1041 diff -Nru cloned.*/.hgsubstate cloned.*/.hgsubstate (glob)
1042 --- cloned.*/.hgsubstate * (glob)
1042 --- cloned.*/.hgsubstate * (glob)
1043 +++ cloned.*/.hgsubstate * (glob)
1043 +++ cloned.*/.hgsubstate * (glob)
1044 @@ -1* +1,2 @@ (glob)
1044 @@ -1* +1,2 @@ (glob)
1045 -fc3b4ce2696f7741438c79207583768f2ce6b0dd sub1
1045 -fc3b4ce2696f7741438c79207583768f2ce6b0dd sub1
1046 +7a36fa02b66e61f27f3d4a822809f159479b8ab2 sub1
1046 +7a36fa02b66e61f27f3d4a822809f159479b8ab2 sub1
1047 +b1a26de6f2a045a9f079323693614ee322f1ff7e sub3
1047 +b1a26de6f2a045a9f079323693614ee322f1ff7e sub3
1048 diff -Nru cloned.*/foo/bar/def cloned.*/foo/bar/def (glob)
1048 diff -Nru cloned.*/foo/bar/def cloned.*/foo/bar/def (glob)
1049 --- cloned.*/foo/bar/def * (glob)
1049 --- cloned.*/foo/bar/def * (glob)
1050 +++ cloned.*/foo/bar/def * (glob)
1050 +++ cloned.*/foo/bar/def * (glob)
1051 @@ -*,0 +1* @@ (glob)
1051 @@ -*,0 +1* @@ (glob)
1052 +changed
1052 +changed
1053 diff -Nru cloned.*/main cloned.*/main (glob)
1053 diff -Nru cloned.*/main cloned.*/main (glob)
1054 --- cloned.*/main * (glob)
1054 --- cloned.*/main * (glob)
1055 +++ cloned.*/main * (glob)
1055 +++ cloned.*/main * (glob)
1056 @@ -1* +1* @@ (glob)
1056 @@ -1* +1* @@ (glob)
1057 -main
1057 -main
1058 +foo
1058 +foo
1059 diff -Nru cloned.*/sub1/.hgsubstate cloned.*/sub1/.hgsubstate (glob)
1059 diff -Nru cloned.*/sub1/.hgsubstate cloned.*/sub1/.hgsubstate (glob)
1060 --- cloned.*/sub1/.hgsubstate * (glob)
1060 --- cloned.*/sub1/.hgsubstate * (glob)
1061 +++ cloned.*/sub1/.hgsubstate * (glob)
1061 +++ cloned.*/sub1/.hgsubstate * (glob)
1062 @@ -1* +1* @@ (glob)
1062 @@ -1* +1* @@ (glob)
1063 -c57a0840e3badd667ef3c3ef65471609acb2ba3c sub2
1063 -c57a0840e3badd667ef3c3ef65471609acb2ba3c sub2
1064 +c77908c81ccea3794a896c79e98b0e004aee2e9e sub2
1064 +c77908c81ccea3794a896c79e98b0e004aee2e9e sub2
1065 diff -Nru cloned.*/sub1/sub2/folder/test.txt cloned.*/sub1/sub2/folder/test.txt (glob)
1065 diff -Nru cloned.*/sub1/sub2/folder/test.txt cloned.*/sub1/sub2/folder/test.txt (glob)
1066 --- cloned.*/sub1/sub2/folder/test.txt * (glob)
1066 --- cloned.*/sub1/sub2/folder/test.txt * (glob)
1067 +++ cloned.*/sub1/sub2/folder/test.txt * (glob)
1067 +++ cloned.*/sub1/sub2/folder/test.txt * (glob)
1068 @@ -*,0 +1* @@ (glob)
1068 @@ -*,0 +1* @@ (glob)
1069 +subfolder
1069 +subfolder
1070 diff -Nru cloned.*/sub1/sub2/sub2 cloned.*/sub1/sub2/sub2 (glob)
1070 diff -Nru cloned.*/sub1/sub2/sub2 cloned.*/sub1/sub2/sub2 (glob)
1071 --- cloned.*/sub1/sub2/sub2 * (glob)
1071 --- cloned.*/sub1/sub2/sub2 * (glob)
1072 +++ cloned.*/sub1/sub2/sub2 * (glob)
1072 +++ cloned.*/sub1/sub2/sub2 * (glob)
1073 @@ -1* +1* @@ (glob)
1073 @@ -1* +1* @@ (glob)
1074 -sub2
1074 -sub2
1075 +modified
1075 +modified
1076 diff -Nru cloned.*/sub3/a.txt cloned.*/sub3/a.txt (glob)
1076 diff -Nru cloned.*/sub3/a.txt cloned.*/sub3/a.txt (glob)
1077 --- cloned.*/sub3/a.txt * (glob)
1077 --- cloned.*/sub3/a.txt * (glob)
1078 +++ cloned.*/sub3/a.txt * (glob)
1078 +++ cloned.*/sub3/a.txt * (glob)
1079 @@ -*,0 +1* @@ (glob)
1079 @@ -*,0 +1* @@ (glob)
1080 +xyz
1080 +xyz
1081 [1]
1081 [1]
1082
1082
1083 $ echo mod > sub1/sub2/sub2
1083 $ echo mod > sub1/sub2/sub2
1084 $ hg --config extensions.extdiff= pdiff -S
1084 $ hg --config extensions.extdiff= pdiff -S
1085 \r (no-eol) (esc)
1085 \r (no-eol) (esc)
1086 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
1086 archiving (sub1) [ <=> ] 0\r (no-eol) (esc)
1087 \r (no-eol) (esc)
1087 \r (no-eol) (esc)
1088 \r (no-eol) (esc)
1088 \r (no-eol) (esc)
1089 archiving (sub1/sub2) [ ] 0/1\r (no-eol) (esc)
1089 archiving (sub1/sub2) [ ] 0/1\r (no-eol) (glob) (esc)
1090 archiving (sub1/sub2) [==============================>] 1/1\r (no-eol) (esc)
1090 archiving (sub1/sub2) [==============================>] 1/1\r (no-eol) (glob) (esc)
1091 \r (no-eol) (esc)
1091 \r (no-eol) (esc)
1092 --- */cloned.*/sub1/sub2/sub2 * (glob)
1092 --- */cloned.*/sub1/sub2/sub2 * (glob)
1093 +++ */cloned/sub1/sub2/sub2 * (glob)
1093 +++ */cloned/sub1/sub2/sub2 * (glob)
1094 @@ -1* +1* @@ (glob)
1094 @@ -1* +1* @@ (glob)
1095 -modified
1095 -modified
1096 +mod
1096 +mod
1097 [1]
1097 [1]
1098
1098
1099 $ cd ..
1099 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now