[PATCH] add --missing-ok option to write-tree
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>
This commit is contained in:

committed by
Linus Torvalds

parent
ab90ea5d6e
commit
9c1fa70aaa
@ -10,6 +10,7 @@ git-write-tree - Creates a tree from the current cache
|
|||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
'git-write-tree'
|
'git-write-tree'
|
||||||
|
[--missing-ok]
|
||||||
|
|
||||||
DESCRIPTION
|
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
|
now, you need to have done a "git-update-cache" phase before you did the
|
||||||
"git-write-tree".
|
"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.
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
14
write-tree.c
14
write-tree.c
@ -5,6 +5,8 @@
|
|||||||
*/
|
*/
|
||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
|
|
||||||
|
static int missing_ok = 0;
|
||||||
|
|
||||||
static int check_valid_sha1(unsigned char *sha1)
|
static int check_valid_sha1(unsigned char *sha1)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -61,7 +63,7 @@ static int write_tree(struct cache_entry **cachep, int maxentries, const char *b
|
|||||||
sha1 = subdir_sha1;
|
sha1 = subdir_sha1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (check_valid_sha1(sha1) < 0)
|
if (!missing_ok && check_valid_sha1(sha1) < 0)
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
||||||
entrylen = pathlen - baselen;
|
entrylen = pathlen - baselen;
|
||||||
@ -86,6 +88,16 @@ int main(int argc, char **argv)
|
|||||||
int i, funny;
|
int i, funny;
|
||||||
int entries = read_cache();
|
int entries = read_cache();
|
||||||
unsigned char sha1[20];
|
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)
|
if (entries < 0)
|
||||||
die("git-write-tree: error reading cache");
|
die("git-write-tree: error reading cache");
|
||||||
|
Reference in New Issue
Block a user