aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacob Keller <jacob.e.keller@intel.com>2013-06-20 15:40:56 -0700
committerPeter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>2013-06-20 15:45:34 -0700
commit6e8fdc58c786a45d7a63c5edf9c702f1874a7a19 (patch)
tree5d0095cbe2ebc9f2981a2bc6a58f66c9e92b148f
parent979875323bd3fdd43b29b1640a26748bb9ef94bb (diff)
downloadstgit-6e8fdc58c786a45d7a63c5edf9c702f1874a7a19.tar.gz
stg: make refresh warn when index is dirty
Sometimes it is useful to use git add interactively in order to selectively add parts of an edit to the index, and then refresh a patch. However, standard stg operation has refresh add every modified file to the patch. This is somewhat annoying because it is easy to perform a git add -i and then forget to use the '--index' option. This patch adds code which checks whether the index is clean (no changes) before allowing a refresh. In addition, a new option '--force' which overrides this check has been added in the cases where these are necessary, such as adding new files in a patch. Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
-rw-r--r--stgit/commands/refresh.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/stgit/commands/refresh.py b/stgit/commands/refresh.py
index ca68bbe..a2bab42 100644
--- a/stgit/commands/refresh.py
+++ b/stgit/commands/refresh.py
@@ -32,6 +32,10 @@ Include the latest work tree and index changes in the current patch.
This command generates a new git commit object for the patch; the old
commit is no longer visible.
+Refresh will warn if the index is dirty, and require use of either the '--index'
+or '--force' options to override this check. This is to prevent accidental full
+refresh when only some changes were staged using git add interative mode.
+
You may optionally list one or more files or directories relative to
the current working directory; if you do, only matching files will be
updated.
@@ -56,6 +60,10 @@ options = [
short = 'Refresh from index instead of worktree', long = """
Instead of setting the patch top to the current contents of
the worktree, set it to the current contents of the index."""),
+ opt('-F', '--force', action = 'store_true',
+ short = 'Force refresh even if index is dirty', long = """
+ Instead of warning the user when some work has already been staged (such
+ as with git add interactive mode) force a full refresh."""),
opt('-p', '--patch', args = [argparse.other_applied_patches,
argparse.unapplied_patches],
short = 'Refresh (applied) PATCH instead of the top patch'),
@@ -231,10 +239,20 @@ def func(parser, options, args):
raise common.CmdException(
'Only full refresh is available with the --index option')
+ if options.index and options.force:
+ raise common.CmdException(
+ 'You cannot --force a full refresh when using --index mode')
+
stack = directory.repository.current_stack
patch_name = get_patch(stack, options.patch)
paths = list_files(stack, patch_name, args, options.index, options.update)
+ # Make sure the index is clean before performing a full refresh
+ if not options.index and not options.force:
+ if not stack.repository.default_index.is_clean(stack.head):
+ raise common.CmdException(
+ 'The index is dirty. Did you mean --index? To force a full refresh use --force.')
+
# Make sure there are no conflicts in the files we want to
# refresh.
if stack.repository.default_index.conflicts() & paths: