Skip to content
This repository has been archived by the owner on Apr 14, 2021. It is now read-only.

bundle version v1.16.1 prints strange "fatal: Not a git repository ...' message #6453

Closed
907th opened this issue Mar 23, 2018 · 6 comments · Fixed by #6664
Closed

bundle version v1.16.1 prints strange "fatal: Not a git repository ...' message #6453

907th opened this issue Mar 23, 2018 · 6 comments · Fixed by #6664

Comments

@907th
Copy link

907th commented Mar 23, 2018

I see strange 'Not a git repo' messages when running bundle version command. All other commands (e.g. bundle install) do not print this message.

Terminal session:

$ \bundle version
fatal: Not a git repository (or any of the parent directories): .git
Bundler version 1.16.1 (2018-03-23 commit )
$ \bundle install
Using rake 12.3.1
Using concurrent-ruby 1.0.5
Using i18n 0.9.5
... omitted
$ which bundle
/Users/laise/.rvm/gems/ruby-2.5.0@my-project/bin/bundle

RVM: rvm 1.29.3 (master)
Ruby: ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17]

@907th
Copy link
Author

907th commented Mar 23, 2018

The source of the problem is this line which calls BuildMetadata.git_commit_sha. But the gem folder has no .git dir.

@907th
Copy link
Author

907th commented Mar 23, 2018

I found that packaged Bundler gem (bundler-1.16.1.gem) simply doesn't include .git dir. So I think that bundle version should avoid to try to extract any git-related info (BuildMetadata.git_commit_sha).

@indirect
Copy link
Member

Thanks for catching this! We definitely shouldn't print that message if there is no .git directory.

@segiddins
Copy link
Member

The released version (1.16.1) has the following (which wont call git at all, since the ivar is already set)

# frozen_string_literal: true

module Bundler
  # Represents metadata from when the Bundler gem was built.
  module BuildMetadata
    # begin ivars
    @built_at = "2017-12-21".freeze
    @git_commit_sha = "0034ef341".freeze
    @release = true
    # end ivars

    # A hash representation of the build metadata.
    def self.to_h
      {
        "Built At" => built_at,
        "Git SHA" => git_commit_sha,
        "Released Version" => release?,
      }
    end

    # A string representing the date the bundler gem was built.
    def self.built_at
      @built_at ||= Time.now.utc.strftime("%Y-%m-%d").freeze
    end

    # The SHA for the git commit the bundler gem was built from.
    def self.git_commit_sha
      @git_commit_sha ||= Dir.chdir(File.expand_path("..", __FILE__)) do
        `git rev-parse --short HEAD`.strip.freeze
      end
    end

    # Whether this is an official release build of Bundler.
    def self.release?
      @release
    end
  end
end

@907th
Copy link
Author

907th commented Mar 26, 2018

@segiddins You're right! I debugged a little and found that my ruby 2.5.0 installation already have a copy of the Bundler 1.16.1 and this "preinstalled" Bundler is used by bundle version command instead of the one I installed manually (using gem install bundler).

Preinstalled Bundler path is:
~/.rvm/rubies/ruby-2.5.0/lib/ruby/site_ruby/2.5.0/bundler

Let's see on the BuildMetadata class from there:

# ~/.rvm/rubies/ruby-2.5.0/lib/ruby/site_ruby/2.5.0/bundler/build_metadata.rb
module Bundler
  # Represents metadata from when the Bundler gem was built.
  module BuildMetadata
    # begin ivars
    @release = false
    # end ivars
    ...

No ivars listed!

I think that this is because RubyGems repo uses a plain copy of the Bundler in its own source code. At the time of writing it has bundler @ 0034ef3 submodule (see rubygems repo).

I guess that metadata ivars are only injected into packaged version of Bundler. This approach is not compatible with using Bundler source code as is (like RubyGems do).

@greysteil
Copy link
Contributor

I was doing a quick trawl of old issues this morning and saw this. I've created #6664 to stop it happening with future releases.

bundlerbot added a commit that referenced this issue Aug 22, 2018
…ndale

Avoid printing git error when checking version on badly packaged version

### What was the end-user problem that led to this PR?

The problem was #6453.

### What was your diagnosis of the problem?

A use had a version of Bundler packaged with Ruby 2.5.0 in RVM, but this version didn't include Bundler's git repo or any of the ivars which should have been set. As a result, Bundler was shelling out to git even though it wasn't in a git repo.

### What is your fix for the problem, implemented in this PR?

My fix is to show a nicer result in this case (just say that the SHA is unknown)

### Why did you choose this fix out of the possible options?

I chose this fix because ensuring Bundler is always packaged correctly by others isn't possible (although it seems weird and unlikely that a version without instance variables set would be used). Falling back to a cleaner error message is marginally nicer than what we currently have, and not much work.

Fixes #6453.
bundlerbot added a commit that referenced this issue Aug 22, 2018
…ndale

Avoid printing git error when checking version on badly packaged version

### What was the end-user problem that led to this PR?

The problem was #6453.

### What was your diagnosis of the problem?

A use had a version of Bundler packaged with Ruby 2.5.0 in RVM, but this version didn't include Bundler's git repo or any of the ivars which should have been set. As a result, Bundler was shelling out to git even though it wasn't in a git repo.

### What is your fix for the problem, implemented in this PR?

My fix is to show a nicer result in this case (just say that the SHA is unknown)

### Why did you choose this fix out of the possible options?

I chose this fix because ensuring Bundler is always packaged correctly by others isn't possible (although it seems weird and unlikely that a version without instance variables set would be used). Falling back to a cleaner error message is marginally nicer than what we currently have, and not much work.

Fixes #6453.
colby-swandale pushed a commit that referenced this issue Sep 14, 2018
…ndale

Avoid printing git error when checking version on badly packaged version

### What was the end-user problem that led to this PR?

The problem was #6453.

### What was your diagnosis of the problem?

A use had a version of Bundler packaged with Ruby 2.5.0 in RVM, but this version didn't include Bundler's git repo or any of the ivars which should have been set. As a result, Bundler was shelling out to git even though it wasn't in a git repo.

### What is your fix for the problem, implemented in this PR?

My fix is to show a nicer result in this case (just say that the SHA is unknown)

### Why did you choose this fix out of the possible options?

I chose this fix because ensuring Bundler is always packaged correctly by others isn't possible (although it seems weird and unlikely that a version without instance variables set would be used). Falling back to a cleaner error message is marginally nicer than what we currently have, and not much work.

Fixes #6453.

(cherry picked from commit e5e260e)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Sep 23, 2018
## 1.16.5 (2018-09-18)

Changes:

  - Add support for TruffleRuby (@eregon)

Bugfixes:

  - Avoid printing git errors when checking the version on incorrectly packaged versions of Bundler ([#6453](rubygems/bundler#6453), @greysteil)
  - Fix issue where Bundler does not check the given class when comparing equality in DepProxy (@ChrisBr)
  - Handle `RangeNotSatisfiable` error in Compact Index (@MaxLap)
  - Check for initialized `search` variable in `LazySpecification` (@voxik)
  - Fix LoadError occurring in nested bundle exec calls ([#6537](rubygems/bundler#6537), @colby-swandale)
  - Check that Bundler::Deprecate is not an autoload constant ([#6163](rubygems/bundler#6163), @eregon)
  - Prefer non-pre-release versions when performing a `bundle update --patch` ([#6684](rubygems/bundler#6684), @segiddins)

## 1.16.4 (2017-08-17)

Changes:

  - Welcome new members to the Bundler core team (@indirect)
  - Don't mutate original error trees when determining version_conflict_message (@greysteil)
  - Update vendored Molinillo to 0.6.6 (@segiddins)

Bugfixes:

  - Reword bundle update regression message to be more clear to the user when a gem's version is downgraded ([#6584](rubygems/bundler#6584), @ralphbolo)
  - Respect --conservative flag when updating a dependency group ([#6560](rubygems/bundler#6560), @greysteil)
  - Fix issue where a pre-release version was not being selected when it's specified in the Gemfile ([#6449](rubygems/bundler#6449), @akihiro17)
  - Fix issue where `Etc` was not loaded when getting the user's home dir ([#6640](rubygems/bundler#6640), @colby-swandale)
  - Use UTF-8 for reading files including Gemfile ([#6660](rubygems/bundler#6660), @eregon)
  - Remove unnecessary `while` loop in path resolver helper (@ojab)

Documentation:

  - Document that `bundle show [--paths]` sorts results by name (@kemitchell)

## 1.16.3 (2018-07-17)

Features:

  - Support URI::File of Ruby 2.6 (@hsbt)

Bugfixes:

  - Expand symlinks during setup to allow Bundler to load correctly when using symlinks in $GEM_HOME ([#6465](rubygems/bundler#6465), @ojab, @indirect)
  - Dont let Bundler create temporary folders for gem installs which are owned by root ([#6258](rubygems/bundler#6258), @colby-swandale)
  - Don't fallback to using temporary directories when needed directories already exist ([#6546](rubygems/bundler#6546), @brodock)
  - Use SharedHelpers.filesystem_access when reading a Gemfile so friendly error messages can be given to the user ([#6541](rubygems/bundler#6541), @segiddins)
  - Check if source responds to `#remotes` before printing gem install error message ([#6211](rubygems/bundler#6211), @colby-swandale)
  - Handle Errno::ENOTSUP in the Bundler Process Lock to prevent exceptions when using NFS mounts ([#6566](rubygems/bundler#6566), @colby-swandale)
  - Respect encodings when reading gemspecs ([#6598](rubygems/bundler#6598), @deivid-rodriguez)

Documentation:

  - Fix links between manual pages (@BanzaiMan)
  - Add warning to Gemfile documentation for the use of the `source` option when declaring gems ([#6280](rubygems/bundler#6280), @forestgagnon)

## 1.16.2 (2018-04-20)

Changes:

  - Include the gem's source in the gem install error message when available (@papanikge)
  - Remove unnecessary executable bit from gem template (@voxik)
  - Dont add the timestamp comment with gems added to the Gemfile via `bundle add` ([#6193](rubygems/bundler#6193), @cpgo)
  - Improve yanked gem error message (@alyssais)
  - Use `Bundler.rubygems.inflate` instead of the Gem::Util method directly (@segiddins)
  - Remove unused instance variable (@segiddins)

Bugfixes:

  - Only trap INT signal and have Ruby's signal default handler be invoked (@shayonj)
  - Fix warning about the use of `__FILE__` in RubyGems integration testing (@MSP-Greg)
  - Skip the outdated bundler check when MD5 is not available ([#6032](rubygems/bundler#6032), @segiddins)
  - Fallback to the original error if the friendly message raises (@segiddins)
  - Rename Bundler.frozen? to avoid Object method conflict ([#6252](rubygems/bundler#6252), @segiddins)
  - Ensure the bindir exists before installing gems (@segiddins)
  - Handle gzip corruption errors in the compact index client ([#6261](rubygems/bundler#6261), @colby-swandale)
  - Check if the current directory is writeable when writing files in `bundle gem` ([#6219](rubygems/bundler#6219), @nilsding)
  - Fix hang when gemspec has incompatible encoding (@deivid-rodriguez)
  - Gracefully handle when the lockfile is missing spec entries for the current platform ([#6079](rubygems/bundler#6079), @segiddins)
  - Use Gem::Util.inflate instead of Gem.inflate (@hsbt)
  - Update binstub generator to use new ERB.new arity in Ruby 2.6 (@koic)
  - Fix `source_location` call in rubygems integration (@MSP-Greg)
  - Use `filesystem_access` when copying files in Compact Index Updater ([#6289](rubygems/bundler#6289), @segiddins)
  - Fail gracefully when resetting git gems to the given revision fails ([#6324](rubygems/bundler#6324), @segiddins)
  - Handle exceptions that do not have a backtrace ([#6342](rubygems/bundler#6342), @nesaulov)
  - Check if stderr was closed before writing to it (@shime)
  - Handle updating a specific gem for a non-local platform ([#6350](rubygems/bundler#6350), @greysteil)
  - Bump the `bundle_binstub` check-length to 300 characters (@tduffield)
  - Fix specifying alterntive Lockfile with `bundle lock` when default gemfile is present  ([#6460](rubygems/bundler#6460), @agrim123)
  - Allow installing dependencies when the path is set to `.`  ([#6475](rubygems/bundler#6475), @segiddins)
  - Support Bundler installing on a readonly filesystem without a home directory ([#6461](rubygems/bundler#6461), @grosser)
  - Filter git uri credentials in source description (@segiddins)

Documentation:

  - Correct typos in `bundle binstubs` man page (@erikj, @samueloph)
  - Update links in `bundle gem` command documentation to use https (@KrauseFx)
  - Fix broken links between bundler man pages (@segiddins)
  - Add man page for the `bundle doctor` command ([#6243](rubygems/bundler#6243), @nholden)
  - Document `# frozen_string_literal` in `bundle init` Gemfile (@315tky)
  - Explain the gemspec files attribute in `bundle gem` template and print a link to bundler.io guides when running `bundle gem` ([#6246](rubygems/bundler#6246), @nesaulov)
  - Small copy tweaks & removed redundant phrasing in the bundler man page (@rubymorillo)
  - Improve the documentation of the settings load order in Bundler (@rubymorillo)
  - Added license info to main README (@rubymorillo)
  - Document parameters and return value of Injector#inject (@tobias-grasse)
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants