7c5b2e1d
|
832
|
free(kv.items[name_i].util);
|
7c5b2e1d
|
836
|
free(kv.items[email_i].util);
|
7c5b2e1d
|
840
|
free(kv.items[date_i].util);
|
ccafcb32
|
884
|
static char *read_author_date_or_null(void)
|
ccafcb32
|
888
|
if (read_author_script(rebase_path_author_script(),
|
ccafcb32
|
890
|
return NULL;
|
ccafcb32
|
891
|
return date;
|
7258d3d1
|
902
|
error(_("malformed ident line"));
|
7258d3d1
|
903
|
return NULL;
|
7258d3d1
|
912
|
static void push_dates(struct child_process *child)
|
7258d3d1
|
914
|
time_t now = time(NULL);
|
7258d3d1
|
915
|
struct strbuf date = STRBUF_INIT;
|
7258d3d1
|
917
|
strbuf_addf(&date, "@%"PRIuMAX, (uintmax_t)now);
|
7258d3d1
|
918
|
argv_array_pushf(&child->env_array, "GIT_AUTHOR_DATE=%s", date.buf);
|
7258d3d1
|
919
|
argv_array_pushf(&child->env_array, "GIT_COMMITTER_DATE=%s", date.buf);
|
7258d3d1
|
920
|
strbuf_release(&date);
|
7258d3d1
|
921
|
}
|
ccafcb32
|
983
|
int res = -1;
|
ccafcb32
|
984
|
struct strbuf datebuf = STRBUF_INIT;
|
ccafcb32
|
985
|
char *date = read_author_date_or_null();
|
ccafcb32
|
987
|
if (!date)
|
ccafcb32
|
988
|
return -1;
|
ccafcb32
|
990
|
strbuf_addf(&datebuf, "@%s", date);
|
ccafcb32
|
991
|
res = setenv("GIT_COMMITTER_DATE", datebuf.buf, 1);
|
ccafcb32
|
993
|
strbuf_release(&datebuf);
|
ccafcb32
|
994
|
free(date);
|
ccafcb32
|
996
|
if (res)
|
ccafcb32
|
997
|
return -1;
|
7258d3d1
|
1016
|
push_dates(&cmd);
|
ccafcb32
|
1425
|
return error(_("malformed ident line"));
|
ccafcb32
|
1427
|
return error(_("corrupted author without date information"));
|
7258d3d1
|
1485
|
res = -1;
|
7258d3d1
|
1486
|
goto out;
|
ccafcb32
|
2579
|
opts->allow_ff = 0;
|
ccafcb32
|
2580
|
opts->committer_date_is_author_date = 1;
|
7258d3d1
|
2584
|
opts->allow_ff = 0;
|
7258d3d1
|
2585
|
opts->ignore_date = 1;
|
7258d3d1
|
3610
|
push_dates(&cmd);
|
bfd15918
|
400
|
fsck_put_object_name(options, &entry.oid, "%s%s/",
|
bfd15918
|
469
|
fsck_put_object_name(options, oid, "%s^%d",
|
bfd15918
|
472
|
fsck_put_object_name(options, oid, "%.*s~%d",
|
bfd15918
|
495
|
fsck_put_object_name(options, &tag->tagged->oid, "%s", name);
|
a3f8d23c
|
517
|
error("Unknown object type for %s",
|
cd896131
|
622
|
retval += report(options, oid, OBJ_TREE, FSCK_MSG_BAD_TREE, "cannot be parsed as a tree");
|
cd896131
|
669
|
retval += report(options, oid, OBJ_TREE, FSCK_MSG_FULL_PATHNAME, "contains full pathnames");
|
cd896131
|
671
|
retval += report(options, oid, OBJ_TREE, FSCK_MSG_EMPTY_NAME, "contains empty pathname");
|
cd896131
|
679
|
retval += report(options, oid, OBJ_TREE, FSCK_MSG_ZERO_PADDED_FILEMODE, "contains zero-padded file modes");
|
cd896131
|
681
|
retval += report(options, oid, OBJ_TREE, FSCK_MSG_BAD_FILEMODE, "contains bad file modes");
|
cd896131
|
685
|
retval += report(options, oid, OBJ_TREE, FSCK_MSG_TREE_NOT_SORTED, "not properly sorted");
|
8645f45b
|
717
|
return report(options, oid, type,
|
9f77fdad
|
733
|
return report(options, oid, type, FSCK_MSG_MISSING_NAME_BEFORE_EMAIL, "invalid author/committer line - missing space before email");
|
9f77fdad
|
740
|
return report(options, oid, type, FSCK_MSG_MISSING_SPACE_BEFORE_EMAIL, "invalid author/committer line - missing space before email");
|
9f77fdad
|
744
|
return report(options, oid, type, FSCK_MSG_BAD_EMAIL, "invalid author/committer line - bad email");
|
9f77fdad
|
750
|
return report(options, oid, type, FSCK_MSG_ZERO_PADDED_DATE, "invalid author/committer line - zero-padded date");
|
9f77fdad
|
754
|
return report(options, oid, type, FSCK_MSG_BAD_DATE, "invalid author/committer line - bad date");
|
9f77fdad
|
762
|
return report(options, oid, type, FSCK_MSG_BAD_TIMEZONE, "invalid author/committer line - bad time zone");
|
8c95edfc
|
781
|
return report(options, oid, OBJ_COMMIT, FSCK_MSG_MISSING_TREE, "invalid format - expected 'tree' line");
|
8c95edfc
|
783
|
err = report(options, oid, OBJ_COMMIT, FSCK_MSG_BAD_TREE_SHA1, "invalid 'tree' line format - bad sha1");
|
8c95edfc
|
790
|
err = report(options, oid, OBJ_COMMIT, FSCK_MSG_BAD_PARENT_SHA1, "invalid 'parent' line format - bad sha1");
|
8c95edfc
|
804
|
err = report(options, oid, OBJ_COMMIT, FSCK_MSG_MISSING_AUTHOR, "invalid format - expected 'author' line");
|
8c95edfc
|
810
|
return report(options, oid, OBJ_COMMIT, FSCK_MSG_MISSING_COMMITTER, "invalid format - expected 'committer' line");
|
bcc2d814
|
837
|
ret = report(options, oid, OBJ_TAG, FSCK_MSG_MISSING_OBJECT, "invalid format - expected 'object' line");
|
bcc2d814
|
841
|
ret = report(options, oid, OBJ_TAG, FSCK_MSG_BAD_OBJECT_SHA1, "invalid 'object' line format - bad sha1");
|
bcc2d814
|
848
|
ret = report(options, oid, OBJ_TAG, FSCK_MSG_MISSING_TYPE_ENTRY, "invalid format - expected 'type' line");
|
bcc2d814
|
853
|
ret = report(options, oid, OBJ_TAG, FSCK_MSG_MISSING_TYPE, "invalid format - unexpected end after 'type' line");
|
bcc2d814
|
857
|
ret = report(options, oid, OBJ_TAG, FSCK_MSG_BAD_TYPE, "invalid 'type' value");
|
bcc2d814
|
863
|
ret = report(options, oid, OBJ_TAG, FSCK_MSG_MISSING_TAG_ENTRY, "invalid format - expected 'tag' line");
|
bcc2d814
|
868
|
ret = report(options, oid, OBJ_TAG, FSCK_MSG_MISSING_TAG, "invalid format - unexpected end after 'type' line");
|
315f8012
|
958
|
return report(options, oid, OBJ_BLOB,
|
61506cb2
|
980
|
return report(options, NULL, OBJ_NONE, FSCK_MSG_BAD_OBJECT_SHA1, "no valid object to fsck");
|
61506cb2
|
991
|
return report(options, &obj->oid, obj->type,
|
61506cb2
|
994
|
obj->type);
|
2eec891d
|
1027
|
if (is_promisor_object(oid))
|
61506cb2
|
1029
|
ret |= report(options,
|
be5d88e1
|
66
|
static int next_test(struct child_process *cp, struct strbuf *err, void *cb,
|
be5d88e1
|
69
|
struct testsuite *suite = cb;
|
be5d88e1
|
71
|
if (suite->next >= suite->tests.nr)
|
be5d88e1
|
72
|
return 0;
|
be5d88e1
|
74
|
test = suite->tests.items[suite->next++].string;
|
be5d88e1
|
75
|
argv_array_pushl(&cp->args, "sh", test, NULL);
|
be5d88e1
|
76
|
if (suite->quiet)
|
be5d88e1
|
77
|
argv_array_push(&cp->args, "--quiet");
|
be5d88e1
|
78
|
if (suite->immediate)
|
be5d88e1
|
79
|
argv_array_push(&cp->args, "-i");
|
be5d88e1
|
80
|
if (suite->verbose)
|
be5d88e1
|
81
|
argv_array_push(&cp->args, "-v");
|
be5d88e1
|
82
|
if (suite->verbose_log)
|
be5d88e1
|
83
|
argv_array_push(&cp->args, "-V");
|
be5d88e1
|
84
|
if (suite->trace)
|
be5d88e1
|
85
|
argv_array_push(&cp->args, "-x");
|
be5d88e1
|
86
|
if (suite->write_junit_xml)
|
be5d88e1
|
87
|
argv_array_push(&cp->args, "--write-junit-xml");
|
be5d88e1
|
89
|
strbuf_addf(err, "Output of '%s':\n", test);
|
be5d88e1
|
90
|
*task_cb = (void *)test;
|
be5d88e1
|
92
|
return 1;
|
be5d88e1
|
95
|
static int test_finished(int result, struct strbuf *err, void *cb,
|
be5d88e1
|
98
|
struct testsuite *suite = cb;
|
be5d88e1
|
99
|
const char *name = (const char *)task_cb;
|
be5d88e1
|
101
|
if (result)
|
be5d88e1
|
102
|
string_list_append(&suite->failed, name);
|
be5d88e1
|
104
|
strbuf_addf(err, "%s: '%s'\n", result ? "FAIL" : "SUCCESS", name);
|
be5d88e1
|
106
|
return 0;
|
be5d88e1
|
109
|
static int test_failed(struct strbuf *out, void *cb, void *task_cb)
|
be5d88e1
|
111
|
struct testsuite *suite = cb;
|
be5d88e1
|
112
|
const char *name = (const char *)task_cb;
|
be5d88e1
|
114
|
string_list_append(&suite->failed, name);
|
be5d88e1
|
115
|
strbuf_addf(out, "FAILED TO START: '%s'\n", name);
|
be5d88e1
|
117
|
return 0;
|
be5d88e1
|
125
|
static int testsuite(int argc, const char **argv)
|
be5d88e1
|
127
|
struct testsuite suite = TESTSUITE_INIT;
|
be5d88e1
|
128
|
int max_jobs = 1, i, ret;
|
be5d88e1
|
131
|
struct option options[] = {
|
be5d88e1
|
145
|
memset(&suite, 0, sizeof(suite));
|
be5d88e1
|
146
|
suite.tests.strdup_strings = suite.failed.strdup_strings = 1;
|
be5d88e1
|
148
|
argc = parse_options(argc, argv, NULL, options,
|
be5d88e1
|
151
|
if (max_jobs <= 0)
|
be5d88e1
|
152
|
max_jobs = online_cpus();
|
be5d88e1
|
154
|
dir = opendir(".");
|
be5d88e1
|
155
|
if (!dir)
|
be5d88e1
|
156
|
die("Could not open the current directory");
|
be5d88e1
|
157
|
while ((d = readdir(dir))) {
|
be5d88e1
|
158
|
const char *p = d->d_name;
|
be5d88e1
|
160
|
if (*p != 't' || !isdigit(p[1]) || !isdigit(p[2]) ||
|
be5d88e1
|
161
|
!isdigit(p[3]) || !isdigit(p[4]) || p[5] != '-' ||
|
be5d88e1
|
162
|
!ends_with(p, ".sh"))
|
be5d88e1
|
163
|
continue;
|
be5d88e1
|
166
|
if (!argc) {
|
be5d88e1
|
167
|
string_list_append(&suite.tests, p);
|
be5d88e1
|
168
|
continue;
|
be5d88e1
|
171
|
for (i = 0; i < argc; i++)
|
be5d88e1
|
172
|
if (!wildmatch(argv[i], p, 0)) {
|
be5d88e1
|
173
|
string_list_append(&suite.tests, p);
|
be5d88e1
|
174
|
break;
|
be5d88e1
|
177
|
closedir(dir);
|
be5d88e1
|
179
|
if (!suite.tests.nr)
|
be5d88e1
|
180
|
die("No tests match!");
|
be5d88e1
|
181
|
if (max_jobs > suite.tests.nr)
|
be5d88e1
|
182
|
max_jobs = suite.tests.nr;
|
be5d88e1
|
184
|
fprintf(stderr, "Running %d tests (%d at a time)\n",
|
be5d88e1
|
187
|
ret = run_processes_parallel(max_jobs, next_test, test_failed,
|
be5d88e1
|
190
|
if (suite.failed.nr > 0) {
|
be5d88e1
|
191
|
ret = 1;
|
be5d88e1
|
192
|
fprintf(stderr, "%d tests failed:\n\n", suite.failed.nr);
|
be5d88e1
|
193
|
for (i = 0; i < suite.failed.nr; i++)
|
be5d88e1
|
194
|
fprintf(stderr, "\t%s\n", suite.failed.items[i].string);
|
be5d88e1
|
197
|
string_list_clear(&suite.tests, 0);
|
be5d88e1
|
198
|
string_list_clear(&suite.failed, 0);
|
be5d88e1
|
200
|
return !!ret;
|
be5d88e1
|
209
|
exit(testsuite(argc - 1, argv + 1));
|
371df1be
|
88
|
fl_end_col = buf->len + TR2FMT_PERF_FL_WIDTH;
|
371df1be
|
90
|
if (file && *file) {
|
371df1be
|
91
|
struct strbuf buf_fl = STRBUF_INIT;
|
371df1be
|
93
|
strbuf_addf(&buf_fl, "%s:%d", file, line);
|
371df1be
|
95
|
if (buf_fl.len <= TR2FMT_PERF_FL_WIDTH)
|
371df1be
|
96
|
strbuf_addbuf(buf, &buf_fl);
|
371df1be
|
98
|
size_t avail = TR2FMT_PERF_FL_WIDTH - 3;
|
371df1be
|
99
|
strbuf_addstr(buf, "...");
|
371df1be
|
100
|
strbuf_add(buf,
|
371df1be
|
101
|
&buf_fl.buf[buf_fl.len - avail],
|
371df1be
|
105
|
strbuf_release(&buf_fl);
|
371df1be
|
108
|
while (buf->len < fl_end_col)
|
371df1be
|
111
|
strbuf_addstr(buf, " | ");
|
742ed633
|
302
|
strbuf_addf(&buf_payload, "alias:%s argv:[", alias);
|
742ed633
|
303
|
sq_append_quote_argv_pretty(&buf_payload, argv);
|
742ed633
|
304
|
strbuf_addch(&buf_payload, ']');
|
742ed633
|
335
|
strbuf_addstr(&buf_payload, "git");
|
742ed633
|
336
|
if (cmd->argv[0])
|
742ed633
|
337
|
strbuf_addch(&buf_payload, ' ');
|
742ed633
|
391
|
strbuf_addstr(&buf_payload, "argv:[");
|
742ed633
|
392
|
if (exe) {
|
742ed633
|
393
|
strbuf_addstr(&buf_payload, exe);
|
742ed633
|
394
|
if (argv[0])
|
742ed633
|
395
|
strbuf_addch(&buf_payload, ' ');
|
742ed633
|
397
|
sq_append_quote_argv_pretty(&buf_payload, argv);
|
742ed633
|
398
|
strbuf_addch(&buf_payload, ']');
|
da4589ce
|
459
|
strbuf_addf(&buf_payload, "label:%s", label);
|
da4589ce
|
460
|
if (fmt && *fmt) {
|
da4589ce
|
461
|
strbuf_addch(&buf_payload, ' ');
|
da4589ce
|
462
|
maybe_append_string_va(&buf_payload, fmt, ap);
|
da4589ce
|
479
|
strbuf_addf(&buf_payload, "label:%s", label);
|
da4589ce
|
480
|
if (fmt && *fmt) {
|
da4589ce
|
481
|
strbuf_addch(&buf_payload, ' ' );
|
da4589ce
|
482
|
maybe_append_string_va(&buf_payload, fmt, ap);
|
Alex Henrie
|
baed6bbb
|
diffcore-break: use a goto instead of a redundant if statement
|
Ali Utku Selen
|
ddb3c856
|
shallow.c: don't free unallocated slabs
|
Bert Wesarg
|
edefc318
|
format-patch: create leading components of output directory
|
Brandon Casey
|
040a6551
|
cleanup: use internal memory allocation wrapper functions everywhere
|
Brian Downing
|
43fe901b
|
compat: Add simplified merge sort implementation from glibc
|
brian m. carlson
|
7e0d029f
|
builtin/rev-parse: switch to use the_hash_algo
|
brian m. carlson
|
8d4d86b0
|
cache: remove null_sha1
|
brian m. carlson
|
ce17feb1
|
path: add a function to check for path suffix
|
brian m. carlson
|
28ba1830
|
builtin/replace: make hash size independent
|
brian m. carlson
|
fabec2c5
|
builtin/receive-pack: switch to use the_hash_algo
|
Christian Couder
|
faf2abf4
|
promisor-remote: use repository_format_partial_clone
|
Christian Couder
|
9e27beaa
|
promisor-remote: implement promisor_remote_get_direct()
|
Christian Couder
|
4ca9474e
|
Move core_partial_clone_filter_default to promisor-remote.c
|
Christian Couder
|
b14ed5ad
|
Use promisor_remote_get_direct() and has_promisor_remote()
|
Christian Couder
|
fa3d1b63
|
promisor-remote: parse remote.*.partialclonefilter
|
Christian Couder
|
48de3158
|
Add initial support for many promisor remotes
|
Christian Couder
|
db27dca5
|
Remove fetch-object.{c,h} in favor of promisor-remote.{c,h}
|
Corentin BOMPARD
|
24bc1a12
|
pull, fetch: add --set-upstream option
|
Denton Liu
|
2b318aa6
|
rebase: refactor can_fast_forward into goto tower
|
Denton Liu
|
c0efb4c1
|
rebase: fast-forward --onto in more cases
|
Derrick Stolee
|
50f26bd0
|
fetch: add fetch.writeCommitGraph config setting
|
Derrick Stolee
|
aaf633c2
|
repo-settings: create feature.experimental setting
|
Elijah Newren
|
65c01c64
|
checkout: provide better conflict hunk description with detached HEAD
|
Elijah Newren
|
941790d7
|
fast-export: handle nested tags
|
Elijah Newren
|
89a1f4aa
|
dir: if our pathspec might match files under a dir, recurse into it
|
Elijah Newren
|
b8f50e5b
|
fast-import: add support for new 'alias' command
|
Elijah Newren
|
3164e6bd
|
fast-import: fix handling of deleted tags
|
Elijah Newren
|
ff1bfa2c
|
merge-recursive: use common name for ancestors/common/base_list
|
Elijah Newren
|
98a1d3d8
|
merge-recursive: exit early if index != head
|
Elijah Newren
|
208d6924
|
fast-export: add support for --import-marks-if-exists
|
Elijah Newren
|
9822175d
|
Ensure index matches head before invoking merge machinery, round N
|
Elijah Newren
|
724dd767
|
cache-tree: share code between functions writing an index as a tree
|
Elijah Newren
|
f836bf39
|
merge-recursive: future-proof update_file_flags() against memory leaks
|
Eric Wong
|
c8e424c9
|
hashmap: introduce hashmap_free_entries
|
Eric Wong
|
b94e5c1d
|
hashmap_add takes "struct hashmap_entry *"
|
Eric Wong
|
87571c3f
|
hashmap: use *_entry APIs for iteration
|
Eric Wong
|
d22245a2
|
hashmap_entry_init takes "struct hashmap_entry *"
|
Eric Wong
|
28ee7941
|
hashmap_remove takes "const struct hashmap_entry *"
|
Jeff Hostetler
|
e3443055
|
trace2: cleanup whitespace in normal format
|
Jeff Hostetler
|
371df1be
|
trace2: cleanup column alignment in perf target format
|
Jeff Hostetler
|
742ed633
|
trace2: cleanup whitespace in perf format
|
Jeff Hostetler
|
da4589ce
|
trace2: trim whitespace in region messages in perf target format
|
Jeff King
|
5aa02f98
|
tree-walk: harden make_traverse_path() length computations
|
Jeff King
|
9827d4c1
|
packfile: drop release_pack_memory()
|
Jeff King
|
fbab552a
|
commit-graph: bump DIE_ON_LOAD check to actual load-time
|
Jeff King
|
90553847
|
tree-walk: drop oid from traverse_info
|
Jeff King
|
3a37876b
|
pack-objects: drop packlist index_pos optimization
|
Jeff King
|
0dfed92d
|
git-am: handle missing "author" when parsing commit
|
Johannes Schindelin
|
be5d88e1
|
test-tool run-command: learn to run (parts of) the testsuite
|
Johannes Schindelin
|
e145d993
|
rebase -r: support merge strategies other than `recursive`
|
Johannes Schindelin
|
e2683d51
|
Fix .git/ discovery at the root of UNC shares
|
Johannes Schindelin
|
d54dea77
|
fetch: let --jobs= parallelize --multiple, too
|
Josh Steadmon
|
87db61a4
|
trace2: write discard message to sentinel files
|
Josh Steadmon
|
83e57b04
|
trace2: discard new traces if target directory has too many files
|
Junio C Hamano
|
360c7ba3
|
transport: push codepath can take arbitrary repository
|
Matthew DeVore
|
cf9ceb5a
|
list-objects-filter-options: make filter_spec a string_list
|
Matthew DeVore
|
f56f7642
|
list-objects-filter-options: move error check up
|
Matthew DeVore
|
9430147c
|
list-objects-filter: encapsulate filter components
|
Matthew DeVore
|
e987df5f
|
list-objects-filter: implement composite filters
|
Mischa POSLAWSKY
|
8b3f33ef
|
ref-filter: initialize empty name or email fields
|
Phillip Wood
|
a47ba3c7
|
rebase -i: check for updated todo after squash and reword
|
René Scharfe
|
1fd881d4
|
trace2: use warning() directly in tr2_dst_malformed_warning()
|
René Scharfe
|
dad3f060
|
tag: factor out get_tagged_oid()
|
René Scharfe
|
5cc6a4be
|
http-push: simplify deleting a list item
|
René Scharfe
|
59fa5f5a
|
sha1-name: check for overflow of N in "foo^N" and "foo~N"
|
René Scharfe
|
71d41ff6
|
archive-tar: turn length miscalculation warning into BUG
|
SZEDER Gábor
|
2bb74b53
|
Test the progress display
|
Thomas Gummerer
|
34933d0e
|
stash: make sure to write refreshed cache
|
Thomas Gummerer
|
8e4c8af0
|
push: disallow --all and refspecs when remote..mirror is set
|
Thomas Gummerer
|
22184497
|
factor out refresh_and_write_cache function
|
Torsten Bögershausen
|
ebb8d2c9
|
mingw: support UNC in git clone file://server/share/repo
|