[PATCH V2] pull: close peer repo on completion (issue2797)
Siddharth Agarwal
sid0 at fb.com
Thu Feb 20 15:18:31 CST 2014
On 02/19/2014 11:18 PM, pklecha at forcom.com.pl wrote:
> # HG changeset patch
> # User Piotr Klecha <pklecha at forcom.com.pl>
> # Date 1392879902 -3600
> # Thu Feb 20 08:05:02 2014 +0100
> # Node ID a7e7a7e86bb415e04f6f9527fcc367ff6c1a03ad
> # Parent 87e52e6425625ea4f7645cfe2fc491a21f9a6b51
> pull: close peer repo on completion (issue2797)
>
> When pulling changes from a compressed bundle Mercurial first uncompresses it
> to a temporary file in .hg directory. This file will not be deleted unless
> the bundlerepo (other) is explicitly closed.
>
> This is similar to cleanup that occurs after incoming.
>
> diff --git a/mercurial/commands.py b/mercurial/commands.py
> --- a/mercurial/commands.py
> +++ b/mercurial/commands.py
> @@ -4508,47 +4508,50 @@ def pull(ui, repo, source="default", **o
> """
> source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch'))
> other = hg.peer(repo, opts, source)
> - ui.status(_('pulling from %s\n') % util.hidepassword(source))
> - revs, checkout = hg.addbranchrevs(repo, other, branches, opts.get('rev'))
> -
> - remotebookmarks = other.listkeys('bookmarks')
> -
> - if opts.get('bookmark'):
> - if not revs:
> - revs = []
> - for b in opts['bookmark']:
> - if b not in remotebookmarks:
> - raise util.Abort(_('remote bookmark %s not found!') % b)
> - revs.append(remotebookmarks[b])
> -
> - if revs:
> + try:
> + ui.status(_('pulling from %s\n') % util.hidepassword(source))
> + revs, checkout = hg.addbranchrevs(repo, other, branches, opts.get('rev'))
> +
> + remotebookmarks = other.listkeys('bookmarks')
> +
> + if opts.get('bookmark'):
> + if not revs:
> + revs = []
> + for b in opts['bookmark']:
> + if b not in remotebookmarks:
> + raise util.Abort(_('remote bookmark %s not found!') % b)
> + revs.append(remotebookmarks[b])
> +
> + if revs:
> + try:
> + revs = [other.lookup(rev) for rev in revs]
> + except error.CapabilityError:
> + err = _("other repository doesn't support revision lookup, "
> + "so a rev cannot be specified.")
> + raise util.Abort(err)
> +
> + modheads = repo.pull(other, heads=revs, force=opts.get('force'))
> + bookmarks.updatefromremote(ui, repo, remotebookmarks, source)
> + if checkout:
> + checkout = str(repo.changelog.rev(other.lookup(checkout)))
> + repo._subtoppath = source
> try:
> - revs = [other.lookup(rev) for rev in revs]
> - except error.CapabilityError:
> - err = _("other repository doesn't support revision lookup, "
> - "so a rev cannot be specified.")
> - raise util.Abort(err)
> -
> - modheads = repo.pull(other, heads=revs, force=opts.get('force'))
> - bookmarks.updatefromremote(ui, repo, remotebookmarks, source)
> - if checkout:
> - checkout = str(repo.changelog.rev(other.lookup(checkout)))
> - repo._subtoppath = source
> - try:
> - ret = postincoming(ui, repo, modheads, opts.get('update'), checkout)
> -
> + ret = postincoming(ui, repo, modheads, opts.get('update'), checkout)
> +
> + finally:
> + del repo._subtoppath
> +
> + # update specified bookmarks
> + if opts.get('bookmark'):
> + marks = repo._bookmarks
> + for b in opts['bookmark']:
> + # explicit pull overrides local bookmark if any
> + ui.status(_("importing bookmark %s\n") % b)
> + marks[b] = repo[remotebookmarks[b]].node()
> + marks.write()
> finally:
> - del repo._subtoppath
> -
> - # update specified bookmarks
> - if opts.get('bookmark'):
> - marks = repo._bookmarks
> - for b in opts['bookmark']:
> - # explicit pull overrides local bookmark if any
> - ui.status(_("importing bookmark %s\n") % b)
> - marks[b] = repo[remotebookmarks[b]].node()
> - marks.write()
> -
> + if other is not None:
> + other.close()
When can other be None? It isn't clear to me.
More information about the Mercurial-devel
mailing list