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