git-utils 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dc7e18850e6bd2ccc17a911e1884c00df08f8318686ccfd90970a8d6b323f7c2
4
- data.tar.gz: 1bc5d574a523470425b0fefc1dcb69e80c58ffb0597cf575c22dfb987332f7d5
3
+ metadata.gz: 3e1c46d3c400bbc8d913745063c92a103b45b11e59cdd2bb494a099100b12d05
4
+ data.tar.gz: b2d4253cc25ec916282f1bfd9198f3017d6369bc55deb41b3a0161fb52bbd34c
5
5
  SHA512:
6
- metadata.gz: e63b742743af06a52425ff7d4942740d5abd9e272e502b0593a0864b101022d41e2352ebb435719a400a69d6305c6f8fbc04aac95eb9cfd9f4500914764fc3d2
7
- data.tar.gz: 56c86af4c83ac1a1af52cdca22a3386de105d6c00eca53b5dd01b3d9789cdaa6cb725022891b24735a5adf1abae7cab04aaa9ff7756f03e3bddf746bdc599bc7
6
+ metadata.gz: bff26db7b631b266ba97210256544ca7031efb99e4af1f9289414598c343d8f9762421e386921c58d3c00ad93a5bc03d7eed2e3e60dcc5b26d9f5411d71aee3a
7
+ data.tar.gz: 5ba1d70da71ae6b35afa1fa1dd7e8ceb36b2db348587b9a7adb910fc084f5a4933aefba765f2d0b9db2e96975083dcea99f99b9de74efd6c1472eb6e75fdfa34
data/README.md CHANGED
@@ -2,27 +2,27 @@
2
2
 
3
3
  This repo contains some Git utility scripts. The highlights are `git open`, `git pull-request`, `git push-branch`, and `git undo`, which you’ll never understand how you did without.
4
4
 
5
- The commands are especially useful when combined with [pivotal-github](https://github.com/mhartl/pivotal-github) gem (which, despite its name, also works with Bitbucket).
6
-
7
- The `git-utils` used to be pure Bash scripts, but they are now available as a Ruby gem, both because Ruby is more powerful than bash and because now `git-utils` can be included more easily as a dependency for the [pivotal-github](https://github.com/mhartl/pivotal-github/) gem. As a result, installation is easy if you have RubyGems installed:
5
+ `git-utils` used to be pure Bash scripts, but they are now available as a Ruby gem:
8
6
 
9
7
  gem install git-utils
10
8
 
9
+ See below for more details on the commands defined by `git-utils`. To learn more about how to use Git itself, see the tutorial book and online course [*Learn Enough Git to Be Dangerous*](https://www.learnenough.com/git).
10
+
11
11
  ## Commands
12
12
 
13
13
  * `git amend`: alias for `git commit --amend`
14
14
  * `git bump`: makes a commit with the message `"Bump version number"`
15
- * `git cleanup`: deletes every branch already merged into current branch (apart from `master`, `staging`, `development`, and any branches listed in `~/.git-cleanup-preserved`). Pass the `-r` option to delete remote merged branches.
16
- * `git merge-into-branch [branch]`: merges current branch into given branch (defaults to `master`)
15
+ * `git cleanup`: deletes every branch already merged into current branch (apart from `master`, `main`, `staging`, `development`, and any branches listed in `~/.git-cleanup-preserved`). Pass the `-r` option to delete remote merged branches.
16
+ * `git merge-into-branch [branch]`: merges current branch into given branch (defaults to repo's default branch)
17
17
  * `git minor`: makes a commit with the message `"Make minor changes"`
18
- * `git open`: opens the remote page for the repo (OS X & Linux)
18
+ * `git open`: opens the remote page for the repo (macOS & Linux)
19
19
  * `git polish`: makes a commit with the message `"Polish"`
20
- * `git pull-request`: pushes the branch and opens the remote page for issuing a new a pull request (OS X only)
20
+ * `git pull-request`: pushes the branch and opens the remote page for issuing a new a pull request (macOS-only)
21
21
  * `git push-branch`: pushes the current branch up to origin
22
22
  * `git delete-remote-branch <branch>`: deletes the remote branch if it is safe to do so
23
23
  * `git switch <pattern>`: switches to the first branch matching the given pattern
24
- * `git sync [branch]`: syncs the given branch with the remote branch (defaults to master)
25
- * `git sync-fork`: syncs the `master` branch of a fork with the original upstream `master` (assumes upstream configuration as in “[Configuring a remote for a fork](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/configuring-a-remote-for-a-fork)”)
24
+ * `git sync [branch]`: syncs the given branch with the remote branch (defaults to repo's default branch)
25
+ * `git sync-fork`: syncs the default branch of a fork with the original upstream default (assumes upstream configuration as in “[Configuring a remote for a fork](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/configuring-a-remote-for-a-fork)”)
26
26
  * `git typo`: makes a commit with the message `"Fix typo"`
27
27
  * `git undo`: undoes the last commit
28
28
  * `git graph`: displays full repository history in graphical format; alias for `git log --graph --oneline --decorate --all --full-history --author-date-order --no-notes`
@@ -41,12 +41,12 @@ Some of these commands deserve further explanation.
41
41
 
42
42
  ### git merge-into-branch
43
43
 
44
- `git merge-into-branch [target]` merges the current branch into the target branch (defaults to `master`). On a branch called `add-markdown-support`, `git merge-into-branch` is equivalent to the following:
44
+ `git merge-into-branch [target]` merges the current branch into the target branch (defaults to repo's default branch). On a branch called `add-markdown-support` in a repo with default branch `main`, `git merge-into-branch` is equivalent to the following:
45
45
 
46
- $ git checkout master
46
+ $ git checkout main
47
47
  $ git merge --no-ff --log add-markdown-support
48
48
 
49
- Note that this effectively changes the default merge behavior from fast-forward to no-fast-forward, which makes it possible to use `git log` to see which of the commit objects together have implemented a feature on a particular branch. As noted in [A successful Git branching model](http://nvie.com/posts/a-successful-git-branching-model/),
49
+ Note that this effectively changes the default merge behavior from fast-forward to no-fast-forward, which makes it possible to use `git log` to see which of the commit objects together have implemented a feature on a particular branch. As noted in [A successful Git branching model](http://nvie.com/posts/a-successful-git-branching-model/):
50
50
 
51
51
  > The `--no-ff` flag causes the merge to always create a new commit object, even if the merge could be performed with a fast-forward. This avoids losing information about the historical existence of a feature branch and groups together all commits that together added the feature… Yes, it will create a few more (empty) commit objects, but the gain is much bigger than that cost.
52
52
 
@@ -66,16 +66,16 @@ These options can be overriden (and thus restored to their defaults) by passing
66
66
 
67
67
  ### git sync
68
68
 
69
- `git sync [branch]` syncs the given local branch with the remote branch (defaults to master). On a branch called `add-markdown-support`, `git sync` is equivalent to the following:
69
+ `git sync [branch]` syncs the given local branch with the remote branch (defaults to repo's default branch). On a branch called `add-markdown-support` in a repo with default branch `master`, `git sync` is equivalent to the following:
70
70
 
71
71
  $ git checkout master
72
72
  $ git pull
73
73
  $ git checkout add-markdown-support
74
74
 
75
- The main purpose of `git sync` is to prepare the current branch for merging with `master`:
75
+ The main purpose of `git sync` is to prepare the current branch for merging with the default branch:
76
76
 
77
77
  $ git sync
78
- $ git merge master
78
+ $ git merge master # or `main`, etc.
79
79
 
80
80
  (This is essentially equivalent to
81
81
 
data/bin/git-cleanup CHANGED
@@ -2,9 +2,9 @@
2
2
  require 'optparse'
3
3
 
4
4
  # Deletes (almost) every branch already merged into current branch.
5
- # Exceptions are `master`, `staging`, and `development`, and the current
6
- # branch, which are preserved. We also support custom configuration via the
7
- # `~/.git-cleanup-preserved` file.
5
+ # Exceptions are `master`, `main`, `staging`, and `development`,
6
+ # and the current branch, which are preserved.
7
+ # We also support custom configuration via the `~/.git-cleanup-preserved` file.
8
8
 
9
9
  options = {}
10
10
  OptionParser.new do |opts|
@@ -15,7 +15,7 @@ OptionParser.new do |opts|
15
15
  end
16
16
  end.parse!
17
17
 
18
- preserved = "master|staging|development"
18
+ preserved = "master|main|staging|development"
19
19
  preserved_file = File.join(Dir.home, '.git-cleanup-preserved')
20
20
  if File.exist?(preserved_file)
21
21
  additional_preserved = File.read(preserved_file).strip.split("\n")
@@ -26,6 +26,27 @@ class Command
26
26
  @current_branch ||= `git rev-parse --abbrev-ref HEAD`.strip
27
27
  end
28
28
 
29
+ # Returns the default branch for the current repository.
30
+ # Command retrieved from
31
+ # https://stackoverflow.com/questions/28666357/git-how-to-get-default-branch
32
+ def default_branch
33
+ branch_name = `git symbolic-ref --short refs/remotes/origin/HEAD \
34
+ | sed 's@^origin/@@'`.strip
35
+ if branch_name.empty?
36
+ $stderr.puts "Repository configuration error"
37
+ $stderr.puts "Missing reference to refs/remotes/origin/HEAD"
38
+ $stderr.puts "Run"
39
+ $stderr.puts
40
+ $stderr.puts " git remote set-head origin <default branch>"
41
+ $stderr.puts
42
+ $stderr.puts "where <default branch> is the default branch name"
43
+ $stderr.puts "(typically `main`, `master`, or `trunk`)"
44
+ $stderr.puts "and then rerun the command"
45
+ exit(1)
46
+ end
47
+ @default_branch ||= branch_name
48
+ end
49
+
29
50
  # Returns the URL for the remote origin.
30
51
  def origin_url
31
52
  @origin_url ||= `git config --get remote.origin.url`.strip
@@ -95,4 +116,4 @@ class Command
95
116
  def deliver?
96
117
  options.deliver
97
118
  end
98
- end
119
+ end
@@ -28,8 +28,8 @@ class MergeBranch < Command
28
28
 
29
29
  # Returns the name of the branch to be merged into.
30
30
  # If there is anything left in the known options after parsing,
31
- # that's the merge branch. Otherwise, it's master.
31
+ # that's the merge branch. Otherwise, it's the default branch.
32
32
  def target_branch
33
- self.known_options.first || 'master'
33
+ self.known_options.first || default_branch
34
34
  end
35
35
  end
@@ -13,10 +13,10 @@ class Sync < Command
13
13
 
14
14
  # Returns a command appropriate for executing at the command line.
15
15
  def cmd
16
- branch = self.known_options.first || 'master'
16
+ branch = self.known_options.first || default_branch
17
17
  c = ["git checkout #{branch}"]
18
18
  c << "git pull"
19
19
  c << "git checkout #{current_branch}"
20
20
  c.join("\n")
21
21
  end
22
- end
22
+ end
@@ -4,7 +4,7 @@ class SyncFork < Command
4
4
 
5
5
  def parser
6
6
  OptionParser.new do |opts|
7
- opts.banner = "Usage: git sync-fork"
7
+ opts.banner = "Usage: git sync-fork [default]"
8
8
  opts.on_tail("-h", "--help", "this usage guide") do
9
9
  puts opts.to_s; exit 0
10
10
  end
@@ -13,9 +13,9 @@ class SyncFork < Command
13
13
 
14
14
  # Returns a command appropriate for executing at the command line.
15
15
  def cmd
16
- c = ["git checkout master"]
16
+ c = ["git checkout #{default_branch}"]
17
17
  c << "git fetch upstream"
18
- c << "git merge upstream/master"
18
+ c << "git merge upstream/#{default_branch}"
19
19
  c.join("\n")
20
20
  end
21
21
  end
@@ -1,5 +1,5 @@
1
1
  module Git
2
2
  module Utils
3
- VERSION = "2.1.0"
3
+ VERSION = "2.2.0"
4
4
  end
5
5
  end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe MergeBranch do
4
4
 
5
5
  let(:command) { MergeBranch.new }
6
- before { command.stub(:current_branch).and_return('tau-manifesto') }
6
+ before { command.stub(:current_branch).and_return('tau-manifesto') }
7
7
  subject { command }
8
8
 
9
9
  its(:cmd) { should match /git merge/ }
@@ -19,6 +19,21 @@ describe MergeBranch do
19
19
  its(:cmd) { should match /git checkout master/ }
20
20
  end
21
21
 
22
+ describe "default branch" do
23
+ let(:command) { MergeBranch.new }
24
+
25
+ describe "for current real repo" do
26
+ subject { command.default_branch }
27
+ it { should match 'master' }
28
+ end
29
+
30
+ describe "for repo with different default" do
31
+ before { command.stub(:default_branch).and_return('main') }
32
+ subject { command.default_branch }
33
+ it { should match 'main' }
34
+ end
35
+ end
36
+
22
37
  describe "with a custom development branch" do
23
38
  let(:command) { MergeBranch.new(['development']) }
24
39
  its(:cmd) { should match /git checkout development/ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Hartl
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-01 00:00:00.000000000 Z
11
+ date: 2021-04-08 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Add some Git utilities
14
14
  email:
@@ -101,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
103
  requirements: []
104
- rubygems_version: 3.1.2
104
+ rubygems_version: 3.1.4
105
105
  signing_key:
106
106
  specification_version: 4
107
107
  summary: See the README for full documentation