Age | Commit message (Collapse) | Author |
|
|
|
When the current directory was not the Git root, the command wouldn't
work. It expected to find the branch list database in the `.git`
directory in the current directory.
Make the program work even if the current directory is a subdirectory of
the Git repository.
|
|
|
|
|
|
|
|
Previously, if a branch name had slashes in it, the `drop` command would
fail. This is because it used `sed` with `/` separators, and the
unescaped slashes in the branch name would mess up sed's pattern.
Change this to use grep instead of sed so we don't have to worry about
escaping and special characters in branch names.
|
|
|
|
It wasn't possible to save branches with similar names before:
$ git branch-list save a-branch-with-suffix
$ git branch-list save a-branch #=> Errors
$ git branch-list
1 a-branch-with-suffix
This is because I wasn't matching against the whole line, so partial
matches would set off the condition and exit. Use grep's `--line-regexp`
flag to match against whole lines.
Thanks to John Kugelman for the flag:
https://stackoverflow.com/questions/4709912/how-to-make-grep-only-match-if-the-entire-line-matches/4709925#4709925
|
|
Previously if you had multiple branches with similar names, they could
all be deleted when deleting a single one.
For example:
$ git branch-list
1 a-branch-with-suffix
2 a-branch
$ git branch-list drop 2
$ git branch-list
$
Change the regex used to match branches to drop to match the whole line,
so we don't accidentally delete a branch when it has a positive partial
match.
|
|
|
|
|
|
Describe new features since the initial release.
|
|
|
|
|
|
Allow users to drop multiple branches in a single command. Instead of:
$ git branch-list 1
$ git branch-list 3
$ git branch-list 4
you can now do:
$ git branch-list 1 3 4
This makes it easier to drop a bunch of branches that you no longer need
saved.
drop_branch():
* No longer uses `branch_or_current_branch()`. Kept that function around
because I didn't feel like touching the `save_branch()` code, and
extracted the Git command to get the current branch to a new
`current_branch()` function.
* Used one loop to get branch names from IDs if necessary and feed these
into a Bash array. A second loop just after deletes all branches in
the branch array using the `sed` method from before. Didn't feel like
changing the `sed` command so did it this way. That said, we're
probably going to have to come back to it sooner or later because it's
not going to be able to handle branch names containing slashes.
main `case`:
Change `drop_branch` call to pass it all command line arguments, except
the 0th argument, which is the "drop" command (this is why we `shift`
before calling the function).
101-drop-accepts-multiple-branch-arguments.t:
Update test expectation which had an extra newline at the start of the
string which isn't there in the real `git branch-list` output.
|
|
|
|
Instead of displaying the underlying errors:
sed: first RE may not be empty
rm: .git/info/git-branch-list.bak: No such file or directory
display a meaningful error message from our program to let users know
that the given branch couldn't be found in the branch-list database.
|
|
In order to be able to easily reuse the `$BIN` variable we created in
the test for the `clear` sub-command, move it to a Perl module that can
be included in other tests.
Add the `t/` directory to the include path when running `prove` to
ensure that `bin.pm` can be found and included.
Thanks to these resources for explaining Perl modules:
https://perlmaven.com/how-to-create-a-perl-module-for-code-reuse
https://stackoverflow.com/questions/23899121/perl-declare-and-export-variables-from-a-module/23900384#23900384
https://stackoverflow.com/questions/17931981/what-is-isa-in-perl/17932340#17932340
|
|
A new sub-command that clears the entire branch list. This makes it easy
to remove everything when all the branches in the list are stale (e.g.
everything's been merged already).
|
|
Copied and modified from:
https://github.com/teddywing/git-hook-pre-commit-python-javascript-syntax-linter/blob/efa1909/t/001-setup.t
https://github.com/teddywing/git-hook-pre-commit-python-javascript-syntax-linter/blob/f6bb0d3/t/999-teardown.t
|
|
Now that we have a Homebrew formula, we can reference it here.
|
|
Make it easier to install the program using Homebrew.
|
|
Include a description, an example shell session, and license
information.
|
|
Without an argument, `exit` will, like `return`, use the exit status of
the last command executed. The `$?` is therefore redundant and can be
removed.
|
|
|
|
Used
https://github.com/git/git/blob/7cc763aaa3f39c62e0b2d5520e9d2bd8e4f3c4b3/contrib/completion/git-completion.bash
as a reference. Learned how to set up completion for a custom subcommand
from:
https://github.com/bobthecow/git-flow-completion/blob/4180a3a0e1b286d5f35fefbea5adf5ce9875ecc3/git-flow-completion.bash
|
|
I had forgotten when I wrote this, but the Bash help says:
> If N is omitted, the return status is that of the last command.
Meaning we don't need to explicitly return the code from the last
command as that's what happens by default.
|
|
The `save` and `drop` commands both take an optional branch name to
operate on.
|
|
And include a header comment containing a short description of the
program.
|
|
Not using `--help` because Git uses this flag to open a `man` page for
the subcommand, and I don't have a `man` page.
|
|
Some ideas or old versions of code that is no longer relevant. I've also
decided not to implement the TODO and have the list IDs change when you
change the list like in `git stash`, at least for now.
I'll keep the TODO in mind when I use the program and reevaluate to see
whether it makes sense to have fixed IDs.
|
|
We don't really care about this backup file, so once the `sed` operation
is finished, remove it.
|
|
We only care about the return code here. If `git rev-parse --verify` is
successful or if it fails to find a branch with the given name, it will
write output. We don't want this output to be printed, so send it to
`/dev/null`.
|
|
In addition to letting you drop the current branch and a parameter with
the name of the branch, allow branches to be dropped by their ID if they
don't match an existing branch.
Extract the code that finds a branch in the database by its ID to a
function so it can be used by both the `checkout_branch` and
`drop_branch` functions.
|
|
If the given ID doesn't correspond to a branch in our database, we
should exit with an error.
|
|
When running:
$ git branch-list 2
we want to ensure the argument "2" in the example above is an integer.
If so, we take it to represent a branch-list ID. Otherwise an error code
should be returned.
Thanks to Peter Ho on StackOverflow for the neat Bash integer test:
https://stackoverflow.com/questions/2210349/bash-test-whether-string-is-valid-as-an-integer/19116862#19116862
|
|
Don't add existing branches to the database. We don't want any duplicate
branch names cluttering the shortcut list.
|
|
A Git add-on that stores a list of branch names and allows you to
quickly switch to any branch in the list.
This enables you to more quickly switch between branches that you're
working on or reviewing without having to either remember or look up the
beginnings of the names of the branches.
Currently provides basic functionality for saving and dropping branches
from the list, printing the list, and checking out a branch in the list.
The branch list "database" is stored in a text file in the `.git/info/`
directory local to the project. Perhaps worrisome to store an external
file in the internal Git directory, but this allows us to keep the
database local to the current project and maintain different databases
for different projects.
|