1 #ifndef STATUS_H 2 #define STATUS_H 3 4 #include "string-list.h" 5 #include "color.h" 6 #include "pathspec.h" 7 #include "remote.h" 8 9 struct repository; 10 struct worktree; 11 12 enum color_wt_status { 13 WT_STATUS_HEADER = 0, 14 WT_STATUS_UPDATED, 15 WT_STATUS_CHANGED, 16 WT_STATUS_UNTRACKED, 17 WT_STATUS_NOBRANCH, 18 WT_STATUS_UNMERGED, 19 WT_STATUS_LOCAL_BRANCH, 20 WT_STATUS_REMOTE_BRANCH, 21 WT_STATUS_ONBRANCH, 22 WT_STATUS_MAXSLOT 23 }; 24 25 enum untracked_status_type { 26 SHOW_NO_UNTRACKED_FILES, 27 SHOW_NORMAL_UNTRACKED_FILES, 28 SHOW_ALL_UNTRACKED_FILES 29 }; 30 31 enum show_ignored_type { 32 SHOW_NO_IGNORED, 33 SHOW_TRADITIONAL_IGNORED, 34 SHOW_MATCHING_IGNORED, 35 }; 36 37 /* from where does this commit originate */ 38 enum commit_whence { 39 FROM_COMMIT, /* normal */ 40 FROM_MERGE, /* commit came from merge */ 41 FROM_CHERRY_PICK /* commit came from cherry-pick */ 42 }; 43 44 struct wt_status_change_data { 45 int worktree_status; 46 int index_status; 47 int stagemask; 48 int mode_head, mode_index, mode_worktree; 49 struct object_id oid_head, oid_index; 50 int rename_status; 51 int rename_score; 52 char *rename_source; 53 unsigned dirty_submodule : 2; 54 unsigned new_submodule_commits : 1; 55 }; 56 57 enum wt_status_format { 58 STATUS_FORMAT_NONE = 0, 59 STATUS_FORMAT_LONG, 60 STATUS_FORMAT_SHORT, 61 STATUS_FORMAT_PORCELAIN, 62 STATUS_FORMAT_PORCELAIN_V2, 63 64 STATUS_FORMAT_UNSPECIFIED 65 }; 66 67 #define HEAD_DETACHED_AT _("HEAD detached at ") 68 #define HEAD_DETACHED_FROM _("HEAD detached from ") 69 70 struct wt_status_state { 71 int merge_in_progress; 72 int am_in_progress; 73 int am_empty_patch; 74 int rebase_in_progress; 75 int rebase_interactive_in_progress; 76 int cherry_pick_in_progress; 77 int bisect_in_progress; 78 int revert_in_progress; 79 int detached_at; 80 char *branch; 81 char *onto; 82 char *detached_from; 83 struct object_id detached_oid; 84 struct object_id revert_head_oid; 85 struct object_id cherry_pick_head_oid; 86 }; 87 88 struct wt_status { 89 struct repository *repo; 90 int is_initial; 91 char *branch; 92 const char *reference; 93 struct pathspec pathspec; 94 int verbose; 95 int amend; 96 enum commit_whence whence; 97 int nowarn; 98 int use_color; 99 int no_gettext; 100 int display_comment_prefix; 101 int relative_paths; 102 int submodule_summary; 103 enum show_ignored_type show_ignored_mode; 104 enum untracked_status_type show_untracked_files; 105 const char *ignore_submodule_arg; 106 char color_palette[WT_STATUS_MAXSLOT][COLOR_MAXLEN]; 107 unsigned colopts; 108 int null_termination; 109 int commit_template; 110 int show_branch; 111 int show_stash; 112 int hints; 113 enum ahead_behind_flags ahead_behind_flags; 114 int detect_rename; 115 int rename_score; 116 int rename_limit; 117 enum wt_status_format status_format; 118 struct wt_status_state state; 119 struct object_id oid_commit; /* when not Initial */ 120 121 /* These are computed during processing of the individual sections */ 122 int committable; 123 int workdir_dirty; 124 const char *index_file; 125 FILE *fp; 126 const char *prefix; 127 struct string_list change; 128 struct string_list untracked; 129 struct string_list ignored; 130 uint32_t untracked_in_ms; 131 }; 132 133 size_t wt_status_locate_end(const char *s, size_t len); 134 void wt_status_append_cut_line(struct strbuf *buf); 135 void wt_status_add_cut_line(FILE *fp); 136 void wt_status_prepare(struct repository *r, struct wt_status *s); 137 void wt_status_print(struct wt_status *s); 138 void wt_status_collect(struct wt_status *s); 139 void wt_status_collect_free_buffers(struct wt_status *s); 140 void wt_status_get_state(struct repository *repo, 141 struct wt_status_state *state, 142 int get_detached_from); 143 int wt_status_check_rebase(const struct worktree *wt, 144 struct wt_status_state *state); 145 int wt_status_check_bisect(const struct worktree *wt, 146 struct wt_status_state *state); 147 148 __attribute__((format (printf, 3, 4))) 149 void status_printf_ln(struct wt_status *s, const char *color, const char *fmt, ...); 150 __attribute__((format (printf, 3, 4))) 151 void status_printf(struct wt_status *s, const char *color, const char *fmt, ...); 152 153 /* The following functions expect that the caller took care of reading the index. */ 154 int has_unstaged_changes(struct repository *repo, 155 int ignore_submodules); 156 int has_uncommitted_changes(struct repository *repo, 157 int ignore_submodules); 158 int require_clean_work_tree(struct repository *repo, 159 const char *action, 160 const char *hint, 161 int ignore_submodules, 162 int gently); 163 164 #endif /* STATUS_H */ 165