class Git::URL

Methods for parsing a Git URL

Any URL that can be passed to `git clone` can be parsed by this class.

@see git-scm.com/docs/git-clone#_git_urls GIT URLs @see github.com/sporkmonger/addressable Addresable::URI

@api public

Constants

GIT_ALTERNATIVE_SSH_SYNTAX

Regexp used to match a Git URL with an alternative SSH syntax such as `user@host:path`

Public Class Methods

clone_to(url, bare: false, mirror: false) click to toggle source

The directory `git clone` would use for the repository directory for the given URL

@example

Git::URL.clone_to('https://github.com/ruby-git/ruby-git.git') #=> 'ruby-git'

@param url [String] the Git URL containing the repository directory

@return [String] the name of the repository directory

# File lib/git/url.rb, line 63
def self.clone_to(url, bare: false, mirror: false)
  uri = parse(url)
  path_parts = uri.path.split('/')
  path_parts.pop if path_parts.last == '.git'
  directory = path_parts.last
  if bare || mirror
    directory += '.git' unless directory.end_with?('.git')
  elsif directory.end_with?('.git')
    directory = directory[0..-5]
  end
  directory
end
parse(url) click to toggle source

Parse a Git URL and return an Addressable::URI object

The URI returned can be converted back to a string with 'to_s'. This is guaranteed to return the same URL string that was parsed.

@example

uri = Git::URL.parse('https://github.com/ruby-git/ruby-git.git')
  #=> #<Addressable::URI:0x44c URI:https://github.com/ruby-git/ruby-git.git>
uri.scheme #=> "https"
uri.host #=> "github.com"
uri.path #=> "/ruby-git/ruby-git.git"

Git::URL.parse('/Users/James/projects/ruby-git')
  #=> #<Addressable::URI:0x438 URI:/Users/James/projects/ruby-git>

@param url [String] the Git URL to parse

@return [Addressable::URI] the parsed URI

# File lib/git/url.rb, line 46
def self.parse(url)
  if !url.start_with?('file:') && (m = GIT_ALTERNATIVE_SSH_SYNTAX.match(url))
    GitAltURI.new(user: m[:user], host: m[:host], path: m[:path])
  else
    Addressable::URI.parse(url)
  end
end