2005-04-08 00:16:10 +02:00
|
|
|
/*
|
|
|
|
* GIT - The information manager from hell
|
|
|
|
*
|
|
|
|
* Copyright (C) Linus Torvalds, 2005
|
|
|
|
*/
|
2006-06-13 22:21:42 +02:00
|
|
|
#include "builtin.h"
|
2005-04-08 00:13:13 +02:00
|
|
|
#include "cache.h"
|
2006-04-02 14:44:09 +02:00
|
|
|
#include "tree.h"
|
2006-04-24 01:52:35 +02:00
|
|
|
#include "cache-tree.h"
|
2005-04-08 00:13:13 +02:00
|
|
|
|
2006-04-26 10:20:50 +02:00
|
|
|
static const char write_tree_usage[] =
|
2008-07-13 15:36:15 +02:00
|
|
|
"git write-tree [--missing-ok] [--prefix=<prefix>/]";
|
2005-12-06 07:30:07 +01:00
|
|
|
|
2006-07-29 07:44:25 +02:00
|
|
|
int cmd_write_tree(int argc, const char **argv, const char *unused_prefix)
|
2006-06-13 22:21:42 +02:00
|
|
|
{
|
2009-05-20 20:04:35 +02:00
|
|
|
int flags = 0, ret;
|
2006-06-13 22:21:42 +02:00
|
|
|
const char *prefix = NULL;
|
|
|
|
unsigned char sha1[20];
|
2008-01-11 07:49:35 +01:00
|
|
|
const char *me = "git-write-tree";
|
2006-06-13 22:21:42 +02:00
|
|
|
|
2008-05-14 19:46:53 +02:00
|
|
|
git_config(git_default_config, NULL);
|
2006-06-13 22:21:42 +02:00
|
|
|
while (1 < argc) {
|
|
|
|
const char *arg = argv[1];
|
|
|
|
if (!strcmp(arg, "--missing-ok"))
|
2009-05-20 20:04:35 +02:00
|
|
|
flags |= WRITE_TREE_MISSING_OK;
|
Mechanical conversion to use prefixcmp()
This mechanically converts strncmp() to use prefixcmp(), but only when
the parameters match specific patterns, so that they can be verified
easily. Leftover from this will be fixed in a separate step, including
idiotic conversions like
if (!strncmp("foo", arg, 3))
=>
if (!(-prefixcmp(arg, "foo")))
This was done by using this script in px.perl
#!/usr/bin/perl -i.bak -p
if (/strncmp\(([^,]+), "([^\\"]*)", (\d+)\)/ && (length($2) == $3)) {
s|strncmp\(([^,]+), "([^\\"]*)", (\d+)\)|prefixcmp($1, "$2")|;
}
if (/strncmp\("([^\\"]*)", ([^,]+), (\d+)\)/ && (length($1) == $3)) {
s|strncmp\("([^\\"]*)", ([^,]+), (\d+)\)|(-prefixcmp($2, "$1"))|;
}
and running:
$ git grep -l strncmp -- '*.c' | xargs perl px.perl
Signed-off-by: Junio C Hamano <junkio@cox.net>
2007-02-20 10:53:29 +01:00
|
|
|
else if (!prefixcmp(arg, "--prefix="))
|
2006-06-13 22:21:42 +02:00
|
|
|
prefix = arg + 9;
|
2009-05-20 20:04:35 +02:00
|
|
|
else if (!prefixcmp(arg, "--ignore-cache-tree"))
|
|
|
|
/*
|
|
|
|
* This is only useful for debugging, so I
|
|
|
|
* do not bother documenting it.
|
|
|
|
*/
|
|
|
|
flags |= WRITE_TREE_IGNORE_CACHE_TREE;
|
2006-06-13 22:21:42 +02:00
|
|
|
else
|
2006-08-03 17:48:41 +02:00
|
|
|
usage(write_tree_usage);
|
2006-06-13 22:21:42 +02:00
|
|
|
argc--; argv++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (argc > 2)
|
|
|
|
die("too many options");
|
|
|
|
|
2009-05-20 20:04:35 +02:00
|
|
|
ret = write_cache_as_tree(sha1, flags, prefix);
|
2008-01-11 07:49:35 +01:00
|
|
|
switch (ret) {
|
|
|
|
case 0:
|
|
|
|
printf("%s\n", sha1_to_hex(sha1));
|
|
|
|
break;
|
|
|
|
case WRITE_TREE_UNREADABLE_INDEX:
|
|
|
|
die("%s: error reading the index", me);
|
|
|
|
break;
|
|
|
|
case WRITE_TREE_UNMERGED_INDEX:
|
2008-11-29 04:56:34 +01:00
|
|
|
die("%s: error building trees", me);
|
2008-01-11 07:49:35 +01:00
|
|
|
break;
|
|
|
|
case WRITE_TREE_PREFIX_ERROR:
|
|
|
|
die("%s: prefix %s not found", me, prefix);
|
|
|
|
break;
|
|
|
|
}
|
2006-06-13 22:21:42 +02:00
|
|
|
return ret;
|
|
|
|
}
|