Code

[PATCH] add --missing-ok option to write-tree
authorBryan Larsen <bryanlarsen@yahoo.com>
Mon, 11 Jul 2005 03:53:44 +0000 (20:53 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Mon, 11 Jul 2005 17:20:53 +0000 (10:20 -0700)
This option allows a write-tree even if the referenced objects are not
in the database.

Signed-off-by: Bryan Larsen <bryan.larsen@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Documentation/git-write-tree.txt
write-tree.c

index 458d97ac986ff7324c105b5fe0222507ce514f04..4c7db5f59ad39ccf42ef2e85f2d40a4ffc03bd1b 100644 (file)
@@ -10,6 +10,7 @@ git-write-tree - Creates a tree from the current cache
 SYNOPSIS
 --------
 'git-write-tree'
+               [--missing-ok]
 
 DESCRIPTION
 -----------
@@ -23,7 +24,11 @@ In order to have that match what is actually in your directory right
 now, you need to have done a "git-update-cache" phase before you did the
 "git-write-tree".
 
-
+OPTIONS
+-------
+--missing-ok::
+       Normally "git-write-tree" ensures that the objects referenced by the
+       directory exist in the object database.  This option disables this check.
 
 
 ////////////////////////////////////////////////////////////////
index a794ea15b89ece14570bb8bf3ed0b42ab65cd413..561a101fa97c4fbf044093bdfe2cae56b94ce8bf 100644 (file)
@@ -5,6 +5,8 @@
  */
 #include "cache.h"
 
+static int missing_ok = 0;
+
 static int check_valid_sha1(unsigned char *sha1)
 {
        int ret;
@@ -61,7 +63,7 @@ static int write_tree(struct cache_entry **cachep, int maxentries, const char *b
                        sha1 = subdir_sha1;
                }
 
-               if (check_valid_sha1(sha1) < 0)
+               if (!missing_ok && check_valid_sha1(sha1) < 0)
                        exit(1);
 
                entrylen = pathlen - baselen;
@@ -86,6 +88,16 @@ int main(int argc, char **argv)
        int i, funny;
        int entries = read_cache();
        unsigned char sha1[20];
+       
+       if (argc==2) {
+               if (!strcmp(argv[1], "--missing-ok"))
+                       missing_ok = 1;
+               else
+                       die("unknown option %s", argv[1]);
+       }
+       
+       if (argc>2)
+               die("too many options");
 
        if (entries < 0)
                die("git-write-tree: error reading cache");