git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH 0/1] builtin/blame.c: bit field constants into bit shift format
@ 2019-10-16 18:30 Hariom Verma via GitGitGadget
  2019-10-16 18:30 ` [PATCH 1/1] builtin/blame.c: " Hariom Verma via GitGitGadget
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Hariom Verma via GitGitGadget @ 2019-10-16 18:30 UTC (permalink / raw)
  To: git; +Cc: Hariom Verma, Junio C Hamano

we are looking at bitfield constants, and elsewhere in the Git source code,
such cases are handled via bit shift operators rather than octal numbers,
which also makes it easier to spot holes in the range (if, say, 1<<5 was
missing, it is easier to spot it between 1<<4 and 1<<6 than it is to spot a
missing 040 between a 020 and a 0100). Also, bit shifts lead to low-level
optimizations because they require fewer calculations for the CPU. 

Special Thanks to @dscho for helping me out throughout the process.

Hariom Verma (1):
  builtin/blame.c: constants into bit shift format

 builtin/blame.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)


base-commit: 08da6496b61341ec45eac36afcc8f94242763468
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-382%2Fharry-hov%2Fenum-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-382/harry-hov/enum-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/382
-- 
gitgitgadget

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/1] builtin/blame.c: constants into bit shift format
  2019-10-16 18:30 [PATCH 0/1] builtin/blame.c: bit field constants into bit shift format Hariom Verma via GitGitGadget
@ 2019-10-16 18:30 ` Hariom Verma via GitGitGadget
  2019-10-16 19:10   ` Pratyush Yadav
  2019-10-17  7:38   ` Junio C Hamano
  2019-10-17  7:33 ` [PATCH 0/1] builtin/blame.c: bit field " Junio C Hamano
  2019-10-17 17:46 ` [PATCH v2 " Hariom Verma via GitGitGadget
  2 siblings, 2 replies; 9+ messages in thread
From: Hariom Verma via GitGitGadget @ 2019-10-16 18:30 UTC (permalink / raw)
  To: git; +Cc: Hariom Verma, Junio C Hamano, Hariom Verma

From: Hariom Verma <hariom18599@gmail.com>

We are looking at bitfield constants, and elsewhere in the Git source
code, such cases are handled via bit shift operators rather than octal
numbers, which also makes it easier to spot holes in the range
(if, say, 1<<5 was missing, it is easier to spot it between 1<<4
and 1<<6 than it is to spot a missing 040 between a 020 and a 0100).

Signed-off-by: Hariom Verma <hariom18599@gmail.com>
---
 builtin/blame.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/builtin/blame.c b/builtin/blame.c
index e946ba6cd9..a57020acf9 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -319,18 +319,18 @@ static const char *format_time(timestamp_t time, const char *tz_str,
 	return time_buf.buf;
 }
 
-#define OUTPUT_ANNOTATE_COMPAT	001
-#define OUTPUT_LONG_OBJECT_NAME	002
-#define OUTPUT_RAW_TIMESTAMP	004
-#define OUTPUT_PORCELAIN	010
-#define OUTPUT_SHOW_NAME	020
-#define OUTPUT_SHOW_NUMBER	040
-#define OUTPUT_SHOW_SCORE	0100
-#define OUTPUT_NO_AUTHOR	0200
-#define OUTPUT_SHOW_EMAIL	0400
-#define OUTPUT_LINE_PORCELAIN	01000
-#define OUTPUT_COLOR_LINE	02000
-#define OUTPUT_SHOW_AGE_WITH_COLOR	04000
+#define OUTPUT_ANNOTATE_COMPAT      (1<<0)
+#define OUTPUT_LONG_OBJECT_NAME     (1<<1)
+#define OUTPUT_RAW_TIMESTAMP        (1<<2)
+#define OUTPUT_PORCELAIN            (1<<3)
+#define OUTPUT_SHOW_NAME            (1<<4)
+#define OUTPUT_SHOW_NUMBER          (1<<5)
+#define OUTPUT_SHOW_SCORE           (1<<6)
+#define OUTPUT_NO_AUTHOR            (1<<7)
+#define OUTPUT_SHOW_EMAIL           (1<<8)
+#define OUTPUT_LINE_PORCELAIN       (1<<9)
+#define OUTPUT_COLOR_LINE           (1<<10)
+#define OUTPUT_SHOW_AGE_WITH_COLOR  (1<<11)
 
 static void emit_porcelain_details(struct blame_origin *suspect, int repeat)
 {
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/1] builtin/blame.c: constants into bit shift format
  2019-10-16 18:30 ` [PATCH 1/1] builtin/blame.c: " Hariom Verma via GitGitGadget
@ 2019-10-16 19:10   ` Pratyush Yadav
  2019-10-16 19:37     ` Jonathan Tan
  2019-10-17  7:38   ` Junio C Hamano
  1 sibling, 1 reply; 9+ messages in thread
From: Pratyush Yadav @ 2019-10-16 19:10 UTC (permalink / raw)
  To: Hariom Verma via GitGitGadget; +Cc: git, Hariom Verma, Junio C Hamano

On 16/10/19 06:30PM, Hariom Verma via GitGitGadget wrote:
> From: Hariom Verma <hariom18599@gmail.com>
> 
> We are looking at bitfield constants, and elsewhere in the Git source
> code, such cases are handled via bit shift operators rather than octal
> numbers, which also makes it easier to spot holes in the range
> (if, say, 1<<5 was missing, it is easier to spot it between 1<<4
> and 1<<6 than it is to spot a missing 040 between a 020 and a 0100).
> 
> Signed-off-by: Hariom Verma <hariom18599@gmail.com>
> ---
>  builtin/blame.c | 24 ++++++++++++------------
>  1 file changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/builtin/blame.c b/builtin/blame.c
> index e946ba6cd9..a57020acf9 100644
> --- a/builtin/blame.c
> +++ b/builtin/blame.c
> @@ -319,18 +319,18 @@ static const char *format_time(timestamp_t time, const char *tz_str,
>  	return time_buf.buf;
>  }
>  
> -#define OUTPUT_ANNOTATE_COMPAT	001
> -#define OUTPUT_LONG_OBJECT_NAME	002
> -#define OUTPUT_RAW_TIMESTAMP	004
> -#define OUTPUT_PORCELAIN	010
> -#define OUTPUT_SHOW_NAME	020
> -#define OUTPUT_SHOW_NUMBER	040
> -#define OUTPUT_SHOW_SCORE	0100
> -#define OUTPUT_NO_AUTHOR	0200
> -#define OUTPUT_SHOW_EMAIL	0400
> -#define OUTPUT_LINE_PORCELAIN	01000
> -#define OUTPUT_COLOR_LINE	02000
> -#define OUTPUT_SHOW_AGE_WITH_COLOR	04000
> +#define OUTPUT_ANNOTATE_COMPAT      (1<<0)
> +#define OUTPUT_LONG_OBJECT_NAME     (1<<1)
> +#define OUTPUT_RAW_TIMESTAMP        (1<<2)
> +#define OUTPUT_PORCELAIN            (1<<3)
> +#define OUTPUT_SHOW_NAME            (1<<4)
> +#define OUTPUT_SHOW_NUMBER          (1<<5)
> +#define OUTPUT_SHOW_SCORE           (1<<6)
> +#define OUTPUT_NO_AUTHOR            (1<<7)
> +#define OUTPUT_SHOW_EMAIL           (1<<8)
> +#define OUTPUT_LINE_PORCELAIN       (1<<9)
> +#define OUTPUT_COLOR_LINE           (1<<10)
> +#define OUTPUT_SHOW_AGE_WITH_COLOR  (1<<11)

Nitpick: In the code you remove, tabs were used for alignment. Here, you 
use spaces. Unless there is any specific reason to do it this way, might 
as well keep the older style.

There was some discussion recently about converting these related 
#defines to enums [0]. We might consider doing that here.

If you read through that entire thread, you'd see that there were some 
disagreements about whether using enums for sets of bits is a good idea 
([1] and [2]), but it is at least something worth considering while we 
are on this topic.

FWIW, I think it is a good idea to use an enum here.

>  
>  static void emit_porcelain_details(struct blame_origin *suspect, int repeat)
>  {

[0] https://public-inbox.org/git/20191010115230.10623-1-wambui.karugax@gmail.com/
[1] https://public-inbox.org/git/20191014182754.82302-1-jonathantanmy@google.com/
[2] https://public-inbox.org/git/xmqqk19ag60g.fsf@gitster-ct.c.googlers.com/

-- 
Regards,
Pratyush Yadav

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/1] builtin/blame.c: constants into bit shift format
  2019-10-16 19:10   ` Pratyush Yadav
@ 2019-10-16 19:37     ` Jonathan Tan
  2019-10-16 19:44       ` Pratyush Yadav
  0 siblings, 1 reply; 9+ messages in thread
From: Jonathan Tan @ 2019-10-16 19:37 UTC (permalink / raw)
  To: me; +Cc: gitgitgadget, git, hariom18599, gitster, Jonathan Tan

> There was some discussion recently about converting these related 
> #defines to enums [0]. We might consider doing that here.
> 
> If you read through that entire thread, you'd see that there were some 
> disagreements about whether using enums for sets of bits is a good idea 
> ([1] and [2]), but it is at least something worth considering while we 
> are on this topic.
> 
> FWIW, I think it is a good idea to use an enum here.

[snip]

> [0] https://public-inbox.org/git/20191010115230.10623-1-wambui.karugax@gmail.com/
> [1] https://public-inbox.org/git/20191014182754.82302-1-jonathantanmy@google.com/
> [2] https://public-inbox.org/git/xmqqk19ag60g.fsf@gitster-ct.c.googlers.com/

Thanks for the handy references. You know my opinion on bitflags as
enums from reading them, but I think that we have already had that
discussion and came to a conclusion. So don't use an enum here.

The patch itself looks good, and I also prefer the bit shift format over
octal.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/1] builtin/blame.c: constants into bit shift format
  2019-10-16 19:37     ` Jonathan Tan
@ 2019-10-16 19:44       ` Pratyush Yadav
  0 siblings, 0 replies; 9+ messages in thread
From: Pratyush Yadav @ 2019-10-16 19:44 UTC (permalink / raw)
  To: Jonathan Tan; +Cc: gitgitgadget, git, hariom18599, gitster

On 16/10/19 12:37PM, Jonathan Tan wrote:
> > There was some discussion recently about converting these related 
> > #defines to enums [0]. We might consider doing that here.
> > 
> > If you read through that entire thread, you'd see that there were some 
> > disagreements about whether using enums for sets of bits is a good idea 
> > ([1] and [2]), but it is at least something worth considering while we 
> > are on this topic.
> > 
> > FWIW, I think it is a good idea to use an enum here.
> 
> [snip]
> 
> > [0] https://public-inbox.org/git/20191010115230.10623-1-wambui.karugax@gmail.com/
> > [1] https://public-inbox.org/git/20191014182754.82302-1-jonathantanmy@google.com/
> > [2] https://public-inbox.org/git/xmqqk19ag60g.fsf@gitster-ct.c.googlers.com/
> 
> Thanks for the handy references. You know my opinion on bitflags as
> enums from reading them, but I think that we have already had that
> discussion and came to a conclusion. So don't use an enum here.

Ah! I missed your last email in that thread that finally settled on 
avoiding bitsets, and thought the discussion was still ongoing. My bad 
:)
 
> The patch itself looks good, and I also prefer the bit shift format over
> octal.

-- 
Regards,
Pratyush Yadav

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/1] builtin/blame.c: bit field constants into bit shift format
  2019-10-16 18:30 [PATCH 0/1] builtin/blame.c: bit field constants into bit shift format Hariom Verma via GitGitGadget
  2019-10-16 18:30 ` [PATCH 1/1] builtin/blame.c: " Hariom Verma via GitGitGadget
@ 2019-10-17  7:33 ` Junio C Hamano
  2019-10-17 17:46 ` [PATCH v2 " Hariom Verma via GitGitGadget
  2 siblings, 0 replies; 9+ messages in thread
From: Junio C Hamano @ 2019-10-17  7:33 UTC (permalink / raw)
  To: Hariom Verma via GitGitGadget; +Cc: git, Hariom Verma

"Hariom Verma via GitGitGadget" <gitgitgadget@gmail.com> writes:

> we are looking at bitfield constants, and elsewhere in the Git source code,
> such cases are handled via bit shift operators rather than octal numbers,
> which also makes it easier to spot holes in the range (if, say, 1<<5 was
> missing, it is easier to spot it between 1<<4 and 1<<6 than it is to spot a
> missing 040 between a 020 and a 0100). Also, bit shifts lead to low-level
> optimizations because they require fewer calculations for the CPU. 

I think the last sentence is a nonsense for any decent compiler that
turns "1<<5" into 040 at compile time and treats it as literal
integer.  Luckily, it only appears here in the cover letter and does
not appear in the patch proper, so no need to resend the patch to
correct this ;-)


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/1] builtin/blame.c: constants into bit shift format
  2019-10-16 18:30 ` [PATCH 1/1] builtin/blame.c: " Hariom Verma via GitGitGadget
  2019-10-16 19:10   ` Pratyush Yadav
@ 2019-10-17  7:38   ` Junio C Hamano
  1 sibling, 0 replies; 9+ messages in thread
From: Junio C Hamano @ 2019-10-17  7:38 UTC (permalink / raw)
  To: Hariom Verma via GitGitGadget; +Cc: git, Hariom Verma

"Hariom Verma via GitGitGadget" <gitgitgadget@gmail.com> writes:

> -#define OUTPUT_SHOW_AGE_WITH_COLOR	04000
> +#define OUTPUT_ANNOTATE_COMPAT      (1<<0)
> +#define OUTPUT_LONG_OBJECT_NAME     (1<<1)
> +#define OUTPUT_RAW_TIMESTAMP        (1<<2)
> +#define OUTPUT_PORCELAIN            (1<<3)
> +#define OUTPUT_SHOW_NAME            (1<<4)
> +#define OUTPUT_SHOW_NUMBER          (1<<5)
> +#define OUTPUT_SHOW_SCORE           (1<<6)
> +#define OUTPUT_NO_AUTHOR            (1<<7)
> +#define OUTPUT_SHOW_EMAIL           (1<<8)
> +#define OUTPUT_LINE_PORCELAIN       (1<<9)
> +#define OUTPUT_COLOR_LINE           (1<<10)
> +#define OUTPUT_SHOW_AGE_WITH_COLOR  (1<<11)

For these small shift counts it probably would not matter, but it
may be a good discipline to make sure they are treated as constants
of an unsigned type (i.e. write them as (1U<<0) etc.).  It probably
starts to matter when you reach 1<<31 if these are bits stuffed into
"unsigned int" on 32-bit arch.

One advantage of octal and hexadecimal notations have is that
0x80000000 is automatically unsigned, IIRC, on such an archtecture.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v2 0/1] builtin/blame.c: bit field constants into bit shift format
  2019-10-16 18:30 [PATCH 0/1] builtin/blame.c: bit field constants into bit shift format Hariom Verma via GitGitGadget
  2019-10-16 18:30 ` [PATCH 1/1] builtin/blame.c: " Hariom Verma via GitGitGadget
  2019-10-17  7:33 ` [PATCH 0/1] builtin/blame.c: bit field " Junio C Hamano
@ 2019-10-17 17:46 ` Hariom Verma via GitGitGadget
  2019-10-17 17:46   ` [PATCH v2 1/1] builtin/blame.c: " Hariom Verma via GitGitGadget
  2 siblings, 1 reply; 9+ messages in thread
From: Hariom Verma via GitGitGadget @ 2019-10-17 17:46 UTC (permalink / raw)
  To: git; +Cc: Hariom Verma, Junio C Hamano

we are looking at bitfield constants, and elsewhere in the Git source code,
such cases are handled via bit shift operators rather than octal numbers,
which also makes it easier to spot holes in the range (if, say, 1<<5 was
missing, it is easier to spot it between 1<<4 and 1<<6 than it is to spot a
missing 040 between a 020 and a 0100). Also, bit shifts lead to low-level
optimizations because they require fewer calculations for the CPU. 

Special Thanks to @dscho for helping me out throughout the process.

Hariom Verma (1):
  builtin/blame.c: constants into bit shift format

 builtin/blame.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)


base-commit: 08da6496b61341ec45eac36afcc8f94242763468
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-382%2Fharry-hov%2Fenum-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-382/harry-hov/enum-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/382

Range-diff vs v1:

 1:  3b4b8e0353 ! 1:  838478a185 builtin/blame.c: constants into bit shift format
     @@ -29,18 +29,18 @@
      -#define OUTPUT_LINE_PORCELAIN	01000
      -#define OUTPUT_COLOR_LINE	02000
      -#define OUTPUT_SHOW_AGE_WITH_COLOR	04000
     -+#define OUTPUT_ANNOTATE_COMPAT      (1<<0)
     -+#define OUTPUT_LONG_OBJECT_NAME     (1<<1)
     -+#define OUTPUT_RAW_TIMESTAMP        (1<<2)
     -+#define OUTPUT_PORCELAIN            (1<<3)
     -+#define OUTPUT_SHOW_NAME            (1<<4)
     -+#define OUTPUT_SHOW_NUMBER          (1<<5)
     -+#define OUTPUT_SHOW_SCORE           (1<<6)
     -+#define OUTPUT_NO_AUTHOR            (1<<7)
     -+#define OUTPUT_SHOW_EMAIL           (1<<8)
     -+#define OUTPUT_LINE_PORCELAIN       (1<<9)
     -+#define OUTPUT_COLOR_LINE           (1<<10)
     -+#define OUTPUT_SHOW_AGE_WITH_COLOR  (1<<11)
     ++#define OUTPUT_ANNOTATE_COMPAT      (1U<<0)
     ++#define OUTPUT_LONG_OBJECT_NAME     (1U<<1)
     ++#define OUTPUT_RAW_TIMESTAMP        (1U<<2)
     ++#define OUTPUT_PORCELAIN            (1U<<3)
     ++#define OUTPUT_SHOW_NAME            (1U<<4)
     ++#define OUTPUT_SHOW_NUMBER          (1U<<5)
     ++#define OUTPUT_SHOW_SCORE           (1U<<6)
     ++#define OUTPUT_NO_AUTHOR            (1U<<7)
     ++#define OUTPUT_SHOW_EMAIL           (1U<<8)
     ++#define OUTPUT_LINE_PORCELAIN       (1U<<9)
     ++#define OUTPUT_COLOR_LINE           (1U<<10)
     ++#define OUTPUT_SHOW_AGE_WITH_COLOR  (1U<<11)
       
       static void emit_porcelain_details(struct blame_origin *suspect, int repeat)
       {

-- 
gitgitgadget

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v2 1/1] builtin/blame.c: constants into bit shift format
  2019-10-17 17:46 ` [PATCH v2 " Hariom Verma via GitGitGadget
@ 2019-10-17 17:46   ` Hariom Verma via GitGitGadget
  0 siblings, 0 replies; 9+ messages in thread
From: Hariom Verma via GitGitGadget @ 2019-10-17 17:46 UTC (permalink / raw)
  To: git; +Cc: Hariom Verma, Junio C Hamano, Hariom Verma

From: Hariom Verma <hariom18599@gmail.com>

We are looking at bitfield constants, and elsewhere in the Git source
code, such cases are handled via bit shift operators rather than octal
numbers, which also makes it easier to spot holes in the range
(if, say, 1<<5 was missing, it is easier to spot it between 1<<4
and 1<<6 than it is to spot a missing 040 between a 020 and a 0100).

Signed-off-by: Hariom Verma <hariom18599@gmail.com>
---
 builtin/blame.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/builtin/blame.c b/builtin/blame.c
index e946ba6cd9..10185ccdc6 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -319,18 +319,18 @@ static const char *format_time(timestamp_t time, const char *tz_str,
 	return time_buf.buf;
 }
 
-#define OUTPUT_ANNOTATE_COMPAT	001
-#define OUTPUT_LONG_OBJECT_NAME	002
-#define OUTPUT_RAW_TIMESTAMP	004
-#define OUTPUT_PORCELAIN	010
-#define OUTPUT_SHOW_NAME	020
-#define OUTPUT_SHOW_NUMBER	040
-#define OUTPUT_SHOW_SCORE	0100
-#define OUTPUT_NO_AUTHOR	0200
-#define OUTPUT_SHOW_EMAIL	0400
-#define OUTPUT_LINE_PORCELAIN	01000
-#define OUTPUT_COLOR_LINE	02000
-#define OUTPUT_SHOW_AGE_WITH_COLOR	04000
+#define OUTPUT_ANNOTATE_COMPAT      (1U<<0)
+#define OUTPUT_LONG_OBJECT_NAME     (1U<<1)
+#define OUTPUT_RAW_TIMESTAMP        (1U<<2)
+#define OUTPUT_PORCELAIN            (1U<<3)
+#define OUTPUT_SHOW_NAME            (1U<<4)
+#define OUTPUT_SHOW_NUMBER          (1U<<5)
+#define OUTPUT_SHOW_SCORE           (1U<<6)
+#define OUTPUT_NO_AUTHOR            (1U<<7)
+#define OUTPUT_SHOW_EMAIL           (1U<<8)
+#define OUTPUT_LINE_PORCELAIN       (1U<<9)
+#define OUTPUT_COLOR_LINE           (1U<<10)
+#define OUTPUT_SHOW_AGE_WITH_COLOR  (1U<<11)
 
 static void emit_porcelain_details(struct blame_origin *suspect, int repeat)
 {
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2019-10-17 17:47 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-16 18:30 [PATCH 0/1] builtin/blame.c: bit field constants into bit shift format Hariom Verma via GitGitGadget
2019-10-16 18:30 ` [PATCH 1/1] builtin/blame.c: " Hariom Verma via GitGitGadget
2019-10-16 19:10   ` Pratyush Yadav
2019-10-16 19:37     ` Jonathan Tan
2019-10-16 19:44       ` Pratyush Yadav
2019-10-17  7:38   ` Junio C Hamano
2019-10-17  7:33 ` [PATCH 0/1] builtin/blame.c: bit field " Junio C Hamano
2019-10-17 17:46 ` [PATCH v2 " Hariom Verma via GitGitGadget
2019-10-17 17:46   ` [PATCH v2 1/1] builtin/blame.c: " Hariom Verma via GitGitGadget

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).