#include "strbuf.h"
#include "utf8.h"
+static char cut_line[] =
+"------------------------ >8 ------------------------\n";
+
static char default_wt_status_colors[][COLOR_MAXLEN] = {
GIT_COLOR_NORMAL, /* WT_STATUS_HEADER */
GIT_COLOR_GREEN, /* WT_STATUS_UPDATED */
struct wt_status_change_data *d;
const struct cache_entry *ce = active_cache[i];
- if (!ce_path_match(ce, &s->pathspec))
+ if (!ce_path_match(ce, &s->pathspec, NULL))
continue;
it = string_list_insert(&s->change, ce->name);
d = it->util;
for (i = 0; i < dir.nr; i++) {
struct dir_entry *ent = dir.entries[i];
if (cache_name_is_other(ent->name, ent->len) &&
- match_pathspec_depth(&s->pathspec, ent->name, ent->len, 0, NULL))
+ dir_path_match(ent, &s->pathspec, 0, NULL))
string_list_insert(&s->untracked, ent->name);
free(ent);
}
for (i = 0; i < dir.ignored_nr; i++) {
struct dir_entry *ent = dir.ignored[i];
if (cache_name_is_other(ent->name, ent->len) &&
- match_pathspec_depth(&s->pathspec, ent->name, ent->len, 0, NULL))
+ dir_path_match(ent, &s->pathspec, 0, NULL))
string_list_insert(&s->ignored, ent->name);
free(ent);
}
status_printf_ln(s, GIT_COLOR_NORMAL, "");
}
+void wt_status_truncate_message_at_cut_line(struct strbuf *buf)
+{
+ const char *p;
+ struct strbuf pattern = STRBUF_INIT;
+
+ strbuf_addf(&pattern, "%c %s", comment_line_char, cut_line);
+ p = strstr(buf->buf, pattern.buf);
+ if (p && (p == buf->buf || p[-1] == '\n'))
+ strbuf_setlen(buf, p - buf->buf);
+ strbuf_release(&pattern);
+}
+
static void wt_status_print_verbose(struct wt_status *s)
{
struct rev_info rev;
* If we're not going to stdout, then we definitely don't
* want color, since we are going to the commit message
* file (and even the "auto" setting won't work, since it
- * will have checked isatty on stdout).
+ * will have checked isatty on stdout). But we then do want
+ * to insert the scissor line here to reliably remove the
+ * diff before committing.
*/
- if (s->fp != stdout)
+ if (s->fp != stdout) {
+ const char *explanation = _("Do not touch the line above.\nEverything below will be removed.");
+ struct strbuf buf = STRBUF_INIT;
+
rev.diffopt.use_color = 0;
+ fprintf(s->fp, "%c %s", comment_line_char, cut_line);
+ strbuf_add_commented_lines(&buf, explanation, strlen(explanation));
+ fputs(buf.buf, s->fp);
+ strbuf_release(&buf);
+ }
run_diff_index(&rev, 1);
}
int i;
assert(s->branch && !s->is_initial);
- if (prefixcmp(s->branch, "refs/heads/"))
+ if (!starts_with(s->branch, "refs/heads/"))
return;
branch = branch_get(s->branch + 11);
if (!format_tracking_info(branch, &sb))
strbuf_setlen(&sb, sb.len - 1);
if (!sb.len)
goto got_nothing;
- if (!prefixcmp(sb.buf, "refs/heads/"))
+ if (starts_with(sb.buf, "refs/heads/"))
strbuf_remove(&sb,0, strlen("refs/heads/"));
- else if (!prefixcmp(sb.buf, "refs/"))
+ else if (starts_with(sb.buf, "refs/"))
;
else if (!get_sha1_hex(sb.buf, sha1)) {
const char *abbrev;
struct grab_1st_switch_cbdata *cb = cb_data;
const char *target = NULL, *end;
- if (prefixcmp(message, "checkout: moving from "))
+ if (!starts_with(message, "checkout: moving from "))
return 0;
message += strlen("checkout: moving from ");
target = strstr(message, " to ");
((commit = lookup_commit_reference_gently(sha1, 1)) != NULL &&
!hashcmp(cb.nsha1, commit->object.sha1)))) {
int ofs;
- if (!prefixcmp(ref, "refs/tags/"))
+ if (starts_with(ref, "refs/tags/"))
ofs = strlen("refs/tags/");
- else if (!prefixcmp(ref, "refs/remotes/"))
+ else if (starts_with(ref, "refs/remotes/"))
ofs = strlen("refs/remotes/");
else
ofs = 0;
if (s->branch) {
const char *on_what = _("On branch ");
const char *branch_name = s->branch;
- if (!prefixcmp(branch_name, "refs/heads/"))
+ if (starts_with(branch_name, "refs/heads/"))
branch_name += 11;
else if (!strcmp(branch_name, "HEAD")) {
branch_status_color = color(WT_STATUS_NOBRANCH, s);
return;
branch_name = s->branch;
- if (!prefixcmp(branch_name, "refs/heads/"))
+ if (starts_with(branch_name, "refs/heads/"))
branch_name += 11;
else if (!strcmp(branch_name, "HEAD")) {
branch_name = _("HEAD (no branch)");