threads / patch / 28215

patchlog: Do not decorate replacements with --no-replace-objects

Subject: [PATCH] log: Do not decorate replacements with --no-replace-objects

## tl;dr

5 messages between Aug 25, 2011 and Aug 25, 2011. Diffs are folded; open one to read it.

replies: 4people: 3as markdown or json

Michael J Gruber· Aug 25, 2011, 13:44 UTC · lore

5267d29 (log: decorate "replaced" on to replaced commits, 2011-08-19) introduced textual decorations for replaced commits, based on the detection of refs/replace.

Make it so that additionally the use of --no-replace-objects is detected: I.e. replaced commits are only decorated as replaced when they are actually replaced.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
---
Sorry for being late to the party. Trying to keep up.
---
 log-tree.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Show changes to log-tree.c +1 −1
diff --git a/log-tree.c b/log-tree.c
index 74fc20d..2066bb7 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -95,7 +95,7 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in
 	struct object *obj;
 	enum decoration_type type = DECORATION_NONE;
 
-	if (!prefixcmp(refname, "refs/replace/")) {
+	if (read_replace_refs && !prefixcmp(refname, "refs/replace/")) {
 		unsigned char original_sha1[20];
 		if (get_sha1_hex(refname + 13, original_sha1)) {
 			warning("invalid replace ref %s", refname);
-- 
1.7.6.845.gc3c05
Nguyen Thai Ngoc Duy· Aug 25, 2011, 13:55 UTC · re: Michael J Gruber · lore

Re: [PATCH] log: Do not decorate replacements with --no-replace-objects

2011/8/25 Michael J Gruber <git@drmicha.warpmail.net>:
> Make it so that additionally the use of --no-replace-objects is
> detected: I.e. replaced commits are only decorated as replaced when they
> are actually replaced.
Yeah.. I forgot about this.
Show 9 quoted lines
> @@ -95,7 +95,7 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in
>        struct object *obj;
>        enum decoration_type type = DECORATION_NONE;
>
> -       if (!prefixcmp(refname, "refs/replace/")) {
> +       if (read_replace_refs && !prefixcmp(refname, "refs/replace/")) {
>                unsigned char original_sha1[20];
>                if (get_sha1_hex(refname + 13, original_sha1)) {
>                        warning("invalid replace ref %s", refname);

You should put "if (!read_replace_refs) return 0;" inside "if (!prefixcmp..", otherwise it'll come to the ref decoration code below and my second paragraph in 5267d29's commit message will be reverted.

I thought my patch was
 - simple
 - replace is rarely used
therefore neglected the tests. Perhaps you can also add a few tests
here. It's not that simple after all.
-- 
Duy
Michael J Gruber· Aug 25, 2011, 15:08 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: [PATCH] log: Do not decorate replacements with --no-replace-objects

Nguyen Thai Ngoc Duy venit, vidit, dixit 25.08.2011 15:55:
Show 20 quoted lines
> 2011/8/25 Michael J Gruber <git@drmicha.warpmail.net>:
>> Make it so that additionally the use of --no-replace-objects is
>> detected: I.e. replaced commits are only decorated as replaced when they
>> are actually replaced.
> 
> Yeah.. I forgot about this.
> 
>> @@ -95,7 +95,7 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in
>>        struct object *obj;
>>        enum decoration_type type = DECORATION_NONE;
>>
>> -       if (!prefixcmp(refname, "refs/replace/")) {
>> +       if (read_replace_refs && !prefixcmp(refname, "refs/replace/")) {
>>                unsigned char original_sha1[20];
>>                if (get_sha1_hex(refname + 13, original_sha1)) {
>>                        warning("invalid replace ref %s", refname);
> 
> You should put "if (!read_replace_refs) return 0;" inside "if
> (!prefixcmp..", otherwise it'll come to the ref decoration code below
> and my second paragraph in 5267d29's commit message will be reverted.
Right, thanks for checking.
Show 5 quoted lines
> I thought my patch was
>  - simple
>  - replace is rarely used
> therefore neglected the tests. Perhaps you can also add a few tests
> here. It's not that simple after all.

It would take a bit to do so, but this is a fix to a recently introduced feature, so it should go along quickly. v2 upcoming.

Michael
Michael J Gruber· Aug 25, 2011, 15:09 UTC · re: Michael J Gruber · lore

[PATCHv2] log: Do not decorate replacements with --no-replace-objects

5267d29 (log: decorate "replaced" on to replaced commits, 2011-08-19) introduced textual decorations for replaced commits, based on the detection of refs/replace.

Make it so that additionally the use of --no-replace-objects is detected: I.e. replaced commits are only decorated as replaced when they are actually replaced.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
---
Sorry for being late to the party. Trying to keep up.
---
 log-tree.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
Show changes to log-tree.c +2 −0
diff --git a/log-tree.c b/log-tree.c
index 74fc20d..f65f6b6 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -96,6 +96,8 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in
 	enum decoration_type type = DECORATION_NONE;
 
 	if (!prefixcmp(refname, "refs/replace/")) {
+		if (!read_replace_refs)
+			return 0;
 		unsigned char original_sha1[20];
 		if (get_sha1_hex(refname + 13, original_sha1)) {
 			warning("invalid replace ref %s", refname);
-- 
1.7.6.845.gc3c05

← back to recent threads