aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhillip Wood <phillip.wood@dunelm.org.uk>2019-12-06 16:06:11 +0000
committerJunio C Hamano <gitster@pobox.com>2019-12-06 09:32:02 -0800
commit901ba7b1efe8ba9464aac528ecd46e8dd4f01003 (patch)
tree546da93b1d4d3f4360d84064836cb62396a690ce
parent8d57f7574993deb906461d4267373e1c9c733053 (diff)
downloadgit-901ba7b1efe8ba9464aac528ecd46e8dd4f01003.tar.xz
commit: encapsulate determine_whence() for sequencer
Working out which command wants to create a commit requires detailed knowledge of the sequencer internals and that knowledge is going to increase in subsequent commits. With that in mind lets encapsulate that knowledge in sequencer.c rather than spreading it into builtin/commit.c. Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/commit.c5
-rw-r--r--sequencer.c13
-rw-r--r--sequencer.h3
3 files changed, 15 insertions, 6 deletions
diff --git a/builtin/commit.c b/builtin/commit.c
index f5e354c9f0..8a7c839d57 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -178,10 +178,7 @@ static void determine_whence(struct wt_status *s)
{
if (file_exists(git_path_merge_head(the_repository)))
whence = FROM_MERGE;
- else if (file_exists(git_path_cherry_pick_head(the_repository)))
- whence = file_exists(git_path_seq_dir()) ?
- FROM_CHERRY_PICK_MULTI : FROM_CHERRY_PICK_SINGLE;
- else
+ else if (!sequencer_determine_whence(the_repository, &whence))
whence = FROM_COMMIT;
if (s)
s->whence = whence;
diff --git a/sequencer.c b/sequencer.c
index d66856818a..dcc2063d33 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -40,7 +40,7 @@ static const char cherry_picked_prefix[] = "(cherry picked from commit ";
GIT_PATH_FUNC(git_path_commit_editmsg, "COMMIT_EDITMSG")
-GIT_PATH_FUNC(git_path_seq_dir, "sequencer")
+static GIT_PATH_FUNC(git_path_seq_dir, "sequencer")
static GIT_PATH_FUNC(git_path_todo_file, "sequencer/todo")
static GIT_PATH_FUNC(git_path_opts_file, "sequencer/opts")
@@ -5312,3 +5312,14 @@ int todo_list_rearrange_squash(struct todo_list *todo_list)
return 0;
}
+
+int sequencer_determine_whence(struct repository *r, enum commit_whence *whence)
+{
+ if (file_exists(git_path_cherry_pick_head(r))) {
+ *whence = file_exists(git_path_seq_dir()) ?
+ FROM_CHERRY_PICK_MULTI : FROM_CHERRY_PICK_SINGLE;
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/sequencer.h b/sequencer.h
index 9f9ae291e3..e56e29ceea 100644
--- a/sequencer.h
+++ b/sequencer.h
@@ -3,12 +3,12 @@
#include "cache.h"
#include "strbuf.h"
+#include "wt-status.h"
struct commit;
struct repository;
const char *git_path_commit_editmsg(void);
-const char *git_path_seq_dir(void);
const char *rebase_path_todo(void);
const char *rebase_path_todo_backup(void);
@@ -208,4 +208,5 @@ int write_basic_state(struct replay_opts *opts, const char *head_name,
void sequencer_post_commit_cleanup(struct repository *r, int verbose);
int sequencer_get_last_command(struct repository* r,
enum replay_action *action);
+int sequencer_determine_whence(struct repository *r, enum commit_whence *whence);
#endif /* SEQUENCER_H */