summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 22ddf71)
raw | patch | inline | side by side (parent: 22ddf71)
author | Junio C Hamano <junkio@cox.net> | |
Sat, 15 Oct 2005 04:56:46 +0000 (21:56 -0700) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Tue, 18 Oct 2005 00:41:55 +0000 (17:41 -0700) |
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>
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>
git-add.sh | patch | blob | history | |
update-index.c | patch | blob | history |
diff --git a/git-add.sh b/git-add.sh
index 3d364db2517b6a19de6b8e26f6d61a86589c1fcc..a8498c729ab3188bd21dd6a54ddc77d4c34ac48a 100755 (executable)
--- a/git-add.sh
+++ b/git-add.sh
case "$1" in
-n)
show_only=true
- verbose=true
;;
-v)
- verbose=true
+ verbose=--verbose
;;
*)
break
done
GIT_DIR=$(git-rev-parse --git-dir) || exit
-global_exclude=
-if [ -f "$GIT_DIR/info/exclude" ]; then
- global_exclude="--exclude-from=$GIT_DIR/info/exclude"
-fi
-for i in $(git-ls-files --others \
- $global_exclude --exclude-per-directory=.gitignore \
- "$@")
-do
- [ "$verbose" ] && echo " $i"
- [ "$show_only" ] || git-update-index --add -- "$i" || exit
-done
+
+if test -f "$GIT_DIR/info/exclude"
+then
+ git-ls-files -z \
+ --exclude-from="$GIT_DIR/info/exclude" \
+ --others --exclude-per-directory=.gitignore "$@"
+else
+ git-ls-files -z \
+ --others --exclude-per-directory=.gitignore "$@"
+fi |
+case "$show_only" in
+true)
+ xargs -0 echo ;;
+*)
+ git-update-index --add $verbose -z --stdin ;;
+esac
diff --git a/update-index.c b/update-index.c
index 1eeb45dbb18a7a9fb081a6ce1b4d9558f2ff7b21..ef82b8620cdb0e8ae41a27c1f85411998e7266eb 100644 (file)
--- a/update-index.c
+++ b/update-index.c
* 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)
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;
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)
not_new = 1;
continue;
}
+ if (!strcmp(path, "--verbose")) {
+ verbose = 1;
+ continue;
+ }
die("unknown option %s", path);
}
update_one(path, prefix, prefix_length);