3/7 Add --info-only option to git-update-cache.
PATCH 1/1 3/7 Add --info-only option to git-update-cache.
Add --info-only option to git-update-cache.
Signed-off-by Bryan Larsen <[email protected]>
---
Documentation/git-update-cache.txt | 23 +++++++++++++++++++---- update-cache.c | 14 +++++++++++--- 2 files changed, 30 insertions(+), 7 deletions(-)
Documentation/git-update-cache.txt +19 -4
@@ -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
--refresh
update-cache.c +11 -3
@@ -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 ;