I have now patched Git to hide my local tags from git describe. I am intentionally not sending this to the git mailing list because I'm not sure I can satisfy their Signed-Off-By requirements right away. The "Modified on" comments are for GPLv2 clause 2. a).
Add describe.ignoretags config variable In my elinks.git repository, I have many annotated tags that do not correspond to ELinks releases. For example, a tag called email/elinks-users/2007-07-30 refers to a commit that I posted as a patch to elinks-users on 2007-07-30; the tag object contains the Message-ID and some other email headers. These tags were affecting the result of "git describe" called by a Makefile. Now I can prevent that by setting describe.ignoretags in elinks.git/config. In Git 1.5.5 and later, it was already possible to limit the set of tags considered, with git describe --match=PATTERN. To match "elinks-0.11.4" and "elinks-0.12pre1", we could use --match="elinks-*". However, the naming scheme has been changed in the past (from e.g. REL_0_10_6) and may be changed again in the future. Besides, ignoring the email tags is what I want for interactive use of git describe as well. There are no new tests in this commit. --- commit c97654d02a95e6701481204121a4f4c59e8f3088 tree 9abf39a8d8dca5308ae77923702606bf630778b1 parent 71b9979bc74b66c1cf961d5c74de5c0b3cbf00a4 author Kalle Olavi Niemitalo <[EMAIL PROTECTED]> Sun, 10 Aug 2008 17:56:45 +0300 committer Kalle Olavi Niemitalo <[EMAIL PROTECTED]> Sun, 10 Aug 2008 17:56:45 +0300 Documentation/config.txt | 11 +++++++++++ Documentation/git-describe.txt | 5 ++++- builtin-describe.c | 29 ++++++++++++++++++++++++++++- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index b8ec01c..c9270b5 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -1,3 +1,5 @@ +// Modified on 2008-08-10 by Kalle Olavi Niemitalo + CONFIGURATION FILE ------------------ @@ -557,6 +559,15 @@ color.ui:: terminal. When more specific variables of color.* are set, they always take precedence over this setting. Defaults to false. +describe.excludetags:: + Makes 'git-describe' ignore tags that match a pattern. Some + programs call 'git-describe' at build time and display the + result as a version number; if you have made some annotated + tags for your local use, set this option to prevent them from + affecting the displayed version number. The value should be a + pattern of tag names, e.g. `local/*`. You can set this option + multiple times. + diff.autorefreshindex:: When using 'git-diff' to compare with work tree files, do not consider stat-only change as changed. diff --git a/Documentation/git-describe.txt b/Documentation/git-describe.txt index c4dbc2a..33a923e 100644 --- a/Documentation/git-describe.txt +++ b/Documentation/git-describe.txt @@ -68,7 +68,9 @@ OPTIONS --match <pattern>:: Only consider tags matching the given pattern (can be used to avoid - leaking private tags made from the repository). + leaking private tags made from the repository). Alternatively, + you could set the describe.excludetags configuration variable; + see linkgit:git-config[1] for details. --always:: Show uniquely abbreviated commit object as fallback. @@ -138,6 +140,7 @@ Author Written by Linus Torvalds <[EMAIL PROTECTED]>, but somewhat butchered by Junio C Hamano <[EMAIL PROTECTED]>. Later significantly updated by Shawn Pearce <[EMAIL PROTECTED]>. +Modified on 2008-08-10 by Kalle Olavi Niemitalo. Documentation -------------- diff --git a/builtin-describe.c b/builtin-describe.c index ec404c8..4367ab9 100644 --- a/builtin-describe.c +++ b/builtin-describe.c @@ -1,3 +1,5 @@ +/* Modified on 2008-08-10 by Kalle Olavi Niemitalo */ + #include "cache.h" #include "commit.h" #include "tag.h" @@ -5,6 +7,7 @@ #include "builtin.h" #include "exec_cmd.h" #include "parse-options.h" +#include "string-list.h" #define SEEN (1u<<0) #define MAX_TAGS (FLAG_BITS - 1) @@ -22,6 +25,28 @@ static int abbrev = DEFAULT_ABBREV; static int max_candidates = 10; static const char *pattern; static int always; +static struct string_list exclude_patterns = { .strdup_strings = 1 }; + +static int git_describe_config(const char *var, const char *value, void *cb) +{ + if (!strcmp(var, "describe.excludetags")) { + if (!value) + return config_error_nonbool(var); + string_list_append(value, &exclude_patterns); + return 0; + } + return git_default_config(var, value, cb); +} + +static int matches_any_exclude_pattern(const char *tagname) +{ + unsigned int i; + + for (i = 0; i < exclude_patterns.nr; i++) + if (!fnmatch(exclude_patterns.items[i].string, tagname, 0)) + return 1; + return 0; +} struct commit_name { struct tag *tag; @@ -85,7 +110,8 @@ static int get_name(const char *path, const unsigned char *sha1, int flag, void else prio = 1; - if (pattern && fnmatch(pattern, path + 10, 0)) + if ((pattern && fnmatch(pattern, path + 10, 0)) + || matches_any_exclude_pattern(path + 10)) prio = 0; } else @@ -324,6 +350,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix) OPT_END(), }; + git_config(git_describe_config, NULL); argc = parse_options(argc, argv, options, describe_usage, 0); if (max_candidates < 0) max_candidates = 0;
pgpkxYMTDLQWW.pgp
Description: PGP signature
_______________________________________________ elinks-dev mailing list elinks-dev@linuxfromscratch.org http://linuxfromscratch.org/mailman/listinfo/elinks-dev