* [PATCH 2/2] optimize adjust_shared_perm() in path.c:
@ 2013-03-30 9:53 Torsten Bögershausen
2013-04-03 3:55 ` Eric Sunshine
0 siblings, 1 reply; 2+ messages in thread
From: Torsten Bögershausen @ 2013-03-30 9:53 UTC (permalink / raw)
To: gitster; +Cc: git, j6t, kusmabite, mlevedahl, ramsay, tboegi, sunshine
sometimes the chown() function is called even when not needed.
(This can be provoced by running t1301, and adding some debug code)
Save a chmod from 400 to 400, or from 600->600 on these files:
.git/info/refs+
.git/objects/info/packs+
Save chmod on directories from 2770 to 2770:
.git/refs
.git/refs/heads
.git/refs/tags
Signed-off-by: Torsten Bögershausen <tboegi@web.de>
---
path.c | 42 +++++++++++++++++++++++-------------------
1 file changed, 23 insertions(+), 19 deletions(-)
diff --git a/path.c b/path.c
index 427312e..33fa880 100644
--- a/path.c
+++ b/path.c
@@ -396,22 +396,14 @@ const char *enter_repo(const char *path, int strict)
return NULL;
}
-int adjust_shared_perm(const char *path)
+static int calc_shared_perm(int mode)
{
- int tweak, shared, orig_mode, mode;
+ int tweak;
- if (!shared_repository) {
- return 0;
- }
- if (get_st_mode_bits(path, &mode) < 0)
- return -1;
-
- orig_mode = mode;
if (shared_repository < 0)
- shared = -shared_repository;
+ tweak = -shared_repository;
else
- shared = shared_repository;
- tweak = shared;
+ tweak = shared_repository;
if (!(mode & S_IWUSR))
tweak &= ~0222;
@@ -423,16 +415,28 @@ int adjust_shared_perm(const char *path)
else
mode |= tweak;
- if (S_ISDIR(mode)) {
+ return mode;
+}
+
+
+int adjust_shared_perm(const char *path)
+{
+ int old_mode, new_mode;
+
+ if (!shared_repository)
+ return 0;
+ if (get_st_mode_bits(path, &old_mode) < 0)
+ return -1;
+
+ new_mode = calc_shared_perm(old_mode);
+ if (S_ISDIR(old_mode)) {
/* Copy read bits to execute bits */
- mode |= (shared & 0444) >> 2;
- mode |= FORCE_DIR_SET_GID;
+ new_mode |= (new_mode & 0444) >> 2;
+ new_mode |= FORCE_DIR_SET_GID;
}
- if (((shared_repository < 0
- ? (orig_mode & (FORCE_DIR_SET_GID | 0777))
- : (orig_mode & mode)) != mode) &&
- chmod(path, (mode & ~S_IFMT)) < 0)
+ if (((old_mode ^ new_mode) & ~S_IFMT) &&
+ chmod(path, (new_mode & ~S_IFMT)) < 0)
return -2;
return 0;
}
--
1.8.2.341.g543621f
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH 2/2] optimize adjust_shared_perm() in path.c:
2013-03-30 9:53 [PATCH 2/2] optimize adjust_shared_perm() in path.c: Torsten Bögershausen
@ 2013-04-03 3:55 ` Eric Sunshine
0 siblings, 0 replies; 2+ messages in thread
From: Eric Sunshine @ 2013-04-03 3:55 UTC (permalink / raw)
To: Torsten Bögershausen
Cc: Junio C Hamano, Git List, j6t, Erik Faye-Lund, mlevedahl, ramsay
On Sat, Mar 30, 2013 at 5:53 AM, Torsten Bögershausen <tboegi@web.de> wrote:
> sometimes the chown() function is called even when not needed.
> (This can be provoced by running t1301, and adding some debug code)
s/provoced/provoked/
> Save a chmod from 400 to 400, or from 600->600 on these files:
> .git/info/refs+
> .git/objects/info/packs+
>
> Save chmod on directories from 2770 to 2770:
> .git/refs
> .git/refs/heads
> .git/refs/tags
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-04-03 3:55 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-30 9:53 [PATCH 2/2] optimize adjust_shared_perm() in path.c: Torsten Bögershausen
2013-04-03 3:55 ` 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).