Skip to content

Commit

Permalink
path.c: optimize adjust_shared_perm()
Browse files Browse the repository at this point in the history
Sometimes the chown() function is called even when not needed (This
can be provoked by running t1301, and adding some debug code).

Save a chmod from 400 to 400, or from 600 to 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 <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
tboegi authored and gitster committed Apr 5, 2013
1 parent 3a429d3 commit cbe43b8
Showing 1 changed file with 23 additions and 19 deletions.
42 changes: 23 additions & 19 deletions path.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}
Expand Down

0 comments on commit cbe43b8

Please sign in to comment.