##// END OF EJS Templates
outgoing: accept multiple destinations...
marmoute -
r47693:d4e4ccb7 default
parent child Browse files
Show More
@@ -4923,10 +4923,10 b' statemod.addunfinished('
4923 + logopts
4923 + logopts
4924 + remoteopts
4924 + remoteopts
4925 + subrepoopts,
4925 + subrepoopts,
4926 _(b'[-M] [-p] [-n] [-f] [-r REV]... [DEST]'),
4926 _(b'[-M] [-p] [-n] [-f] [-r REV]... [DEST]...'),
4927 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT,
4927 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT,
4928 )
4928 )
4929 def outgoing(ui, repo, dest=None, **opts):
4929 def outgoing(ui, repo, *dests, **opts):
4930 """show changesets not found in the destination
4930 """show changesets not found in the destination
4931
4931
4932 Show changesets not found in the specified destination repository
4932 Show changesets not found in the specified destination repository
@@ -4962,30 +4962,24 b' def outgoing(ui, repo, dest=None, **opts'
4962
4962
4963 Returns 0 if there are outgoing changes, 1 otherwise.
4963 Returns 0 if there are outgoing changes, 1 otherwise.
4964 """
4964 """
4965 # hg._outgoing() needs to re-resolve the path in order to handle #branch
4966 # style URLs, so don't overwrite dest.
4967 path = ui.getpath(dest, default=(b'default-push', b'default'))
4968 if not path:
4969 raise error.ConfigError(
4970 _(b'default repository not configured!'),
4971 hint=_(b"see 'hg help config.paths'"),
4972 )
4973
4974 opts = pycompat.byteskwargs(opts)
4965 opts = pycompat.byteskwargs(opts)
4975 if opts.get(b'bookmarks'):
4966 if opts.get(b'bookmarks'):
4967 for path in urlutil.get_push_paths(repo, ui, dests):
4976 dest = path.pushloc or path.loc
4968 dest = path.pushloc or path.loc
4977 other = hg.peer(repo, opts, dest)
4969 other = hg.peer(repo, opts, dest)
4978 try:
4970 try:
4979 if b'bookmarks' not in other.listkeys(b'namespaces'):
4971 if b'bookmarks' not in other.listkeys(b'namespaces'):
4980 ui.warn(_(b"remote doesn't support bookmarks\n"))
4972 ui.warn(_(b"remote doesn't support bookmarks\n"))
4981 return 0
4973 return 0
4982 ui.status(_(b'comparing with %s\n') % urlutil.hidepassword(dest))
4974 ui.status(
4975 _(b'comparing with %s\n') % urlutil.hidepassword(dest)
4976 )
4983 ui.pager(b'outgoing')
4977 ui.pager(b'outgoing')
4984 return bookmarks.outgoing(ui, repo, other)
4978 return bookmarks.outgoing(ui, repo, other)
4985 finally:
4979 finally:
4986 other.close()
4980 other.close()
4987
4981
4988 return hg.outgoing(ui, repo, dest, opts)
4982 return hg.outgoing(ui, repo, dests, opts)
4989
4983
4990
4984
4991 @command(
4985 @command(
@@ -1320,13 +1320,10 b' def incoming(ui, repo, source, opts):'
1320 return _incoming(display, subreporecurse, ui, repo, source, opts)
1320 return _incoming(display, subreporecurse, ui, repo, source, opts)
1321
1321
1322
1322
1323 def _outgoing(ui, repo, dest, opts, subpath=None):
1323 def _outgoing(ui, repo, dests, opts, subpath=None):
1324 path = ui.getpath(dest, default=(b'default-push', b'default'))
1324 out = set()
1325 if not path:
1325 others = []
1326 raise error.Abort(
1326 for path in urlutil.get_push_paths(repo, ui, dests):
1327 _(b'default repository not configured!'),
1328 hint=_(b"see 'hg help config.paths'"),
1329 )
1330 dest = path.pushloc or path.loc
1327 dest = path.pushloc or path.loc
1331 if subpath is not None:
1328 if subpath is not None:
1332 subpath = urlutil.url(subpath)
1329 subpath = urlutil.url(subpath)
@@ -1336,7 +1333,6 b' def _outgoing(ui, repo, dest, opts, subp'
1336 p = urlutil.url(dest)
1333 p = urlutil.url(dest)
1337 p.path = os.path.normpath(b'%s/%s' % (p.path, subpath))
1334 p.path = os.path.normpath(b'%s/%s' % (p.path, subpath))
1338 dest = bytes(p)
1335 dest = bytes(p)
1339
1340 branches = path.branch, opts.get(b'branch') or []
1336 branches = path.branch, opts.get(b'branch') or []
1341
1337
1342 ui.status(_(b'comparing with %s\n') % urlutil.hidepassword(dest))
1338 ui.status(_(b'comparing with %s\n') % urlutil.hidepassword(dest))
@@ -1350,21 +1346,27 b' def _outgoing(ui, repo, dest, opts, subp'
1350 repo, other, revs, force=opts.get(b'force')
1346 repo, other, revs, force=opts.get(b'force')
1351 )
1347 )
1352 o = outgoing.missing
1348 o = outgoing.missing
1349 out.update(o)
1353 if not o:
1350 if not o:
1354 scmutil.nochangesfound(repo.ui, repo, outgoing.excluded)
1351 scmutil.nochangesfound(repo.ui, repo, outgoing.excluded)
1355 return o, other
1352 others.append(other)
1356 except: # re-raises
1353 except: # re-raises
1357 other.close()
1354 other.close()
1358 raise
1355 raise
1356 # make sure this is ordered by revision number
1357 outgoing_revs = list(out)
1358 cl = repo.changelog
1359 outgoing_revs.sort(key=cl.rev)
1360 return outgoing_revs, others
1359
1361
1360
1362
1361 def _outgoing_recurse(ui, repo, dest, opts):
1363 def _outgoing_recurse(ui, repo, dests, opts):
1362 ret = 1
1364 ret = 1
1363 if opts.get(b'subrepos'):
1365 if opts.get(b'subrepos'):
1364 ctx = repo[None]
1366 ctx = repo[None]
1365 for subpath in sorted(ctx.substate):
1367 for subpath in sorted(ctx.substate):
1366 sub = ctx.sub(subpath)
1368 sub = ctx.sub(subpath)
1367 ret = min(ret, sub.outgoing(ui, dest, opts))
1369 ret = min(ret, sub.outgoing(ui, dests, opts))
1368 return ret
1370 return ret
1369
1371
1370
1372
@@ -1391,10 +1393,10 b' def _outgoing_filter(repo, revs, opts):'
1391 yield n
1393 yield n
1392
1394
1393
1395
1394 def outgoing(ui, repo, dest, opts, subpath=None):
1396 def outgoing(ui, repo, dests, opts, subpath=None):
1395 if opts.get(b'graph'):
1397 if opts.get(b'graph'):
1396 logcmdutil.checkunsupportedgraphflags([], opts)
1398 logcmdutil.checkunsupportedgraphflags([], opts)
1397 o, other = _outgoing(ui, repo, dest, opts, subpath=subpath)
1399 o, others = _outgoing(ui, repo, dests, opts, subpath=subpath)
1398 ret = 1
1400 ret = 1
1399 try:
1401 try:
1400 if o:
1402 if o:
@@ -1415,11 +1417,13 b' def outgoing(ui, repo, dest, opts, subpa'
1415 for n in _outgoing_filter(repo, o, opts):
1417 for n in _outgoing_filter(repo, o, opts):
1416 displayer.show(repo[n])
1418 displayer.show(repo[n])
1417 displayer.close()
1419 displayer.close()
1418 cmdutil.outgoinghooks(ui, repo, other, opts, o)
1420 for oth in others:
1419 ret = min(ret, _outgoing_recurse(ui, repo, dest, opts))
1421 cmdutil.outgoinghooks(ui, repo, oth, opts, o)
1422 ret = min(ret, _outgoing_recurse(ui, repo, dests, opts))
1420 return ret # exit code is zero since we found outgoing changes
1423 return ret # exit code is zero since we found outgoing changes
1421 finally:
1424 finally:
1422 other.close()
1425 for oth in others:
1426 oth.close()
1423
1427
1424
1428
1425 def verify(repo, level=None):
1429 def verify(repo, level=None):
@@ -130,6 +130,46 b' push'
130 $ cp -R ./branch-E ./branch-E-push
130 $ cp -R ./branch-E ./branch-E-push
131 $ cp -R ./branch-G ./branch-G-push
131 $ cp -R ./branch-G ./branch-G-push
132 $ cp -R ./branch-H ./branch-H-push
132 $ cp -R ./branch-H ./branch-H-push
133 $ hg out -G -R test-repo-bare ./branch-E-push ./branch-G-push ./branch-H-push
134 comparing with ./branch-E-push
135 searching for changes
136 comparing with ./branch-G-push
137 searching for changes
138 comparing with ./branch-H-push
139 searching for changes
140 o changeset: 7:40faebb2ec45
141 | tag: tip
142 | parent: 2:f838bfaca5c7
143 | user: test
144 | date: Thu Jan 01 00:00:00 1970 +0000
145 | summary: H
146 |
147 | o changeset: 6:c521a06b234b
148 | | user: test
149 | | date: Thu Jan 01 00:00:00 1970 +0000
150 | | summary: G
151 | |
152 | o changeset: 5:2f3a4c5c1417
153 | parent: 1:27547f69f254
154 | user: test
155 | date: Thu Jan 01 00:00:00 1970 +0000
156 | summary: F
157 |
158 | o changeset: 4:a603bfb5a83e
159 | | user: test
160 | | date: Thu Jan 01 00:00:00 1970 +0000
161 | | summary: E
162 | |
163 | o changeset: 3:b3325c91a4d9
164 |/ user: test
165 | date: Thu Jan 01 00:00:00 1970 +0000
166 | summary: D
167 |
168 o changeset: 2:f838bfaca5c7
169 user: test
170 date: Thu Jan 01 00:00:00 1970 +0000
171 summary: C
172
133 $ hg push --force -R test-repo-bare ./branch-E-push ./branch-G-push ./branch-H-push
173 $ hg push --force -R test-repo-bare ./branch-E-push ./branch-G-push ./branch-H-push
134 pushing to ./branch-E-push
174 pushing to ./branch-E-push
135 searching for changes
175 searching for changes
@@ -291,6 +331,26 b' We only push a specific branch with --re'
291 $ cp -R ./branch-E ./branch-E-push
331 $ cp -R ./branch-E ./branch-E-push
292 $ cp -R ./branch-G ./branch-G-push
332 $ cp -R ./branch-G ./branch-G-push
293 $ cp -R ./branch-H ./branch-H-push
333 $ cp -R ./branch-H ./branch-H-push
334 $ hg out -G -R test-repo-bare ./branch-E-push ./branch-G-push ./branch-H-push --rev default
335 comparing with ./branch-E-push
336 searching for changes
337 comparing with ./branch-G-push
338 searching for changes
339 comparing with ./branch-H-push
340 searching for changes
341 no changes found
342 o changeset: 7:40faebb2ec45
343 | tag: tip
344 | parent: 2:f838bfaca5c7
345 | user: test
346 | date: Thu Jan 01 00:00:00 1970 +0000
347 | summary: H
348 |
349 o changeset: 2:f838bfaca5c7
350 user: test
351 date: Thu Jan 01 00:00:00 1970 +0000
352 summary: C
353
294 $ hg push --force -R test-repo-bare ./branch-E-push ./branch-G-push ./branch-H-push --rev default
354 $ hg push --force -R test-repo-bare ./branch-E-push ./branch-G-push ./branch-H-push --rev default
295 pushing to ./branch-E-push
355 pushing to ./branch-E-push
296 searching for changes
356 searching for changes
@@ -349,6 +409,26 b' Same push, but the first one is a no-op'
349 $ cp -R ./branch-E ./branch-E-push
409 $ cp -R ./branch-E ./branch-E-push
350 $ cp -R ./branch-G ./branch-G-push
410 $ cp -R ./branch-G ./branch-G-push
351 $ cp -R ./branch-H ./branch-H-push
411 $ cp -R ./branch-H ./branch-H-push
412 $ hg out -G -R test-repo-bare ./branch-G-push ./branch-H-push ./branch-E-push --rev default
413 comparing with ./branch-G-push
414 searching for changes
415 comparing with ./branch-H-push
416 searching for changes
417 no changes found
418 comparing with ./branch-E-push
419 searching for changes
420 o changeset: 7:40faebb2ec45
421 | tag: tip
422 | parent: 2:f838bfaca5c7
423 | user: test
424 | date: Thu Jan 01 00:00:00 1970 +0000
425 | summary: H
426 |
427 o changeset: 2:f838bfaca5c7
428 user: test
429 date: Thu Jan 01 00:00:00 1970 +0000
430 summary: C
431
352 $ hg push --force -R test-repo-bare ./branch-G-push ./branch-H-push ./branch-E-push --rev default
432 $ hg push --force -R test-repo-bare ./branch-G-push ./branch-H-push ./branch-E-push --rev default
353 pushing to ./branch-G-push
433 pushing to ./branch-G-push
354 searching for changes
434 searching for changes
General Comments 0
You need to be logged in to leave comments. Login now