Mercurial > public > mercurial-scm > hg
comparison mercurial/commands.py @ 46764:685383486d0a
pull: allow to specify multiple sources
I end up needing that on a regular basis and it turn out to be very simple to
implement. See documentation and test for details.
Differential Revision: https://phab.mercurial-scm.org/D10159
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 10 Mar 2021 06:03:01 +0100 |
parents | 954bad9c32a0 |
children | 471cd86c8eb4 |
comparison
equal
deleted
inserted
replaced
46763:954bad9c32a0 | 46764:685383486d0a |
---|---|
5321 _(b'a specific branch you would like to pull'), | 5321 _(b'a specific branch you would like to pull'), |
5322 _(b'BRANCH'), | 5322 _(b'BRANCH'), |
5323 ), | 5323 ), |
5324 ] | 5324 ] |
5325 + remoteopts, | 5325 + remoteopts, |
5326 _(b'[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]'), | 5326 _(b'[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]...'), |
5327 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT, | 5327 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT, |
5328 helpbasic=True, | 5328 helpbasic=True, |
5329 ) | 5329 ) |
5330 def pull(ui, repo, source=b"default", **opts): | 5330 def pull(ui, repo, *sources, **opts): |
5331 """pull changes from the specified source | 5331 """pull changes from the specified source |
5332 | 5332 |
5333 Pull changes from a remote repository to a local one. | 5333 Pull changes from a remote repository to a local one. |
5334 | 5334 |
5335 This finds all changes from the repository at the specified path | 5335 This finds all changes from the repository at the specified path |
5348 to add those changes to the repository, you should use :hg:`pull | 5348 to add those changes to the repository, you should use :hg:`pull |
5349 -r X` where ``X`` is the last changeset listed by :hg:`incoming`. | 5349 -r X` where ``X`` is the last changeset listed by :hg:`incoming`. |
5350 | 5350 |
5351 If SOURCE is omitted, the 'default' path will be used. | 5351 If SOURCE is omitted, the 'default' path will be used. |
5352 See :hg:`help urls` for more information. | 5352 See :hg:`help urls` for more information. |
5353 | |
5354 If multiple sources are specified, they will be pulled sequentially as if | |
5355 the command was run multiple time. If --update is specify and the command | |
5356 will stop at the first failed --update. | |
5353 | 5357 |
5354 Specifying bookmark as ``.`` is equivalent to specifying the active | 5358 Specifying bookmark as ``.`` is equivalent to specifying the active |
5355 bookmark's name. | 5359 bookmark's name. |
5356 | 5360 |
5357 Returns 0 on success, 1 if an update had unresolved files. | 5361 Returns 0 on success, 1 if an update had unresolved files. |
5363 ): | 5367 ): |
5364 msg = _(b'update destination required by configuration') | 5368 msg = _(b'update destination required by configuration') |
5365 hint = _(b'use hg pull followed by hg update DEST') | 5369 hint = _(b'use hg pull followed by hg update DEST') |
5366 raise error.InputError(msg, hint=hint) | 5370 raise error.InputError(msg, hint=hint) |
5367 | 5371 |
5368 if True: | 5372 if not sources: |
5373 sources = [b'default'] | |
5374 for source in sources: | |
5369 source, branches = hg.parseurl( | 5375 source, branches = hg.parseurl( |
5370 ui.expandpath(source), opts.get(b'branch') | 5376 ui.expandpath(source), opts.get(b'branch') |
5371 ) | 5377 ) |
5372 ui.status(_(b'pulling from %s\n') % util.hidepassword(source)) | 5378 ui.status(_(b'pulling from %s\n') % util.hidepassword(source)) |
5373 ui.flush() | 5379 ui.flush() |
5461 finally: | 5467 finally: |
5462 del repo._subtoppath | 5468 del repo._subtoppath |
5463 | 5469 |
5464 finally: | 5470 finally: |
5465 other.close() | 5471 other.close() |
5472 # skip the remaining pull source if they are some conflict. | |
5473 if update_conflict: | |
5474 break | |
5466 if update_conflict: | 5475 if update_conflict: |
5467 return 1 | 5476 return 1 |
5468 else: | 5477 else: |
5469 return 0 | 5478 return 0 |
5470 | 5479 |