Re: [PATCH v5 1/2] reset: enable '-' short-hand for previous branch

2015-03-16 Thread Sudhanshu Shekhar
Thank you all for your reviews and feedback. I will try and submit
this patch by taking my time to think about the various solutions and
coming up with the best one. I will also try and see if I can assist
Junio with his JFF patch.

I have learned a lot during the process of implementing this micro
project and believe that if I get selected for a gsoc under git, it
will help me become a better developer overall.

I have gone over the ideas page and I am interested in the git bisect
--first-parent and git bisect fixed/unfixed projects. I am looking
the source code at git-bisect.sh and will try and come up with a
proposal for review by the git community.

Thank you all for you time and patience.

Regards,
Sudhanshu

On Sat, Mar 14, 2015 at 2:18 AM, Eric Sunshine sunsh...@sunshineco.com wrote:
 On Fri, Mar 13, 2015 at 2:18 PM, Sudhanshu Shekhar
 sudshekha...@gmail.com wrote:
 git reset '-' will reset to the previous branch. To reset a file named
 - use either git reset ./- or git reset -- -.

 Change error message to treat single - as an ambigous revision or
 path rather than a bad flag.

 Helped-by: Junio C Hamano gits...@pobox.com
 Helped-by: Eric Sunshine sunsh...@sunshineco.com
 Helped-by: Matthieu Moy matthieu@grenoble-inp.fr
 Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
 ---
 I have changed the logic to ensure argv[0] isn't changed at any point.
 Creating a modified_argv0 variable let's me do that.

 I couldn't think of any other way to achieve this, apart from changing things
 directly in the sha1_name.c file (like Junio's changes). Please let me know
 if some further changes are needed.

 diff --git a/builtin/reset.c b/builtin/reset.c
 index 4c08ddc..bc50e14 100644
 --- a/builtin/reset.c
 +++ b/builtin/reset.c
 @@ -192,6 +192,7 @@ static void parse_args(struct pathspec *pathspec,
  {
 const char *rev = HEAD;
 unsigned char unused[20];
 +   const char *modified_argv0 = argv[0];

 This variable is only needed inside the 'if (argv[0])' block below, so
 its declaration should be moved there. Also the initialization to
 argv[0] is wasted since the assignment is overwritten below.

 The variable name itself could be better. Unlike a name such as
 'orig_arg0', modified doesn't tell us much. Modified how? Modified
 to be what? Consideration where and how the variable is used, we can
 see that it will be holding a value that _might_ be a rev. This
 suggests a better name such as 'maybe_rev' or something similar.

 /*
  * Possible arguments are:
  *
 @@ -205,10 +206,17 @@ static void parse_args(struct pathspec *pathspec,
  */

 if (argv[0]) {
 +   if (!strcmp(argv[0], -)) {
 +   modified_argv0 = @{-1};
 +   }
 +   else {

 Style: cuddle the 'else' and braces: } else {

 +   modified_argv0 = argv[0];
 +   }

 The unnecessary braces make this harder to read than it could be since
 it is so spread out vertically. Dropping the braces would help. The
 ternary operator ?: might improve readability (though it might also
 make it worse).

 if (!strcmp(argv[0], --)) {
 argv++; /* reset to HEAD, possibly with paths */
 } else if (argv[1]  !strcmp(argv[1], --)) {
 -   rev = argv[0];
 +   rev = modified_argv0;
 argv += 2;
 }
 /*
 @@ -216,14 +224,15 @@ static void parse_args(struct pathspec *pathspec,
  * has to be unambiguous. If there is a single argument, it
  * can not be a tree
  */
 -   else if ((!argv[1]  !get_sha1_committish(argv[0], unused)) 
 ||
 -(argv[1]  !get_sha1_treeish(argv[0], unused))) {
 +   else if ((!argv[1]  !get_sha1_committish(modified_argv0, 
 unused)) ||
 +(argv[1]  !get_sha1_treeish(modified_argv0, 
 unused))) {
 /*
  * Ok, argv[0] looks like a commit/tree; it should 
 not
  * be a filename.
  */
 verify_non_filename(prefix, argv[0]);
 -   rev = *argv++;
 +   rev = modified_argv0;
 +   argv++;

 Good. This is much better than the previous rounds, and is the sort of
 solution I had hoped to see when prodding you in previous reviews to
 avoid argv[] kludges. Unlike the previous band-aid approach, this
 demonstrates that you took the time to understand the overall logic
 flow rather than merely plopping in a quick fix.

 } else {
 /* Otherwise we treat this as a filename */
 verify_filename(prefix, argv[0], 1);
 diff --git a/setup.c b/setup.c
 index 979b13f..b621b62 100644
 --- a/setup.c
 +++ b/setup.c
 @@ -200,7 +200,7 @@ void

Re: [PATCH v5 2/2] t7102: add 'reset -' tests

2015-03-16 Thread Sudhanshu Shekhar
Hi,
On Sat, Mar 14, 2015 at 2:40 AM, Eric Sunshine sunsh...@sunshineco.com wrote:
 On Fri, Mar 13, 2015 at 2:18 PM, Sudhanshu Shekhar
 sudshekha...@gmail.com wrote:
 Add following test cases:
 1) Confirm error message when git reset is used with no previous branch
 2) Confirm git reset - works like git reset @{-1}
 3) Confirm - is always treated as a commit unless the -- file option
 is specified
 4) Confirm git reset - works normally even when a file named @{-1} is
 present

 Helped-by: Eric Sunshine sunsh...@sunshineco.com
 Helped-by: Matthieu Moy matthieu@grenoble-inp.fr
 Helped-by: David Aguilar dav...@gmail.com
 Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
 ---
 Eric: Thank you for pointing out the mistake. The '' after the Here
 Docs was causing the issue. I have removed the concatenation from
 there, hope that's okay.

 The  needs to go on the first line, not the last line of the here-doc.

 However, that was not my main concern in the previous review. What
 disturbed me was that the new tests, which were supposed to be
 checking if - behaved as @{-1}, were succeeding even without patch
 1/2 applied which implemented the - alias for @{-1}. That seems
 wrong. I don't think you particularly addressed that issue in this
 version (even though the first couple tests will now fail without 1/2
 due to the changed error message).

Actually, The issue was caused due a HERE docs error. If you run this
patch now, you will see that 7 out of the 8 test cases fail.


 Regarding the @{-1} test case, I created it as a check for Junio's
 comment on the error message generated by git reset - when a file
 named @{-1} is there.  Since, in this situation git reset @{-1} will
 return an error (but reset - shouldn't).

 Reminder: Wrap commentary to about column 72, as you would the commit
 message. (I re-wrapped it manually to reply to it.)

 I have renamed the folder to 'dash' as suggested by you, keeping the
 old name only where it made sense.

 Considering that the test titles already tell us the intent of the
 tests, I don't find that the directory name no_previous adds much
 value to tests checking the behavior of - with no previous branch. A
 single, consistent name used throughout all these tests would be less
 surprising and place smaller cognitive load on the reader.

 More below.

 diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh
 index 98bcfe2..18523c1 100755
 --- a/t/t7102-reset.sh
 +++ b/t/t7102-reset.sh
 @@ -568,4 +568,162 @@ test_expect_success 'reset --mixed sets up work tree' '
 test_cmp expect actual
  '

 +test_expect_success 'reset - with no previous branch fails' '
 +   git init no_previous 
 +   test_when_finished rm -rf no_previous 
 +   (
 +   cd no_previous 
 +   test_must_fail git reset - 2actual
 +   ) 
 +   test_i18ngrep ambiguous argument no_previous/actual
 +'
 +
 +test_expect_success 'reset - while having file named - and no previous 
 branch fails' '
 +   git init no_previous 
 +   test_when_finished rm -rf no_previous 
 +   (
 +   cd no_previous 
 +   - 
 +   test_must_fail git reset - 2actual
 +   ) 
 +   test_i18ngrep ambiguous argument no_previous/actual
 +'
 +
 +

 Style: Unnecessary extra blank line.

 +test_expect_success \
 +   'reset - in the presence of file named - with previous branch resets 
 commit' '
 +   cat expect -EOF

 Place the  at the end of this line. Also, prefix EOF with a
 backslash to indicate that you don't intend any interpolation to occur
 within the here-doc. So:

 cat expect -\EOF 

 Ditto for the remaining tests.

Thank you for taking the time out to point out these style changes to
me. There is a lot I have to learn about open source contribution yet
and I believe during the course of this microproject, I did learn
something about this (By making some very silly mistakes). Thank you
to all the developers who took time out to review my code and point
out the mistakes I had done.

Regards,
Sudhanshu
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v5 2/2] t7102: add 'reset -' tests

2015-03-13 Thread Sudhanshu Shekhar
Add following test cases:
1) Confirm error message when git reset is used with no previous branch
2) Confirm git reset - works like git reset @{-1}
3) Confirm - is always treated as a commit unless the -- file option
is specified
4) Confirm git reset - works normally even when a file named @{-1} is
present

Helped-by: Eric Sunshine sunsh...@sunshineco.com
Helped-by: Matthieu Moy matthieu@grenoble-inp.fr
Helped-by: David Aguilar dav...@gmail.com
Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
---
Eric: Thank you for pointing out the mistake. The '' after the Here Docs
was causing the issue. I have removed the concatenation from there, hope
that's okay.
Regarding the @{-1} test case, I created it as a check for Junio's comment
on the error message generated by git reset - when a file named @{-1} is 
there.
Since, in this situation git reset @{-1} will return an error (but reset -
shouldn't).
I have renamed the folder to 'dash' as suggested by you, keeping the old name 
only
where it made sense.
 t/t7102-reset.sh | 158 +++
 1 file changed, 158 insertions(+)

diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh
index 98bcfe2..18523c1 100755
--- a/t/t7102-reset.sh
+++ b/t/t7102-reset.sh
@@ -568,4 +568,162 @@ test_expect_success 'reset --mixed sets up work tree' '
test_cmp expect actual
 '
 
+test_expect_success 'reset - with no previous branch fails' '
+   git init no_previous 
+   test_when_finished rm -rf no_previous 
+   (
+   cd no_previous 
+   test_must_fail git reset - 2actual
+   ) 
+   test_i18ngrep ambiguous argument no_previous/actual
+'
+
+test_expect_success 'reset - while having file named - and no previous branch 
fails' '
+   git init no_previous 
+   test_when_finished rm -rf no_previous 
+   (
+   cd no_previous 
+   - 
+   test_must_fail git reset - 2actual
+   ) 
+   test_i18ngrep ambiguous argument no_previous/actual
+'
+
+
+test_expect_success \
+   'reset - in the presence of file named - with previous branch resets 
commit' '
+   cat expect -EOF
+   Unstaged changes after reset:
+   M   -
+   M   file
+   EOF
+   git init dash 
+   test_when_finished rm -rf dash 
+   (
+   cd dash 
+   - 
+   file 
+   git add file - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random - 
+   echo wow file 
+   git add file - 
+   git reset - ../actual
+   ) 
+   test_cmp expect actual
+'
+test_expect_success \
+   'reset - in the presence of file named - with -- option resets commit' '
+   cat expect -EOF
+   Unstaged changes after reset:
+   M   -
+   M   file
+   EOF
+   git init dash 
+   test_when_finished rm -rf dash 
+   (
+   cd dash 
+   - 
+   file 
+   git add file - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random - 
+   echo wow file 
+   git add file - 
+   git reset - -- ../actual
+   ) 
+   test_cmp expect actual
+'
+
+test_expect_success 'reset - in the presence of file named - with -- file 
option resets file' '
+   cat expect -EOF
+   Unstaged changes after reset:
+   M   -
+   EOF
+   git init dash 
+   test_when_finished rm -rf dash 
+   (
+   cd dash 
+   - 
+   file 
+   git add file - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random - 
+   echo wow file 
+   git add file - 
+   git reset -- - ../actual
+   ) 
+   test_cmp expect actual
+'
+test_expect_success \
+   'reset - in the presence of file named - with both pre and post -- 
option resets file' '
+   cat expect -EOF
+   Unstaged changes after reset:
+   M   -
+   EOF
+   git init dash 
+   test_when_finished rm -rf dash 
+   (
+   cd dash 
+   - 
+   file 
+   git add file - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random - 
+   echo wow file 
+   git add file - 
+   git reset - -- - ../actual
+   ) 
+   test_cmp expect actual
+'
+
+test_expect_success 'reset - works same as reset @{-1}' '
+   git init dash 
+   test_when_finished rm -rf dash 
+   (
+   cd dash 
+   echo file1 file1 
+   git add file1 
+   git commit -m base commit 
+   git checkout -b temp 
+   echo new file file

[PATCH v5 1/2] reset: enable '-' short-hand for previous branch

2015-03-13 Thread Sudhanshu Shekhar
git reset '-' will reset to the previous branch. To reset a file named
- use either git reset ./- or git reset -- -.

Change error message to treat single - as an ambigous revision or
path rather than a bad flag.

Helped-by: Junio C Hamano gits...@pobox.com
Helped-by: Eric Sunshine sunsh...@sunshineco.com
Helped-by: Matthieu Moy matthieu@grenoble-inp.fr
Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
---
I have changed the logic to ensure argv[0] isn't changed at any point.
Creating a modified_argv0 variable let's me do that.

I couldn't think of any other way to achieve this, apart from changing things
directly in the sha1_name.c file (like Junio's changes). Please let me know
if some further changes are needed.

 builtin/reset.c | 17 +
 setup.c |  2 +-
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/builtin/reset.c b/builtin/reset.c
index 4c08ddc..bc50e14 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -192,6 +192,7 @@ static void parse_args(struct pathspec *pathspec,
 {
const char *rev = HEAD;
unsigned char unused[20];
+   const char *modified_argv0 = argv[0];
/*
 * Possible arguments are:
 *
@@ -205,10 +206,17 @@ static void parse_args(struct pathspec *pathspec,
 */
 
if (argv[0]) {
+   if (!strcmp(argv[0], -)) {
+   modified_argv0 = @{-1};
+   }
+   else {
+   modified_argv0 = argv[0];
+   }
+
if (!strcmp(argv[0], --)) {
argv++; /* reset to HEAD, possibly with paths */
} else if (argv[1]  !strcmp(argv[1], --)) {
-   rev = argv[0];
+   rev = modified_argv0;
argv += 2;
}
/*
@@ -216,14 +224,15 @@ static void parse_args(struct pathspec *pathspec,
 * has to be unambiguous. If there is a single argument, it
 * can not be a tree
 */
-   else if ((!argv[1]  !get_sha1_committish(argv[0], unused)) ||
-(argv[1]  !get_sha1_treeish(argv[0], unused))) {
+   else if ((!argv[1]  !get_sha1_committish(modified_argv0, 
unused)) ||
+(argv[1]  !get_sha1_treeish(modified_argv0, 
unused))) {
/*
 * Ok, argv[0] looks like a commit/tree; it should not
 * be a filename.
 */
verify_non_filename(prefix, argv[0]);
-   rev = *argv++;
+   rev = modified_argv0;
+   argv++;
} else {
/* Otherwise we treat this as a filename */
verify_filename(prefix, argv[0], 1);
diff --git a/setup.c b/setup.c
index 979b13f..b621b62 100644
--- a/setup.c
+++ b/setup.c
@@ -200,7 +200,7 @@ void verify_filename(const char *prefix,
 int diagnose_misspelt_rev)
 {
if (*arg == '-')
-   die(bad flag '%s' used after filename, arg);
+   die(ambiguous argument '%s': unknown revision or path, arg);
if (check_filename(prefix, arg))
return;
die_verify_filename(prefix, arg, diagnose_misspelt_rev);
-- 
2.3.1.277.gd67f9d5.dirty

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3 2/2] Added tests for reset -

2015-03-10 Thread Sudhanshu Shekhar
Added the following test cases:
1) Confirm error message when git reset is used with no previous branch
2) Confirm git reset - works like git reset @{-1}
3) Confirm - is always treated as a commit unless the -- file option
is specified
4) Confirm git reset - works normally even when a file named @{-1} is
present

Helped-by: David Aguilar dav...@gmail.com
Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
---
I have tried to keep each test self sufficient. Please let me know if any 
changes are required.
Thank you!

 t/t7102-reset.sh | 139 +++
 1 file changed, 139 insertions(+)

diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh
index 98bcfe2..0faf241 100755
--- a/t/t7102-reset.sh
+++ b/t/t7102-reset.sh
@@ -568,4 +568,143 @@ test_expect_success 'reset --mixed sets up work tree' '
test_cmp expect actual
 '
 
+test_expect_success 'reset - with no previous branch' '
+   git init no_previous 
+   (
+   cd no_previous 
+   test_must_fail git reset - 2output
+   ) 
+   test_i18ngrep bad flag no_previous/output
+'
+
+test_expect_success 'reset - while having file named - and no previous branch' 
'
+   git init no_previous 
+   (
+   cd no_previous 
+   ./- 
+   test_must_fail git reset - 2output
+   ) 
+   test_i18ngrep bad flag no_previous/output
+'
+
+
+test_expect_success 'reset - in the presence of file named - with previous 
branch' '
+   echo Unstaged changes after reset: expect 
+   echo M - expect 
+   echo M 1 expect 
+   git init no_previous 
+   (
+   cd no_previous 
+   ./- 
+   1 
+   git add 1 - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random ./- 
+   echo wow 1 
+   git add 1 - 
+   git reset - ../output
+   ) 
+   rm -rf no_previous 
+   test_cmp output expect
+'
+test_expect_success 'reset - in the presence of file named - with -- option' '
+   echo Unstaged changes after reset: expect 
+   echo M - expect 
+   echo M 1 expect 
+   git init no_previous 
+   (
+   cd no_previous 
+   ./- 
+   1 
+   git add 1 - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random ./- 
+   echo wow 1 
+   git add 1 - 
+   git reset - -- ../output
+   ) 
+   rm -rf no_previous 
+   test_cmp output expect
+'
+
+test_expect_success 'reset - in the presence of file named - with -- file 
option' '
+   echo Unstaged changes after reset: expect 
+   echo M - expect 
+   git init no_previous 
+   (
+   cd no_previous 
+   ./- 
+   1 
+   git add 1 - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random ./- 
+   echo wow 1 
+   git add 1 - 
+   git reset -- - ../output
+   ) 
+   rm -rf no_previous
+   test_cmp output expect
+'
+test_expect_success 'reset - in the presence of file named - with both pre and 
post -- option' '
+   echo Unstaged changes after reset: expect 
+   echo M - expect 
+   git init no_previous 
+   (
+   cd no_previous 
+   ./- 
+   1 
+   git add 1 - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random ./- 
+   echo wow 1 
+   git add 1 - 
+   git reset - -- - ../output
+   ) 
+   rm -rf no_previous
+   test_cmp output expect
+'
+
+test_expect_success 'reset - works same as reset @{-1}' '
+   git init no_previous 
+   (
+   cd no_previous 
+   echo random random 
+   git add random 
+   git commit -m base commit 
+   git checkout -b temp 
+   echo new-file new-file 
+   git add new-file 
+   git commit -m added new-file 
+   git reset - 
+   git status --porcelain ../first 
+   git add new-file 
+   git commit -m added new-file 
+   git reset @{-1} 
+   git status --porcelain ../second
+   ) 
+   test_cmp first second
+'
+
+test_expect_success 'reset - with file named @{-1}' '
+   echo Unstaged changes after reset: expect 
+   echo M @{-1} expect 
+   git init no_previous 
+   (
+   cd no_previous 
+   echo random ./@{-1} 
+   git add ./@{-1} 
+   git commit -m base commit 
+   git checkout -b new_branch 
+   echo additional stuff ./@{-1

[PATCH v3 1/2] reset: enable '-' short-hand for previous branch

2015-03-10 Thread Sudhanshu Shekhar
'git reset -' will reset to the previous branch. It will behave similar
to @{-1} except when a file named '@{-1}' is present. To refer to a file
named '-', use ./- or the -- flag.

Helped-by: Junio C Hamano gits...@pobox.com
Helped-by: Eric Sunshine sunsh...@sunshineco.com
Helped-by: Matthieu Moy matthieu@grenoble-inp.fr
Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
---
Thank you all for your feedback. I have made changes and I hope this patch 
meets community standards. Please let me know if any further changes are 
required.

Regards,
Sudhanshu

 builtin/reset.c | 13 -
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/builtin/reset.c b/builtin/reset.c
index 4c08ddc..8abd300 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -192,6 +192,7 @@ static void parse_args(struct pathspec *pathspec,
 {
const char *rev = HEAD;
unsigned char unused[20];
+   int substituted_minus = 0;
/*
 * Possible arguments are:
 *
@@ -205,6 +206,10 @@ static void parse_args(struct pathspec *pathspec,
 */
 
if (argv[0]) {
+   if (!strcmp(argv[0], -)) {
+   argv[0] = @{-1};
+   substituted_minus = 1;
+   }
if (!strcmp(argv[0], --)) {
argv++; /* reset to HEAD, possibly with paths */
} else if (argv[1]  !strcmp(argv[1], --)) {
@@ -222,15 +227,21 @@ static void parse_args(struct pathspec *pathspec,
 * Ok, argv[0] looks like a commit/tree; it should not
 * be a filename.
 */
+   if (substituted_minus)
+   argv[0] = -;
verify_non_filename(prefix, argv[0]);
+   if (substituted_minus)
+   argv[0] = @{-1};
rev = *argv++;
} else {
+   /* We were treating - as a commit and not a file */
+   if (substituted_minus)
+   argv[0] = -;
/* Otherwise we treat this as a filename */
verify_filename(prefix, argv[0], 1);
}
}
*rev_ret = rev;
-
if (read_cache()  0)
die(_(index file corrupt));
 
-- 
2.3.1.279.gd534259

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 2/2] Added tests for reset -

2015-03-10 Thread Sudhanshu Shekhar
Hi,

On Tue, Mar 10, 2015 at 6:56 PM, Matthieu Moy
matthieu@grenoble-inp.fr wrote:
 Sudhanshu Shekhar sudshekha...@gmail.com writes:

 +test_expect_success 'reset - while having file named - and no previous 
 branch' '

 I like having the expected behavior in the test name too. e.g. add
 fails at the end of the sentence.

Sure. I will update this in the next patch.

 +test_expect_success 'reset - in the presence of file named - with previous 
 branch' '
 + echo Unstaged changes after reset: expect 
 + echo M - expect 
 + echo M 1 expect 

 Here and elsewhere: why not

 cat expect -EOF
 Unstaged changes after reset:
 M -
 M 1

 ?

I was confused whether to use cat or echo. I thought using cat will
disrupt the indentation as the EOF needs to be on a single line. This
is why I chose echo. Please let me know your thoughts on this.

 + rm -rf no_previous 

 That would be best done in a test_when_finished, so that the directory
 is removed regardless of whether the test failed before this line or
 not.
Thanks for pointing this out. I will update this accordingly.

 --
 Matthieu Moy
 http://www-verimag.imag.fr/~moy/

Regards,
Sudhanshu
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/2] Teach reset the same short-hand as checkout

2015-03-10 Thread Sudhanshu Shekhar
Hi,

On Tue, Mar 10, 2015 at 8:04 AM, Junio C Hamano gits...@pobox.com wrote:
 Sudhanshu Shekhar sudshekha...@gmail.com writes:

 - now means the previous branch.

 Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
 Thanks-to: Eric Sunshine, Junio C Hamano, Matthieu Moy
 ---


 These look unusual for a few reasons: your S-o-b should be at the
 end, we usually say Helped-by: instead, and we do not use these with
 multiple names on a single line.

 Please do not try to be original without a good reason.  We may
 start counting the number of times people appear on these footers to
 see how much contribution those who do not directly author commits
 (read: those who mentor others) are making.

Thank you for telling me this. I will it keep it in mind from next
time onwards.


  builtin/reset.c | 9 -
  1 file changed, 8 insertions(+), 1 deletion(-)

 The comment I gave in the thread that ends at $gmane/265112 would
 apply equally to this patch, I think.

 cf. http://thread.gmane.org/gmane.comp.version-control.git/264986/focus=265112
I have rectified this in my new patch and will send it soon.
Kindly do let me know if there are any other changes required.

Thank you.
Regards,
Sudhanshu
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3 1/2] reset: enable '-' short-hand for previous branch

2015-03-10 Thread Sudhanshu Shekhar
git reset -' will reset to the previous branch. It will behave similar
to @{-1} except when a file named '@{-1}' is present. To refer to a file
named '-', use ./- or the -- flag.

Helped-by: Junio C Hamano gits...@pobox.com
Helped-by: Eric Sunshine sunsh...@sunshineco.com
Helped-by: Matthieu Moy matthieu@grenoble-inp.fr
Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
---
Eric, I have added a user_input variable to record the input entered by the 
user. This way I can avoid the multiple 'if' clauses. Thank you for the 
suggestion.
I have also removed the unrelated change that I had unintentionally committed. 
I am sending this patch on the thread for further review. Once both the patches 
are reviewed and accepted, I will create a new mail for it. Hope that is okay.

Regards,
Sudhanshu

 builtin/reset.c | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/builtin/reset.c b/builtin/reset.c
index 4c08ddc..b428241 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -192,6 +192,8 @@ static void parse_args(struct pathspec *pathspec,
 {
const char *rev = HEAD;
unsigned char unused[20];
+   int substituted_minus = 0;
+   char *user_input = argv[0];
/*
 * Possible arguments are:
 *
@@ -205,6 +207,10 @@ static void parse_args(struct pathspec *pathspec,
 */
 
if (argv[0]) {
+   if (!strcmp(argv[0], -)) {
+   argv[0] = @{-1};
+   substituted_minus = 1;
+   }
if (!strcmp(argv[0], --)) {
argv++; /* reset to HEAD, possibly with paths */
} else if (argv[1]  !strcmp(argv[1], --)) {
@@ -222,9 +228,12 @@ static void parse_args(struct pathspec *pathspec,
 * Ok, argv[0] looks like a commit/tree; it should not
 * be a filename.
 */
-   verify_non_filename(prefix, argv[0]);
+   verify_non_filename(prefix, user_input);
rev = *argv++;
} else {
+   /* We were treating - as a commit and not a file */
+   if (substituted_minus)
+   argv[0] = -;
/* Otherwise we treat this as a filename */
verify_filename(prefix, argv[0], 1);
}
-- 
2.3.1.278.ge5c7b1f.dirty

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3 2/2] t7102: add 'reset -' tests

2015-03-10 Thread Sudhanshu Shekhar
Add following test cases:

1) Confirm error message when git reset is used with no previous branch
2) Confirm git reset - works like git reset @{-1}
3) Confirm - is always treated as a commit unless the -- file option is 
specified
4) Confirm git reset - works normally even when a file named @{-1} is present

Helped-by: Eric Sunshine sunsh...@sunshineco.com
Helped-by: Matthieu Moy matthieu@grenoble-inp.fr
Helped-by: David Aguilar dav...@gmail.com
Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
---
First of all, thank you for being so incredibly patient and helpful. I am very 
grateful for your remarks and reviews. I have implemented your suggestions in 
this patch. Please let me know if I have missed out on anything else. Also, 
sorry for sending PATCH 1/2 on the wrong thread, I entered the Message-ID 
incorrectly (still getting used to send-email :/ ).

Regards,
Sudhanshu

 t/t7102-reset.sh | 159 +++
 1 file changed, 159 insertions(+)

diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh
index 98bcfe2..d3a5874 100755
--- a/t/t7102-reset.sh
+++ b/t/t7102-reset.sh
@@ -568,4 +568,163 @@ test_expect_success 'reset --mixed sets up work tree' '
test_cmp expect actual
 '
 
+test_expect_success 'reset - with no previous branch fails' '
+   git init no_previous 
+   test_when_finished rm -rf no_previous 
+   (
+   cd no_previous 
+   test_must_fail git reset - 2actual
+   ) 
+   test_i18ngrep bad flag no_previous/actual
+'
+
+test_expect_success 'reset - while having file named - and no previous branch 
fails' '
+   git init no_previous 
+   test_when_finished rm -rf no_previous 
+   (
+   cd no_previous 
+   - 
+   test_must_fail git reset - 2actual
+   ) 
+   test_i18ngrep bad flag no_previous/actual
+'
+
+test_expect_success \
+   'reset - in the presence of file named - with previous branch resets 
commit' '
+   cat expect -\EOF
+   Unstaged changes after reset:
+   M   -
+   M   file
+   EOF 
+   git init no_previous 
+   test_when_finished rm -rf no_previous 
+   (
+   cd no_previous 
+   - 
+   file 
+   git add file - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random - 
+   echo wow file 
+   git add file - 
+   git reset - ../actual
+   ) 
+   test_cmp expect actual
+'
+
+test_expect_success \
+   'reset - in the presence of file named - with -- option resets commit' '
+   cat expect -\EOF
+   Unstaged changes after reset:
+   M   -
+   M   file
+   EOF 
+   git init no_previous 
+   test_when_finished rm -rf no_previous 
+   (
+   cd no_previous 
+   - 
+   file 
+   git add file - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random - 
+   echo wow file 
+   git add file - 
+   git reset - -- ../actual
+   ) 
+   test_cmp expect actual
+'
+
+test_expect_success 'reset - in the presence of file named - with -- file 
option resets file' '
+   cat expect -\EOF
+   Unstaged changes after reset:
+   M   -
+   M   file
+   EOF 
+   git init no_previous 
+   test_when_finished rm -rf no_previous 
+   (
+   cd no_previous 
+   - 
+   file 
+   git add file - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random - 
+   echo wow file 
+   git add file - 
+   git reset -- - ../actual
+   ) 
+   test_cmp expect actual
+'
+
+test_expect_success \
+   'reset - in the presence of file named - with both pre and post -- 
option resets file' '
+   cat expect -\EOF
+   Unstaged changes after reset: expect 
+   M   -
+   EOF 
+   git init no_previous 
+   test_when_finished rm -rf no_previous 
+   (
+   cd no_previous 
+   - 
+   file 
+   git add file - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random - 
+   echo wow file 
+   git add file - 
+   git reset - -- - ../actual
+   ) 
+   test_cmp expect actual
+'
+
+test_expect_success 'reset - works same as reset @{-1}' '
+   git init no_previous 
+   test_when_finished rm -rf no_previous 
+   (
+   cd no_previous 
+   echo file1 file1 
+   git add file1 
+   git commit -m base commit 
+   git checkout -b temp 
+   echo new file file

[PATCH v3 1/2] reset: enable '-' short-hand for previous branch

2015-03-10 Thread Sudhanshu Shekhar
git reset -' will reset to the previous branch. It will behave similar
to @{-1} except when a file named '@{-1}' is present. To refer to a file
named '-', use ./- or the -- flag.

Helped-by: Junio C Hamano gits...@pobox.com
Helped-by: Eric Sunshine sunsh...@sunshineco.com
Helped-by: Matthieu Moy matthieu@grenoble-inp.fr
Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
---
Eric, I have added a user_input variable to record the input entered by the 
user. This way I can avoid the multiple 'if' clauses. Thank you for the 
suggestion.
I have also removed the unrelated change that I had unintentionally committed. 
I am sending this patch on the thread for further review. Once both the patches 
are reviewed and accepted, I will create a new mail for it. Hope that is okay.

Regards,
Sudhanshu

 builtin/reset.c | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/builtin/reset.c b/builtin/reset.c
index 4c08ddc..b428241 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -192,6 +192,8 @@ static void parse_args(struct pathspec *pathspec,
 {
const char *rev = HEAD;
unsigned char unused[20];
+   int substituted_minus = 0;
+   char *user_input = argv[0];
/*
 * Possible arguments are:
 *
@@ -205,6 +207,10 @@ static void parse_args(struct pathspec *pathspec,
 */
 
if (argv[0]) {
+   if (!strcmp(argv[0], -)) {
+   argv[0] = @{-1};
+   substituted_minus = 1;
+   }
if (!strcmp(argv[0], --)) {
argv++; /* reset to HEAD, possibly with paths */
} else if (argv[1]  !strcmp(argv[1], --)) {
@@ -222,9 +228,12 @@ static void parse_args(struct pathspec *pathspec,
 * Ok, argv[0] looks like a commit/tree; it should not
 * be a filename.
 */
-   verify_non_filename(prefix, argv[0]);
+   verify_non_filename(prefix, user_input);
rev = *argv++;
} else {
+   /* We were treating - as a commit and not a file */
+   if (substituted_minus)
+   argv[0] = -;
/* Otherwise we treat this as a filename */
verify_filename(prefix, argv[0], 1);
}
-- 
2.3.1.278.ge5c7b1f.dirty

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 2/2] Added test cases for git reset -

2015-03-09 Thread Sudhanshu Shekhar
1) Confirm error message when git reset is used with no previous branch
2) Confirm git reset - works like git reset @{-1}
3) Confirm - is always treated as a commit unless the -- file option
is specified

Signed-off-by: Sudhanshu Shekharsudshekha...@gmail.com
Thanks-to: David Aguilardav...@gmail.com
---
David, thank you for your remarks. I have tried to incorporate your suggestions 
into this patch.
Please let me know if I have missed out on anything else.

 t/t7102-reset.sh | 121 +++
 1 file changed, 121 insertions(+)

diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh
index 98bcfe2..fe43f64 100755
--- a/t/t7102-reset.sh
+++ b/t/t7102-reset.sh
@@ -568,4 +568,125 @@ test_expect_success 'reset --mixed sets up work tree' '
test_cmp expect actual
 '
 
+cat expect EOF
+fatal: bad flag '-' used after filename
+EOF
+
+test_expect_success 'reset - with no previous branch' '
+   git init no_previous --quiet 
+   (
+   cd no_previous 
+   test_must_fail git reset - 2output
+   ) 
+   test_cmp expect no_previous/output
+'
+
+test_expect_success 'reset - while having file named - and no previous branch' 
'
+   git init no_previous --quiet 
+   (
+   cd no_previous 
+   touch ./- 
+   test_must_fail git reset - 2output
+   ) 
+   test_cmp expect no_previous/output
+'
+
+cat expect EOF
+Unstaged changes after reset:
+M  -
+M  1
+EOF
+
+test_expect_success 'reset - in the prescence of file named - with previous 
branch' '
+   git init no_previous --quiet 
+   (
+   cd no_previous 
+   touch ./- 1 
+   git add 1 - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random ./- 
+   echo wow 1 
+   git add 1 - 
+   git reset - ../output
+   ) 
+   rm -rf no_previous 
+   test_cmp output expect
+'
+test_expect_success 'reset - in the presence of file named - with -- option' '
+   git init no_previous --quiet 
+   (
+   cd no_previous 
+   touch ./- 1 
+   git add 1 - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random ./- 
+   echo wow 1 
+   git add 1 - 
+   git reset - -- ../output
+   ) 
+   rm -rf no_previous 
+   test_cmp output expect
+'
+
+cat expect EOF
+Unstaged changes after reset:
+M  -
+EOF
+
+test_expect_success 'reset - in the presence of file named - with -- file 
option' '
+   git init no_previous --quiet 
+   (
+   cd no_previous 
+   touch ./- 1 
+   git add 1 - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random ./- 
+   echo wow 1 
+   git add 1 - 
+   git reset -- - ../output
+   ) 
+   rm -rf no_previous
+   test_cmp output expect
+'
+test_expect_success 'reset - in the presence of file named - with both pre and 
post -- option' '
+   git init no_previous --quiet 
+   (
+   cd no_previous 
+   touch ./- 1 
+   git add 1 - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random ./- 
+   echo wow 1 
+   git add 1 - 
+   git reset - -- - ../output
+   ) 
+   rm -rf no_previous
+   test_cmp output expect
+'
+
+test_expect_success 'reset - works same as reset @{-1}' '
+   git init no_previous --quiet 
+   (
+   cd no_previous 
+   echo random random 
+   git add random 
+   git commit -m base commit 
+   git checkout -b temp 
+   echo new-file new-file 
+   git add new-file 
+   git commit -m added new-file 
+   git reset - 
+   git status --porcelain ../first 
+   git add new-file 
+   git commit -m added new-file 
+   git reset @{-1} 
+   git status --porcelain ../second
+   ) 
+   test_cmp first second
+'
+
 test_done
-- 
2.3.1.168.g0c82976.dirty

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 1/2] Teach reset the same short-hand as checkout

2015-03-09 Thread Sudhanshu Shekhar
- now means the previous branch.

Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
Thanks-to: Eric Sunshine, Junio C Hamano, Matthieu Moy
---
 builtin/reset.c | 9 -
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/builtin/reset.c b/builtin/reset.c
index 4c08ddc..02f33ef 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -192,6 +192,7 @@ static void parse_args(struct pathspec *pathspec,
 {
const char *rev = HEAD;
unsigned char unused[20];
+   int substituted_minus = 0;
/*
 * Possible arguments are:
 *
@@ -205,6 +206,10 @@ static void parse_args(struct pathspec *pathspec,
 */
 
if (argv[0]) {
+   if (!strcmp(argv[0], -)) {
+   argv[0] = @{-1};
+   substituted_minus = 1;
+   }
if (!strcmp(argv[0], --)) {
argv++; /* reset to HEAD, possibly with paths */
} else if (argv[1]  !strcmp(argv[1], --)) {
@@ -225,12 +230,14 @@ static void parse_args(struct pathspec *pathspec,
verify_non_filename(prefix, argv[0]);
rev = *argv++;
} else {
+   /* We were treating - as a commit and not a file */
+   if (substituted_minus)
+   argv[0] = -;
/* Otherwise we treat this as a filename */
verify_filename(prefix, argv[0], 1);
}
}
*rev_ret = rev;
-
if (read_cache()  0)
die(_(index file corrupt));
 
-- 
2.3.1.168.g0c82976.dirty

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/2] Teach reset the same short-hand as checkout

2015-03-08 Thread Sudhanshu Shekhar
- now means the previous branch.

Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
Thanks-to: Junio C Hamano, Matthieu Moy, Eric Sunshine
---
Thank you all for your feedback. Please let me know if I am missing out on 
anything else.


 builtin/reset.c | 9 -
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/builtin/reset.c b/builtin/reset.c
index 4c08ddc..02f33ef 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -192,6 +192,7 @@ static void parse_args(struct pathspec *pathspec,
 {
const char *rev = HEAD;
unsigned char unused[20];
+   int substituted_minus = 0;
/*
 * Possible arguments are:
 *
@@ -205,6 +206,10 @@ static void parse_args(struct pathspec *pathspec,
 */
 
if (argv[0]) {
+   if (!strcmp(argv[0], -)) {
+   argv[0] = @{-1};
+   substituted_minus = 1;
+   }
if (!strcmp(argv[0], --)) {
argv++; /* reset to HEAD, possibly with paths */
} else if (argv[1]  !strcmp(argv[1], --)) {
@@ -225,12 +230,14 @@ static void parse_args(struct pathspec *pathspec,
verify_non_filename(prefix, argv[0]);
rev = *argv++;
} else {
+   /* We were treating - as a commit and not a file */
+   if (substituted_minus)
+   argv[0] = -;
/* Otherwise we treat this as a filename */
verify_filename(prefix, argv[0], 1);
}
}
*rev_ret = rev;
-
if (read_cache()  0)
die(_(index file corrupt));
 
-- 
2.3.1.168.g0c82976.dirty

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/2] Added test cases for git reset -

2015-03-08 Thread Sudhanshu Shekhar
Four test cases have been added

1) when user does reset - without any previous branch = Leads to error
2) when user does reset - with a previous branch  = Ensure it
behaves like  at {-1}

Other two deal with the situation when we have a file named '-'. We
ignore such a file and - is always treated either as a previous branch
or a bad filename. Users who wish to reset a file named '-' should
specify
it as './-'

Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
---
I have created test cases for git reset -. @Junio, I tried incorporating your 
suggestions while developing these test cases.
However, since the verify_filename function ignores files starting with -, 
git reset - will always refer to the branch only. Kindly let me know your 
thoughts and views on this and also your reviews about the test cases I have 
created.

Regards,
Sudhanshu

 t/t7102-reset.sh | 62 
 1 file changed, 62 insertions(+)

diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh
index 98bcfe2..ade3d6a 100755
--- a/t/t7102-reset.sh
+++ b/t/t7102-reset.sh
@@ -568,4 +568,66 @@ test_expect_success 'reset --mixed sets up work tree' '
test_cmp expect actual
 '
 
+cat  expect  EOF
+fatal: bad flag '-' used after filename
+EOF
+
+test_expect_success 'reset - with no previous branch' '
+   git init no_previous --quiet 
+   (
+   cd no_previous
+   ) 
+   test_must_fail git reset - 2output 
+   test_cmp expect output
+'
+
+test_expect_success 'reset - while having file named - and no previous branch' 
'
+   git init no_previous --quiet 
+   (
+   cd no_previous 
+   touch ./-
+   ) 
+   test_must_fail git reset - 2output 
+   test_cmp expect output
+'
+
+cat  expect  EOF
+Unstaged changes after reset:
+M  -
+M  1
+EOF
+
+test_expect_success 'reset - in the prescence of file named - with previou 
branch' '
+   git init no_previous --quiet 
+   cd no_previous 
+   touch ./- 1 
+   git add 1 - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random ./- 
+   echo wow 1 
+   git add 1 - 
+   git reset - output 
+   test_cmp output ../expect
+'
+test_expect_success 'reset - works same as reset @{-1}' '
+   git init no_previous --quiet 
+   cd no_previous 
+   echo random random 
+   git add random 
+   git commit -m base commit 
+   git checkout -b temp 
+   echo new-file new-file 
+   git add new-file 
+   git commit -m added new-file 
+   git reset - 
+
+   git status ../first 
+   git add new-file 
+   git commit -m added new-file 
+   git reset @{-1} 
+   git status ../second 
+   test_cmp ../first ../second
+'
+
 test_done
-- 
2.3.1.168.g0c82976.dirty

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/2] reset: allow - short hand for previous commit

2015-03-07 Thread Sudhanshu Shekhar
Teach reset the same shorthand as checkout and merge. - means the
previous commit.

Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
---
 builtin/reset.c | 9 -
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/builtin/reset.c b/builtin/reset.c
index 4c08ddc..9f8967d 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -192,6 +192,7 @@ static void parse_args(struct pathspec *pathspec,
 {
const char *rev = HEAD;
unsigned char unused[20];
+   int substituted_minus = 0;
/*
 * Possible arguments are:
 *
@@ -205,6 +206,10 @@ static void parse_args(struct pathspec *pathspec,
 */
 
if (argv[0]) {
+   if(!strcmp(argv[0], -)) {
+   argv[0] = @{-1};
+   substituted_minus = 1;
+   }
if (!strcmp(argv[0], --)) {
argv++; /* reset to HEAD, possibly with paths */
} else if (argv[1]  !strcmp(argv[1], --)) {
@@ -225,12 +230,14 @@ static void parse_args(struct pathspec *pathspec,
verify_non_filename(prefix, argv[0]);
rev = *argv++;
} else {
+   /* We were treating - as a commit and not a file */
+   if(substituted_minus)
+   argv[0] = -;
/* Otherwise we treat this as a filename */
verify_filename(prefix, argv[0], 1);
}
}
*rev_ret = rev;
-
if (read_cache()  0)
die(_(index file corrupt));
 
-- 
2.3.1.168.g0c82976.dirty


From 21f0298c17768aaa11ff0a677cdefc8f54ac9515 Mon Sep 17 00:00:00 2001
From: Sudhanshu Shekhar sudshekha...@gmail.com
Date: Sun, 8 Mar 2015 02:13:57 +0530
Subject: [PATCH 2/2] Added test cases for reset -

Four test cases have been added

1) when user does reset - without any previous branch = Leads to error
2) when user does reset - with a previous branch  = Ensure it
behaves like @{-1}

Other two deal with the situation when we have a file named '-'. We
ignore such a file and - is always treated either as a previous branch
or a bad filename. Users who wish to reset a file named '-' should specify
it as './-'
---
 builtin/reset.c  |  4 ++--
 t/t7102-reset.sh | 62 
 2 files changed, 64 insertions(+), 2 deletions(-)

diff --git a/builtin/reset.c b/builtin/reset.c
index 9f8967d..02f33ef 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -206,7 +206,7 @@ static void parse_args(struct pathspec *pathspec,
 */
 
if (argv[0]) {
-   if(!strcmp(argv[0], -)) {
+   if (!strcmp(argv[0], -)) {
argv[0] = @{-1};
substituted_minus = 1;
}
@@ -231,7 +231,7 @@ static void parse_args(struct pathspec *pathspec,
rev = *argv++;
} else {
/* We were treating - as a commit and not a file */
-   if(substituted_minus)
+   if (substituted_minus)
argv[0] = -;
/* Otherwise we treat this as a filename */
verify_filename(prefix, argv[0], 1);
diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh
index 98bcfe2..4b8d7f5 100755
--- a/t/t7102-reset.sh
+++ b/t/t7102-reset.sh
@@ -568,4 +568,66 @@ test_expect_success 'reset --mixed sets up work tree' '
test_cmp expect actual
 '
 
+cat  expect  EOF
+fatal: bad flag '-' used after filename
+EOF
+
+test_expect_success 'reset - with no previous branch' '
+   git init no_previous --quiet 
+   (
+   cd no_previous
+   ) 
+   test_must_fail git reset - 2 output 
+   test_cmp expect output
+'
+
+test_expect_success 'reset - while having file named - and no previous branch' 
'
+   git init no_previous --quiet 
+   (
+   cd no_previous 
+   touch ./-
+   ) 
+   test_must_fail git reset - 2 output 
+   test_cmp expect output
+'
+
+cat  expect  EOF
+Unstaged changes after reset:
+M  -
+M  1
+EOF
+
+test_expect_success 'reset - in the prescence of file named - with previou 
branch' '
+   git init no_previous --quiet 
+   cd no_previous 
+   touch ./- 1 
+   git add 1 - 
+   git commit -m add base files 
+   git checkout -b new_branch 
+   echo random  ./- 
+   echo wow  1 
+   git add 1 - 
+   git reset -  output 
+   test_cmp output ../expect
+'
+test_expect_success 'reset - works same as reset @{-1}' '
+   git init no_previous --quiet 
+   cd no_previous 
+   echo random  random 
+   git add random 
+   git commit -m base commit 
+   git checkout -b temp 
+   echo new-file  new-file 
+   git add new-file 
+   git commit -m added new-file 
+   git reset - 
+
+   git status  ../first

[PATCH] reset: allow - short hand for previous commit

2015-03-03 Thread Sudhanshu Shekhar
From: SudShekhar sudshekha...@gmail.com

Teach reset the same shorthand as checkout and merge. - means the
previous commit.

Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
---
This is done as a microproject for gsoc purposes. I am looking forward to your 
feedback/comments. Thanks
builtin/reset.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/builtin/reset.c b/builtin/reset.c
index 4c08ddc..3e0378b 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -205,6 +205,8 @@ static void parse_args(struct pathspec *pathspec,
 */
 
if (argv[0]) {
+   if(!strcmp(argv[0],-))
+   argv[0]=@{-1};
if (!strcmp(argv[0], --)) {
argv++; /* reset to HEAD, possibly with paths */
} else if (argv[1]  !strcmp(argv[1], --)) {
-- 
2.3.1

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] reset: allow - short hand for previous commit

2015-03-03 Thread Sudhanshu Shekhar
Teach reset the same shorthand as checkout and merge. - means the
previous commit.

Signed-off-by: Sudhanshu Shekhar sudshekha...@gmail.com
---
 builtin/reset.c | 9 -
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/builtin/reset.c b/builtin/reset.c
index 4c08ddc..9f8967d 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -192,6 +192,7 @@ static void parse_args(struct pathspec *pathspec,
 {
const char *rev = HEAD;
unsigned char unused[20];
+   int substituted_minus = 0;
/*
 * Possible arguments are:
 *
@@ -205,6 +206,10 @@ static void parse_args(struct pathspec *pathspec,
 */
 
if (argv[0]) {
+   if(!strcmp(argv[0], -)) {
+   argv[0] = @{-1};
+   substituted_minus = 1;
+   }
if (!strcmp(argv[0], --)) {
argv++; /* reset to HEAD, possibly with paths */
} else if (argv[1]  !strcmp(argv[1], --)) {
@@ -225,12 +230,14 @@ static void parse_args(struct pathspec *pathspec,
verify_non_filename(prefix, argv[0]);
rev = *argv++;
} else {
+   /* We were treating - as a commit and not a file */
+   if(substituted_minus)
+   argv[0] = -;
/* Otherwise we treat this as a filename */
verify_filename(prefix, argv[0], 1);
}
}
*rev_ret = rev;
-
if (read_cache()  0)
die(_(index file corrupt));
 
-- 
2.3.1.168.gfd4bc34.dirty

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] reset: allow - short hand for previous commit

2015-03-03 Thread Sudhanshu Shekhar
Hi,

 Matthieu Moy matthieu@grenoble-inp.fr writes:

 Sudhanshu Shekhar sudshekha...@gmail.com writes:

 From: SudShekhar sudshekha...@gmail.com

 Please, set your configuration to have the same identity for commit and
 send-email. It seems your commiter ID (user.name) does not contain your
 last name.

 Actually, the token does not match either of the two names; it looks
 like two names smashed together into a single nickname token.

Sorry, I had set my irc nick as the commiter id. I have changed this to my name.

 builtin/reset.c | 2 ++

 Doesn't this deserve a test?

 + if(!strcmp(argv[0],-))
 + argv[0]=@{-1};

 Wrong spacing (around = and after ,).

Thanks for pointing this out. I have corrected it.

 What should worry us even more is what the user would get when @{-1}
 does not resolve to something the command can use.  It would be bad
 if we give an error message with @{-1} in it that the user never
 typed (and may not even understand what it means).


I apologize for having overlooked this use case. I have made some
changes and I think this should work now. I will email the updated
patch in the next email (I hope this is the correct procedure). Please
let me know your thoughts.
Also, this use case hasn't been handled in the case of git merge.

Another thing, can someone guide me regarding the right place to add a
test case? Should it be t7102-reset.sh or some other file?
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html