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, |
|
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'): | |
4976 | dest = path.pushloc or path.loc |
|
4967 | for path in urlutil.get_push_paths(repo, ui, dests): | |
4977 | other = hg.peer(repo, opts, dest) |
|
4968 | dest = path.pushloc or path.loc | |
4978 | try: |
|
4969 | other = hg.peer(repo, opts, dest) | |
4979 | if b'bookmarks' not in other.listkeys(b'namespaces'): |
|
4970 | try: | |
4980 | ui.warn(_(b"remote doesn't support bookmarks\n")) |
|
4971 | if b'bookmarks' not in other.listkeys(b'namespaces'): | |
4981 | return 0 |
|
4972 | ui.warn(_(b"remote doesn't support bookmarks\n")) | |
4982 | ui.status(_(b'comparing with %s\n') % urlutil.hidepassword(dest)) |
|
4973 | return 0 | |
4983 | ui.pager(b'outgoing') |
|
4974 | ui.status( | |
4984 | return bookmarks.outgoing(ui, repo, other) |
|
4975 | _(b'comparing with %s\n') % urlutil.hidepassword(dest) | |
4985 | finally: |
|
4976 | ) | |
4986 | other.close() |
|
4977 | ui.pager(b'outgoing') | |
4987 |
|
4978 | return bookmarks.outgoing(ui, repo, other) | ||
4988 | return hg.outgoing(ui, repo, dest, opts) |
|
4979 | finally: | |
|
4980 | other.close() | |||
|
4981 | ||||
|
4982 | return hg.outgoing(ui, repo, dests, opts) | |||
4989 |
|
4983 | |||
4990 |
|
4984 | |||
4991 | @command( |
|
4985 | @command( |
@@ -1320,51 +1320,53 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!'), |
|
1327 | dest = path.pushloc or path.loc | |
1328 | hint=_(b"see 'hg help config.paths'"), |
|
1328 | if subpath is not None: | |
1329 | ) |
|
1329 | subpath = urlutil.url(subpath) | |
1330 | dest = path.pushloc or path.loc |
|
1330 | if subpath.isabs(): | |
1331 | if subpath is not None: |
|
1331 | dest = bytes(subpath) | |
1332 | subpath = urlutil.url(subpath) |
|
1332 | else: | |
1333 | if subpath.isabs(): |
|
1333 | p = urlutil.url(dest) | |
1334 | dest = bytes(subpath) |
|
1334 | p.path = os.path.normpath(b'%s/%s' % (p.path, subpath)) | |
1335 | else: |
|
1335 | dest = bytes(p) | |
1336 | p = urlutil.url(dest) |
|
1336 | branches = path.branch, opts.get(b'branch') or [] | |
1337 | p.path = os.path.normpath(b'%s/%s' % (p.path, subpath)) |
|
|||
1338 | dest = bytes(p) |
|
|||
1339 |
|
1337 | |||
1340 | branches = path.branch, opts.get(b'branch') or [] |
|
1338 | ui.status(_(b'comparing with %s\n') % urlutil.hidepassword(dest)) | |
1341 |
|
1339 | revs, checkout = addbranchrevs(repo, repo, branches, opts.get(b'rev')) | ||
1342 | ui.status(_(b'comparing with %s\n') % urlutil.hidepassword(dest)) |
|
1340 | if revs: | |
1343 | revs, checkout = addbranchrevs(repo, repo, branches, opts.get(b'rev')) |
|
1341 | revs = [repo[rev].node() for rev in scmutil.revrange(repo, revs)] | |
1344 | if revs: |
|
|||
1345 | revs = [repo[rev].node() for rev in scmutil.revrange(repo, revs)] |
|
|||
1346 |
|
1342 | |||
1347 | other = peer(repo, opts, dest) |
|
1343 | other = peer(repo, opts, dest) | |
1348 | try: |
|
1344 | try: | |
1349 | outgoing = discovery.findcommonoutgoing( |
|
1345 | outgoing = discovery.findcommonoutgoing( | |
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 | |
1353 | if not o: |
|
1349 | out.update(o) | |
1354 | scmutil.nochangesfound(repo.ui, repo, outgoing.excluded) |
|
1350 | if not o: | |
1355 | return o, other |
|
1351 | scmutil.nochangesfound(repo.ui, repo, outgoing.excluded) | |
1356 | except: # re-raises |
|
1352 | others.append(other) | |
1357 | other.close() |
|
1353 | except: # re-raises | |
1358 | raise |
|
1354 | other.close() | |
|
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 |
|
|
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