autobuild 1.7.11.rc1 → 1.7.11.rc2

Sign up to get free protection for your applications and to get access to all the features.
@@ -189,7 +189,14 @@ module Autobuild
189
189
  # The directory in which remote files are cached
190
190
  #
191
191
  # Defaults to ArchiveImporter.cachedir
192
- attr_accessor :cachedir
192
+ attr_reader :cachedir
193
+
194
+ # Changes the cache directory for this importer
195
+ def cachedir=(dir)
196
+ @cachedir = dir
197
+ relocate(@url.to_s)
198
+ end
199
+
193
200
  # The directory contained in the tar file
194
201
  #
195
202
  # DEPRECATED use #archive_dir instead
@@ -45,6 +45,7 @@ module Autobuild
45
45
  def initialize(repository, branch = nil, options = {})
46
46
  @repository = repository.to_str
47
47
  @alternates = Git.default_alternates.dup
48
+ @git_dir_cache = Array.new
48
49
 
49
50
  if branch.respond_to?(:to_hash)
50
51
  options = branch.to_hash
@@ -177,8 +178,44 @@ module Autobuild
177
178
  # Raises ConfigException if the current directory is not a git
178
179
  # repository
179
180
  def validate_importdir(package)
180
- if !File.directory?(File.join(package.importdir, '.git'))
181
- raise ConfigException.new(package, 'import'), "while importing #{package.name}, #{package.importdir} is not a git repository"
181
+ return git_dir(package, true)
182
+ end
183
+
184
+ # Resolves the git directory associated with path, and tells whether it
185
+ # is a bare repository or not
186
+ #
187
+ # @param [String] path the path from which we should resolve
188
+ # @return [(String,Symbol),nil] either the path to the git folder and
189
+ # :bare or :normal, or nil if path is not a git repository.
190
+ def self.resolve_git_dir(path)
191
+ dir = File.join(path, '.git')
192
+ if !File.exists?(dir)
193
+ dir = path
194
+ end
195
+
196
+ result = `#{Autobuild.tool(:git)} --git-dir="#{dir}" rev-parse --is-bare-repository`
197
+ if $?.success?
198
+ if result.strip == "true"
199
+ return dir, :bare
200
+ else return dir, :normal
201
+ end
202
+ end
203
+ end
204
+
205
+ def git_dir(package, require_working_copy)
206
+ if @git_dir_cache[0] == package.importdir
207
+ dir, style = *@git_dir_cache[1, 2]
208
+ else
209
+ dir, style = Git.resolve_git_dir(package.importdir)
210
+ end
211
+
212
+ @git_dir_cache = [package.importdir, dir, style]
213
+ if !style
214
+ raise ConfigException.new(package, 'import'), "while importing #{package.name}, #{package.importdir} does not point to a git repository"
215
+ elsif require_working_copy && (style == :bare)
216
+ raise ConfigException.new(package, 'import'), "while importing #{package.name}, #{package.importdir} points to a bare git repository but a working copy was required"
217
+ else
218
+ return dir
182
219
  end
183
220
  end
184
221
 
@@ -225,7 +262,7 @@ module Autobuild
225
262
 
226
263
  # Updates the git repository's configuration for the target remote
227
264
  def update_remotes_configuration(package, phase)
228
- git = [package, phase, Autobuild.tool(:git), '--git-dir', File.join(package.importdir, '.git'), 'config', '--replace-all']
265
+ git = [package, phase, Autobuild.tool(:git), '--git-dir', git_dir(package, false), 'config', '--replace-all']
229
266
  Subprocess.run(*git, "remote.#{remote_name}.url", repository)
230
267
  if push_to
231
268
  Subprocess.run(*git, "remote.#{remote_name}.pushurl", push_to)
@@ -249,7 +286,8 @@ module Autobuild
249
286
  # package's source directory.
250
287
  def fetch_remote(package)
251
288
  validate_importdir(package)
252
- git = [package, :import, Autobuild.tool('git'), '--git-dir', File.join(package.importdir, '.git')]
289
+ git_dir = git_dir(package, false)
290
+ git = [package, :import, Autobuild.tool('git'), '--git-dir', git_dir]
253
291
 
254
292
  # If we are checking out a specific commit, we don't know which
255
293
  # branch to refer to in git fetch. So, we have to set up the
@@ -268,8 +306,8 @@ module Autobuild
268
306
 
269
307
  # Now get the actual commit ID from the FETCH_HEAD file, and
270
308
  # return it
271
- commit_id = if File.readable?( File.join(package.importdir, '.git', 'FETCH_HEAD') )
272
- fetch_commit = File.readlines( File.join(package.importdir, '.git', 'FETCH_HEAD') ).
309
+ commit_id = if File.readable?( File.join(git_dir, 'FETCH_HEAD') )
310
+ fetch_commit = File.readlines( File.join(git_dir, 'FETCH_HEAD') ).
273
311
  delete_if { |l| l =~ /not-for-merge/ }
274
312
  if !fetch_commit.empty?
275
313
  fetch_commit.first.split(/\s+/).first
@@ -429,7 +467,7 @@ module Autobuild
429
467
  # @param [Package] package the already checked-out package
430
468
  # @return [void]
431
469
  def update_alternates(package)
432
- alternates_path = File.join(package.importdir, '.git', 'objects', 'info', 'alternates')
470
+ alternates_path = File.join(git_dir(package, false), 'objects', 'info', 'alternates')
433
471
  current_alternates =
434
472
  if File.file?(alternates_path)
435
473
  File.readlines(alternates_path).map(&:strip).find_all { |l| !l.empty? }
@@ -583,7 +621,8 @@ module Autobuild
583
621
 
584
622
  # Tests whether the given directory is a git repository
585
623
  def self.can_handle?(path)
586
- File.directory?(File.join(path, '.git'))
624
+ _, style = Git.resolve_git_dir(path)
625
+ style == :normal
587
626
  end
588
627
 
589
628
  # Returns a hash that represents the configuration of a git importer
@@ -592,7 +631,7 @@ module Autobuild
592
631
  # @raise [ArgumentError] if the path does not point to a git repository
593
632
  def self.vcs_definition_for(path)
594
633
  if !can_handle?(path)
595
- raise ArgumentError, "#{path} is not a git repository"
634
+ raise ArgumentError, "#{path} is either not a git repository, or a bare git repository"
596
635
  end
597
636
 
598
637
  Dir.chdir(path) do
@@ -1,5 +1,5 @@
1
1
  module Autobuild
2
- VERSION = "1.7.11.rc1" unless defined? Autobuild::VERSION
2
+ VERSION = "1.7.11.rc2" unless defined? Autobuild::VERSION
3
3
  end
4
4
 
5
5
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: autobuild
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.11.rc1
4
+ version: 1.7.11.rc2
5
5
  prerelease: 7
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-17 00:00:00.000000000 Z
12
+ date: 2014-05-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake