From: "Carlos Martín Nieto" <cmn@elego.de>
To: Jeff King <peff@peff.net>
Cc: Junio C Hamano <gitster@pobox.com>,
mathstuf@gmail.com, git@vger.kernel.org
Subject: Re: [BUG?] git fetch -p -t prunes all non-tag refs
Date: Tue, 04 Oct 2011 12:33:22 +0200 [thread overview]
Message-ID: <1317724404.2577.6.camel@bee.lab.cmartin.tk> (raw)
In-Reply-To: <20110927033134.GB8534@sigill.intra.peff.net>
[-- Attachment #1: Type: text/plain, Size: 2735 bytes --]
On Mon, 2011-09-26 at 23:31 -0400, Jeff King wrote:
> On Tue, Sep 27, 2011 at 01:28:09AM +0200, Carlos Martín Nieto wrote:
>
> > > term I think we should fix it properly. We are already learning "what are
> > > the refs the remote side currently has" from the transport and the right
> > > fix ought to be to use that original information, not the version filtered
> > > for the use of the primary objective of fetch, which is to only fetch what
> > > the user asked for.
> >
> > Do you mean that we should ignore the refspec? Or do you mean that we
> > should look at the refspec if it exists, and only consider deleting
> > those that meet the refspec, so that `--prune --tags` would only delete
> > tags that don't exist in the remote?
>
> The latter. If I say:
>
> git fetch --prune origin refs/heads/master:refs/remotes/origin/master
>
> and refs/heads/master doesn't exist on the remote, I would expect
> refs/remotes/origin/master to be deleted locally. And that naturally
> extends to:
>
> git fetch --prune origin refs/heads/*:refs/remotes/origin/*
I have some code locally that solves this second part. If we are given
refspecs on the command-line, it will try to match against that instead
of blindly trusting what get_stale_heads tells us. I'm looking into
putting the logic into get_stale_heads so that we can trust it.
The first part might be more complicated. If the remote head doesn't
exist, get_fetch_map dies. It does take a missing_ok flag, so it might
be as easy as passing 1 there; but I'm not sure what that would do for a
non-prune fetch.
>
> We do something similar with "git push --mirror", which does pruning
> like this[1].
>
> -Peff
>
> [1] Actually, I'm not sure how correct "push --mirror" is. It would be
> nice if the prune operation could be split from the mirror, too. In
> the past, I have wanted to do both:
>
> # backup to a repository where our objects will be shared
> # with other related backups. So we must only use our slice of the
> # ref namespace.
> git push --mirror backup-repo +refs/*:refs/`hostname`/*
Is --mirror needed there? I would have thought that
refs/*:refs/`hostname`/* would do the same by itself.
>
> and:
>
> # update topic branches we have already published (using the
> # "matching" refspec), but remove any that we have deleted
> # locally.
> git push --mirror publish-point +:
>
> and I don't think either works.
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 490 bytes --]
next prev parent reply other threads:[~2011-10-04 10:33 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-26 18:47 [BUG?] git fetch -p -t prunes all non-tag refs Ben Boeckel
2011-09-26 22:30 ` Junio C Hamano
2011-09-26 22:51 ` Ben Boeckel
2011-09-26 23:11 ` Carlos Martín Nieto
2011-09-26 23:16 ` Junio C Hamano
2011-09-26 23:28 ` Carlos Martín Nieto
2011-09-27 3:31 ` Jeff King
2011-10-04 10:33 ` Carlos Martín Nieto [this message]
2011-10-04 10:36 ` Jeff King
2011-10-04 11:06 ` Carlos Martín Nieto
2011-10-06 16:56 ` [WIP PATCH 0/2] Be more careful when prunning Carlos Martín Nieto
2011-10-06 16:56 ` [PATCH 1/2] fetch: free all the additional refspecs Carlos Martín Nieto
2011-10-06 16:56 ` [PATCH 2/2] fetch: honor the user-provided refspecs when pruning refs Carlos Martín Nieto
2011-10-07 23:00 ` [WIP PATCH 0/2] Be more careful when prunning Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1317724404.2577.6.camel@bee.lab.cmartin.tk \
--to=cmn@elego.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=mathstuf@gmail.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.