{"thread":{"id":"25331","subject":"[PATCH] diff: \"S_IFREG | 0644\" to \"(S_IFREG | 0644)\" to avoid warning","startedAt":"2010-10-04T09:21:11Z","lastAt":"2010-10-04T21:11:45Z","messageCount":13,"participants":["Ævar Arnfjörð Bjarmason","Jonathan Nieder","René Scharfe","Matthieu Moy","Junio C Hamano","yj2133011"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"152496","messageId":"1286184071-28457-1-git-send-email-avarab@gmail.com","threadId":"25331","inReplyTo":null,"subject":"[PATCH] diff: \"S_IFREG | 0644\" to \"(S_IFREG | 0644)\" to avoid warning","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2010-10-04T09:21:11Z","receivedAt":"2010-10-04T09:21:11Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"Wrap \"S_IFREG | 0644\" in parentheses to avoid a \"suggest parentheses\naround arithmetic in operand of |\" warning from GCC 4.1.3 on NetBSD\n5.0.2.\n\nI spotted and fixed this independently on NetBSD, but later found that\nthere was a NetBSD Problem Report that included this fix.\n\nNetBSD-PR: http://www.netbsd.org/cgi-bin/query-pr-single.pl?number=42168\nReported-by: Dan McMahill <dmcmahill@NetBSD.org>\nSigned-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>\n---\n builtin/diff.c |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\ndiff --git a/builtin/diff.c b/builtin/diff.c\nindex a43d326..e8b7e09 100644\n--- a/builtin/diff.c\n+++ b/builtin/diff.c\n@@ -93,7 +93,7 @@ static int builtin_diff_blobs(struct rev_info *revs,\n \t\t\t      int argc, const char **argv,\n \t\t\t      struct blobinfo *blob)\n {\n-\tunsigned mode = canon_mode(S_IFREG | 0644);\n+\tunsigned mode = canon_mode((S_IFREG | 0644));\n \n \tif (argc > 1)\n \t\tusage(builtin_diff_usage);\n-- \n1.7.3.159.g610493\n"},{"id":"152501","messageId":"20101004093519.GN24884@burratino","threadId":"25331","inReplyTo":"1286184071-28457-1-git-send-email-avarab@gmail.com","subject":"Re: [PATCH] diff: \"S_IFREG | 0644\" to \"(S_IFREG | 0644)\" to avoid warning","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2010-10-04T09:35:19Z","receivedAt":"2010-10-04T09:35:19Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Ævar Arnfjörð Bjarmason wrote:\n\n> -\tunsigned mode = canon_mode(S_IFREG | 0644);\n> +\tunsigned mode = canon_mode((S_IFREG | 0644));\n\nJust curious:\n\n#define canon_mode(mode) \\\n        (S_ISREG(mode) ? (S_IFREG | ce_permissions(mode)) : \\\n        S_ISLNK(mode) ? S_IFLNK : S_ISDIR(mode) ? S_IFDIR : S_IFGITLINK)\n\n#define ce_permissions(mode) (((mode) & 0100) ? 0755 : 0644)\n\nSince S_ISREG et al are macros, typically they would put their\nargument in parentheses in the definition.  How are they defined\nin NetBSD sys/stat.h?  What is canon_mode(S_IFREG | 0644) being\nmisinterpreted to mean?\n"},{"id":"152502","messageId":"AANLkTim+QH6=XJikOsZs=qt9ZFHjP7gWz0zo9n4vz+gk@mail.gmail.com","threadId":"25331","inReplyTo":"1286184071-28457-1-git-send-email-avarab@gmail.com","subject":"Re: [PATCH] diff: \"S_IFREG | 0644\" to \"(S_IFREG | 0644)\" to avoid warning","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2010-10-04T09:42:13Z","receivedAt":"2010-10-04T09:42:13Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Mon, Oct 4, 2010 at 09:21, Ævar Arnfjörð Bjarmason <avarab@gmail.com> wrote:\n> Wrap \"S_IFREG | 0644\" in parentheses to avoid a \"suggest parentheses\n> around arithmetic in operand of |\" warning from GCC 4.1.3 on NetBSD\n> 5.0.2.\n>\n> I spotted and fixed this independently on NetBSD, but later found that\n> there was a NetBSD Problem Report that included this fix.\n\nWith this and Jonathan's xdiff patch git compiles without warnings on\nNetBSD, aside from this:\n\n    imap-send.c: In function 'ssl_socket_connect':\n    imap-send.c:310: warning: assignment discards qualifiers from\npointer target type\n    imap-send.c:312: warning: assignment discards qualifiers from\npointer target type\n\nI don't see a sane way around that[1], since it appears the NetBSD\npeople have patched openssl's function definitions without bumping the\nOpenSSL version number. Either that or OpenSSL itself changed from\nconst char* to char* to const char* again, I didn't investigate that.\n\nBut tests on NetBSD with /bin/sh still fail since we use cd -P, but we\nhave unapplied patches for that so I didn't pursue it:\n\n    http://article.gmane.org/gmane.comp.version-control.git/136561/match=\n    http://article.gmane.org/gmane.comp.version-control.git/136562/match=\n\n1. We could check for __NetBSD__ and the NetBSD version, but it's not\n   worthwhile for a single warning.\n"},{"id":"152503","messageId":"AANLkTimBzC7f7teH8Rriykg7o5kwX6mD2g2q-0yOXSiF@mail.gmail.com","threadId":"25331","inReplyTo":"20101004093519.GN24884@burratino","subject":"Re: [PATCH] diff: \"S_IFREG | 0644\" to \"(S_IFREG | 0644)\" to avoid warning","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2010-10-04T09:47:43Z","receivedAt":"2010-10-04T09:47:43Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"On Mon, Oct 4, 2010 at 09:35, Jonathan Nieder <jrnieder@gmail.com> wrote:\n> Ævar Arnfjörð Bjarmason wrote:\n>\n>> -     unsigned mode = canon_mode(S_IFREG | 0644);\n>> +     unsigned mode = canon_mode((S_IFREG | 0644));\n>\n> Just curious:\n>\n> #define canon_mode(mode) \\\n>        (S_ISREG(mode) ? (S_IFREG | ce_permissions(mode)) : \\\n>        S_ISLNK(mode) ? S_IFLNK : S_ISDIR(mode) ? S_IFDIR : S_IFGITLINK)\n>\n> #define ce_permissions(mode) (((mode) & 0100) ? 0755 : 0644)\n>\n> Since S_ISREG et al are macros, typically they would put their\n> argument in parentheses in the definition.  How are they defined\n> in NetBSD sys/stat.h?  What is canon_mode(S_IFREG | 0644) being\n> misinterpreted to mean?\n\nOh it's a bug in NetBSD, sorry for not being explicit about that:\n\n    $ grep S_ISREG /usr/include/sys/stat.h\n    #define S_ISREG(m)      ((m & _S_IFMT) == _S_IFREG)     /* regular file */\n\n    $ grep S_ISREG /usr/include/linux/stat.h\n    #define S_ISREG(m)      (((m) & S_IFMT) == S_IFREG)\n\nI.e. GCC sees `S_IFREG | 0644 & _S_IFMT' on NetBSD but `(S_IFREG |\n0644) & _S_IFMT' on Linux.\n\nSince bitwise AND (&) has precedence over bitwise OR it's probably a\nlogic error on NetBSD too, not just an annoying warning.\n"},{"id":"152506","messageId":"20101004103550.GA4738@burratino","threadId":"25331","inReplyTo":"AANLkTim+QH6=XJikOsZs=qt9ZFHjP7gWz0zo9n4vz+gk@mail.gmail.com","subject":"Re: [PATCH] diff: \"S_IFREG | 0644\" to \"(S_IFREG | 0644)\" to avoid warning","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2010-10-04T10:35:50Z","receivedAt":"2010-10-04T10:35:50Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Ævar Arnfjörð Bjarmason wrote:\n\n> But tests on NetBSD with /bin/sh still fail since we use cd -P, but we\n> have unapplied patches for that so I didn't pursue it:\n> \n>     http://article.gmane.org/gmane.comp.version-control.git/136561/match=\n>     http://article.gmane.org/gmane.comp.version-control.git/136562/match=\n\nAren't these v1.7.0-rc0~76^2 and v1.7.0-rc0~76^2^?\n\nHere's a patch for the more important of the remaining problems.  I'm\njust guessing here; untested, of course.\n\n-- 8< --\nSubject: tests: use pwd -P to simulate cd -P for portability\n\nNetBSD supports pwd -P but not cd -P.  POSIX has required both for\na while, so this should not be an issue for most Unix-like platforms.\n\nThe test harness uses cd -P to ensure $PWD and $(pwd) agree;\ncd $(pwd -P) should do that, too.\n\nIf pwd -P fails on some platform, with this patch, the test harness\nwill die with 'FATAL: Unexpected exit with code 1'.\n\nSigned-off-by: Jonathan Nieder <jrnieder@gmail.com>\n---\n t/test-lib.sh |    7 ++++---\n 1 files changed, 4 insertions(+), 3 deletions(-)\n\ndiff --git a/t/test-lib.sh b/t/test-lib.sh\nindex 830e5e7..184bf84 100644\n--- a/t/test-lib.sh\n+++ b/t/test-lib.sh\n@@ -916,9 +916,10 @@ rm -fr \"$test\" || {\n }\n \n test_create_repo \"$test\"\n-# Use -P to resolve symlinks in our working directory so that the cwd\n-# in subprocesses like git equals our $PWD (for pathname comparisons).\n-cd -P \"$test\" || exit 1\n+cd \"$test\" || exit 1\n+# Resolve symlinks in our working directory so that the cwd in\n+# subprocesses like git equals our $PWD (for pathname comparisons).\n+dir=$(pwd -P) && cd \"$dir\" || exit 1\n \n HOME=$(pwd)\n export HOME\n-- \n1.7.2.3\n"},{"id":"152508","messageId":"20101004105008.GB4738@burratino","threadId":"25331","inReplyTo":"20101004103550.GA4738@burratino","subject":"Re: [PATCH] diff: \"S_IFREG | 0644\" to \"(S_IFREG | 0644)\" to avoid warning","fromName":"Jonathan Nieder","fromEmail":"jrnieder@gmail.com","sentAt":"2010-10-04T10:50:08Z","receivedAt":"2010-10-04T10:50:08Z","isPatch":true,"sender":{"key":"jrnieder@gmail.com","avatar":"https://avatars.githubusercontent.com/u/281595?v=4"},"body":"Jonathan Nieder wrote:\n\n> The test harness uses cd -P to ensure $PWD and $(pwd) agree;\n\nAs Ævar noticed, this sentence as it stands doesn't make much sense.\nThe idea is rather to make $(pwd -L) and $(pwd -P) agree --- the\nformer is accessible through $PWD, the latter through getwd() and\n/bin/pwd.\n"},{"id":"152507","messageId":"4CA9B217.6050600@lsrfire.ath.cx","threadId":"25331","inReplyTo":"1286184071-28457-1-git-send-email-avarab@gmail.com","subject":"Re: [PATCH] diff: \"S_IFREG | 0644\" to \"(S_IFREG | 0644)\" to avoid warning","fromName":"René Scharfe","fromEmail":"rene.scharfe@lsrfire.ath.cx","sentAt":"2010-10-04T10:53:11Z","receivedAt":"2010-10-04T10:53:11Z","isPatch":true,"sender":{"key":"l.s.r@web.de","avatar":"https://avatars.githubusercontent.com/u/26122331?v=4"},"body":"Am 04.10.2010 11:21, schrieb Ævar Arnfjörð Bjarmason:\n> -\tunsigned mode = canon_mode(S_IFREG | 0644);\n> +\tunsigned mode = canon_mode((S_IFREG | 0644));\n\nThat doesn't look pretty.\n\nHow about something like the following instead?  It untangles the\n?-:-chain in canon_mode and allows passing of an argument with side\neffects.  All the S_ISxxx macros get a single variable as parameter.\nDoes it fix the issue on NetBSD?\n---\n cache.h |   13 ++++++++++---\n 1 files changed, 10 insertions(+), 3 deletions(-)\n\ndiff --git a/cache.h b/cache.h\nindex 2ef2fa3..3d5ed51 100644\n--- a/cache.h\n+++ b/cache.h\n@@ -277,9 +277,16 @@ static inline int ce_to_dtype(const struct cache_entry *ce)\n \telse\n \t\treturn DT_UNKNOWN;\n }\n-#define canon_mode(mode) \\\n-\t(S_ISREG(mode) ? (S_IFREG | ce_permissions(mode)) : \\\n-\tS_ISLNK(mode) ? S_IFLNK : S_ISDIR(mode) ? S_IFDIR : S_IFGITLINK)\n+static inline unsigned int canon_mode(unsigned int mode)\n+{\n+\tif (S_ISREG(mode))\n+\t\treturn S_IFREG | ce_permissions(mode);\n+\tif (S_ISLNK(mode))\n+\t\treturn S_IFLNK;\n+\tif (S_ISDIR(mode))\n+\t\treturn S_IFDIR;\n+\treturn S_IFGITLINK;\n+}\n \n #define flexible_size(STRUCT,len) ((offsetof(struct STRUCT,name) + (len) + 8) & ~7)\n #define cache_entry_size(len) flexible_size(cache_entry,len)\n-- \n1.7.3\n"},{"id":"152517","messageId":"vpqsk0mp4fc.fsf@bauges.imag.fr","threadId":"25331","inReplyTo":"4CA9B217.6050600@lsrfire.ath.cx","subject":"Re: [PATCH] diff: \"S_IFREG | 0644\" to \"(S_IFREG | 0644)\" to avoid warning","fromName":"Matthieu Moy","fromEmail":"matthieu.moy@grenoble-inp.fr","sentAt":"2010-10-04T11:45:27Z","receivedAt":"2010-10-04T11:45:27Z","isPatch":true,"sender":{"key":"matthieu.moy@grenoble-inp.fr","avatar":"https://gravatar.com/avatar/72c8a2705971a25dfaff23cece15130d405685845d911aedd5667ace277f3fc5?d=mp&s=160"},"body":"René Scharfe <rene.scharfe@lsrfire.ath.cx> writes:\n\n> How about something like the following instead?\n\n> diff --git a/cache.h b/cache.h\n> index 2ef2fa3..3d5ed51 100644\n> --- a/cache.h\n> +++ b/cache.h\n> @@ -277,9 +277,16 @@ static inline int ce_to_dtype(const struct cache_entry *ce)\n>  \telse\n>  \t\treturn DT_UNKNOWN;\n>  }\n> -#define canon_mode(mode) \\\n> -\t(S_ISREG(mode) ? (S_IFREG | ce_permissions(mode)) : \\\n> -\tS_ISLNK(mode) ? S_IFLNK : S_ISDIR(mode) ? S_IFDIR : S_IFGITLINK)\n> +static inline unsigned int canon_mode(unsigned int mode)\n> +{\n> +\tif (S_ISREG(mode))\n> +\t\treturn S_IFREG | ce_permissions(mode);\n> +\tif (S_ISLNK(mode))\n> +\t\treturn S_IFLNK;\n> +\tif (S_ISDIR(mode))\n> +\t\treturn S_IFDIR;\n> +\treturn S_IFGITLINK;\n> +}\n\nThat sounds much better to me. I don't know whether it fixes the issue\non NetBSD though.\n\n-- \nMatthieu Moy\nhttp://www-verimag.imag.fr/~moy/\n"},{"id":"299181","messageId":"1286195322208-5598910.post@n2.nabble.com","threadId":"25331","inReplyTo":"1286184071-28457-1-git-send-email-avarab@gmail.com","subject":"Re: [PATCH] diff: \"S_IFREG | 0644\" to \"(S_IFREG | 0644)\" to avoid warning","fromName":"yj2133011","fromEmail":"274040551@qq.com","sentAt":"2010-10-04T12:28:42Z","receivedAt":"2010-10-04T12:28:42Z","isPatch":true,"sender":{"key":"274040551@qq.com","avatar":null},"body":"\nWrite good cheer, host.\n\n\n--------------------------------------------------------\nThis \nhttp://www.tomtop.com/black-remote-controller-charger2x-2800mah-battery-packs-for-wii_p11124.html?aid=z\nWii Charger  looks good n stylish. It lights up all blue which made me think\nthis is good. Get a \nhttp://www.tomtop.com/mini-bluetooth-keyboard-for-ps3-mac-os-android-pc-pda.html?aid=z\nWireless Keyboard  and mouse combo for your computer workstation and reduce\ndesktop clutter.\n\n-----\nThe voice input and output is very good in this \nhttp://www.tomtop.com/black-ps3-wireless-bluetooth-headset-for-playstation-3.html?aid=z\nWireless PS3 Headset . It is compatible with all PS3 games.Buy from Reliable \nhttp://www.tomtop.com/google-android-7-notebook-3g-tablet-pc-umpc-wifi-mid-pda.html?aid=z\nGoogle Android PC  apad Wholesalers.\n-- \nView this message in context: http://git.661346.n2.nabble.com/PATCH-diff-S-IFREG-0644-to-S-IFREG-0644-to-avoid-warning-tp5598387p5598910.html\nSent from the git mailing list archive at Nabble.com.\n"},{"id":"152553","messageId":"7v8w2d972o.fsf@alter.siamese.dyndns.org","threadId":"25331","inReplyTo":"AANLkTimBzC7f7teH8Rriykg7o5kwX6mD2g2q-0yOXSiF@mail.gmail.com","subject":"Re: [PATCH] diff: \"S_IFREG | 0644\" to \"(S_IFREG | 0644)\" to avoid warning","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-10-04T17:54:55Z","receivedAt":"2010-10-04T17:54:55Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:\n\n> Oh it's a bug in NetBSD, sorry for not being explicit about that:\n>\n>     $ grep S_ISREG /usr/include/sys/stat.h\n>     #define S_ISREG(m)      ((m & _S_IFMT) == _S_IFREG)     /* regular file */\n>\n>     $ grep S_ISREG /usr/include/linux/stat.h\n>     #define S_ISREG(m)      (((m) & S_IFMT) == S_IFREG)\n>\n> I.e. GCC sees `S_IFREG | 0644 & _S_IFMT' on NetBSD but `(S_IFREG |\n> 0644) & _S_IFMT' on Linux.\n>\n> Since bitwise AND (&) has precedence over bitwise OR it's probably a\n> logic error on NetBSD too, not just an annoying warning.\n\nIn that case, I'd prefer to work this around at the definition of\ncanon_mode(), like\n\n    /*\n     * extra ()-pair around S_ISREG() and friends to work around platform\n     * header with buggy definitions like\n     * #define S_ISREG(x) ((x & _S_IFMT) == _S_IFREG)\n     */\n    #define canon_mode(mode) \\\n    \t(S_ISREG((mode)) ? (S_IFREG | ce_permissions(mode)) : \\\n        ...\n\ninstead of contaminating the calling sites.  Otherwise new calling sites\nwe will add in the future need to be aware of the same bug for no good\nreason.\n"},{"id":"152560","messageId":"1286215813-21224-1-git-send-email-avarab@gmail.com","threadId":"25331","inReplyTo":"7v8w2d972o.fsf@alter.siamese.dyndns.org","subject":"[PATCH v2] cache.h: work around broken NetBSD system headers","fromName":"Ævar Arnfjörð Bjarmason","fromEmail":"avarab@gmail.com","sentAt":"2010-10-04T18:10:13Z","receivedAt":"2010-10-04T18:10:13Z","isPatch":true,"sender":{"key":"avarab@gmail.com","avatar":"https://avatars.githubusercontent.com/u/45301?v=4"},"body":"Wrap the `mode' argument to the `canon_mode' macro in extra\nparentheses to avoid a bug with the S_* macros in sys/stat.h on\nNetBSD.\n\nThis issue was originally spotted in NetBSD Problem Report #42168 and\nworked around by der Mouse, but later filed as a bug with NetBSD\nitself in NetBSD Problem Report #43937 by me.\n\nThe issue is that NetBSD doesn't take care to wrap its macro arguments\nin parentheses, so on Linux and other sane systems we have S_ISREG(m)\ndefined as something like:\n\n    (((m) & S_IFMT) == S_IFREG)\n\nBut on NetBSD:\n\n    ((m & _S_IFMT) == _S_IFREG)\n\nSince a caller in builtin/diff.c called our macro as `S_IFREG | 0644'\nthis bug introduced a logic error on NetBSD, since the precedence of\nbit-wise & is higher than | in C.\n\nNetBSD-PR: http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=43937\nOriginally-reported-by: der Mouse <mouse@Rodents-Montreal.ORG>\nSigned-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>\n---\n\nOn Mon, Oct 4, 2010 at 17:54, Junio C Hamano <gitster@pobox.com> wrote:\n> instead of contaminating the calling sites.  Otherwise new calling sites\n> we will add in the future need to be aware of the same bug for no good\n> reason.\n\nAgreed. Here's a v2 that does that. With an updated commit message to\nmention the bug I filed with NetBSD.\n\n cache.h |   10 ++++++++--\n 1 files changed, 8 insertions(+), 2 deletions(-)\n\ndiff --git a/cache.h b/cache.h\nindex 2ef2fa3..891d5d0 100644\n--- a/cache.h\n+++ b/cache.h\n@@ -277,9 +277,15 @@ static inline int ce_to_dtype(const struct cache_entry *ce)\n \telse\n \t\treturn DT_UNKNOWN;\n }\n+\n+/*\n+ * We use extra parentheses around mode to work around a NetBSD issue\n+ * described in NetBSD Problem Report #43937. See\n+ * http://www.netbsd.org/cgi-bin/query-pr-single.pl?number=43937\n+ */\n #define canon_mode(mode) \\\n-\t(S_ISREG(mode) ? (S_IFREG | ce_permissions(mode)) : \\\n-\tS_ISLNK(mode) ? S_IFLNK : S_ISDIR(mode) ? S_IFDIR : S_IFGITLINK)\n+\t(S_ISREG((mode)) ? (S_IFREG | ce_permissions(mode)) : \\\n+\tS_ISLNK((mode)) ? S_IFLNK : S_ISDIR((mode)) ? S_IFDIR : S_IFGITLINK)\n \n #define flexible_size(STRUCT,len) ((offsetof(struct STRUCT,name) + (len) + 8) & ~7)\n #define cache_entry_size(len) flexible_size(cache_entry,len)\n-- \n1.7.3.159.g610493\n"},{"id":"152580","messageId":"7v4od192zo.fsf@alter.siamese.dyndns.org","threadId":"25331","inReplyTo":"4CA9B217.6050600@lsrfire.ath.cx","subject":"Re: [PATCH] diff: \"S_IFREG | 0644\" to \"(S_IFREG | 0644)\" to avoid warning","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2010-10-04T19:23:07Z","receivedAt":"2010-10-04T19:23:07Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Looks much saner; thanks.  I think we can steal the log message from Ævar\nv2 to explain what this change is about.\n"},{"id":"152600","messageId":"4CAA4311.1070408@lsrfire.ath.cx","threadId":"25331","inReplyTo":"7v4od192zo.fsf@alter.siamese.dyndns.org","subject":"Re: [PATCH] diff: \"S_IFREG | 0644\" to \"(S_IFREG | 0644)\" to avoid warning","fromName":"René Scharfe","fromEmail":"rene.scharfe@lsrfire.ath.cx","sentAt":"2010-10-04T21:11:45Z","receivedAt":"2010-10-04T21:11:45Z","isPatch":true,"sender":{"key":"l.s.r@web.de","avatar":"https://avatars.githubusercontent.com/u/26122331?v=4"},"body":"Am 04.10.2010 21:23, schrieb Junio C Hamano:\n> Looks much saner; thanks.  I think we can steal the log message from Ævar\n> v2 to explain what this change is about.\n\nGood idea. :)\n\nI forgot this:\n\nSigned-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>\n"}]}