summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-04-24 09:08:35 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-04-24 09:08:35 (GMT)
commitbe02b3c53ea8307fdfdb074562ad0b5963761718 (patch)
treef9af123cdd8964f87d7ca42fd28591ffddd46909
parentc6df547a415e4e34165df3d4af40f3eb2cb1cf4f (diff)
parent227bdb186f06fa65afb1a0e091b2b191132c29ba (diff)
downloadgit-be02b3c53ea8307fdfdb074562ad0b5963761718.zip
git-be02b3c53ea8307fdfdb074562ad0b5963761718.tar.gz
git-be02b3c53ea8307fdfdb074562ad0b5963761718.tar.bz2
Merge branch 'ar/chmod-series'
* ar/chmod-series: make update-index --chmod work with multiple files and --stdin
-rw-r--r--update-index.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/update-index.c b/update-index.c
index 64f4c49..facec8d 100644
--- a/update-index.c
+++ b/update-index.c
@@ -329,7 +329,7 @@ static int add_cacheinfo(unsigned int mode, const unsigned char *sha1,
return 0;
}
-static int chmod_path(int flip, const char *path)
+static void chmod_path(int flip, const char *path)
{
int pos;
struct cache_entry *ce;
@@ -337,21 +337,24 @@ static int chmod_path(int flip, const char *path)
pos = cache_name_pos(path, strlen(path));
if (pos < 0)
- return -1;
+ goto fail;
ce = active_cache[pos];
mode = ntohl(ce->ce_mode);
if (!S_ISREG(mode))
- return -1;
+ goto fail;
switch (flip) {
case '+':
ce->ce_mode |= htonl(0111); break;
case '-':
ce->ce_mode &= htonl(~0111); break;
default:
- return -1;
+ goto fail;
}
active_cache_changed = 1;
- return 0;
+ report("chmod %cx '%s'", flip, path);
+ return;
+ fail:
+ die("git-update-index: cannot chmod %cx '%s'", flip, path);
}
static struct cache_file cache_file;
@@ -597,6 +600,7 @@ int main(int argc, const char **argv)
int read_from_stdin = 0;
const char *prefix = setup_git_directory();
int prefix_length = prefix ? strlen(prefix) : 0;
+ char set_executable_bit = 0;
git_config(git_default_config);
@@ -663,8 +667,7 @@ int main(int argc, const char **argv)
!strcmp(path, "--chmod=+x")) {
if (argc <= i+1)
die("git-update-index: %s <path>", path);
- if (chmod_path(path[8], argv[++i]))
- die("git-update-index: %s cannot chmod %s", path, argv[i]);
+ set_executable_bit = path[8];
continue;
}
if (!strcmp(path, "--assume-unchanged")) {
@@ -719,6 +722,8 @@ int main(int argc, const char **argv)
die("unknown option %s", path);
}
update_one(path, prefix, prefix_length);
+ if (set_executable_bit)
+ chmod_path(set_executable_bit, path);
}
if (read_from_stdin) {
struct strbuf buf;
@@ -733,6 +738,10 @@ int main(int argc, const char **argv)
else
path_name = buf.buf;
update_one(path_name, prefix, prefix_length);
+ if (set_executable_bit) {
+ const char *p = prefix_path(prefix, prefix_length, path_name);
+ chmod_path(set_executable_bit, p);
+ }
if (path_name != buf.buf)
free(path_name);
}