This is v2 of my proposed fix for the "local tag killer" problem that
I reported recently [1]. Thanks a lot to Junio for his feedback on
v1.
Changes since v1:
* Rebase to current upstream master (0d6cf2471f); no conflicts were
encountered.
* Incorporate feedback from Junio:
* Improve the documentation as suggested
* Fix a few typos
* Document get_expanded_map() and fix a minor memory leak that I found
there.
* get_ref_map(): Do not look for references that can be updated
opportunistically among the entries added by "--tags". Preserve the
order of output list when changing the function to handle the new
"--tags" semantics. (I know more about how the output is used and
am less worried now that the changes will have bad interactions with
the rest of the system.)
* Improve the description of tag-following in the "git fetch" manpage.
* Moved the changes to ref_remove_duplicates() later in the series, as
they were not really integral to the rest of the patch series.
Make the following changes to that function:
* Add tests of how it handles duplicates.
* Simplify the loop in a different way than v1, to make it more
modular.
* Extract a function to handle duplicates.
* Improve the error messages emitted if ref_remove_duplicates()
finds conflicting duplicates, and mark the messages for
translation.
* Do not die() if a user-specified refspec conflicts with
an opportunistic update.
[1] http://article.gmane.org/gmane.comp.version-control.git/234723
Michael Haggerty (23):
t5510: use the correct tag name in test
t5510: prepare test refs more straightforwardly
t5510: check that "git fetch --prune --tags" does not prune branches
api-remote.txt: correct section "struct refspec"
get_ref_map(): rename local variables
builtin/fetch.c: reorder function definitions
get_expanded_map(): add docstring
get_expanded_map(): avoid memory leak
fetch: only opportunistically update references based on command line
fetch --tags: fetch tags *in addition to* other stuff
fetch --prune: prune only based on explicit refspecs
query_refspecs(): move some constants out of the loop
builtin/remote.c: reorder function definitions
builtin/remote.c:update(): use struct argv_array
fetch, remote: properly convey --no-prune options to subprocesses
fetch-options.txt: simplify ifdef/ifndef/endif usage
git-fetch.txt: improve description of tag auto-following
ref_remove_duplicates(): avoid redundant bisection
t5536: new test of refspec conflicts when fetching
ref_remove_duplicates(): simplify loop logic
ref_remote_duplicates(): extract a function handle_duplicate()
handle_duplicate(): mark error message for translation
fetch: improve the error messages emitted for conflicting refspecs
Documentation/config.txt | 4 +-
Documentation/fetch-options.txt | 26 +--
Documentation/git-fetch.txt | 14 +-
Documentation/technical/api-remote.txt | 20 +--
builtin/fetch.c | 298 ++++++++++++++++---------------
builtin/remote.c | 196 ++++++++++----------
git-pull.sh | 2 +-
remote.c | 94 +++++++---
remote.h | 8 +-
t/t5510-fetch.sh | 36 +++-
t/t5515/fetch.br-unconfig_--tags_.._.git | 1 +
t/t5515/fetch.master_--tags_.._.git | 1 +
t/t5525-fetch-tagopt.sh | 23 ++-
t/t5536-fetch-conflicts.sh | 100 +++++++++++
14 files changed, 503 insertions(+), 320 deletions(-)
create mode 100755 t/t5536-fetch-conflicts.sh
--
1.8.4.1
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html