Sha256: 451dc554af60e07eee1fb147b364d54a5133d94207d27309a5bad98b106419e4

Contents?: true

Size: 1.6 KB

Versions: 42

Compression:

Stored size: 1.6 KB

Contents

module Rugged
  class SubmoduleCollection

    # call-seq:
    #   submodules.setup_add(url, path[, options]) -> submodule
    #
    # Add a new +submodule+.
    #
    # This does <tt>"git submodule add"</tt> incuding fetch and checkout of the
    # submodule contents.
    #
    # - +url+: URL for the submodule's remote
    # - +path+: path at which the submodule should be created
    #
    # The +options+ hash accepts all options supported by Rugged::Remote#fetch
    # and the following:
    # :gitlink ::
    #   (defaults to +true+) should workdir contain a
    #   gitlink to the repository in +.git/modules+ vs. repository
    #   directly in workdir.
    #
    # Returns the newly created +submodule+
    def add(url, path, options = {})
      submodule = setup_add(url, path, options)
      clone_submodule(submodule.repository, options)
      submodule.finalize_add
    end

    private
    # currently libgit2's `git_submodule_add_setup` initializes a repo
    # with a workdir for the submodule. libgit2's `git_clone` however
    # requires the target for the clone to be an empty dir.
    #
    # This provides a ghetto clone implementation that:
    # 1. fetches the remote
    # 2. sets up a master branch to be tracking origin/master
    # 3. checkouts the submodule
    def clone_submodule(repo, fetch_options)
      # the remote was just added by setup_add, no need to check presence
      repo.remotes['origin'].fetch(fetch_options)

      repo.branches.create('master','origin/master')
      repo.branches['master'].upstream = repo.branches['origin/master']

      repo.checkout_head(strategy: :force)
    end
  end
end

Version data entries

42 entries across 42 versions & 2 rubygems

Version Path
rugged-0.24.6.1 lib/rugged/submodule_collection.rb
rugged-0.24.5 lib/rugged/submodule_collection.rb
rugged-0.25.0b10 lib/rugged/submodule_collection.rb
rugged-0.25.0b9 lib/rugged/submodule_collection.rb
rugged-0.25.0b8 lib/rugged/submodule_collection.rb
rugged-0.25.0b7 lib/rugged/submodule_collection.rb
rugged-0.25.0b6 lib/rugged/submodule_collection.rb
rugged-0.25.0b5 lib/rugged/submodule_collection.rb
rugged-0.25.0b4 lib/rugged/submodule_collection.rb
rugged-0.25.0b3 lib/rugged/submodule_collection.rb
rugged-0.25.0b2 lib/rugged/submodule_collection.rb
rugged-0.25.0b1 lib/rugged/submodule_collection.rb
rugged-0.24.0 lib/rugged/submodule_collection.rb
rugged-0.24.0b14 lib/rugged/submodule_collection.rb
rugged-0.24.0b13 lib/rugged/submodule_collection.rb
rdavila-rugged-0.24.0b13 lib/rugged/submodule_collection.rb
rugged-0.24.0b12 lib/rugged/submodule_collection.rb
rugged-0.24.0b11 lib/rugged/submodule_collection.rb
rugged-0.24.0b9 lib/rugged/submodule_collection.rb
rugged-0.24.0b8 lib/rugged/submodule_collection.rb