summaryrefslogtreecommitdiff
path: root/update-index.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-10-15 04:56:46 (GMT)
committerJunio C Hamano <junkio@cox.net>2005-10-18 00:41:55 (GMT)
commitcaf4f582b2bb4d5582540aa49d29749b2600cd03 (patch)
tree563d5d779fd36156ce5543f22f046907d5b78c9b /update-index.c
parent22ddf7197958337a8c254122eae4efcd8a54098a (diff)
downloadgit-caf4f582b2bb4d5582540aa49d29749b2600cd03.zip
git-caf4f582b2bb4d5582540aa49d29749b2600cd03.tar.gz
git-caf4f582b2bb4d5582540aa49d29749b2600cd03.tar.bz2
Improve "git add" again.
This makes it possible to add paths that have funny characters (TAB and LF) in them, and makes adding many paths more efficient in general. New flag "--stdin" to update-index was initially added for different purpose, but it turns out to be a perfect match for feeding "ls-files --others -z" output to improve "git add". It also adds "--verbose" flag to update-index for use with "git add" command. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'update-index.c')
-rw-r--r--update-index.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/update-index.c b/update-index.c
index 1eeb45d..ef82b86 100644
--- a/update-index.c
+++ b/update-index.c
@@ -13,8 +13,15 @@
* like "git-update-index *" and suddenly having all the object
* files be revision controlled.
*/
-static int allow_add = 0, allow_remove = 0, allow_replace = 0, allow_unmerged = 0, not_new = 0, quiet = 0, info_only = 0;
+static int allow_add;
+static int allow_remove;
+static int allow_replace;
+static int allow_unmerged; /* --refresh needing merge is not error */
+static int not_new; /* --refresh not having working tree files is not error */
+static int quiet; /* --refresh needing update is not error */
+static int info_only;
static int force_remove;
+static int verbose;
/* Three functions to allow overloaded pointer return; see linux/err.h */
static inline void *ERR_PTR(long error)
@@ -32,6 +39,19 @@ static inline long IS_ERR(const void *ptr)
return (unsigned long)ptr > (unsigned long)-1000L;
}
+static void report(const char *fmt, ...)
+{
+ va_list vp;
+
+ if (!verbose)
+ return;
+
+ va_start(vp, fmt);
+ vprintf(fmt, vp);
+ putchar('\n');
+ va_end(vp);
+}
+
static int add_file_to_cache(const char *path)
{
int size, namelen, option, status;
@@ -260,7 +280,11 @@ static int add_cacheinfo(const char *arg1, const char *arg2, const char *arg3)
ce->ce_mode = create_ce_mode(mode);
option = allow_add ? ADD_CACHE_OK_TO_ADD : 0;
option |= allow_replace ? ADD_CACHE_OK_TO_REPLACE : 0;
- return add_cache_entry(ce, option);
+ if (add_cache_entry(ce, option))
+ return error("%s: cannot add to the index - missing --add option?",
+ arg3);
+ report("add '%s'", arg3);
+ return 0;
}
static int chmod_path(int flip, const char *path)
@@ -300,10 +324,12 @@ static void update_one(const char *path, const char *prefix, int prefix_length)
if (force_remove) {
if (remove_file_from_cache(p))
die("git-update-index: unable to remove %s", path);
+ report("remove '%s'", path);
return;
}
if (add_file_to_cache(p))
die("Unable to process file %s", path);
+ report("add '%s'", path);
}
static void read_index_info(int line_termination)
@@ -447,6 +473,10 @@ int main(int argc, const char **argv)
not_new = 1;
continue;
}
+ if (!strcmp(path, "--verbose")) {
+ verbose = 1;
+ continue;
+ }
die("unknown option %s", path);
}
update_one(path, prefix, prefix_length);