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));
|
Elijah Newren
|
65c01c64
|
checkout: provide better conflict hunk description with detached HEAD
|
Elijah Newren
|
ff1bfa2c
|
merge-recursive: use common name for ancestors/common/base_list
|
Elijah Newren
|
f836bf39
|
merge-recursive: future-proof update_file_flags() against memory leaks
|
Elijah Newren
|
3164e6bd
|
fast-import: fix handling of deleted tags
|
Elijah Newren
|
b8f50e5b
|
fast-import: add support for new 'alias' command
|
Elijah Newren
|
724dd767
|
cache-tree: share code between functions writing an index as a tree
|
Elijah Newren
|
98a1d3d8
|
merge-recursive: exit early if index != head
|
Elijah Newren
|
9822175d
|
Ensure index matches head before invoking merge machinery, round N
|
Elijah Newren
|
208d6924
|
fast-export: add support for --import-marks-if-exists
|
Elijah Newren
|
941790d7
|
fast-export: handle nested tags
|
Eric Wong
|
28ee7941
|
hashmap_remove takes "const struct hashmap_entry *"
|
Eric Wong
|
d22245a2
|
hashmap_entry_init takes "struct hashmap_entry *"
|
Eric Wong
|
b94e5c1d
|
hashmap_add takes "struct hashmap_entry *"
|
Eric Wong
|
c8e424c9
|
hashmap: introduce hashmap_free_entries
|
Eric Wong
|
87571c3f
|
hashmap: use *_entry APIs for iteration
|
Jeff King
|
7c59828b
|
pack-objects: improve partial packfile reuse
|
Jeff King
|
934b7d0a
|
pack-bitmap: introduce bitmap_walk_contains()
|
Jeff King
|
d35b73c5
|
pack-objects: introduce pack.allowPackReuse
|
Johannes Schindelin
|
d54dea77
|
fetch: let --jobs= parallelize --multiple, too
|
Johannes Schindelin
|
be5d88e1
|
test-tool run-command: learn to run (parts of) the testsuite
|
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
|
e3443055
|
189
|
strbuf_addf(&buf_payload, "alias %s -> ", alias);
|
e3443055
|
190
|
sq_append_quote_argv_pretty(&buf_payload, argv);
|
e3443055
|
201
|
strbuf_addf(&buf_payload, "child_start[%d]", cmd->trace2_child_id);
|
e3443055
|
204
|
strbuf_addstr(&buf_payload, " cd ");
|
e3443055
|
206
|
strbuf_addstr(&buf_payload, ";");
|
e3443055
|
214
|
strbuf_addch(&buf_payload, ' ');
|
e3443055
|
216
|
strbuf_addstr(&buf_payload, "git ");
|
e3443055
|
217
|
sq_append_quote_argv_pretty(&buf_payload, cmd->argv);
|
e3443055
|
242
|
if (exe) {
|
e3443055
|
244
|
strbuf_addch(&buf_payload, ' ');
|
e3443055
|
246
|
sq_append_quote_argv_pretty(&buf_payload, argv);
|
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
|
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
|
fabec2c5
|
builtin/receive-pack: switch to use the_hash_algo
|
brian m. carlson
|
28ba1830
|
builtin/replace: make hash size independent
|
brian m. carlson
|
7e0d029f
|
builtin/rev-parse: switch to use the_hash_algo
|
brian m. carlson
|
8d4d86b0
|
cache: remove null_sha1
|
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
|
Elijah Newren
|
89a1f4aa
|
dir: if our pathspec might match files under a dir, recurse into it
|
Jeff Hostetler
|
da4589ce
|
trace2: trim whitespace in region messages in perf target format
|
Jeff Hostetler
|
371df1be
|
trace2: cleanup column alignment in perf target format
|
Jeff Hostetler
|
e3443055
|
trace2: cleanup whitespace in normal format
|
Jeff Hostetler
|
742ed633
|
trace2: cleanup whitespace in perf format
|
Jeff King
|
0dfed92d
|
git-am: handle missing "author" when parsing commit
|
Jeff King
|
fbab552a
|
commit-graph: bump DIE_ON_LOAD check to actual load-time
|
Jeff King
|
3a37876b
|
pack-objects: drop packlist index_pos optimization
|
Johannes Schindelin
|
e2683d51
|
Fix .git/ discovery at the root of UNC shares
|
Phillip Wood
|
a47ba3c7
|
rebase -i: check for updated todo after squash and reword
|
René Scharfe
|
59fa5f5a
|
sha1-name: check for overflow of N in "foo^N" and "foo~N"
|
René Scharfe
|
1fd881d4
|
trace2: use warning() directly in tr2_dst_malformed_warning()
|
René Scharfe
|
dad3f060
|
tag: factor out get_tagged_oid()
|
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
|