* [PATCH 0/2] describe: support the syntax "--abbrev=+"
@ 2014-08-23 17:13 Jonh Wendell
2014-08-23 17:13 ` [PATCH 1/2] " Jonh Wendell
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Jonh Wendell @ 2014-08-23 17:13 UTC (permalink / raw)
To: git
Sometimes it's interesting to have a simple output that answers the question:
Are there commits after the latest tag?
One possible solution is to just print a "+" (plus) signal after the tag. Example:
> git describe --abbrev=1 5261ec5d5
v2.1.0-rc1-2-g5261ec
> git describe --abbrev=+ 5261ec5d5
v2.1.0-rc1+
Jonh Wendell (2):
describe: support the syntax "--abbrev=+"
describe: Add documentation for "--abbrev=+"
Documentation/git-describe.txt | 6 ++++++
builtin/describe.c | 26 +++++++++++++++++++++-----
2 files changed, 27 insertions(+), 5 deletions(-)
--
1.9.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/2] describe: support the syntax "--abbrev=+"
2014-08-23 17:13 [PATCH 0/2] describe: support the syntax "--abbrev=+" Jonh Wendell
@ 2014-08-23 17:13 ` Jonh Wendell
2014-08-23 17:13 ` [PATCH 2/2] describe: Add documentation for "--abbrev=+" Jonh Wendell
2014-08-26 18:04 ` [PATCH 0/2] describe: support the syntax "--abbrev=+" Jonh Wendell
2 siblings, 0 replies; 9+ messages in thread
From: Jonh Wendell @ 2014-08-23 17:13 UTC (permalink / raw)
To: git
It will print just a "+" sign appended to the found tag, if there
are commits between the tag and the supplied commit.
It's useful when you just need a simple output to know if the
supplied commit is an exact match or not.
---
builtin/describe.c | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/builtin/describe.c b/builtin/describe.c
index ee6a3b9..3a5c052 100644
--- a/builtin/describe.c
+++ b/builtin/describe.c
@@ -30,6 +30,7 @@ static int have_util;
static const char *pattern;
static int always;
static const char *dirty;
+static int simple_abbrev = 0;
/* diff-index command arguments to check if working tree is dirty. */
static const char *diff_index_args[] = {
@@ -378,8 +379,12 @@ static void describe(const char *arg, int last_one)
}
display_name(all_matches[0].name);
- if (abbrev)
- show_suffix(all_matches[0].depth, cmit->object.sha1);
+ if (abbrev) {
+ if (simple_abbrev)
+ printf("+");
+ else
+ show_suffix(all_matches[0].depth, cmit->object.sha1);
+ }
if (dirty)
printf("%s", dirty);
printf("\n");
@@ -388,6 +393,16 @@ static void describe(const char *arg, int last_one)
clear_commit_marks(cmit, -1);
}
+static int parse_opt_abbrev_for_describe_cb(const struct option *opt, const char *arg, int unset)
+{
+ if (arg && !strncmp(arg, "+", 1)) {
+ simple_abbrev = 1;
+ return 0;
+ }
+
+ return parse_opt_abbrev_cb(opt, arg, unset);
+}
+
int cmd_describe(int argc, const char **argv, const char *prefix)
{
int contains = 0;
@@ -398,7 +413,6 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
OPT_BOOL(0, "tags", &tags, N_("use any tag, even unannotated")),
OPT_BOOL(0, "long", &longformat, N_("always use long format")),
OPT_BOOL(0, "first-parent", &first_parent, N_("only follow first parent")),
- OPT__ABBREV(&abbrev),
OPT_SET_INT(0, "exact-match", &max_candidates,
N_("only output exact matches"), 0),
OPT_INTEGER(0, "candidates", &max_candidates,
@@ -410,6 +424,8 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
{OPTION_STRING, 0, "dirty", &dirty, N_("mark"),
N_("append <mark> on dirty working tree (default: \"-dirty\")"),
PARSE_OPT_OPTARG, NULL, (intptr_t) "-dirty"},
+ {OPTION_CALLBACK, 0, "abbrev", &abbrev, N_("n"), N_("use <n> digits to display SHA-1s"),
+ PARSE_OPT_OPTARG, &parse_opt_abbrev_for_describe_cb, 0},
OPT_END(),
};
@@ -425,8 +441,8 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
save_commit_buffer = 0;
- if (longformat && abbrev == 0)
- die(_("--long is incompatible with --abbrev=0"));
+ if (longformat && (abbrev == 0 || simple_abbrev))
+ die(_("--long is incompatible with --abbrev=+ or --abbrev=0"));
if (contains) {
struct argv_array args;
--
1.9.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/2] describe: Add documentation for "--abbrev=+"
2014-08-23 17:13 [PATCH 0/2] describe: support the syntax "--abbrev=+" Jonh Wendell
2014-08-23 17:13 ` [PATCH 1/2] " Jonh Wendell
@ 2014-08-23 17:13 ` Jonh Wendell
2014-08-24 6:35 ` brian m. carlson
2014-08-26 18:04 ` [PATCH 0/2] describe: support the syntax "--abbrev=+" Jonh Wendell
2 siblings, 1 reply; 9+ messages in thread
From: Jonh Wendell @ 2014-08-23 17:13 UTC (permalink / raw)
To: git
---
Documentation/git-describe.txt | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/git-describe.txt b/Documentation/git-describe.txt
index d20ca40..e291770 100644
--- a/Documentation/git-describe.txt
+++ b/Documentation/git-describe.txt
@@ -54,6 +54,12 @@ OPTIONS
abbreviated object name, use <n> digits, or as many digits
as needed to form a unique object name. An <n> of 0
will suppress long format, only showing the closest tag.
+ +
+ +
+ A special case of <n> equals to "\+" (without quotes) will print
+ just a "+" sign instead of the whole suffix. This is useful if you
+ only need to know if the supplied <commit-ish> points to an exact
+ match or if there are commits between the tag found and the <commit-ish>.
--candidates=<n>::
Instead of considering only the 10 most recent tags as
--
1.9.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] describe: Add documentation for "--abbrev=+"
2014-08-23 17:13 ` [PATCH 2/2] describe: Add documentation for "--abbrev=+" Jonh Wendell
@ 2014-08-24 6:35 ` brian m. carlson
2014-08-24 12:11 ` Jonh Wendell
0 siblings, 1 reply; 9+ messages in thread
From: brian m. carlson @ 2014-08-24 6:35 UTC (permalink / raw)
To: Jonh Wendell; +Cc: git
[-- Attachment #1: Type: text/plain, Size: 924 bytes --]
On Sat, Aug 23, 2014 at 02:13:22PM -0300, Jonh Wendell wrote:
> ---
> Documentation/git-describe.txt | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/Documentation/git-describe.txt b/Documentation/git-describe.txt
> index d20ca40..e291770 100644
> --- a/Documentation/git-describe.txt
> +++ b/Documentation/git-describe.txt
> @@ -54,6 +54,12 @@ OPTIONS
> abbreviated object name, use <n> digits, or as many digits
> as needed to form a unique object name. An <n> of 0
> will suppress long format, only showing the closest tag.
> + +
> + +
Did you intend to have two lines with just plus signs here? I'm not
aware of anywhere else in the Documentation where we do that.
--
brian m. carlson / brian with sandals: Houston, Texas, US
+1 832 623 2791 | http://www.crustytoothpaste.net/~bmc | My opinion only
OpenPGP: RSA v4 4096b: 88AC E9B2 9196 305B A994 7552 F1BA 225C 0223 B187
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] describe: Add documentation for "--abbrev=+"
2014-08-24 6:35 ` brian m. carlson
@ 2014-08-24 12:11 ` Jonh Wendell
0 siblings, 0 replies; 9+ messages in thread
From: Jonh Wendell @ 2014-08-24 12:11 UTC (permalink / raw)
To: Jonh Wendell, git
2014-08-24 3:35 GMT-03:00 brian m. carlson <sandals@crustytoothpaste.net>:
> On Sat, Aug 23, 2014 at 02:13:22PM -0300, Jonh Wendell wrote:
>> ---
>> Documentation/git-describe.txt | 6 ++++++
>> 1 file changed, 6 insertions(+)
>>
>> diff --git a/Documentation/git-describe.txt b/Documentation/git-describe.txt
>> index d20ca40..e291770 100644
>> --- a/Documentation/git-describe.txt
>> +++ b/Documentation/git-describe.txt
>> @@ -54,6 +54,12 @@ OPTIONS
>> abbreviated object name, use <n> digits, or as many digits
>> as needed to form a unique object name. An <n> of 0
>> will suppress long format, only showing the closest tag.
>> + +
>> + +
>
> Did you intend to have two lines with just plus signs here? I'm not
> aware of anywhere else in the Documentation where we do that.
> --
In my tests just one line was not enough to produce a proper line
break in the html output.
With two lines like above the output in man and html are ok (just 1 line break).
--
Jonh Wendell
http://www.bani.com.br
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/2] describe: support the syntax "--abbrev=+"
2014-08-23 17:13 [PATCH 0/2] describe: support the syntax "--abbrev=+" Jonh Wendell
2014-08-23 17:13 ` [PATCH 1/2] " Jonh Wendell
2014-08-23 17:13 ` [PATCH 2/2] describe: Add documentation for "--abbrev=+" Jonh Wendell
@ 2014-08-26 18:04 ` Jonh Wendell
2 siblings, 0 replies; 9+ messages in thread
From: Jonh Wendell @ 2014-08-26 18:04 UTC (permalink / raw)
To: git
hi there!
just a ping here, these are my first patches to git.
any comment, feedback?
2014-08-23 14:13 GMT-03:00 Jonh Wendell <jonh.wendell@gmail.com>:
> Sometimes it's interesting to have a simple output that answers the question:
> Are there commits after the latest tag?
>
> One possible solution is to just print a "+" (plus) signal after the tag. Example:
>
>> git describe --abbrev=1 5261ec5d5
> v2.1.0-rc1-2-g5261ec
>
>> git describe --abbrev=+ 5261ec5d5
> v2.1.0-rc1+
>
>
> Jonh Wendell (2):
> describe: support the syntax "--abbrev=+"
> describe: Add documentation for "--abbrev=+"
>
> Documentation/git-describe.txt | 6 ++++++
> builtin/describe.c | 26 +++++++++++++++++++++-----
> 2 files changed, 27 insertions(+), 5 deletions(-)
>
> --
> 1.9.3
>
--
Jonh Wendell
http://www.bani.com.br
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/2] describe: support the syntax "--abbrev=+"
2014-09-12 14:26 Jonh Wendell
@ 2014-09-12 14:26 ` Jonh Wendell
2014-09-14 8:18 ` Jeff King
0 siblings, 1 reply; 9+ messages in thread
From: Jonh Wendell @ 2014-09-12 14:26 UTC (permalink / raw)
To: git; +Cc: Junio C Hamano, Jonh Wendell
It will print just a "+" sign appended to the found tag, if there
are commits between the tag and the supplied commit.
It's useful when you just need a simple output to know if the
supplied commit is an exact match or not.
Signed-off-by: Jonh Wendell <jonh.wendell@gmail.com>
---
builtin/describe.c | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/builtin/describe.c b/builtin/describe.c
index ee6a3b9..3a5c052 100644
--- a/builtin/describe.c
+++ b/builtin/describe.c
@@ -30,6 +30,7 @@ static int have_util;
static const char *pattern;
static int always;
static const char *dirty;
+static int simple_abbrev = 0;
/* diff-index command arguments to check if working tree is dirty. */
static const char *diff_index_args[] = {
@@ -378,8 +379,12 @@ static void describe(const char *arg, int last_one)
}
display_name(all_matches[0].name);
- if (abbrev)
- show_suffix(all_matches[0].depth, cmit->object.sha1);
+ if (abbrev) {
+ if (simple_abbrev)
+ printf("+");
+ else
+ show_suffix(all_matches[0].depth, cmit->object.sha1);
+ }
if (dirty)
printf("%s", dirty);
printf("\n");
@@ -388,6 +393,16 @@ static void describe(const char *arg, int last_one)
clear_commit_marks(cmit, -1);
}
+static int parse_opt_abbrev_for_describe_cb(const struct option *opt, const char *arg, int unset)
+{
+ if (arg && !strncmp(arg, "+", 1)) {
+ simple_abbrev = 1;
+ return 0;
+ }
+
+ return parse_opt_abbrev_cb(opt, arg, unset);
+}
+
int cmd_describe(int argc, const char **argv, const char *prefix)
{
int contains = 0;
@@ -398,7 +413,6 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
OPT_BOOL(0, "tags", &tags, N_("use any tag, even unannotated")),
OPT_BOOL(0, "long", &longformat, N_("always use long format")),
OPT_BOOL(0, "first-parent", &first_parent, N_("only follow first parent")),
- OPT__ABBREV(&abbrev),
OPT_SET_INT(0, "exact-match", &max_candidates,
N_("only output exact matches"), 0),
OPT_INTEGER(0, "candidates", &max_candidates,
@@ -410,6 +424,8 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
{OPTION_STRING, 0, "dirty", &dirty, N_("mark"),
N_("append <mark> on dirty working tree (default: \"-dirty\")"),
PARSE_OPT_OPTARG, NULL, (intptr_t) "-dirty"},
+ {OPTION_CALLBACK, 0, "abbrev", &abbrev, N_("n"), N_("use <n> digits to display SHA-1s"),
+ PARSE_OPT_OPTARG, &parse_opt_abbrev_for_describe_cb, 0},
OPT_END(),
};
@@ -425,8 +441,8 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
save_commit_buffer = 0;
- if (longformat && abbrev == 0)
- die(_("--long is incompatible with --abbrev=0"));
+ if (longformat && (abbrev == 0 || simple_abbrev))
+ die(_("--long is incompatible with --abbrev=+ or --abbrev=0"));
if (contains) {
struct argv_array args;
--
1.9.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] describe: support the syntax "--abbrev=+"
2014-09-12 14:26 ` [PATCH 1/2] " Jonh Wendell
@ 2014-09-14 8:18 ` Jeff King
2014-09-14 8:56 ` Eric Sunshine
0 siblings, 1 reply; 9+ messages in thread
From: Jeff King @ 2014-09-14 8:18 UTC (permalink / raw)
To: Jonh Wendell; +Cc: git, Junio C Hamano
On Fri, Sep 12, 2014 at 11:26:43AM -0300, Jonh Wendell wrote:
> It will print just a "+" sign appended to the found tag, if there
> are commits between the tag and the supplied commit.
>
> It's useful when you just need a simple output to know if the
> supplied commit is an exact match or not.
Seems like a reasonable extension of the "--abbrev=0" behavior.
> builtin/describe.c | 26 +++++++++++++++++++++-----
> 1 file changed, 21 insertions(+), 5 deletions(-)
You can probably just squash the related documentation in with this
patch. Also, maybe some tests in t6120? It doesn't look like we test
--abbrev=0, either; if you are feeling especially charitable, it might
be good to add some tests for it, too.
> @@ -378,8 +379,12 @@ static void describe(const char *arg, int last_one)
> }
>
> display_name(all_matches[0].name);
> - if (abbrev)
> - show_suffix(all_matches[0].depth, cmit->object.sha1);
> + if (abbrev) {
> + if (simple_abbrev)
> + printf("+");
> + else
> + show_suffix(all_matches[0].depth, cmit->object.sha1);
> + }
This covers the case when we do have a commit to show. The exact-match
case is handled elsewhere, and I wondered what would happen if you
passed "--long", but:
> + if (longformat && (abbrev == 0 || simple_abbrev))
> + die(_("--long is incompatible with --abbrev=+ or --abbrev=0"));
You cover that here. Good.
> +static int parse_opt_abbrev_for_describe_cb(const struct option *opt, const char *arg, int unset)
> +{
> + if (arg && !strncmp(arg, "+", 1)) {
Why strncmp here? If I pass "--abbrev=+10", shouldn't that be an error?
> + simple_abbrev = 1;
> + return 0;
> + }
> +
> + return parse_opt_abbrev_cb(opt, arg, unset);
> +}
What happens if you pass the option multiple times? I'd expect later
ones to override earlier ones. For "--abbrev=0 --abbrev=10" this just
works, because they both store the value in the abbrev variable. But you
store simple_abbrev as a separate variable.
What do these do?
1. --abbrev=10 --abbrev=+
2. --abbrev=+ --abbrev=10
3. --abbrev=0 --abbrev=+
The first one will respect simple_abbrev, since it avoids calling
show_suffix at all. Good. The second one will do the same. We probably
need to reset simple_abbrev to 0 whenever we see another --abbrev. The
third one will not respect simple_abbrev, because we never enter the "if
(abbrev)" conditional. We probably need to reset "abbrev" to something
non-zero when we set simple_abbrev.
I.e.:
diff --git a/builtin/describe.c b/builtin/describe.c
index 3a5c052..532161e 100644
--- a/builtin/describe.c
+++ b/builtin/describe.c
@@ -397,9 +397,11 @@ static int parse_opt_abbrev_for_describe_cb(const struct option *opt, const char
{
if (arg && !strncmp(arg, "+", 1)) {
simple_abbrev = 1;
+ abbrev = 1; /* doesn't matter as long as it is non-zero */
return 0;
}
+ simple_abbrev = 0;
return parse_opt_abbrev_cb(opt, arg, unset);
}
Another alternative would be to stuff the simple_abbrev flag into
an unused value of "abbrev" (say, -2), but that is probably a little
less obvious than just resetting them together as above.
-Peff
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] describe: support the syntax "--abbrev=+"
2014-09-14 8:18 ` Jeff King
@ 2014-09-14 8:56 ` Eric Sunshine
0 siblings, 0 replies; 9+ messages in thread
From: Eric Sunshine @ 2014-09-14 8:56 UTC (permalink / raw)
To: Jeff King; +Cc: Jonh Wendell, Git List, Junio C Hamano
On Sun, Sep 14, 2014 at 4:18 AM, Jeff King <peff@peff.net> wrote:
> On Fri, Sep 12, 2014 at 11:26:43AM -0300, Jonh Wendell wrote:
>
>> It will print just a "+" sign appended to the found tag, if there
>> are commits between the tag and the supplied commit.
>>
>> It's useful when you just need a simple output to know if the
>> supplied commit is an exact match or not.
>
> Seems like a reasonable extension of the "--abbrev=0" behavior.
My reaction is opposite: Such overloading of --abbrev= feels abusive,
non-obvious, and is inconsistent with --abbrev accepted by other
commands.
It's also potentially ambiguous. If the tag name ends with a '+' and
there are no commits atop it, then the client can be fooled into
thinking there are. Being able to configure the suffix, rather than
hardcoding '+', might help, but seems ugly.
The justification in the cover letter is that it provides a way to
check if there are commits atop the latest tag. Within a script, it
might be sufficient merely to compare the output of 'git describe' and
'git describe --abbrev=0'. If they differ, then there are commits atop
the latest tag.
Thus, this feature seems somewhat misguided, but perhaps I'm missing
something obvious.
>> builtin/describe.c | 26 +++++++++++++++++++++-----
>> 1 file changed, 21 insertions(+), 5 deletions(-)
>
> You can probably just squash the related documentation in with this
> patch. Also, maybe some tests in t6120? It doesn't look like we test
> --abbrev=0, either; if you are feeling especially charitable, it might
> be good to add some tests for it, too.
>
>> @@ -378,8 +379,12 @@ static void describe(const char *arg, int last_one)
>> }
>>
>> display_name(all_matches[0].name);
>> - if (abbrev)
>> - show_suffix(all_matches[0].depth, cmit->object.sha1);
>> + if (abbrev) {
>> + if (simple_abbrev)
>> + printf("+");
>> + else
>> + show_suffix(all_matches[0].depth, cmit->object.sha1);
>> + }
>
> This covers the case when we do have a commit to show. The exact-match
> case is handled elsewhere, and I wondered what would happen if you
> passed "--long", but:
>
>> + if (longformat && (abbrev == 0 || simple_abbrev))
>> + die(_("--long is incompatible with --abbrev=+ or --abbrev=0"));
>
> You cover that here. Good.
>
>> +static int parse_opt_abbrev_for_describe_cb(const struct option *opt, const char *arg, int unset)
>> +{
>> + if (arg && !strncmp(arg, "+", 1)) {
>
> Why strncmp here? If I pass "--abbrev=+10", shouldn't that be an error?
>
>> + simple_abbrev = 1;
>> + return 0;
>> + }
>> +
>> + return parse_opt_abbrev_cb(opt, arg, unset);
>> +}
>
> What happens if you pass the option multiple times? I'd expect later
> ones to override earlier ones. For "--abbrev=0 --abbrev=10" this just
> works, because they both store the value in the abbrev variable. But you
> store simple_abbrev as a separate variable.
>
> What do these do?
>
> 1. --abbrev=10 --abbrev=+
>
> 2. --abbrev=+ --abbrev=10
>
> 3. --abbrev=0 --abbrev=+
>
> The first one will respect simple_abbrev, since it avoids calling
> show_suffix at all. Good. The second one will do the same. We probably
> need to reset simple_abbrev to 0 whenever we see another --abbrev. The
> third one will not respect simple_abbrev, because we never enter the "if
> (abbrev)" conditional. We probably need to reset "abbrev" to something
> non-zero when we set simple_abbrev.
>
> I.e.:
>
> diff --git a/builtin/describe.c b/builtin/describe.c
> index 3a5c052..532161e 100644
> --- a/builtin/describe.c
> +++ b/builtin/describe.c
> @@ -397,9 +397,11 @@ static int parse_opt_abbrev_for_describe_cb(const struct option *opt, const char
> {
> if (arg && !strncmp(arg, "+", 1)) {
> simple_abbrev = 1;
> + abbrev = 1; /* doesn't matter as long as it is non-zero */
> return 0;
> }
>
> + simple_abbrev = 0;
> return parse_opt_abbrev_cb(opt, arg, unset);
> }
>
>
> Another alternative would be to stuff the simple_abbrev flag into
> an unused value of "abbrev" (say, -2), but that is probably a little
> less obvious than just resetting them together as above.
>
> -Peff
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2014-09-14 8:56 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-23 17:13 [PATCH 0/2] describe: support the syntax "--abbrev=+" Jonh Wendell
2014-08-23 17:13 ` [PATCH 1/2] " Jonh Wendell
2014-08-23 17:13 ` [PATCH 2/2] describe: Add documentation for "--abbrev=+" Jonh Wendell
2014-08-24 6:35 ` brian m. carlson
2014-08-24 12:11 ` Jonh Wendell
2014-08-26 18:04 ` [PATCH 0/2] describe: support the syntax "--abbrev=+" Jonh Wendell
-- strict thread matches above, loose matches on Subject: below --
2014-09-12 14:26 Jonh Wendell
2014-09-12 14:26 ` [PATCH 1/2] " Jonh Wendell
2014-09-14 8:18 ` Jeff King
2014-09-14 8:56 ` Eric Sunshine
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).