##// END OF EJS Templates
clone: add option -u/--updaterev
Adrian Buehlmann -
r9714:2f1ab7f7 default
parent child Browse files
Show More
@@ -590,22 +590,36 b' def clone(ui, source, dest=None, **opts)'
590 The location of the source is added to the new repository's
590 The location of the source is added to the new repository's
591 .hg/hgrc file, as the default to be used for future pulls.
591 .hg/hgrc file, as the default to be used for future pulls.
592
592
593 If you use the -r/--rev option to clone up to a specific revision,
594 no subsequent revisions (including subsequent tags) will be
595 present in the cloned repository. This option implies --pull, even
596 on local repositories.
597
598 By default, clone will check out the head of the 'default' branch.
599 If the -U/--noupdate option is used, the new clone will contain
600 only a repository (.hg) and no working copy (the working copy
601 parent is the null revision).
602
603 See 'hg help urls' for valid source format details.
593 See 'hg help urls' for valid source format details.
604
594
605 It is possible to specify an ssh:// URL as the destination, but no
595 It is possible to specify an ssh:// URL as the destination, but no
606 .hg/hgrc and working directory will be created on the remote side.
596 .hg/hgrc and working directory will be created on the remote side.
607 Please see 'hg help urls' for important details about ssh:// URLs.
597 Please see 'hg help urls' for important details about ssh:// URLs.
608
598
599 If the -U/--noupdate option is specified, the new clone will contain
600 only a repository (.hg) and no working copy (the working copy parent
601 will be the null changeset). Otherwise, clone will initially check
602 out (in order of precedence): ::
603
604 a) the changeset, tag or branch specified with -u/--updaterev
605 b) the changeset, tag or branch given with the first -r/--rev
606 c) the head of the default branch
607
608 Use 'hg clone -u . src dst' to checkout the source repository's
609 parent changeset (applicable for local source repositories only).
610
611 A set of changesets (tags, or branch names) to pull may be specified
612 by listing each changeset (tag, or branch name) with -r/--rev.
613 If -r/--rev is used, the cloned repository will contain only a subset
614 of the changesets of the source repository. Only the set of changesets
615 defined by all -r/--rev options (including their direct and indirect
616 parent changesets) will be pulled into the destination repository.
617 No subsequent changesets (including subsequent tags) will be present
618 in the destination.
619
620 Using -r/--rev (or 'clone src#rev dest') implies --pull, even for
621 local source repositories.
622
609 For efficiency, hardlinks are used for cloning whenever the source
623 For efficiency, hardlinks are used for cloning whenever the source
610 and destination are on the same filesystem (note this applies only
624 and destination are on the same filesystem (note this applies only
611 to the repository data, not to the checked out files). Some
625 to the repository data, not to the checked out files). Some
@@ -625,11 +639,14 b' def clone(ui, source, dest=None, **opts)'
625 this is not compatible with certain extensions that place their
639 this is not compatible with certain extensions that place their
626 metadata under the .hg directory, such as mq.
640 metadata under the .hg directory, such as mq.
627 """
641 """
642 if opts.get('noupdate') and opts.get('updaterev'):
643 raise util.Abort(_("cannot specify both --noupdate and --updaterev"))
644
628 hg.clone(cmdutil.remoteui(ui, opts), source, dest,
645 hg.clone(cmdutil.remoteui(ui, opts), source, dest,
629 pull=opts.get('pull'),
646 pull=opts.get('pull'),
630 stream=opts.get('uncompressed'),
647 stream=opts.get('uncompressed'),
631 rev=opts.get('rev'),
648 rev=opts.get('rev'),
632 update=not opts.get('noupdate'))
649 update=opts.get('updaterev') or not opts.get('noupdate'))
633
650
634 def commit(ui, repo, *pats, **opts):
651 def commit(ui, repo, *pats, **opts):
635 """commit the specified files or all outstanding changes
652 """commit the specified files or all outstanding changes
@@ -3355,6 +3372,8 b' table = {'
3355 (clone,
3372 (clone,
3356 [('U', 'noupdate', None,
3373 [('U', 'noupdate', None,
3357 _('the clone will only contain a repository (no working copy)')),
3374 _('the clone will only contain a repository (no working copy)')),
3375 ('u', 'updaterev', '',
3376 _('revision, tag or branch to check out')),
3358 ('r', 'rev', [],
3377 ('r', 'rev', [],
3359 _('a changeset you would like to have after cloning')),
3378 _('a changeset you would like to have after cloning')),
3360 ('', 'pull', None, _('use pull protocol to copy metadata')),
3379 ('', 'pull', None, _('use pull protocol to copy metadata')),
@@ -309,6 +309,8 b' def clone(ui, source, dest=None, pull=Fa'
309 if update:
309 if update:
310 if update is not True:
310 if update is not True:
311 checkout = update
311 checkout = update
312 if src_repo.local():
313 checkout = src_repo.lookup(update)
312 for test in (checkout, 'default', 'tip'):
314 for test in (checkout, 'default', 'tip'):
313 if test is None:
315 if test is None:
314 continue
316 continue
@@ -67,4 +67,136 b' cd h'
67 hg clone ../a .
67 hg clone ../a .
68 cd ..
68 cd ..
69
69
70 echo
71 echo
72 echo % "*** tests for option -u ***"
73 echo
74
75
76 echo
77 echo % "adding some more history to repo a"
78 cd a
79 echo % "tag ref1"
80 hg tag ref1
81 echo the quick brown fox >a
82 hg ci -m "hacked default"
83 echo % "updating back to ref1"
84 hg up ref1
85 echo
86 echo % "add branch 'stable' to repo a for later tests"
87 hg branch stable
88 echo some text >a
89 hg ci -m "starting branch stable"
90 echo % "tag ref2"
91 hg tag ref2
92 echo some more text >a
93 hg ci -m "another change for branch stable"
94 echo
95 echo % "updating back to ref2"
96 hg up ref2
97 echo
98 echo % "parents of repo a"
99 hg parents
100 echo
101 echo % "repo a has two heads"
102 hg heads
103 cd ..
104
105 echo
106 echo % "testing clone -U -u 1 a ua (must abort)"
107 hg clone -U -u 1 a ua
108
109 echo
110 echo % "testing clone -u . a ua"
111 hg clone -u . a ua
112 echo
113 echo % "repo ua has both heads"
114 hg -R ua heads
115 echo
116 echo % "same revision checked out in repo a and ua"
117 hg -R a parents --template "{node|short}\n"
118 hg -R ua parents --template "{node|short}\n"
119 rm -r ua
120
121 echo
122 echo % "testing clone --pull -u . a ua"
123 hg clone --pull -u . a ua
124 echo
125 echo % "repo ua has both heads"
126 hg -R ua heads
127 echo
128 echo % "same revision checked out in repo a and ua"
129 hg -R a parents --template "{node|short}\n"
130 hg -R ua parents --template "{node|short}\n"
131 rm -r ua
132
133 echo
134 echo % "testing clone -u stable a ua"
135 hg clone -u stable a ua
136 echo
137 echo % "repo ua has both heads"
138 hg -R ua heads
139 echo
140 echo % "branch stable is checked out"
141 hg -R ua parents
142 rm -r ua
143
144 echo
145 echo % "testing clone a ua"
146 hg clone a ua
147 echo
148 echo % "repo ua has both heads"
149 hg -R ua heads
150 echo
151 echo % "branch default is checked out"
152 hg -R ua parents
153 rm -r ua
154
155 echo
156 echo % "testing clone -u . a#stable ua"
157 hg clone -u . a#stable ua
158 echo
159 echo % "repo ua has only branch stable"
160 hg -R ua heads
161 echo
162 echo % "same revision checked out in repo a and ua"
163 hg -R a parents --template "{node|short}\n"
164 hg -R ua parents --template "{node|short}\n"
165 rm -r ua
166
167 echo
168 echo % "testing clone -u . -r stable a ua"
169 hg clone -u . -r stable a ua
170 echo
171 echo % "repo ua has only branch stable"
172 hg -R ua heads
173 echo
174 echo % "same revision checked out in repo a and ua"
175 hg -R a parents --template "{node|short}\n"
176 hg -R ua parents --template "{node|short}\n"
177 rm -r ua
178
179 echo
180 echo % "testing clone -r stable a ua"
181 hg clone -r stable a ua
182 echo
183 echo % "repo ua has only branch stable"
184 hg -R ua heads
185 echo
186 echo % "branch stable is checked out"
187 hg -R ua parents
188 rm -r ua
189
190 echo
191 echo % "testing clone -u . -r stable -r default a ua"
192 hg clone -u . -r stable -r default a ua
193 echo
194 echo % "repo ua has two heads"
195 hg -R ua heads
196 echo
197 echo % "same revision checked out in repo a and ua"
198 hg -R a parents --template "{node|short}\n"
199 hg -R ua parents --template "{node|short}\n"
200 rm -r ua
201
70 exit 0
202 exit 0
@@ -54,3 +54,246 b' 2 files, 11 changesets, 11 total revisio'
54 % clone to .
54 % clone to .
55 updating to branch default
55 updating to branch default
56 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
56 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
57
58
59 % *** tests for option -u ***
60
61
62 % adding some more history to repo a
63 % tag ref1
64 % updating back to ref1
65 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
66
67 % add branch 'stable' to repo a for later tests
68 marked working directory as branch stable
69 created new head
70 % tag ref2
71
72 % updating back to ref2
73 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
74
75 % parents of repo a
76 changeset: 13:e8ece76546a6
77 branch: stable
78 tag: ref2
79 parent: 10:a7949464abda
80 user: test
81 date: Thu Jan 01 00:00:00 1970 +0000
82 summary: starting branch stable
83
84
85 % repo a has two heads
86 changeset: 15:0aae7cf88f0d
87 branch: stable
88 tag: tip
89 user: test
90 date: Thu Jan 01 00:00:00 1970 +0000
91 summary: another change for branch stable
92
93 changeset: 12:f21241060d6a
94 user: test
95 date: Thu Jan 01 00:00:00 1970 +0000
96 summary: hacked default
97
98
99 % testing clone -U -u 1 a ua (must abort)
100 abort: cannot specify both --noupdate and --updaterev
101
102 % testing clone -u . a ua
103 updating to branch stable
104 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
105
106 % repo ua has both heads
107 changeset: 15:0aae7cf88f0d
108 branch: stable
109 tag: tip
110 user: test
111 date: Thu Jan 01 00:00:00 1970 +0000
112 summary: another change for branch stable
113
114 changeset: 12:f21241060d6a
115 user: test
116 date: Thu Jan 01 00:00:00 1970 +0000
117 summary: hacked default
118
119
120 % same revision checked out in repo a and ua
121 e8ece76546a6
122 e8ece76546a6
123
124 % testing clone --pull -u . a ua
125 requesting all changes
126 adding changesets
127 adding manifests
128 adding file changes
129 added 16 changesets with 16 changes to 3 files (+1 heads)
130 updating to branch stable
131 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
132
133 % repo ua has both heads
134 changeset: 15:0aae7cf88f0d
135 branch: stable
136 tag: tip
137 user: test
138 date: Thu Jan 01 00:00:00 1970 +0000
139 summary: another change for branch stable
140
141 changeset: 12:f21241060d6a
142 user: test
143 date: Thu Jan 01 00:00:00 1970 +0000
144 summary: hacked default
145
146
147 % same revision checked out in repo a and ua
148 e8ece76546a6
149 e8ece76546a6
150
151 % testing clone -u stable a ua
152 updating to branch stable
153 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
154
155 % repo ua has both heads
156 changeset: 15:0aae7cf88f0d
157 branch: stable
158 tag: tip
159 user: test
160 date: Thu Jan 01 00:00:00 1970 +0000
161 summary: another change for branch stable
162
163 changeset: 12:f21241060d6a
164 user: test
165 date: Thu Jan 01 00:00:00 1970 +0000
166 summary: hacked default
167
168
169 % branch stable is checked out
170 changeset: 15:0aae7cf88f0d
171 branch: stable
172 tag: tip
173 user: test
174 date: Thu Jan 01 00:00:00 1970 +0000
175 summary: another change for branch stable
176
177
178 % testing clone a ua
179 updating to branch default
180 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
181
182 % repo ua has both heads
183 changeset: 15:0aae7cf88f0d
184 branch: stable
185 tag: tip
186 user: test
187 date: Thu Jan 01 00:00:00 1970 +0000
188 summary: another change for branch stable
189
190 changeset: 12:f21241060d6a
191 user: test
192 date: Thu Jan 01 00:00:00 1970 +0000
193 summary: hacked default
194
195
196 % branch default is checked out
197 changeset: 12:f21241060d6a
198 user: test
199 date: Thu Jan 01 00:00:00 1970 +0000
200 summary: hacked default
201
202
203 % testing clone -u . a#stable ua
204 requesting all changes
205 adding changesets
206 adding manifests
207 adding file changes
208 added 14 changesets with 14 changes to 3 files
209 updating to branch stable
210 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
211
212 % repo ua has only branch stable
213 changeset: 13:0aae7cf88f0d
214 branch: stable
215 tag: tip
216 user: test
217 date: Thu Jan 01 00:00:00 1970 +0000
218 summary: another change for branch stable
219
220
221 % same revision checked out in repo a and ua
222 e8ece76546a6
223 e8ece76546a6
224
225 % testing clone -u . -r stable a ua
226 requesting all changes
227 adding changesets
228 adding manifests
229 adding file changes
230 added 14 changesets with 14 changes to 3 files
231 updating to branch stable
232 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
233
234 % repo ua has only branch stable
235 changeset: 13:0aae7cf88f0d
236 branch: stable
237 tag: tip
238 user: test
239 date: Thu Jan 01 00:00:00 1970 +0000
240 summary: another change for branch stable
241
242
243 % same revision checked out in repo a and ua
244 e8ece76546a6
245 e8ece76546a6
246
247 % testing clone -r stable a ua
248 requesting all changes
249 adding changesets
250 adding manifests
251 adding file changes
252 added 14 changesets with 14 changes to 3 files
253 updating to branch stable
254 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
255
256 % repo ua has only branch stable
257 changeset: 13:0aae7cf88f0d
258 branch: stable
259 tag: tip
260 user: test
261 date: Thu Jan 01 00:00:00 1970 +0000
262 summary: another change for branch stable
263
264
265 % branch stable is checked out
266 changeset: 13:0aae7cf88f0d
267 branch: stable
268 tag: tip
269 user: test
270 date: Thu Jan 01 00:00:00 1970 +0000
271 summary: another change for branch stable
272
273
274 % testing clone -u . -r stable -r default a ua
275 requesting all changes
276 adding changesets
277 adding manifests
278 adding file changes
279 added 16 changesets with 16 changes to 3 files (+1 heads)
280 updating to branch stable
281 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
282
283 % repo ua has two heads
284 changeset: 15:0aae7cf88f0d
285 branch: stable
286 tag: tip
287 user: test
288 date: Thu Jan 01 00:00:00 1970 +0000
289 summary: another change for branch stable
290
291 changeset: 12:f21241060d6a
292 user: test
293 date: Thu Jan 01 00:00:00 1970 +0000
294 summary: hacked default
295
296
297 % same revision checked out in repo a and ua
298 e8ece76546a6
299 e8ece76546a6
@@ -165,7 +165,7 b" hg: command 's' is ambiguous:"
165 % Show all commands + options
165 % Show all commands + options
166 add: include, exclude, dry-run
166 add: include, exclude, dry-run
167 annotate: rev, follow, text, user, date, number, changeset, line-number, include, exclude
167 annotate: rev, follow, text, user, date, number, changeset, line-number, include, exclude
168 clone: noupdate, rev, pull, uncompressed, ssh, remotecmd
168 clone: noupdate, updaterev, rev, pull, uncompressed, ssh, remotecmd
169 commit: addremove, close-branch, include, exclude, message, logfile, date, user
169 commit: addremove, close-branch, include, exclude, message, logfile, date, user
170 diff: rev, change, text, git, nodates, show-function, ignore-all-space, ignore-space-change, ignore-blank-lines, unified, stat, include, exclude
170 diff: rev, change, text, git, nodates, show-function, ignore-all-space, ignore-space-change, ignore-blank-lines, unified, stat, include, exclude
171 export: output, switch-parent, text, git, nodates
171 export: output, switch-parent, text, git, nodates
General Comments 0
You need to be logged in to leave comments. Login now