mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[rubygems/rubygems] Feature: accept pull request URLs as github source
Very often github source is used to temporarily use a modified gem while a PR upstream is being reviewed. So for instance https://github.com/ruby/bigdecimal/pull/211 will look like: ```ruby gem "bigdecimal", github: "casperisfine/bigdecimal", branch: "git-gem" # https://github.com/ruby/bigdecimal/pull/200 ``` It's annoying because you have to fiddle with the branch name, which is copied as `casperisfine:git-gem`, etc etc. If I could simply use the PR URL like this: ``` gem "bigdecimal", github: "https://github.com/ruby/bigdecimal/pull/211" ``` It would make a very common task for me so much simpler. https://github.com/rubygems/rubygems/commit/517c527751
This commit is contained in:
parent
d044ffd77f
commit
715a51a0d6
28 changed files with 116 additions and 28 deletions
|
@ -18,6 +18,8 @@ module Bundler
|
|||
VALID_KEYS = %w[group groups git path glob name branch ref tag require submodules
|
||||
platform platforms type source install_if gemfile].freeze
|
||||
|
||||
GITHUB_PULL_REQUEST_URL = %r{\Ahttps://github\.com/([A-Za-z0-9_\-\.]+/[A-Za-z0-9_\-\.]+)/pull/(\d+)\z}.freeze
|
||||
|
||||
attr_reader :gemspecs
|
||||
attr_accessor :dependencies
|
||||
|
||||
|
@ -278,9 +280,18 @@ module Bundler
|
|||
warn_deprecated_git_source(:github, <<-'RUBY'.strip, 'Change any "reponame" :github sources to "username/reponame".')
|
||||
"https://github.com/#{repo_name}.git"
|
||||
RUBY
|
||||
if repo_name =~ GITHUB_PULL_REQUEST_URL
|
||||
{
|
||||
"git" => "https://github.com/#{$1}.git",
|
||||
"branch" => "refs/pull/#{$2}/head",
|
||||
"ref" => nil,
|
||||
"tag" => nil,
|
||||
}
|
||||
else
|
||||
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
|
||||
"https://github.com/#{repo_name}.git"
|
||||
end
|
||||
end
|
||||
|
||||
git_source(:gist) do |repo_name|
|
||||
warn_deprecated_git_source(:gist, '"https://gist.github.com/#{repo_name}.git"')
|
||||
|
@ -365,7 +376,11 @@ repo_name ||= user_name
|
|||
|
||||
git_name = (git_names & opts.keys).last
|
||||
if @git_sources[git_name]
|
||||
opts["git"] = @git_sources[git_name].call(opts[git_name])
|
||||
git_opts = @git_sources[git_name].call(opts[git_name])
|
||||
git_opts = { "git" => git_opts } if git_opts.is_a?(String)
|
||||
opts.merge!(git_opts) do |key, _gemfile_value, _git_source_value|
|
||||
raise GemfileError, %(The :#{key} option can't be used with `#{git_name}: #{opts[git_name].inspect}`)
|
||||
end
|
||||
end
|
||||
|
||||
%w[git path].each do |type|
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-ADD" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-ADD" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-BINSTUBS" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-BINSTUBS" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-CACHE" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-CACHE" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-CHECK" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-CHECK" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-CLEAN" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-CLEAN" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-CONFIG" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-CONFIG" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-config\fR \- Set bundler configuration options
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-DOCTOR" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-DOCTOR" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-doctor\fR \- Checks the bundle for common problems
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-EXEC" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-EXEC" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-exec\fR \- Execute a command in the context of the bundle
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-GEM" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-GEM" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-INFO" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-INFO" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-info\fR \- Show information for the given gem in your bundle
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-INIT" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-INIT" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-init\fR \- Generates a Gemfile into the current working directory
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-INJECT" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-INJECT" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-INSTALL" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-INSTALL" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-LIST" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-LIST" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-list\fR \- List all the gems in the bundle
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-LOCK" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-LOCK" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-OPEN" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-OPEN" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-OUTDATED" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-OUTDATED" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-outdated\fR \- List installed gems with newer versions available
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-PLATFORM" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-PLATFORM" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-platform\fR \- Displays platform compatibility information
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-PRISTINE" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-PRISTINE" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-pristine\fR \- Restores installed gems to their pristine condition
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-REMOVE" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-REMOVE" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-remove\fR \- Removes gems from the Gemfile
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-SHOW" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-SHOW" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-UPDATE" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-UPDATE" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-update\fR \- Update your gems to the latest available versions
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE\-VIZ" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE\-VIZ" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\-viz\fR \- Generates a visual dependency graph for your Gemfile
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "BUNDLE" "1" "November 2021" "" ""
|
||||
.TH "BUNDLE" "1" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBbundle\fR \- Ruby Dependency Management
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.\" generated with Ronn/v0.7.3
|
||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||
.
|
||||
.TH "GEMFILE" "5" "November 2021" "" ""
|
||||
.TH "GEMFILE" "5" "December 2021" "" ""
|
||||
.
|
||||
.SH "NAME"
|
||||
\fBGemfile\fR \- A format for describing gem dependencies for Ruby programs
|
||||
|
@ -506,6 +506,32 @@ gem "rails", :git => "git://github\.com/rails/rails\.git"
|
|||
.P
|
||||
Since the \fBgithub\fR method is a specialization of \fBgit_source\fR, it accepts a \fB:branch\fR named argument\.
|
||||
.
|
||||
.P
|
||||
You can also directly pass a pull request URL:
|
||||
.
|
||||
.IP "" 4
|
||||
.
|
||||
.nf
|
||||
|
||||
gem "rails", :github => "https://github\.com/rails/rails/pull/43753"
|
||||
.
|
||||
.fi
|
||||
.
|
||||
.IP "" 0
|
||||
.
|
||||
.P
|
||||
Which is equivalent to:
|
||||
.
|
||||
.IP "" 4
|
||||
.
|
||||
.nf
|
||||
|
||||
gem "rails", :github => "rails/rails", branch: "refs/pull/43753/head"
|
||||
.
|
||||
.fi
|
||||
.
|
||||
.IP "" 0
|
||||
.
|
||||
.SS "GIST"
|
||||
If the git repository you want to use is hosted as a GitHub Gist and is public, you can use the :gist shorthand to specify the gist identifier (without the trailing "\.git")\.
|
||||
.
|
||||
|
|
|
@ -372,6 +372,14 @@ Are both equivalent to
|
|||
|
||||
Since the `github` method is a specialization of `git_source`, it accepts a `:branch` named argument.
|
||||
|
||||
You can also directly pass a pull request URL:
|
||||
|
||||
gem "rails", :github => "https://github.com/rails/rails/pull/43753"
|
||||
|
||||
Which is equivalent to:
|
||||
|
||||
gem "rails", :github => "rails/rails", branch: "refs/pull/43753/head"
|
||||
|
||||
### GIST
|
||||
|
||||
If the git repository you want to use is hosted as a GitHub Gist and is public, you can use
|
||||
|
|
|
@ -25,6 +25,45 @@ RSpec.describe Bundler::Dsl do
|
|||
expect { subject.git_source(:example) }.to raise_error(Bundler::InvalidOption)
|
||||
end
|
||||
|
||||
it "converts :github PR to URI using https" do
|
||||
subject.gem("sparks", :github => "https://github.com/indirect/sparks/pull/5")
|
||||
github_uri = "https://github.com/indirect/sparks.git"
|
||||
expect(subject.dependencies.first.source.uri).to eq(github_uri)
|
||||
expect(subject.dependencies.first.source.branch).to eq("refs/pull/5/head")
|
||||
end
|
||||
|
||||
it "rejects :github PR URI with a branch, ref or tag" do
|
||||
expect do
|
||||
subject.gem("sparks", :github => "https://github.com/indirect/sparks/pull/5", :branch => "foo")
|
||||
end.to raise_error(
|
||||
Bundler::GemfileError,
|
||||
%(The :branch option can't be used with `github: "https://github.com/indirect/sparks/pull/5"`),
|
||||
)
|
||||
|
||||
expect do
|
||||
subject.gem("sparks", :github => "https://github.com/indirect/sparks/pull/5", :ref => "foo")
|
||||
end.to raise_error(
|
||||
Bundler::GemfileError,
|
||||
%(The :ref option can't be used with `github: "https://github.com/indirect/sparks/pull/5"`),
|
||||
)
|
||||
|
||||
expect do
|
||||
subject.gem("sparks", :github => "https://github.com/indirect/sparks/pull/5", :tag => "foo")
|
||||
end.to raise_error(
|
||||
Bundler::GemfileError,
|
||||
%(The :tag option can't be used with `github: "https://github.com/indirect/sparks/pull/5"`),
|
||||
)
|
||||
end
|
||||
|
||||
it "rejects :github with :git" do
|
||||
expect do
|
||||
subject.gem("sparks", :github => "indirect/sparks", :git => "https://github.com/indirect/sparks.git")
|
||||
end.to raise_error(
|
||||
Bundler::GemfileError,
|
||||
%(The :git option can't be used with `github: "indirect/sparks"`),
|
||||
)
|
||||
end
|
||||
|
||||
context "default hosts", :bundler => "< 3" do
|
||||
it "converts :github to URI using https" do
|
||||
subject.gem("sparks", :github => "indirect/sparks")
|
||||
|
|
Loading…
Reference in a new issue