git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 15/18] reset: Make reset remove the sequencer state

From
Ramkumar Ramachandra <artagnon@gmail.com>
Date
Jul 19, 2011, 17:17 UTC
Message-ID
<1311095876-3098-16-git-send-email-artagnon@gmail.com>
In-Reply-To
<1311095876-3098-1-git-send-email-artagnon@gmail.com>

Years of muscle memory have trained users to use "git reset --hard" to remove the branch state after any sort operation. Make it also remove the sequencer state to facilitate this established workflow:

$ git cherry-pick foo..bar ... conflict encountered ... $ git reset --hard # Oops, I didn't mean that $ git cherry-pick quux..bar ... cherry-pick succeeded ...

Guard against accidental removal of the sequencer state by providing one level of "undo". In the first "reset" invocation, ".git/sequencer" is moved to ".git/sequencer-old"; it is completely removed only in the second invocation.

Helped-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
---
 branch.c                 |    2 ++
 t/7106-reset-sequence.sh |   43 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 45 insertions(+), 0 deletions(-)
 create mode 100755 t/7106-reset-sequence.sh
diff --git a/branch.c b/branch.c
index c0c865a..d06aec4 100644
--- a/branch.c
+++ b/branch.c
@@ -3,6 +3,7 @@
 #include "refs.h"
 #include "remote.h"
 #include "commit.h"
+#include "sequencer.h"
 
 struct tracking {
 	struct refspec spec;
@@ -228,4 +229,5 @@ void remove_branch_state(void)
 	unlink(git_path("MERGE_MSG"));
 	unlink(git_path("MERGE_MODE"));
 	unlink(git_path("SQUASH_MSG"));
+	remove_sequencer_state(0);
 }
diff --git a/t/7106-reset-sequence.sh b/t/7106-reset-sequence.sh
new file mode 100755
index 0000000..c61c62d
--- /dev/null
+++ b/t/7106-reset-sequence.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+test_description='Test interaction of reset --hard with sequencer
+
+  + anotherpick: rewrites foo to d
+  + picked: rewrites foo to c
+  + unrelatedpick: rewrites unrelated to reallyunrelated
+  + base: rewrites foo to b
+  + initial: writes foo as a, unrelated as unrelated
+'
+
+. ./test-lib.sh
+
+pristine_detach () {
+	git checkout -f "$1^0" &&
+	git read-tree -u --reset HEAD &&
+	git clean -d -f -f -q -x
+}
+
+test_expect_success setup '
+	echo unrelated >unrelated &&
+	git add unrelated &&
+	test_commit initial foo a &&
+	test_commit base foo b &&
+	test_commit unrelatedpick unrelated reallyunrelated &&
+	test_commit picked foo c &&
+	test_commit anotherpick foo d &&
+	git config advice.detachedhead false
+
+'
+
+test_expect_success 'reset --hard cleans up sequencer state, providing one-level undo' '
+	pristine_detach initial &&
+	test_must_fail git cherry-pick base..anotherpick &&
+	test_path_is_dir .git/sequencer &&
+	git reset --hard &&
+	test_path_is_missing .git/sequencer &&
+	test_path_is_dir .git/sequencer-old &&
+	git reset --hard &&
+	test_path_is_missing .git/sequencer-old
+'
+
+test_done
-- 
1.7.4.rc1.7.g2cf08.dirty
Previous: Ramkumar RamachandraNext: Ramkumar Ramachandra
Message 26 of 34 in “[GSoC update] Sequencer for inclusion v2”
  1. Ramkumar RamachandraJul 19, 2011
  2. 01/18 advice: Introduce error_resolve_conflictRamkumar Ramachandra, Jul 19, 2011
  3. Phil HordJul 21, 2011
  4. Jeff KingJul 22, 2011
  5. Ramkumar RamachandraJul 24, 2011
  6. Junio C HamanoJul 24, 2011
  7. Phil HordJul 25, 2011
  8. 02/18 config: Introduce functions to write non-standard fileRamkumar Ramachandra, Jul 19, 2011
  9. Jeff KingJul 19, 2011
  10. Jonathan NiederJul 19, 2011
  11. Junio C HamanoJul 19, 2011
  12. Jeff KingJul 19, 2011
  13. Ramkumar RamachandraJul 24, 2011
  14. 03/18 revert: Simplify and inline add_message_to_msgRamkumar Ramachandra, Jul 19, 2011
  15. 04/18 revert: Don't check lone argument in get_encodingRamkumar Ramachandra, Jul 19, 2011
  16. 05/18 revert: Rename no_replay to record_originRamkumar Ramachandra, Jul 19, 2011
  17. 06/18 revert: Propogate errors upwards from do_pick_commitRamkumar Ramachandra, Jul 19, 2011
  18. 07/18 revert: Eliminate global "commit" variableRamkumar Ramachandra, Jul 19, 2011
  19. 08/18 revert: Introduce struct to keep command-line optionsRamkumar Ramachandra, Jul 19, 2011
  20. 09/18 revert: Separate cmdline parsing from functional codeRamkumar Ramachandra, Jul 19, 2011
  21. 10/18 revert: Don't create invalid replay_opts in parse_argsRamkumar Ramachandra, Jul 19, 2011
  22. 11/18 revert: Save data for continuing after conflict resolutionRamkumar Ramachandra, Jul 19, 2011
  23. 12/18 revert: Save command-line options for continuing operationRamkumar Ramachandra, Jul 19, 2011
  24. 13/18 revert: Make pick_commits functionally act on a commit listRamkumar Ramachandra, Jul 19, 2011
  25. 14/18 revert: Introduce --reset to remove sequencer stateRamkumar Ramachandra, Jul 19, 2011
  26. 15/18 reset: Make reset remove the sequencer stateRamkumar Ramachandra, Jul 19, 2011
  27. 16/18 revert: Remove sequencer state when no commits are pendingRamkumar Ramachandra, Jul 19, 2011
  28. 17/18 revert: Don't implictly stomp pending sequencer operationRamkumar Ramachandra, Jul 19, 2011
  29. 18/18 revert: Introduce --continue to continue the operationRamkumar Ramachandra, Jul 19, 2011
  30. Junio C HamanoJul 19, 2011
  31. Ramkumar RamachandraJul 20, 2011
  32. Junio C HamanoJul 19, 2011
  33. Ramkumar RamachandraJul 24, 2011
  34. Junio C HamanoJul 24, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.