提交 45f75a01 编写于 作者: J Junio C Hamano

Merge branch 'fix'

* fix:
  Separate object name errors from usage errors
  Documentation: {caret} fixes (git-rev-list.txt)
  Fix "git diff --stat" with long filenames
  Fix repo-config set-multivar error return path.
......@@ -68,9 +68,10 @@ OPTIONS
--bisect::
Limit output to the one commit object which is roughly halfway
between the included and excluded commits. Thus, if 'git-rev-list
--bisect foo ^bar ^baz' outputs 'midpoint', the output
of 'git-rev-list foo ^midpoint' and 'git-rev-list midpoint
^bar ^baz' would be of roughly the same length. Finding the change
--bisect foo {caret}bar {caret}baz' outputs 'midpoint', the output
of 'git-rev-list foo {caret}midpoint' and 'git-rev-list midpoint
{caret}bar {caret}baz' would be of roughly the same length.
Finding the change
which introduces a regression is thus reduced to a binary search:
repeatedly generate and test new 'midpoint's until the commit chain
is of length one.
......
......@@ -103,8 +103,10 @@ int main(int argc, char **argv)
setup_git_directory();
git_config(git_default_config);
if (argc != 3 || get_sha1(argv[2], sha1))
if (argc != 3)
usage("git-cat-file [-t|-s|-e|-p|<type>] <sha1>");
if (get_sha1(argv[2], sha1))
die("Not a valid object name %s", argv[2]);
opt = 0;
if ( argv[1][0] == '-' ) {
......@@ -133,8 +135,7 @@ int main(int argc, char **argv)
return !has_sha1_file(sha1);
case 'p':
if (get_sha1(argv[2], sha1) ||
sha1_object_info(sha1, type, NULL))
if (sha1_object_info(sha1, type, NULL))
die("Not a valid object name %s", argv[2]);
/* custom pretty-print here */
......
......@@ -91,15 +91,19 @@ int main(int argc, char **argv)
git_config(git_default_config);
if (argc < 2 || get_sha1(argv[1], tree_sha1) < 0)
if (argc < 2)
usage(commit_tree_usage);
if (get_sha1(argv[1], tree_sha1))
die("Not a valid object name %s", argv[1]);
check_valid(tree_sha1, tree_type);
for (i = 2; i < argc; i += 2) {
char *a, *b;
a = argv[i]; b = argv[i+1];
if (!b || strcmp(a, "-p") || get_sha1(b, parent_sha1[parents]))
if (!b || strcmp(a, "-p"))
usage(commit_tree_usage);
if (get_sha1(b, parent_sha1[parents]))
die("Not a valid object name %s", b);
check_valid(parent_sha1[parents], commit_type);
if (new_parent(parents))
parents++;
......
......@@ -422,7 +422,7 @@ int git_config_set_multivar(const char* key, const char* value,
const char* value_regex, int multi_replace)
{
int i;
int fd, in_fd;
int fd = -1, in_fd;
int ret;
char* config_filename = strdup(git_path("config"));
char* lock_file = strdup(git_path("config.lock"));
......@@ -480,15 +480,11 @@ int git_config_set_multivar(const char* key, const char* value,
if ( ENOENT != errno ) {
error("opening %s: %s", config_filename,
strerror(errno));
close(fd);
unlink(lock_file);
ret = 3; /* same as "invalid config file" */
goto out_free;
}
/* if nothing to unset, error out */
if (value == NULL) {
close(fd);
unlink(lock_file);
ret = 5;
goto out_free;
}
......@@ -516,8 +512,6 @@ int git_config_set_multivar(const char* key, const char* value,
fprintf(stderr, "Invalid pattern: %s\n",
value_regex);
free(store.value_regex);
close(fd);
unlink(lock_file);
ret = 6;
goto out_free;
}
......@@ -553,8 +547,6 @@ int git_config_set_multivar(const char* key, const char* value,
/* if nothing to unset, or too many matches, error out */
if ((store.seen == 0 && value == NULL) ||
(store.seen > 1 && multi_replace == 0)) {
close(fd);
unlink(lock_file);
ret = 5;
goto out_free;
}
......@@ -603,8 +595,6 @@ int git_config_set_multivar(const char* key, const char* value,
unlink(config_filename);
}
close(fd);
if (rename(lock_file, config_filename) < 0) {
fprintf(stderr, "Could not rename the lock file?\n");
ret = 4;
......@@ -614,10 +604,14 @@ int git_config_set_multivar(const char* key, const char* value,
ret = 0;
out_free:
if (0 <= fd)
close(fd);
if (config_filename)
free(config_filename);
if (lock_file)
if (lock_file) {
unlink(lock_file);
free(lock_file);
}
return ret;
}
......
......@@ -321,8 +321,10 @@ int main(int argc, char **argv)
setup_git_directory();
if (argc != 2 || get_sha1(argv[1], sha1))
if (argc != 2)
usage("git-convert-objects <sha1>");
if (get_sha1(argv[1], sha1))
die("Not a valid object name %s", argv[1]);
entry = convert_entry(sha1);
printf("new sha1: %s\n", sha1_to_hex(entry->new_sha1));
......
......@@ -105,11 +105,11 @@ static void describe(char *arg, int last_one)
static int initialized = 0;
struct commit_name *n;
if (get_sha1(arg, sha1) < 0)
usage(describe_usage);
if (get_sha1(arg, sha1))
die("Not a valid object name %s", arg);
cmit = lookup_commit_reference(sha1);
if (!cmit)
usage(describe_usage);
die("%s is not a valid '%s' object", arg, commit_type);
if (!initialized) {
initialized = 1;
......
......@@ -296,7 +296,6 @@ static const char minuses[]= "--------------------------------------------------
static void show_stats(struct diffstat_t* data)
{
char *prefix = "";
int i, len, add, del, total, adds = 0, dels = 0;
int max, max_change = 0, max_len = 0;
int total_files = data->nr;
......@@ -318,6 +317,7 @@ static void show_stats(struct diffstat_t* data)
}
for (i = 0; i < data->nr; i++) {
char *prefix = "";
char *name = data->files[i]->name;
int added = data->files[i]->added;
int deleted = data->files[i]->deleted;
......
......@@ -142,8 +142,8 @@ int main(int argc, const char **argv)
if (argc < 2)
usage(ls_tree_usage);
if (get_sha1(argv[1], sha1) < 0)
usage(ls_tree_usage);
if (get_sha1(argv[1], sha1))
die("Not a valid object name %s", argv[1]);
pathspec = get_pathspec(prefix, argv + 2);
tree = parse_tree_indirect(sha1);
......
......@@ -247,10 +247,12 @@ int main(int argc, char **argv)
usage(merge_base_usage);
argc--; argv++;
}
if (argc != 3 ||
get_sha1(argv[1], rev1key) ||
get_sha1(argv[2], rev2key))
if (argc != 3)
usage(merge_base_usage);
if (get_sha1(argv[1], rev1key))
die("Not a valid object name %s", argv[1]);
if (get_sha1(argv[2], rev2key))
die("Not a valid object name %s", argv[2]);
rev1 = lookup_commit_reference(rev1key);
rev2 = lookup_commit_reference(rev2key);
if (!rev1 || !rev2)
......
......@@ -149,7 +149,7 @@ static void *get_tree_descriptor(struct tree_desc *desc, const char *rev)
unsigned char sha1[20];
void *buf;
if (get_sha1(rev, sha1) < 0)
if (get_sha1(rev, sha1))
die("unknown rev %s", rev);
buf = fill_tree_descriptor(desc, sha1);
if (!buf)
......
......@@ -794,8 +794,8 @@ int main(int argc, char **argv)
if (1 < index_only + update)
usage(read_tree_usage);
if (get_sha1(arg, sha1) < 0)
usage(read_tree_usage);
if (get_sha1(arg, sha1))
die("Not a valid object name %s", arg);
if (list_tree(sha1) < 0)
die("failed to unpack tree object %s", arg);
stage++;
......
......@@ -794,7 +794,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
local_flags = UNINTERESTING;
arg++;
}
if (get_sha1(arg, sha1) < 0) {
if (get_sha1(arg, sha1)) {
int j;
if (seen_dashdash || local_flags)
......@@ -820,7 +820,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
if (def && !revs->pending_objects) {
unsigned char sha1[20];
struct object *object;
if (get_sha1(def, sha1) < 0)
if (get_sha1(def, sha1))
die("bad default revision '%s'", def);
object = get_reference(revs, def, sha1, 0);
add_pending_object(revs, object, def);
......
......@@ -134,7 +134,7 @@ int main(int argc, char **argv)
commit_id = argv[arg];
url = argv[arg + 1];
if (get_sha1(commit_id, sha1))
usage(ssh_push_usage);
die("Not a valid object name %s", commit_id);
memcpy(hex, sha1_to_hex(sha1), sizeof(hex));
argv[arg] = hex;
......
......@@ -321,8 +321,8 @@ int main(int argc, char **argv)
strbuf_append_string(&current_path, "/");
/* FALLTHROUGH */
case 2:
if (get_sha1(argv[1], sha1) < 0)
usage(tar_tree_usage);
if (get_sha1(argv[1], sha1))
die("Not a valid object name %s", argv[1]);
break;
default:
usage(tar_tree_usage);
......
......@@ -27,8 +27,10 @@ int main(int argc, char **argv)
{
unsigned char sha1[20];
if (argc != 2 || get_sha1(argv[1], sha1))
if (argc != 2)
usage("git-unpack-file <sha1>");
if (get_sha1(argv[1], sha1))
die("Not a valid object name %s", argv[1]);
setup_git_directory();
git_config(git_default_config);
......
......@@ -32,10 +32,10 @@ int main(int argc, char **argv)
refname = argv[1];
value = argv[2];
oldval = argv[3];
if (get_sha1(value, sha1) < 0)
if (get_sha1(value, sha1))
die("%s: not a valid SHA1", value);
memset(oldsha1, 0, 20);
if (oldval && get_sha1(oldval, oldsha1) < 0)
if (oldval && get_sha1(oldval, oldsha1))
die("%s: not a valid old SHA1", oldval);
path = resolve_ref(git_path("%s", refname), currsha1, !!oldval);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册