summaryrefslogtreecommitdiffstats
path: root/wt-status.h
diff options
context:
space:
mode:
authorStephen P. Smith <ischis2@cox.net>2018-09-30 07:12:45 -0700
committerJunio C Hamano <gitster@pobox.com>2018-10-03 23:38:20 -0700
commit73ba5d78b4e5d96b2c521e3d0a2ec86c26a2d25b (patch)
tree9c77b62e3c23e799315781bb7c68eddf58cbcf4f /wt-status.h
parentf3bd35fa0dd6fcc8aaab1f9281d98cee5add2e4f (diff)
downloadgit-73ba5d78b4e5d96b2c521e3d0a2ec86c26a2d25b.tar.gz
git-73ba5d78b4e5d96b2c521e3d0a2ec86c26a2d25b.tar.xz
roll wt_status_state into wt_status and populate in the collect phase
Status variables were initialized in the collect phase and some variables were later freed in the print functions. A "struct wt_status" used to be sufficient for the output phase to work. It was designed to be filled in the collect phase and consumed in the output phase, but over time some fields were added and output phase started filling the fields. A "struct wt_status_state" that was used in other codepaths turned out to be useful in the "git status" output. This is not tied to "struct wt_status", so filling in the collect phase was not consistently followed. Move the status state structure variables into the status state structure and populate them in the collect functions. Create a new function to free the buffers that were being freed in the print function. Call this new function in commit.c where both the collect and print functions were being called. Based on a patch suggestion by Junio C Hamano. [1] [1] https://public-inbox.org/git/xmqqr2i5ueg4.fsf@gitster-ct.c.googlers.com/ Signed-off-by: Stephen P. Smith <ischis2@cox.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'wt-status.h')
-rw-r--r--wt-status.h38
1 files changed, 20 insertions, 18 deletions
diff --git a/wt-status.h b/wt-status.h
index 937b2c352..1fcf93afb 100644
--- a/wt-status.h
+++ b/wt-status.h
@@ -64,6 +64,24 @@ enum wt_status_format {
STATUS_FORMAT_UNSPECIFIED
};
+struct wt_status_state {
+ int merge_in_progress;
+ int am_in_progress;
+ int am_empty_patch;
+ int rebase_in_progress;
+ int rebase_interactive_in_progress;
+ int cherry_pick_in_progress;
+ int bisect_in_progress;
+ int revert_in_progress;
+ int detached_at;
+ char *branch;
+ char *onto;
+ char *detached_from;
+ struct object_id detached_oid;
+ struct object_id revert_head_oid;
+ struct object_id cherry_pick_head_oid;
+};
+
struct wt_status {
int is_initial;
char *branch;
@@ -93,6 +111,7 @@ struct wt_status {
int rename_score;
int rename_limit;
enum wt_status_format status_format;
+ struct wt_status_state state;
unsigned char sha1_commit[GIT_MAX_RAWSZ]; /* when not Initial */
/* These are computed during processing of the individual sections */
@@ -107,29 +126,12 @@ struct wt_status {
uint32_t untracked_in_ms;
};
-struct wt_status_state {
- int merge_in_progress;
- int am_in_progress;
- int am_empty_patch;
- int rebase_in_progress;
- int rebase_interactive_in_progress;
- int cherry_pick_in_progress;
- int bisect_in_progress;
- int revert_in_progress;
- int detached_at;
- char *branch;
- char *onto;
- char *detached_from;
- struct object_id detached_oid;
- struct object_id revert_head_oid;
- struct object_id cherry_pick_head_oid;
-};
-
size_t wt_status_locate_end(const char *s, size_t len);
void wt_status_add_cut_line(FILE *fp);
void wt_status_prepare(struct wt_status *s);
void wt_status_print(struct wt_status *s);
void wt_status_collect(struct wt_status *s);
+void wt_status_collect_free_buffers(struct wt_status *s);
void wt_status_get_state(struct wt_status_state *state, int get_detached_from);
int wt_status_check_rebase(const struct worktree *wt,
struct wt_status_state *state);