git-fyncy 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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