3c543ab3
|
127
|
static void tr2main_signal_handler(int signo)
|
3c543ab3
|
134
|
us_now = getnanotime() / 1000;
|
3c543ab3
|
135
|
us_elapsed_absolute = tr2tls_absolute_elapsed(us_now);
|
3c543ab3
|
137
|
for_each_wanted_builtin (j, tgt_j)
|
3c543ab3
|
138
|
if (tgt_j->pfn_signal)
|
3c543ab3
|
139
|
tgt_j->pfn_signal(us_elapsed_absolute, signo);
|
3c543ab3
|
141
|
sigchain_pop(signo);
|
3c543ab3
|
142
|
raise(signo);
|
3c543ab3
|
143
|
}
|
3c543ab3
|
151
|
return;
|
3c543ab3
|
232
|
void trace2_cmd_path_fl(const char *file, int line, const char *pathname)
|
3c543ab3
|
237
|
if (!trace2_enabled)
|
3c543ab3
|
238
|
return;
|
3c543ab3
|
240
|
for_each_wanted_builtin (j, tgt_j)
|
3c543ab3
|
241
|
if (tgt_j->pfn_command_path_fl)
|
3c543ab3
|
242
|
tgt_j->pfn_command_path_fl(file, line, pathname);
|
3c543ab3
|
271
|
for_each_wanted_builtin (j, tgt_j)
|
3c543ab3
|
272
|
if (tgt_j->pfn_command_mode_fl)
|
3c543ab3
|
273
|
tgt_j->pfn_command_mode_fl(file, line, mode);
|
3c543ab3
|
285
|
for_each_wanted_builtin (j, tgt_j)
|
3c543ab3
|
286
|
if (tgt_j->pfn_alias_fl)
|
3c543ab3
|
287
|
tgt_j->pfn_alias_fl(file, line, alias, argv);
|
3c543ab3
|
304
|
tr2_cfg_set_fl(file, line, key, value);
|
3c543ab3
|
348
|
us_elapsed_child = 0;
|
3c543ab3
|
371
|
us_now = getnanotime() / 1000;
|
3c543ab3
|
372
|
us_elapsed_absolute = tr2tls_absolute_elapsed(us_now);
|
3c543ab3
|
374
|
exec_id = tr2tls_locked_increment(&tr2_next_exec_id);
|
3c543ab3
|
376
|
for_each_wanted_builtin (j, tgt_j)
|
3c543ab3
|
377
|
if (tgt_j->pfn_exec_fl)
|
3c543ab3
|
378
|
tgt_j->pfn_exec_fl(file, line, us_elapsed_absolute,
|
3c543ab3
|
381
|
return exec_id;
|
3c543ab3
|
384
|
void trace2_exec_result_fl(const char *file, int line, int exec_id, int code)
|
3c543ab3
|
391
|
if (!trace2_enabled)
|
3c543ab3
|
392
|
return;
|
3c543ab3
|
394
|
us_now = getnanotime() / 1000;
|
3c543ab3
|
395
|
us_elapsed_absolute = tr2tls_absolute_elapsed(us_now);
|
3c543ab3
|
397
|
for_each_wanted_builtin (j, tgt_j)
|
3c543ab3
|
398
|
if (tgt_j->pfn_exec_result_fl)
|
3c543ab3
|
399
|
tgt_j->pfn_exec_result_fl(
|
3c543ab3
|
403
|
void trace2_thread_start_fl(const char *file, int line, const char *thread_name)
|
3c543ab3
|
410
|
if (!trace2_enabled)
|
3c543ab3
|
411
|
return;
|
3c543ab3
|
413
|
if (tr2tls_is_main_thread()) {
|
3c543ab3
|
423
|
trace2_region_enter_printf_fl(file, line, NULL, NULL, NULL,
|
3c543ab3
|
426
|
return;
|
3c543ab3
|
429
|
us_now = getnanotime() / 1000;
|
3c543ab3
|
430
|
us_elapsed_absolute = tr2tls_absolute_elapsed(us_now);
|
3c543ab3
|
432
|
tr2tls_create_self(thread_name);
|
3c543ab3
|
434
|
for_each_wanted_builtin (j, tgt_j)
|
3c543ab3
|
435
|
if (tgt_j->pfn_thread_start_fl)
|
3c543ab3
|
436
|
tgt_j->pfn_thread_start_fl(file, line,
|
3c543ab3
|
440
|
void trace2_thread_exit_fl(const char *file, int line)
|
3c543ab3
|
448
|
if (!trace2_enabled)
|
3c543ab3
|
449
|
return;
|
3c543ab3
|
451
|
if (tr2tls_is_main_thread()) {
|
3c543ab3
|
462
|
trace2_region_leave_printf_fl(file, line, NULL, NULL, NULL,
|
3c543ab3
|
464
|
return;
|
3c543ab3
|
467
|
us_now = getnanotime() / 1000;
|
3c543ab3
|
468
|
us_elapsed_absolute = tr2tls_absolute_elapsed(us_now);
|
3c543ab3
|
475
|
tr2tls_pop_unwind_self();
|
3c543ab3
|
476
|
us_elapsed_thread = tr2tls_region_elasped_self(us_now);
|
3c543ab3
|
478
|
for_each_wanted_builtin (j, tgt_j)
|
3c543ab3
|
479
|
if (tgt_j->pfn_thread_exit_fl)
|
3c543ab3
|
480
|
tgt_j->pfn_thread_exit_fl(file, line,
|
3c543ab3
|
484
|
tr2tls_unset_self();
|
3c543ab3
|
494
|
return;
|
3c543ab3
|
509
|
if (repo->trace2_repo_id)
|
3c543ab3
|
510
|
return;
|
3c543ab3
|
512
|
repo->trace2_repo_id = tr2tls_locked_increment(&tr2_next_repo_id);
|
3c543ab3
|
514
|
for_each_wanted_builtin (j, tgt_j)
|
3c543ab3
|
515
|
if (tgt_j->pfn_repo_fl)
|
3c543ab3
|
516
|
tgt_j->pfn_repo_fl(file, line, repo);
|
3c543ab3
|
532
|
us_now = getnanotime() / 1000;
|
3c543ab3
|
533
|
us_elapsed_absolute = tr2tls_absolute_elapsed(us_now);
|
3c543ab3
|
542
|
for_each_wanted_builtin (j, tgt_j)
|
3c543ab3
|
543
|
if (tgt_j->pfn_region_enter_printf_va_fl)
|
3c543ab3
|
544
|
tgt_j->pfn_region_enter_printf_va_fl(
|
3c543ab3
|
548
|
tr2tls_push_self(us_now);
|
3c543ab3
|
599
|
us_now = getnanotime() / 1000;
|
3c543ab3
|
600
|
us_elapsed_absolute = tr2tls_absolute_elapsed(us_now);
|
3c543ab3
|
608
|
us_elapsed_region = tr2tls_region_elasped_self(us_now);
|
3c543ab3
|
610
|
tr2tls_pop_self();
|
3c543ab3
|
616
|
for_each_wanted_builtin (j, tgt_j)
|
3c543ab3
|
617
|
if (tgt_j->pfn_region_leave_printf_va_fl)
|
3c543ab3
|
618
|
tgt_j->pfn_region_leave_printf_va_fl(
|
3c543ab3
|
669
|
return;
|
3c543ab3
|
691
|
strbuf_addf(&buf_string, "%" PRIdMAX, value);
|
3c543ab3
|
692
|
trace2_data_string_fl(file, line, category, repo, key, buf_string.buf);
|
3c543ab3
|
693
|
strbuf_release(&buf_string);
|
3c543ab3
|
696
|
void trace2_data_json_fl(const char *file, int line, const char *category,
|
3c543ab3
|
706
|
if (!trace2_enabled)
|
3c543ab3
|
707
|
return;
|
3c543ab3
|
709
|
us_now = getnanotime() / 1000;
|
3c543ab3
|
710
|
us_elapsed_absolute = tr2tls_absolute_elapsed(us_now);
|
3c543ab3
|
711
|
us_elapsed_region = tr2tls_region_elasped_self(us_now);
|
3c543ab3
|
713
|
for_each_wanted_builtin (j, tgt_j)
|
3c543ab3
|
714
|
if (tgt_j->pfn_data_fl)
|
3c543ab3
|
715
|
tgt_j->pfn_data_json_fl(file, line, us_elapsed_absolute,
|
3c543ab3
|
720
|
void trace2_printf_va_fl(const char *file, int line, const char *fmt,
|
3c543ab3
|
728
|
if (!trace2_enabled)
|
3c543ab3
|
729
|
return;
|
3c543ab3
|
731
|
us_now = getnanotime() / 1000;
|
3c543ab3
|
732
|
us_elapsed_absolute = tr2tls_absolute_elapsed(us_now);
|
3c543ab3
|
738
|
for_each_wanted_builtin (j, tgt_j)
|
3c543ab3
|
739
|
if (tgt_j->pfn_printf_va_fl)
|
3c543ab3
|
740
|
tgt_j->pfn_printf_va_fl(file, line, us_elapsed_absolute,
|
3c543ab3
|
744
|
void trace2_printf_fl(const char *file, int line, const char *fmt, ...)
|
3c543ab3
|
748
|
va_start(ap, fmt);
|
3c543ab3
|
749
|
trace2_printf_va_fl(file, line, fmt, ap);
|
3c543ab3
|
750
|
va_end(ap);
|
3c543ab3
|
751
|
}
|
3c543ab3
|
15
|
static int tr2_dst_want_warning(void)
|
3c543ab3
|
19
|
if (tr2env_dst_debug == -1) {
|
3c543ab3
|
20
|
const char *env_value = getenv(TR2_ENVVAR_DST_DEBUG);
|
3c543ab3
|
21
|
if (!env_value || !*env_value)
|
3c543ab3
|
22
|
tr2env_dst_debug = 0;
|
3c543ab3
|
24
|
tr2env_dst_debug = atoi(env_value) > 0;
|
3c543ab3
|
27
|
return tr2env_dst_debug;
|
3c543ab3
|
43
|
if (tr2_dst_want_warning())
|
3c543ab3
|
44
|
warning("trace2: could not open '%s' for '%s' tracing: %s",
|
3c543ab3
|
45
|
tgt_value, dst->env_var_name, strerror(errno));
|
3c543ab3
|
47
|
tr2_dst_trace_disable(dst);
|
3c543ab3
|
48
|
return 0;
|
3c543ab3
|
62
|
static int tr2_dst_try_unix_domain_socket(struct tr2_dst *dst,
|
3c543ab3
|
67
|
const char *path = tgt_value + PREFIX_AF_UNIX_LEN;
|
3c543ab3
|
68
|
int path_len = strlen(path);
|
3c543ab3
|
70
|
if (!is_absolute_path(path) || path_len >= sizeof(sa.sun_path)) {
|
3c543ab3
|
71
|
if (tr2_dst_want_warning())
|
3c543ab3
|
72
|
warning("trace2: invalid AF_UNIX path '%s' for '%s' tracing",
|
3c543ab3
|
75
|
tr2_dst_trace_disable(dst);
|
3c543ab3
|
76
|
return 0;
|
3c543ab3
|
79
|
sa.sun_family = AF_UNIX;
|
3c543ab3
|
80
|
strlcpy(sa.sun_path, path, sizeof(sa.sun_path));
|
3c543ab3
|
81
|
if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1 ||
|
3c543ab3
|
82
|
connect(fd, (struct sockaddr *)&sa, sizeof(sa)) == -1) {
|
3c543ab3
|
83
|
if (tr2_dst_want_warning())
|
3c543ab3
|
84
|
warning("trace2: could not connect to socket '%s' for '%s' tracing: %s",
|
3c543ab3
|
85
|
path, dst->env_var_name, strerror(errno));
|
3c543ab3
|
87
|
tr2_dst_trace_disable(dst);
|
3c543ab3
|
88
|
return 0;
|
3c543ab3
|
91
|
dst->fd = fd;
|
3c543ab3
|
92
|
dst->need_close = 1;
|
3c543ab3
|
93
|
dst->initialized = 1;
|
3c543ab3
|
95
|
return dst->fd;
|
3c543ab3
|
99
|
static void tr2_dst_malformed_warning(struct tr2_dst *dst,
|
3c543ab3
|
102
|
struct strbuf buf = STRBUF_INIT;
|
3c543ab3
|
104
|
strbuf_addf(&buf, "trace2: unknown trace value for '%s': '%s'",
|
3c543ab3
|
106
|
strbuf_addstr(
|
3c543ab3
|
111
|
strbuf_addstr(
|
3c543ab3
|
117
|
warning("%s", buf.buf);
|
3c543ab3
|
119
|
strbuf_release(&buf);
|
3c543ab3
|
120
|
}
|
3c543ab3
|
141
|
dst->fd = STDERR_FILENO;
|
3c543ab3
|
142
|
return dst->fd;
|
3c543ab3
|
146
|
dst->fd = atoi(tgt_value);
|
3c543ab3
|
147
|
return dst->fd;
|
3c543ab3
|
154
|
if (!strncmp(tgt_value, PREFIX_AF_UNIX, PREFIX_AF_UNIX_LEN))
|
3c543ab3
|
155
|
return tr2_dst_try_unix_domain_socket(dst, tgt_value);
|
3c543ab3
|
159
|
tr2_dst_malformed_warning(dst, tgt_value);
|
3c543ab3
|
160
|
tr2_dst_trace_disable(dst);
|
3c543ab3
|
161
|
return 0;
|
3c543ab3
|
193
|
if (tr2_dst_want_warning())
|
3c543ab3
|
194
|
warning("unable to write trace to '%s': %s", dst->env_var_name,
|
3c543ab3
|
195
|
strerror(errno));
|
3c543ab3
|
196
|
tr2_dst_trace_disable(dst);
|
3c543ab3
|
57
|
tr2env_event_nesting_wanted = want_nesting;
|
3c543ab3
|
61
|
tr2env_event_brief = want_brief;
|
3c543ab3
|
96
|
!strcmp(event_name, "atexit")) {
|
3c543ab3
|
158
|
static void fn_signal(uint64_t us_elapsed_absolute, int signo)
|
3c543ab3
|
160
|
const char *event_name = "signal";
|
3c543ab3
|
161
|
struct json_writer jw = JSON_WRITER_INIT;
|
3c543ab3
|
162
|
double t_abs = (double)us_elapsed_absolute / 1000000.0;
|
3c543ab3
|
164
|
jw_object_begin(&jw, 0);
|
3c543ab3
|
165
|
event_fmt_prepare(event_name, __FILE__, __LINE__, NULL, &jw);
|
3c543ab3
|
166
|
jw_object_double(&jw, "t_abs", 6, t_abs);
|
3c543ab3
|
167
|
jw_object_intmax(&jw, "signo", signo);
|
3c543ab3
|
168
|
jw_end(&jw);
|
3c543ab3
|
170
|
tr2_dst_write_line(&tr2dst_event, &jw.json);
|
3c543ab3
|
171
|
jw_release(&jw);
|
3c543ab3
|
172
|
}
|
3c543ab3
|
206
|
if (fmt && *fmt) {
|
3c543ab3
|
207
|
jw_object_string(jw, field_name, fmt);
|
3c543ab3
|
208
|
return;
|
3c543ab3
|
235
|
static void fn_command_path_fl(const char *file, int line, const char *pathname)
|
3c543ab3
|
237
|
const char *event_name = "cmd_path";
|
3c543ab3
|
238
|
struct json_writer jw = JSON_WRITER_INIT;
|
3c543ab3
|
240
|
jw_object_begin(&jw, 0);
|
3c543ab3
|
241
|
event_fmt_prepare(event_name, file, line, NULL, &jw);
|
3c543ab3
|
242
|
jw_object_string(&jw, "path", pathname);
|
3c543ab3
|
243
|
jw_end(&jw);
|
3c543ab3
|
245
|
tr2_dst_write_line(&tr2dst_event, &jw.json);
|
3c543ab3
|
246
|
jw_release(&jw);
|
3c543ab3
|
247
|
}
|
3c543ab3
|
267
|
static void fn_command_mode_fl(const char *file, int line, const char *mode)
|
3c543ab3
|
269
|
const char *event_name = "cmd_mode";
|
3c543ab3
|
270
|
struct json_writer jw = JSON_WRITER_INIT;
|
3c543ab3
|
272
|
jw_object_begin(&jw, 0);
|
3c543ab3
|
273
|
event_fmt_prepare(event_name, file, line, NULL, &jw);
|
3c543ab3
|
274
|
jw_object_string(&jw, "name", mode);
|
3c543ab3
|
275
|
jw_end(&jw);
|
3c543ab3
|
277
|
tr2_dst_write_line(&tr2dst_event, &jw.json);
|
3c543ab3
|
278
|
jw_release(&jw);
|
3c543ab3
|
279
|
}
|
3c543ab3
|
281
|
static void fn_alias_fl(const char *file, int line, const char *alias,
|
3c543ab3
|
284
|
const char *event_name = "alias";
|
3c543ab3
|
285
|
struct json_writer jw = JSON_WRITER_INIT;
|
3c543ab3
|
287
|
jw_object_begin(&jw, 0);
|
3c543ab3
|
288
|
event_fmt_prepare(event_name, file, line, NULL, &jw);
|
3c543ab3
|
289
|
jw_object_string(&jw, "alias", alias);
|
3c543ab3
|
290
|
jw_object_inline_begin_array(&jw, "argv");
|
3c543ab3
|
291
|
jw_array_argv(&jw, argv);
|
3c543ab3
|
292
|
jw_end(&jw);
|
3c543ab3
|
293
|
jw_end(&jw);
|
3c543ab3
|
295
|
tr2_dst_write_line(&tr2dst_event, &jw.json);
|
3c543ab3
|
296
|
jw_release(&jw);
|
3c543ab3
|
297
|
}
|
3c543ab3
|
310
|
jw_object_string(&jw, "child_class", "hook");
|
3c543ab3
|
311
|
jw_object_string(&jw, "hook_name", cmd->trace2_hook_name);
|
3c543ab3
|
318
|
jw_object_string(&jw, "cd", cmd->dir);
|
3c543ab3
|
322
|
jw_array_string(&jw, "git");
|
3c543ab3
|
352
|
static void fn_thread_start_fl(const char *file, int line,
|
3c543ab3
|
355
|
const char *event_name = "thread_start";
|
3c543ab3
|
356
|
struct json_writer jw = JSON_WRITER_INIT;
|
3c543ab3
|
358
|
jw_object_begin(&jw, 0);
|
3c543ab3
|
359
|
event_fmt_prepare(event_name, file, line, NULL, &jw);
|
3c543ab3
|
360
|
jw_end(&jw);
|
3c543ab3
|
362
|
tr2_dst_write_line(&tr2dst_event, &jw.json);
|
3c543ab3
|
363
|
jw_release(&jw);
|
3c543ab3
|
364
|
}
|
3c543ab3
|
366
|
static void fn_thread_exit_fl(const char *file, int line,
|
3c543ab3
|
370
|
const char *event_name = "thread_exit";
|
3c543ab3
|
371
|
struct json_writer jw = JSON_WRITER_INIT;
|
3c543ab3
|
372
|
double t_rel = (double)us_elapsed_thread / 1000000.0;
|
3c543ab3
|
374
|
jw_object_begin(&jw, 0);
|
3c543ab3
|
375
|
event_fmt_prepare(event_name, file, line, NULL, &jw);
|
3c543ab3
|
376
|
jw_object_double(&jw, "t_rel", 6, t_rel);
|
3c543ab3
|
377
|
jw_end(&jw);
|
3c543ab3
|
379
|
tr2_dst_write_line(&tr2dst_event, &jw.json);
|
3c543ab3
|
380
|
jw_release(&jw);
|
3c543ab3
|
381
|
}
|
3c543ab3
|
383
|
static void fn_exec_fl(const char *file, int line, uint64_t us_elapsed_absolute,
|
3c543ab3
|
386
|
const char *event_name = "exec";
|
3c543ab3
|
387
|
struct json_writer jw = JSON_WRITER_INIT;
|
3c543ab3
|
389
|
jw_object_begin(&jw, 0);
|
3c543ab3
|
390
|
event_fmt_prepare(event_name, file, line, NULL, &jw);
|
3c543ab3
|
391
|
jw_object_intmax(&jw, "exec_id", exec_id);
|
3c543ab3
|
392
|
if (exe)
|
3c543ab3
|
393
|
jw_object_string(&jw, "exe", exe);
|
3c543ab3
|
394
|
jw_object_inline_begin_array(&jw, "argv");
|
3c543ab3
|
395
|
jw_array_argv(&jw, argv);
|
3c543ab3
|
396
|
jw_end(&jw);
|
3c543ab3
|
397
|
jw_end(&jw);
|
3c543ab3
|
399
|
tr2_dst_write_line(&tr2dst_event, &jw.json);
|
3c543ab3
|
400
|
jw_release(&jw);
|
3c543ab3
|
401
|
}
|
3c543ab3
|
403
|
static void fn_exec_result_fl(const char *file, int line,
|
3c543ab3
|
407
|
const char *event_name = "exec_result";
|
3c543ab3
|
408
|
struct json_writer jw = JSON_WRITER_INIT;
|
3c543ab3
|
410
|
jw_object_begin(&jw, 0);
|
3c543ab3
|
411
|
event_fmt_prepare(event_name, file, line, NULL, &jw);
|
3c543ab3
|
412
|
jw_object_intmax(&jw, "exec_id", exec_id);
|
3c543ab3
|
413
|
jw_object_intmax(&jw, "code", code);
|
3c543ab3
|
414
|
jw_end(&jw);
|
3c543ab3
|
416
|
tr2_dst_write_line(&tr2dst_event, &jw.json);
|
3c543ab3
|
417
|
jw_release(&jw);
|
3c543ab3
|
418
|
}
|
3c543ab3
|
436
|
static void fn_repo_fl(const char *file, int line,
|
3c543ab3
|
439
|
const char *event_name = "def_repo";
|
3c543ab3
|
440
|
struct json_writer jw = JSON_WRITER_INIT;
|
3c543ab3
|
442
|
jw_object_begin(&jw, 0);
|
3c543ab3
|
443
|
event_fmt_prepare(event_name, file, line, repo, &jw);
|
3c543ab3
|
444
|
jw_object_string(&jw, "worktree", repo->worktree);
|
3c543ab3
|
445
|
jw_end(&jw);
|
3c543ab3
|
447
|
tr2_dst_write_line(&tr2dst_event, &jw.json);
|
3c543ab3
|
448
|
jw_release(&jw);
|
3c543ab3
|
449
|
}
|
3c543ab3
|
451
|
static void fn_region_enter_printf_va_fl(const char *file, int line,
|
3c543ab3
|
458
|
const char *event_name = "region_enter";
|
3c543ab3
|
459
|
struct tr2tls_thread_ctx *ctx = tr2tls_get_self();
|
3c543ab3
|
460
|
if (ctx->nr_open_regions <= tr2env_event_nesting_wanted) {
|
3c543ab3
|
461
|
struct json_writer jw = JSON_WRITER_INIT;
|
3c543ab3
|
463
|
jw_object_begin(&jw, 0);
|
3c543ab3
|
464
|
event_fmt_prepare(event_name, file, line, repo, &jw);
|
3c543ab3
|
465
|
jw_object_intmax(&jw, "nesting", ctx->nr_open_regions);
|
3c543ab3
|
466
|
if (category)
|
3c543ab3
|
467
|
jw_object_string(&jw, "category", category);
|
3c543ab3
|
468
|
if (label)
|
3c543ab3
|
469
|
jw_object_string(&jw, "label", label);
|
3c543ab3
|
470
|
maybe_add_string_va(&jw, "msg", fmt, ap);
|
3c543ab3
|
471
|
jw_end(&jw);
|
3c543ab3
|
473
|
tr2_dst_write_line(&tr2dst_event, &jw.json);
|
3c543ab3
|
474
|
jw_release(&jw);
|
3c543ab3
|
476
|
}
|
3c543ab3
|
478
|
static void fn_region_leave_printf_va_fl(
|
3c543ab3
|
483
|
const char *event_name = "region_leave";
|
3c543ab3
|
484
|
struct tr2tls_thread_ctx *ctx = tr2tls_get_self();
|
3c543ab3
|
485
|
if (ctx->nr_open_regions <= tr2env_event_nesting_wanted) {
|
3c543ab3
|
486
|
struct json_writer jw = JSON_WRITER_INIT;
|
3c543ab3
|
487
|
double t_rel = (double)us_elapsed_region / 1000000.0;
|
3c543ab3
|
489
|
jw_object_begin(&jw, 0);
|
3c543ab3
|
490
|
event_fmt_prepare(event_name, file, line, repo, &jw);
|
3c543ab3
|
491
|
jw_object_double(&jw, "t_rel", 6, t_rel);
|
3c543ab3
|
492
|
jw_object_intmax(&jw, "nesting", ctx->nr_open_regions);
|
3c543ab3
|
493
|
if (category)
|
3c543ab3
|
494
|
jw_object_string(&jw, "category", category);
|
3c543ab3
|
495
|
if (label)
|
3c543ab3
|
496
|
jw_object_string(&jw, "label", label);
|
3c543ab3
|
497
|
maybe_add_string_va(&jw, "msg", fmt, ap);
|
3c543ab3
|
498
|
jw_end(&jw);
|
3c543ab3
|
500
|
tr2_dst_write_line(&tr2dst_event, &jw.json);
|
3c543ab3
|
501
|
jw_release(&jw);
|
3c543ab3
|
503
|
}
|
3c543ab3
|
532
|
static void fn_data_json_fl(const char *file, int line,
|
3c543ab3
|
538
|
const char *event_name = "data_json";
|
3c543ab3
|
539
|
struct tr2tls_thread_ctx *ctx = tr2tls_get_self();
|
3c543ab3
|
540
|
if (ctx->nr_open_regions <= tr2env_event_nesting_wanted) {
|
3c543ab3
|
541
|
struct json_writer jw = JSON_WRITER_INIT;
|
3c543ab3
|
542
|
double t_abs = (double)us_elapsed_absolute / 1000000.0;
|
3c543ab3
|
543
|
double t_rel = (double)us_elapsed_region / 1000000.0;
|
3c543ab3
|
545
|
jw_object_begin(&jw, 0);
|
3c543ab3
|
546
|
event_fmt_prepare(event_name, file, line, repo, &jw);
|
3c543ab3
|
547
|
jw_object_double(&jw, "t_abs", 6, t_abs);
|
3c543ab3
|
548
|
jw_object_double(&jw, "t_rel", 6, t_rel);
|
3c543ab3
|
549
|
jw_object_intmax(&jw, "nesting", ctx->nr_open_regions);
|
3c543ab3
|
550
|
jw_object_string(&jw, "category", category);
|
3c543ab3
|
551
|
jw_object_string(&jw, "key", key);
|
3c543ab3
|
552
|
jw_object_sub_jw(&jw, "value", value);
|
3c543ab3
|
553
|
jw_end(&jw);
|
3c543ab3
|
555
|
tr2_dst_write_line(&tr2dst_event, &jw.json);
|
3c543ab3
|
556
|
jw_release(&jw);
|
3c543ab3
|
558
|
}
|
3c543ab3
|
105
|
static void fn_signal(uint64_t us_elapsed_absolute, int signo)
|
3c543ab3
|
107
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
108
|
double elapsed = (double)us_elapsed_absolute / 1000000.0;
|
3c543ab3
|
110
|
strbuf_addf(&buf_payload, "signal elapsed:%.6f code:%d", elapsed,
|
3c543ab3
|
112
|
normal_io_write_fl(__FILE__, __LINE__, &buf_payload);
|
3c543ab3
|
113
|
strbuf_release(&buf_payload);
|
3c543ab3
|
114
|
}
|
3c543ab3
|
138
|
if (fmt && *fmt) {
|
3c543ab3
|
139
|
strbuf_addstr(buf, fmt);
|
3c543ab3
|
140
|
return;
|
3c543ab3
|
155
|
static void fn_command_path_fl(const char *file, int line, const char *pathname)
|
3c543ab3
|
157
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
159
|
strbuf_addf(&buf_payload, "cmd_path %s", pathname);
|
3c543ab3
|
160
|
normal_io_write_fl(file, line, &buf_payload);
|
3c543ab3
|
161
|
strbuf_release(&buf_payload);
|
3c543ab3
|
162
|
}
|
3c543ab3
|
177
|
static void fn_command_mode_fl(const char *file, int line, const char *mode)
|
3c543ab3
|
179
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
181
|
strbuf_addf(&buf_payload, "cmd_mode %s", mode);
|
3c543ab3
|
182
|
normal_io_write_fl(file, line, &buf_payload);
|
3c543ab3
|
183
|
strbuf_release(&buf_payload);
|
3c543ab3
|
184
|
}
|
3c543ab3
|
186
|
static void fn_alias_fl(const char *file, int line, const char *alias,
|
3c543ab3
|
189
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
191
|
strbuf_addf(&buf_payload, "alias %s ->", alias);
|
3c543ab3
|
192
|
sq_quote_argv_pretty(&buf_payload, argv);
|
3c543ab3
|
193
|
normal_io_write_fl(file, line, &buf_payload);
|
3c543ab3
|
194
|
strbuf_release(&buf_payload);
|
3c543ab3
|
195
|
}
|
3c543ab3
|
197
|
static void fn_child_start_fl(const char *file, int line,
|
3c543ab3
|
201
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
203
|
strbuf_addf(&buf_payload, "child_start[%d] ", cmd->trace2_child_id);
|
3c543ab3
|
205
|
if (cmd->dir) {
|
3c543ab3
|
206
|
strbuf_addstr(&buf_payload, " cd");
|
3c543ab3
|
207
|
sq_quote_buf_pretty(&buf_payload, cmd->dir);
|
3c543ab3
|
208
|
strbuf_addstr(&buf_payload, "; ");
|
3c543ab3
|
216
|
if (cmd->git_cmd)
|
3c543ab3
|
217
|
strbuf_addstr(&buf_payload, "git");
|
3c543ab3
|
218
|
sq_quote_argv_pretty(&buf_payload, cmd->argv);
|
3c543ab3
|
220
|
normal_io_write_fl(file, line, &buf_payload);
|
3c543ab3
|
221
|
strbuf_release(&buf_payload);
|
3c543ab3
|
222
|
}
|
3c543ab3
|
224
|
static void fn_child_exit_fl(const char *file, int line,
|
3c543ab3
|
228
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
229
|
double elapsed = (double)us_elapsed_child / 1000000.0;
|
3c543ab3
|
231
|
strbuf_addf(&buf_payload, "child_exit[%d] pid:%d code:%d elapsed:%.6f",
|
3c543ab3
|
233
|
normal_io_write_fl(file, line, &buf_payload);
|
3c543ab3
|
234
|
strbuf_release(&buf_payload);
|
3c543ab3
|
235
|
}
|
3c543ab3
|
237
|
static void fn_exec_fl(const char *file, int line, uint64_t us_elapsed_absolute,
|
3c543ab3
|
240
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
242
|
strbuf_addf(&buf_payload, "exec[%d] ", exec_id);
|
3c543ab3
|
243
|
if (exe)
|
3c543ab3
|
244
|
strbuf_addstr(&buf_payload, exe);
|
3c543ab3
|
245
|
sq_quote_argv_pretty(&buf_payload, argv);
|
3c543ab3
|
246
|
normal_io_write_fl(file, line, &buf_payload);
|
3c543ab3
|
247
|
strbuf_release(&buf_payload);
|
3c543ab3
|
248
|
}
|
3c543ab3
|
250
|
static void fn_exec_result_fl(const char *file, int line,
|
3c543ab3
|
254
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
256
|
strbuf_addf(&buf_payload, "exec_result[%d] code:%d", exec_id, code);
|
3c543ab3
|
257
|
if (code > 0)
|
3c543ab3
|
258
|
strbuf_addf(&buf_payload, " err:%s", strerror(code));
|
3c543ab3
|
259
|
normal_io_write_fl(file, line, &buf_payload);
|
3c543ab3
|
260
|
strbuf_release(&buf_payload);
|
3c543ab3
|
261
|
}
|
3c543ab3
|
263
|
static void fn_param_fl(const char *file, int line, const char *param,
|
3c543ab3
|
266
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
268
|
strbuf_addf(&buf_payload, "def_param %s=%s", param, value);
|
3c543ab3
|
269
|
normal_io_write_fl(file, line, &buf_payload);
|
3c543ab3
|
270
|
strbuf_release(&buf_payload);
|
3c543ab3
|
271
|
}
|
3c543ab3
|
273
|
static void fn_repo_fl(const char *file, int line,
|
3c543ab3
|
276
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
278
|
strbuf_addstr(&buf_payload, "worktree ");
|
3c543ab3
|
279
|
sq_quote_buf_pretty(&buf_payload, repo->worktree);
|
3c543ab3
|
280
|
normal_io_write_fl(file, line, &buf_payload);
|
3c543ab3
|
281
|
strbuf_release(&buf_payload);
|
3c543ab3
|
282
|
}
|
3c543ab3
|
284
|
static void fn_printf_va_fl(const char *file, int line,
|
3c543ab3
|
288
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
290
|
maybe_append_string_va(&buf_payload, fmt, ap);
|
3c543ab3
|
291
|
normal_io_write_fl(file, line, &buf_payload);
|
3c543ab3
|
292
|
strbuf_release(&buf_payload);
|
3c543ab3
|
293
|
}
|
3c543ab3
|
102
|
strbuf_addf(buf, "r%d ", repo->trace2_repo_id);
|
3c543ab3
|
125
|
strbuf_addbuf(buf, &dots);
|
3c543ab3
|
126
|
len_indent -= dots.len;
|
3c543ab3
|
187
|
static void fn_signal(uint64_t us_elapsed_absolute, int signo)
|
3c543ab3
|
189
|
const char *event_name = "signal";
|
3c543ab3
|
190
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
192
|
strbuf_addf(&buf_payload, "signo:%d", signo);
|
3c543ab3
|
194
|
perf_io_write_fl(__FILE__, __LINE__, event_name, NULL,
|
3c543ab3
|
196
|
strbuf_release(&buf_payload);
|
3c543ab3
|
197
|
}
|
3c543ab3
|
223
|
if (fmt && *fmt) {
|
3c543ab3
|
224
|
strbuf_addstr(buf, fmt);
|
3c543ab3
|
225
|
return;
|
3c543ab3
|
242
|
static void fn_command_path_fl(const char *file, int line, const char *pathname)
|
3c543ab3
|
244
|
const char *event_name = "cmd_path";
|
3c543ab3
|
245
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
247
|
strbuf_addstr(&buf_payload, pathname);
|
3c543ab3
|
249
|
perf_io_write_fl(file, line, event_name, NULL, NULL, NULL, NULL,
|
3c543ab3
|
251
|
strbuf_release(&buf_payload);
|
3c543ab3
|
252
|
}
|
3c543ab3
|
270
|
static void fn_command_mode_fl(const char *file, int line, const char *mode)
|
3c543ab3
|
272
|
const char *event_name = "cmd_mode";
|
3c543ab3
|
273
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
275
|
strbuf_addstr(&buf_payload, mode);
|
3c543ab3
|
277
|
perf_io_write_fl(file, line, event_name, NULL, NULL, NULL, NULL,
|
3c543ab3
|
279
|
strbuf_release(&buf_payload);
|
3c543ab3
|
280
|
}
|
3c543ab3
|
282
|
static void fn_alias_fl(const char *file, int line, const char *alias,
|
3c543ab3
|
285
|
const char *event_name = "alias";
|
3c543ab3
|
286
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
288
|
strbuf_addf(&buf_payload, "alias:%s argv:", alias);
|
3c543ab3
|
289
|
sq_quote_argv_pretty(&buf_payload, argv);
|
3c543ab3
|
291
|
perf_io_write_fl(file, line, event_name, NULL, NULL, NULL, NULL,
|
3c543ab3
|
293
|
strbuf_release(&buf_payload);
|
3c543ab3
|
294
|
}
|
3c543ab3
|
304
|
strbuf_addf(&buf_payload, "[ch%d] class:hook hook:%s",
|
3c543ab3
|
314
|
strbuf_addstr(&buf_payload, " cd:");
|
3c543ab3
|
315
|
sq_quote_buf_pretty(&buf_payload, cmd->dir);
|
3c543ab3
|
320
|
strbuf_addstr(&buf_payload, " git");
|
3c543ab3
|
342
|
static void fn_thread_start_fl(const char *file, int line,
|
3c543ab3
|
345
|
const char *event_name = "thread_start";
|
3c543ab3
|
346
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
348
|
perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute,
|
3c543ab3
|
350
|
strbuf_release(&buf_payload);
|
3c543ab3
|
351
|
}
|
3c543ab3
|
353
|
static void fn_thread_exit_fl(const char *file, int line,
|
3c543ab3
|
357
|
const char *event_name = "thread_exit";
|
3c543ab3
|
358
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
360
|
perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute,
|
3c543ab3
|
362
|
strbuf_release(&buf_payload);
|
3c543ab3
|
363
|
}
|
3c543ab3
|
365
|
static void fn_exec_fl(const char *file, int line, uint64_t us_elapsed_absolute,
|
3c543ab3
|
368
|
const char *event_name = "exec";
|
3c543ab3
|
369
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
371
|
strbuf_addf(&buf_payload, "id:%d ", exec_id);
|
3c543ab3
|
372
|
strbuf_addstr(&buf_payload, "argv:");
|
3c543ab3
|
373
|
if (exe)
|
3c543ab3
|
374
|
strbuf_addf(&buf_payload, " %s", exe);
|
3c543ab3
|
375
|
sq_quote_argv_pretty(&buf_payload, argv);
|
3c543ab3
|
377
|
perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute,
|
3c543ab3
|
379
|
strbuf_release(&buf_payload);
|
3c543ab3
|
380
|
}
|
3c543ab3
|
382
|
static void fn_exec_result_fl(const char *file, int line,
|
3c543ab3
|
386
|
const char *event_name = "exec_result";
|
3c543ab3
|
387
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
389
|
strbuf_addf(&buf_payload, "id:%d code:%d", exec_id, code);
|
3c543ab3
|
390
|
if (code > 0)
|
3c543ab3
|
391
|
strbuf_addf(&buf_payload, " err:%s", strerror(code));
|
3c543ab3
|
393
|
perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute,
|
3c543ab3
|
395
|
strbuf_release(&buf_payload);
|
3c543ab3
|
396
|
}
|
3c543ab3
|
398
|
static void fn_param_fl(const char *file, int line, const char *param,
|
3c543ab3
|
401
|
const char *event_name = "def_param";
|
3c543ab3
|
402
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
404
|
strbuf_addf(&buf_payload, "%s:%s", param, value);
|
3c543ab3
|
406
|
perf_io_write_fl(file, line, event_name, NULL, NULL, NULL, NULL,
|
3c543ab3
|
408
|
strbuf_release(&buf_payload);
|
3c543ab3
|
409
|
}
|
3c543ab3
|
411
|
static void fn_repo_fl(const char *file, int line,
|
3c543ab3
|
414
|
const char *event_name = "def_repo";
|
3c543ab3
|
415
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
417
|
strbuf_addstr(&buf_payload, "worktree:");
|
3c543ab3
|
418
|
sq_quote_buf_pretty(&buf_payload, repo->worktree);
|
3c543ab3
|
420
|
perf_io_write_fl(file, line, event_name, repo, NULL, NULL, NULL,
|
3c543ab3
|
422
|
strbuf_release(&buf_payload);
|
3c543ab3
|
423
|
}
|
3c543ab3
|
425
|
static void fn_region_enter_printf_va_fl(const char *file, int line,
|
3c543ab3
|
432
|
const char *event_name = "region_enter";
|
3c543ab3
|
433
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
435
|
if (label)
|
3c543ab3
|
436
|
strbuf_addf(&buf_payload, "label:%s ", label);
|
3c543ab3
|
437
|
maybe_append_string_va(&buf_payload, fmt, ap);
|
3c543ab3
|
439
|
perf_io_write_fl(file, line, event_name, repo, &us_elapsed_absolute,
|
3c543ab3
|
441
|
strbuf_release(&buf_payload);
|
3c543ab3
|
442
|
}
|
3c543ab3
|
444
|
static void fn_region_leave_printf_va_fl(
|
3c543ab3
|
449
|
const char *event_name = "region_leave";
|
3c543ab3
|
450
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
452
|
if (label)
|
3c543ab3
|
453
|
strbuf_addf(&buf_payload, "label:%s ", label);
|
3c543ab3
|
454
|
maybe_append_string_va(&buf_payload, fmt, ap);
|
3c543ab3
|
456
|
perf_io_write_fl(file, line, event_name, repo, &us_elapsed_absolute,
|
3c543ab3
|
458
|
strbuf_release(&buf_payload);
|
3c543ab3
|
459
|
}
|
3c543ab3
|
461
|
static void fn_data_fl(const char *file, int line, uint64_t us_elapsed_absolute,
|
3c543ab3
|
466
|
const char *event_name = "data";
|
3c543ab3
|
467
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
469
|
strbuf_addf(&buf_payload, "%s:%s", key, value);
|
3c543ab3
|
471
|
perf_io_write_fl(file, line, event_name, repo, &us_elapsed_absolute,
|
3c543ab3
|
473
|
strbuf_release(&buf_payload);
|
3c543ab3
|
474
|
}
|
3c543ab3
|
476
|
static void fn_data_json_fl(const char *file, int line,
|
3c543ab3
|
482
|
const char *event_name = "data_json";
|
3c543ab3
|
483
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
485
|
strbuf_addf(&buf_payload, "%s:%s", key, value->json.buf);
|
3c543ab3
|
487
|
perf_io_write_fl(file, line, event_name, repo, &us_elapsed_absolute,
|
3c543ab3
|
489
|
strbuf_release(&buf_payload);
|
3c543ab3
|
490
|
}
|
3c543ab3
|
492
|
static void fn_printf_va_fl(const char *file, int line,
|
3c543ab3
|
496
|
const char *event_name = "printf";
|
3c543ab3
|
497
|
struct strbuf buf_payload = STRBUF_INIT;
|
3c543ab3
|
499
|
maybe_append_string_va(&buf_payload, fmt, ap);
|
3c543ab3
|
501
|
perf_io_write_fl(file, line, event_name, NULL, &us_elapsed_absolute,
|
3c543ab3
|
503
|
strbuf_release(&buf_payload);
|
3c543ab3
|
504
|
}
|
Alban Gruin
|
ce193960
|
sequencer: refactor skip_unnecessary_picks() to work on a todo_list
|
Alban Gruin
|
6ca89c6f
|
sequencer: refactor check_todo_list() to work on a todo_list
|
Alban Gruin
|
616d7740
|
sequencer: introduce todo_list_write_to_file()
|
Alban Gruin
|
6d3f180e
|
sequencer: refactor sequencer_add_exec_commands() to work on a todo_list
|
Alban Gruin
|
c0108d5c
|
rebase-interactive: rewrite edit_todo_list() to handle the initial edit
|
Alban Gruin
|
30faf278
|
rebase--interactive: move transform_todo_file() to rebase--interactive.c
|
Alban Gruin
|
1f4d9b1b
|
sequencer: change complete_action() to use the refactored functions
|
Alban Gruin
|
acabb2aa
|
sequencer: refactor rearrange_squash() to work on a todo_list
|
Anders Waldenborg
|
fd2015b3
|
strbuf: separate callback for strbuf_expand:ing literals
|
Anders Waldenborg
|
4f732e0f
|
pretty: allow %(trailers) options with explicit value
|
Barret Rhoden
|
e7973c85
|
blame: add the ability to ignore commits and their changes
|
Barret Rhoden
|
ef644c41
|
Move init_skiplist() outside of fsck
|
Barret Rhoden
|
07d04b91
|
blame: add a config option to mark ignored lines
|
Daniels Umanovskis
|
0ecb1fc7
|
branch: introduce --show-current display option
|
Denton Liu
|
f39a9c65
|
remote: add --save-to-push option to git remote set-url
|
Denton Liu
|
a3b994b7
|
merge: cleanup messages like commit
|
Derrick Stolee
|
91336887
|
repack: refactor pack deletion for future use
|
Derrick Stolee
|
467ae6f9
|
multi-pack-index: prepare 'repack' subcommand
|
Derrick Stolee
|
19c239d4
|
midx: implement midx_repack()
|
Derrick Stolee
|
3c9e7185
|
multi-pack-index: implement 'expire' subcommand
|
Derrick Stolee
|
5bf52fbc
|
midx: refactor permutation logic and pack sorting
|
Elijah Newren
|
26c64cee
|
log,diff-tree: add --combined-all-names option
|
Jeff King
|
34a9469d
|
remote-curl: refactor smart-http discovery
|
Joel Teichroeb
|
f6bbd781
|
stash: convert apply to builtin
|
Joel Teichroeb
|
e1d01876
|
stash: convert pop to builtin
|
Joel Teichroeb
|
cdca49bc
|
stash: convert drop and clear to builtin
|
Johannes Schindelin
|
bec65d5b
|
tests: add a special setup where stash.useBuiltin is off
|
Johannes Schindelin
|
26799a20
|
stash: optionally use the scripted version again
|
Jonathan Nieder
|
ee70c128
|
index: offer advice for unknown index extensions
|
Liam Beguin
|
0cce4a27
|
rebase -i -x: add exec commands via the rebase--helper
|
Martin Ågren
|
e0c4a731
|
setup: fix memory leaks with `struct repository_format`
|
Paul-Sebastian Ungureanu
|
9a95010a
|
stash: make push -q quiet
|
Paul-Sebastian Ungureanu
|
1f5a011d
|
stash: convert create to builtin
|
Paul-Sebastian Ungureanu
|
847eb0b0
|
stash: convert store to builtin
|
Paul-Sebastian Ungureanu
|
51809c70
|
stash: convert `stash--helper.c` into `stash.c`
|
Paul-Sebastian Ungureanu
|
b4493f26
|
stash: convert show to builtin
|
Paul-Sebastian Ungureanu
|
bfc3fe33
|
strbuf.c: add `strbuf_insertf()` and `strbuf_vinsertf()`
|
Paul-Sebastian Ungureanu
|
fa38428f
|
stash: convert push to builtin
|
René Scharfe
|
87805600
|
sequencer: factor out strbuf_read_file_or_whine()
|
William Hubbs
|
39ab4d09
|
config: allow giving separate author and committer idents
|
21853626
|
259
|
write_file(state_dir_path("verbose", opts), "%s", "");
|
21853626
|
261
|
write_file(state_dir_path("strategy", opts), "%s",
|
21853626
|
264
|
write_file(state_dir_path("strategy_opts", opts), "%s",
|
21853626
|
271
|
write_file(state_dir_path("gpg_sign_opt", opts), "%s",
|
21853626
|
274
|
write_file(state_dir_path("strategy", opts), "--signoff");
|
c5233708
|
394
|
BUG("Not a fully qualified branch: '%s'", switch_to_branch);
|
c5233708
|
397
|
ret = -1;
|
c5233708
|
398
|
goto leave_reset_head;
|
c5233708
|
402
|
ret = error(_("could not determine HEAD revision"));
|
c5233708
|
403
|
goto leave_reset_head;
|
c5233708
|
424
|
ret = error(_("could not read index"));
|
c5233708
|
425
|
goto leave_reset_head;
|
c5233708
|
429
|
ret = error(_("failed to find tree of %s"),
|
c5233708
|
431
|
goto leave_reset_head;
|
c5233708
|
435
|
ret = error(_("failed to find tree of %s"), oid_to_hex(oid));
|
c5233708
|
436
|
goto leave_reset_head;
|
c5233708
|
448
|
ret = error(_("could not write index"));
|
c5233708
|
449
|
goto leave_reset_head;
|
c5233708
|
467
|
} else if (old_orig)
|
c5233708
|
468
|
delete_ref(NULL, "ORIG_HEAD", old_orig, 0);
|
21853626
|
507
|
BUG("move_to_original_branch without onto");
|
21853626
|
543
|
argv_array_push(&am.args, opts->gpg_sign_opt);
|
21853626
|
575
|
status = error_errno(_("could not open '%s' for writing"),
|
21853626
|
577
|
free(rebased_patches);
|
21853626
|
578
|
argv_array_clear(&am.args);
|
21853626
|
579
|
return status;
|
21853626
|
588
|
argv_array_split(&format_patch.args,
|
21853626
|
589
|
opts->git_format_patch_opt.buf);
|
21853626
|
597
|
unlink(rebased_patches);
|
21853626
|
598
|
free(rebased_patches);
|
21853626
|
599
|
argv_array_clear(&am.args);
|
21853626
|
601
|
reset_head(&opts->orig_head, "checkout", opts->head_name, 0,
|
21853626
|
603
|
error(_("\ngit encountered an error while preparing the "
|
21853626
|
610
|
strbuf_release(&revisions);
|
21853626
|
611
|
return status;
|
21853626
|
617
|
status = error_errno(_("could not open '%s' for reading"),
|
21853626
|
619
|
free(rebased_patches);
|
21853626
|
620
|
argv_array_clear(&am.args);
|
21853626
|
621
|
return status;
|
David Turner
|
d1dd94b3
|
Do not print 'dangling' for cat-file in case of ambiguity
|
Derrick Stolee
|
4f6d26b1
|
list-objects: consume sparse tree walk
|
Derrick Stolee
|
d5d2e935
|
revision: implement sparse algorithm
|
Derrick Stolee
|
f1f5de44
|
revision: add mark_tree_uninteresting_sparse
|
Elijah Newren
|
899b49c4
|
git-rebase, sequencer: extend --quiet option for the interactive machinery
|
Jeff King
|
01f8d594
|
prefer "hash mismatch" to "sha1 mismatch"
|
Jeff King
|
514c5fdd
|
sha1-file: modernize loose object file functions
|
Jeff King
|
76011357
|
sha1-file: prefer "loose object file" to "sha1 file" in messages
|
Jeff King
|
2c319886
|
sha1-file: avoid "sha1 file" for generic use in messages
|
Jeff King
|
00a7760e
|
sha1-file: modernize loose header/stream functions
|
Johannes Schindelin
|
21853626
|
built-in rebase: call `git am` directly
|
Johannes Schindelin
|
c5233708
|
rebase: move `reset_head()` into a better spot
|
Johannes Schindelin
|
4419de91
|
test-date: add a subcommand to measure times in shell scripts
|
Johannes Schindelin
|
b819f1d2
|
ci: parallelize testing on Windows
|
Johannes Schindelin
|
5868bd86
|
tests: avoid calling Perl just to determine file sizes
|
Johannes Schindelin
|
af9912ef
|
tests: include detailed trace logs with --write-junit-xml upon failure
|
Johannes Schindelin
|
22231908
|
tests: optionally write results as JUnit-style .xml
|
Linus Torvalds
|
acdd3776
|
Add 'human' date format
|
Nguyễn Thái Ngọc Duy
|
f41179f1
|
parse-options: avoid magic return codes
|
Nguyễn Thái Ngọc Duy
|
3a95f31d
|
repository.c: replace hold_locked_index() with repo_hold_locked_index()
|
Nguyễn Thái Ngọc Duy
|
202fbb33
|
parse-options: add one-shot mode
|
Nguyễn Thái Ngọc Duy
|
f62470c6
|
parse-options: add OPT_BITOP()
|
Nguyễn Thái Ngọc Duy
|
3ebbe289
|
parse-options: allow ll_callback with OPTION_CALLBACK
|
Nguyễn Thái Ngọc Duy
|
0d6caa2d
|
merge-recursive.c: remove implicit dependency on the_index
|
Nguyễn Thái Ngọc Duy
|
d473e2e0
|
diff.c: convert -U|--unified
|
Nguyễn Thái Ngọc Duy
|
e1ff0a32
|
read-cache.c: kill read_index()
|
Nguyễn Thái Ngọc Duy
|
bf3ff338
|
parse-options: stop abusing 'callback' for lowlevel callbacks
|
Pranit Bauva
|
5e82c3dd
|
bisect--helper: `bisect_reset` shell function in C
|
Pranit Bauva
|
0f30233a
|
bisect--helper: `bisect_write` shell function in C
|
Pranit Bauva
|
129a6cf3
|
bisect--helper: `bisect_next_check` shell function in C
|
Pranit Bauva
|
450ebb73
|
bisect--helper: `get_terms` & `bisect_terms` shell function in C
|
Pranit Bauva
|
06f5608c
|
bisect--helper: `bisect_start` shell function partially in C
|
Pranit Bauva
|
e3b1e3bd
|
wrapper: move is_empty_file() and rename it as is_empty_or_missing_file()
|
Pranit Bauva
|
4fbdbd5b
|
bisect--helper: `check_and_set_terms` shell function in C
|
Shahzad Lone
|
33de80b1
|
various: tighten constness of some local variables
|
Stephen P. Smith
|
2fd7c229
|
Replace the proposed 'auto' mode with 'auto:'
|
Thomas Gummerer
|
536ec183
|
entry: support CE_WT_REMOVE flag in checkout_entry
|
Thomas Gummerer
|
091e04bc
|
checkout: introduce --{,no-}overlay option
|
Torsten Bögershausen
|
aab2a1ae
|
Support working-tree-encoding "UTF-16LE-BOM"
|