git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCHv4 0/5] Be more careful when prunning

From
Carlos Martín Nieto <cmn@elego.de>
Date
Oct 15, 2011, 05:04 UTC
Message-ID
<1318655066-29001-1-git-send-email-cmn@elego.de>
Hello,

This version covers Junio's concerns about code and functionality duplication with the third patch. The order of arguments for get_stale_heads is not changed anymore in the fourth patch.

The first patch is not that big a deal, but it's better if we're freeing the refspecs, we might as well free all of them.

The second patch introduces expected failures for the features that this series fixes.

The third patch is new and moves the logic out of remote_find_tracking into a query_refspecs function. remote_find_tracking and apply_refspecs are both changed to be wrappers around this function. This way, the logic is in one function instead of three different ones.

The fourth patch changes prune_refs and get_stale_heads so the caller has to decide which refspecs are the appropriate ones to use. For example, running

    git fetch --prune origin refs/heads/master:refs/heads/master

doesn't remove the other branches anymore. For a more interesting (and believable) example, let's take

    git fetch --prune origin refs/heads/b/*:refs/heads/b/*

because you want to prune the refs inside the b/ namespace only. Currently git will delete all the refs that aren't under that namespace. With the second patch applied, git won't remove any refs outside the b/ namespace.

What is probably the most usual case is covered by the fifth patch, which pretends that a "refs/tags/*:refs/tags/*" refspec was given on the command-line. That fixes the

    git fetch --prune --tags origin
case. The non-tag refs are kept now.
Cheers,
   cmn
Carlos Martín Nieto (5):
  fetch: free all the additional refspecs
  t5510: add tests for fetch --prune
  remote: separate out the remote_find_tracking logic into
    query_refspecs
  fetch: honor the user-provided refspecs when pruning refs
  fetch: treat --tags like refs/tags/*:refs/tags/* when pruning
 builtin/fetch.c  |   33 ++++++++++++++---
 builtin/remote.c |    3 +-
 remote.c         |  106 +++++++++++++++++++++++++++++------------------------
 remote.h         |    2 +-
 t/t5510-fetch.sh |   50 +++++++++++++++++++++++++
 5 files changed, 139 insertions(+), 55 deletions(-)
-- 
1.7.5.2.354.g349bf
Next: Carlos Martín Nieto
Message 1 of 8 in “[PATCHv4 0/5] Be more careful when prunning”
  1. Carlos Martín NietoOct 15, 2011
  2. 1/5 fetch: free all the additional refspecsCarlos Martín Nieto, Oct 15, 2011
  3. 2/5 t5510: add tests for fetch --pruneCarlos Martín Nieto, Oct 15, 2011
  4. 3/5 remote: separate out the remote_find_tracking logic into query_refspecsCarlos Martín Nieto, Oct 15, 2011
  5. Junio C HamanoOct 16, 2011
  6. Junio C HamanoOct 16, 2011
  7. 4/5 fetch: honor the user-provided refspecs when pruning refsCarlos Martín Nieto, Oct 15, 2011
  8. 5/5 fetch: treat --tags like refs/tags/*:refs/tags/* when pruningCarlos Martín Nieto, Oct 15, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.