[PATCH] 3/7 Add --info-only option to git-update-cache.
From: Bryan Larsen <hidden>
Date: 2016-06-15 22:42:01
Subsystem:
the rest · Maintainer:
Linus Torvalds
Add --info-only option to git-update-cache. Signed-off-by: Bryan Larsen <redacted> --- Documentation/git-update-cache.txt | 23 +++++++++++++++++++---- update-cache.c | 14 +++++++++++--- 2 files changed, 30 insertions(+), 7 deletions(-)
diff --git a/Documentation/git-update-cache.txt b/Documentation/git-update-cache.txt
--- a/Documentation/git-update-cache.txt
+++ b/Documentation/git-update-cache.txt@@ -14,6 +14,7 @@ SYNOPSIS [--ignore-missing] [--force-remove] [--cacheinfo <mode> <object> <file>]\* + [--info-only] [--] [<file>]\* DESCRIPTION
@@ -47,6 +48,9 @@ OPTIONS --cacheinfo <mode> <object> <path>:: Directly insert the specified info into the cache. +--info-only:: + All <file> arguments behave like --cacheinfo. + --force-remove:: Remove the file from the index even when the working directory still has such a file. (Implies --remove.)
@@ -80,15 +84,26 @@ the stat entry is out of date. For example, you'd want to do this after doing a "git-read-tree", to link up the stat cache details with the proper files. -Using --cacheinfo ------------------ -'--cacheinfo' is used to register a file that is not in the current -working directory. This is useful for minimum-checkout merging. +Using --cacheinfo or --info-only +-------------------------------- +'--cacheinfo' is used to register a file that is not in the current
working
+directory. This is useful for minimum-checkout merging.
To pretend you have a file with mode and sha1 at path, say:
$ git-update-cache --cacheinfo mode sha1 path
+
+'--info-only' is used to register a file without placing it in the object
+database. This is useful for status-only repositories.
+
+Both '--cacheinfo' and '--info-only' behave similarly: the index is updated
+but the object database isn't. '--cacheinfo' is useful when the object is
+in the database but the file isn't available locally. '--info-only' is
+useful when the file is available, but you do not wish to update the
object
+database.
+Examples
+--------
To update and refresh only the files already checked out:
git-checkout-cache -n -f -a && git-update-cache --ignore-missing
--refreshdiff --git a/update-cache.c b/update-cache.c
--- a/update-cache.c
+++ b/update-cache.c@@ -12,7 +12,7 @@ * like "git-update-cache *" and suddenly having all the object * files be revision controlled. */ -static int allow_add = 0, allow_remove = 0, allow_replace = 0, not_new
= 0, quiet = 0; +static int allow_add = 0, allow_remove = 0, allow_replace = 0, not_new = 0, quiet = 0, info_only = 0; static int force_remove; /* Three functions to allow overloaded pointer return; see linux/err.h */
@@ -68,7 +68,7 @@ static int add_file_to_cache(char *path) fd = open(path, O_RDONLY); if (fd < 0) return -1; - if (index_fd(ce->sha1, fd, &st, 0) < 0) + if (index_fd(ce->sha1, fd, &st, info_only) < 0) return -1; break; case S_IFLNK:
@@ -77,7 +77,11 @@ static int add_file_to_cache(char *path) free(target); return -1; } - if (write_sha1_file(target, st.st_size, "blob", ce->sha1)) + if (info_only) { + unsigned char hdr[50]; + int hdrlen; + write_sha1_file_prepare(target, st.st_size, "blob", ce->sha1, hdr,
&hdrlen); + } else if (write_sha1_file(target, st.st_size, "blob", ce->sha1)) return -1; free(target); break;
@@ -382,6 +386,10 @@ int main(int argc, char **argv) i += 3; continue; } + if (!strcmp(path, "--info-only")) { + info_only = 1; + continue; + } if (!strcmp(path, "--force-remove")) { force_remove = 1; continue;