git-fyncy 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,22 +3,29 @@ require 'git-fyncy/utils'
3
3
  module GitFyncy
4
4
  module Repo
5
5
  extend Utils
6
- GIT_CONFIG_NAME = "fyncy.remote"
6
+ GIT_CONFIG = {
7
+ remote_name: "fyncy.remote".freeze,
8
+ url: "fyncy.url".freeze
9
+ }.freeze
7
10
  DEFAULT_REMOTE = "origin".freeze
8
11
 
9
-
10
12
  def self.get_stdout_str(cmd)
11
13
  out = `#{cmd}`.chomp
12
14
  out.empty? ? nil : out
13
15
  end
14
16
 
15
- def self.fyncy_remote_name_from_config
16
- get_stdout_str "git config --get #{GIT_CONFIG_NAME}"
17
- end
17
+ module ClassMethods
18
+ [:remote_name, :url].each do |name|
19
+ define_method("#{name}_from_config") do
20
+ get_stdout_str "git config --get #{GIT_CONFIG.fetch(name)}"
21
+ end
18
22
 
19
- def self.configure_fyncy_remote(remote_name)
20
- system "git config --add #{GIT_CONFIG_NAME} '#{remote_name}'"
23
+ define_method("configure_fyncy_#{name}") do |val|
24
+ system "git config --add #{GIT_CONFIG.fetch(name)} '#{val}'"
25
+ end
26
+ end
21
27
  end
28
+ extend ClassMethods
22
29
 
23
30
  def self.lookup_remote_url(remote_name)
24
31
  get_stdout_str "git config --get remote.#{remote_name}.url"
@@ -28,7 +35,7 @@ module GitFyncy
28
35
  system "git config --get remote.#{remote_name}.url"
29
36
  end
30
37
 
31
- TRAILING_GIT_REGEX = %r{^(.*)(s\.git/?$)}.freeze
38
+ TRAILING_GIT_REGEX = %r{^(.*)(\.git/?$)}.freeze
32
39
  def self.remove_trailing_git(str)
33
40
  md = TRAILING_GIT_REGEX.match str
34
41
  md ? md[1] : str
@@ -37,10 +44,7 @@ module GitFyncy
37
44
  SSH_URL_REGEX = %r{ssh://(\w+@)?([\w\.]+)(:\d+)?([/\w\.]*)$}.freeze
38
45
  SCP_REGEX = /^(\w+@)?([\.\w]+):(.*)$/.freeze
39
46
 
40
- def self.host_and_path_for_remote(remote_name)
41
- url = lookup_remote_url remote_name
42
- return unless url
43
-
47
+ def self.host_and_path_from_url(url)
44
48
  md = SSH_URL_REGEX.match url
45
49
  if md
46
50
  user = md[1]
@@ -63,26 +67,44 @@ module GitFyncy
63
67
  ["#{user}#{host}", path]
64
68
  end
65
69
 
70
+ def self.host_and_path_for_remote(remote_name)
71
+ url = lookup_remote_url remote_name
72
+ return unless url
73
+ host_and_path_from_url url
74
+ end
75
+
66
76
  def self.prompt_user_for_remote_name
67
- print "No remote specified for git fyncy. Enter the name of the remote to use (or press return to use the default, #{DEFAULT_REMOTE}):"
77
+ prompt = <<-EOS
78
+ No remote configured. git fyncy looks under the fyncy section of your git
79
+ config for a remote name or a url (i.e. at fyncy.remote and fyncy.url). If a
80
+ remote name is specified, that remote's url be used with any ".git" suffix
81
+ removed.
82
+
83
+ Enter a remote name to use (or press return to use #{DEFAULT_REMOTE}):
84
+ EOS
85
+ print prompt.chomp
86
+
68
87
  remote_name = gets.chomp
69
88
  remote_name = DEFAULT_REMOTE if remote_name.empty?
70
89
  if remote_defined?(remote_name)
71
90
  puts
72
91
  else
73
- pexit "A remote by the name of #{remote_name} is not defined in this repo."
92
+ pexit "A remote by the name of \"#{remote_name}\" is not defined in this repo."
74
93
  end
75
94
 
76
- if configure_fyncy_remote remote_name
95
+ if configure_fyncy_remote_name remote_name
77
96
  remote_name
78
97
  else
79
- pexit "Failed to set #{GIT_CONFIG_NAME} to #{remote_name}. Perhaps there was a permissions error?"
98
+ pexit "Failed to set #{GIT_CONFIG.fetch(:remote_name)} to #{remote_name}."
80
99
  end
81
100
  end
82
101
 
83
102
  def self.host_and_path_from_current_repo
84
103
  # Determine remote fyncy should use
85
- remote_name = fyncy_remote_name_from_config
104
+ url = url_from_config
105
+ return host_and_path_from_url url if url
106
+
107
+ remote_name = remote_name_from_config
86
108
  remote_name = prompt_user_for_remote_name unless remote_name
87
109
  res = nil
88
110
  res = host_and_path_for_remote remote_name if remote_name
@@ -1,3 +1,3 @@
1
1
  module GitFyncy
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-fyncy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-11-30 00:00:00.000000000 Z
12
+ date: 2014-12-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: listen
16
- requirement: &21773540 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,7 +21,12 @@ dependencies:
21
21
  version: '1.3'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *21773540
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
25
30
  description: The funky git aware syncer.
26
31
  email:
27
32
  - ryan@ryanmcg.com
@@ -65,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
70
  version: '0'
66
71
  requirements: []
67
72
  rubyforge_project:
68
- rubygems_version: 1.8.11
73
+ rubygems_version: 1.8.25
69
74
  signing_key:
70
75
  specification_version: 3
71
76
  summary: Want to sync the working directories of your git directory with a remote