Class: Git::URL
- Inherits:
-
Object
- Object
- Git::URL
- Defined in:
- lib/git/url.rb
Overview
Methods for parsing a Git URL
Any URL that can be passed to ‘git clone` can be parsed by this class.
Constant Summary collapse
- GIT_ALTERNATIVE_SSH_SYNTAX =
Regexp used to match a Git URL with an alternative SSH syntax such as ‘user@host:path`
%r{ ^ (?:(?<user>[^@/]+)@)? # user or nil (?<host>[^:/]+) # host is required :(?!/) # : serparator is required, but must not be followed by / (?<path>.*?) # path is required $ }x.freeze
Class Method Summary collapse
-
.clone_to(url, bare: false, mirror: false) ⇒ String
The directory ‘git clone` would use for the repository directory for the given URL.
-
.parse(url) ⇒ Addressable::URI
Parse a Git URL and return an Addressable::URI object.
Class Method Details
.clone_to(url, bare: false, mirror: false) ⇒ String
The directory ‘git clone` would use for the repository directory for the given URL
64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/git/url.rb', line 64 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 || mirror directory += '.git' unless directory.end_with?('.git') elsif directory.end_with?('.git') directory = directory[0..-5] end directory end |
.parse(url) ⇒ Addressable::URI
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.
47 48 49 50 51 52 53 |
# File 'lib/git/url.rb', line 47 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 |