gill 0.1.2 → 1.0.0.rc.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -34,7 +34,7 @@ Gill Usage:
34
34
 
35
35
  Cloning a git repository with gill:
36
36
 
37
- $ gill https://mephux@github.com/mephux/Snorby.git#rails#snorby-dev
37
+ $ gill https://github.com/mephux/Snorby.git#rails#snorby-dev
38
38
  Initialized empty Git repository in /Users/mephux/Source/rails/snorby-dev/.git/
39
39
  remote: Counting objects: 7958, done.
40
40
  remote: Compressing objects: 100% (3367/3367), done.
@@ -44,7 +44,7 @@ Cloning a git repository with gill:
44
44
 
45
45
  This will create a folder called 'rails' and clone the repo inside a folder called 'snorby'. ie: '/Users/mephux/Source/rails/snorby-dev/'
46
46
 
47
- gill https://mephux@github.com/mephux/gill.git#ruby
47
+ gill https://github.com/mephux/gill.git#ruby
48
48
  gill http://github.com/jruby/jruby.git#jruby
49
49
  gill http://github.com/ronin-ruby/ronin.git#security#ronin-dev
50
50
  gill http://github.com/postmodern/spidr.git#security#spidr-dev
@@ -72,7 +72,7 @@ Listing cloned repositories:
72
72
  spidr-dev => http://github.com/postmodern/spidr.git
73
73
 
74
74
  rails:
75
- snorby-dev => https://mephux@github.com/mephux/Snorby.git
75
+ snorby-dev => https://github.com/mephux/Snorby.git
76
76
 
77
77
  Removing cloned repositories:
78
78
 
data/bin/gill CHANGED
@@ -6,5 +6,4 @@ unless $LOAD_PATH.include?(lib_dir)
6
6
  end
7
7
 
8
8
  require 'gill'
9
-
10
9
  Gill.run
data/gill.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{gill}
8
- s.version = "0.1.2"
8
+ s.version = "1.0.0.rc.2"
9
9
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
+ s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Dustin Willis Webber"]
12
- s.date = %q{2010-07-14}
12
+ s.date = %q{2010-07-30}
13
13
  s.default_executable = %q{gill}
14
14
  s.description = %q{Gill is a simple Ruby app to help keep your git clones clean and organized.}
15
15
  s.email = %q{dustin.webber@gmail.com}
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
34
34
  "lib/gill/config/setup.rb",
35
35
  "lib/gill/exceptions.rb",
36
36
  "lib/gill/exceptions/argument_error.rb",
37
+ "lib/gill/exceptions/cache_error.rb",
37
38
  "lib/gill/exceptions/category_missing.rb",
38
39
  "lib/gill/exceptions/directory_error.rb",
39
40
  "lib/gill/exceptions/error.rb",
@@ -43,6 +44,7 @@ Gem::Specification.new do |s|
43
44
  "lib/gill/gill.rb",
44
45
  "lib/gill/git.rb",
45
46
  "lib/gill/helper.rb",
47
+ "lib/gill/import.rb",
46
48
  "lib/gill/parse.rb",
47
49
  "lib/gill/remove.rb",
48
50
  "lib/gill/version.rb",
@@ -18,17 +18,16 @@ module Gill
18
18
  # Find or created the gill cache file.
19
19
  def find_or_create_cache
20
20
  if File.exists?("#{@cache_path}")
21
- @cache = YAML.load_file(@cache_path) || build_cache
21
+ @cache = YAML.load_file(@cache_path)
22
22
  else
23
23
  build_cache
24
24
  end
25
25
  end
26
26
 
27
27
  # Build the inital .gillache file in the user home directory.
28
- # @return [Hash] the gill cache
28
+ # @return [Hash] the gill cache
29
29
  def build_cache
30
- puts 'in build cache'
31
- new_cache = {}
30
+ new_cache = Hash.new
32
31
  File.open(@cache_path, 'w') do |out|
33
32
  YAML.dump(new_cache, out)
34
33
  end
@@ -44,28 +43,30 @@ module Gill
44
43
  YAML.dump(cache, out)
45
44
  end
46
45
  end
47
-
46
+
48
47
  # Checks the current gill cache file for missing entries and removes them accordingly.
49
48
  def cache_check!
50
49
 
51
- updated_cache = cache
50
+ updated_cache = @cache
51
+ return if updated_cache.nil?
52
+
52
53
  updated_cache.each do |key,value|
53
54
 
54
55
  if File.directory?("#{source_path}/#{key}")
55
-
56
- value.each do |skey,svalue|
57
- unless File.directory?("#{source_path}/#{key}/#{skey}")
58
- updated_cache[:"#{key}"].delete(:"#{skey}")
56
+ unless value.nil?
57
+ value.each do |skey,svalue|
58
+
59
+ unless File.directory?("#{svalue[:path]}")
60
+ updated_cache[:"#{key}"].delete(:"#{skey}")
61
+ end
62
+
59
63
  end
60
64
  end
61
-
62
- else
63
-
64
- updated_cache.delete(:"#{key}")
65
+ updated_cache.delete(:"#{key}") if updated_cache[:"#{key}"].values.empty?
65
66
  end
66
-
67
+
67
68
  end
68
-
69
+
69
70
  rebuild_cache(updated_cache)
70
71
  end
71
72
 
@@ -16,6 +16,11 @@ module Gill
16
16
  if File.exists?("#{@config_path}")
17
17
  find_or_create_cache
18
18
  @config = YAML.load_file(@config_path)
19
+
20
+ unless File.exists?(@config[:default]) && File.directory?(@config[:default])
21
+ Dir.mkdir(@config[:default])
22
+ end
23
+
19
24
  build_source_folder
20
25
  else
21
26
  build_config && find_or_create_cache
@@ -37,11 +42,15 @@ module Gill
37
42
  def source_path
38
43
  @config[:source]
39
44
  end
45
+
46
+ def default_path
47
+ @config[:default]
48
+ end
40
49
 
41
50
  # Build the initial .gillrc configuration file.
42
51
  def build_config
43
52
 
44
- config = { :home => @home, :config => @config_path, :source => "#{@home}/source", :cache => @cache_path }
53
+ config = { :home => @home, :config => @config_path, :source => "#{@home}/source", :default => "#{@home}/source/misc", :cache => @cache_path }
45
54
 
46
55
  File.open(@config_path, 'w') do |out|
47
56
  YAML.dump(config, out)
@@ -0,0 +1,5 @@
1
+ module Gill
2
+ class CacheError < Error
3
+
4
+ end
5
+ end
@@ -1,4 +1,5 @@
1
1
  require 'gill/exceptions/error'
2
+ require 'gill/exceptions/cache_error'
2
3
  require 'gill/exceptions/category_missing'
3
4
  require 'gill/exceptions/repository_missing'
4
5
  require 'gill/exceptions/syntax_error'
data/lib/gill/gill.rb CHANGED
@@ -1,10 +1,12 @@
1
1
  require 'fileutils'
2
2
  require 'optparse'
3
3
  require 'yaml'
4
+ require 'pp'
4
5
 
5
6
  require 'gill/config'
6
7
  require 'gill/helper'
7
8
  require 'gill/git'
9
+ require 'gill/import'
8
10
  require 'gill/remove'
9
11
  require 'gill/parse'
10
12
  require 'gill/exceptions'
@@ -20,6 +22,9 @@ module Gill
20
22
  # Run Gill
21
23
  def Gill.run
22
24
  Gill.optparse(*ARGV)
25
+ end
26
+
27
+ def Gill.pull
23
28
  begin
24
29
  uri = Parse.new(@options[:uri])
25
30
  git = Git.new(uri.category, uri.folder, uri.repo)
@@ -31,59 +36,21 @@ module Gill
31
36
  end
32
37
  end
33
38
 
34
- # Gill option parser
35
- # @param [Array] passed gill options.
36
- def Gill.optparse(*args)
37
-
38
- Gill.config # Load the gill configuration file
39
- @opts = OptionParser.new
40
-
41
- @options = {}
42
-
43
- @opts.banner = "Gill - Git, Clone, Cleanliness.\nUsage: gill git://host/repository.git#category/sub-category/...\n\n"
44
-
45
- @opts.on('-l','--list','List all cloned repositories.') do |list|
46
- @options[:list] = list
47
- end
48
-
49
- @opts.on('-r ','--remove ','Remove a cloned repository. ie. -r category#folder') do |remove|
50
- @options[:remove] = remove
51
- end
52
-
53
- @opts.on('-u ', '--update ','Update repository. ie. -u category#folder#branch') do |update|
54
- @options[:update] = update
55
- end
56
-
57
- @opts.on('-h','--help','This help summary page.') do |help|
58
- @options[:help] = help
59
- end
60
-
61
- @opts.on('-v','--version','Version number') do |version|
62
- STDERR.puts "Version: #{Gill::VERSION}"
63
- exit -1
64
- end
65
-
39
+ #
40
+ # Import any preexisting repos intop the gill cache.
41
+ #
42
+ def Gill.import_to_gill
66
43
  begin
67
- @args = @opts.parse!(args)
68
- @options[:uri] = @args[0]
69
- Gill.error if @options[:help]
70
- Gill.list if @options[:list]
71
- Gill.remove if @options[:remove]
72
- Gill.update if @options[:update]
73
- Gill.error if @options.empty? or @options[:uri].nil?
74
- rescue OptionParser::MissingArgument => e
75
- STDERR.puts e.message
76
- STDERR.puts @opts
77
- STDERR.puts "\n"
44
+ search = Import.new
45
+ search.import
46
+ search.update_cache
78
47
  exit -1
79
- rescue OptionParser::InvalidOption => e
80
- STDERR.puts e.message
81
- STDERR.puts @opts
82
- STDERR.puts "\n"
48
+ rescue => e
49
+ STDERR.puts "Error: #{e}"
83
50
  exit -1
84
51
  end
85
52
  end
86
-
53
+
87
54
  # Update a gill repository.
88
55
  def Gill.update
89
56
  begin
@@ -110,11 +77,11 @@ module Gill
110
77
  # List all gill cloned repositories.
111
78
  def Gill.list
112
79
  STDERR.puts "\n*** Listing Cloned Repositories ***\n\n"
113
- unless @config.cache.nil?
80
+ unless Gill.config.cache.nil?
114
81
  Gill.config.cache.each do |type,repos|
115
82
  STDERR.puts "\t#{type}:"
116
83
  repos.each do |repo|
117
- STDERR.puts "\t #{repo[0]} => " + "#{repo[1]}"
84
+ STDERR.puts "\t #{repo[0]} => " + "#{repo[1][:repo]}"
118
85
  end
119
86
  STDERR.puts "\n"
120
87
  end
@@ -124,21 +91,81 @@ module Gill
124
91
 
125
92
  # Remove a gill cloned repository.
126
93
  def Gill.remove
127
- #begin
94
+ begin
95
+ # Raise exception if the params are not seperated by a `#`.
128
96
  raise(SyntaxError, "Invalid Syntax. Arguments must be separated by `#`. Example: gill -r category#title") unless @options[:remove] =~ /\#/
129
97
  Remove.new(@options[:remove]).remove_repo
130
- # rescue Gill::DirectoryError => e
131
- # STDERR.puts "Error: #{e}"
132
- # rescue => e
133
- # STDERR.puts "Error: #{e}"
134
- # end
98
+ rescue Gill::DirectoryError => e
99
+ STDERR.puts "Error: #{e}"
100
+ rescue => e
101
+ STDERR.puts "Error: #{e}"
102
+ end
135
103
  exit -1
136
104
  end
137
105
 
106
+ # Gill option parser
107
+ # @param [Array] passed gill options.
108
+ def Gill.optparse(*args)
109
+
110
+
111
+ Gill.config # Load the gill configuration file
112
+
113
+ @opts = OptionParser.new
114
+
115
+ @options = {}
116
+
117
+ @opts.banner = "Gill - Git, Clone, Cleanliness.\nUsage: gill git://host/repository.git#category/sub-category/...\n\n"
118
+
119
+ @opts.on('-l','--list','List all cloned repositories.') do |list|
120
+ Gill.list
121
+ end
122
+
123
+ @opts.on('-r ','--remove ','Remove a cloned repository. ie. -r category#folder') do |remove|
124
+ @options[:remove] = remove
125
+ Gill.remove
126
+ end
127
+
128
+ @opts.on('-u ', '--update ','Update repository. ie. -u category#folder#branch') do |update|
129
+ @options[:update] = update
130
+ Gill.update
131
+ end
132
+
133
+ @opts.on('-i','--import','Import untracked repository.') do |import|
134
+ Gill.import_to_gill
135
+ end
136
+
137
+ @opts.on('-h','--help','This help summary page.') do |help|
138
+ Gill.usage
139
+ end
140
+
141
+ @opts.on('-v','--version','Version number') do |version|
142
+ STDERR.puts "Version: #{Gill::VERSION}"
143
+ exit -1
144
+ end
145
+
146
+ begin
147
+
148
+ @args = @opts.parse!(args)
149
+ @options[:uri] = @args[0]
150
+ Gill.usage if @options.empty? || @options[:uri].nil?
151
+ Gill.pull
152
+ rescue OptionParser::MissingArgument => e
153
+ STDERR.puts e.message
154
+ STDERR.puts @opts
155
+ STDERR.puts "\n"
156
+ exit -1
157
+ rescue OptionParser::InvalidOption => e
158
+ STDERR.puts e.message
159
+ STDERR.puts @opts
160
+ STDERR.puts "\n"
161
+ exit -1
162
+ end
163
+ end
164
+
138
165
  # Gill Error
139
166
  # @return [Object] gill usage
140
- def Gill.error
141
- STDERR.puts "#{@opts}\n"
167
+ def Gill.usage
168
+ STDOUT.puts "#{@opts}\n"
142
169
  exit -1
143
170
  end
144
171
 
data/lib/gill/git.rb CHANGED
@@ -4,7 +4,7 @@ module Gill
4
4
  class Git
5
5
  # Include the gill cache convenience methods.
6
6
  include Config::Cache
7
- include Gill::Helper
7
+ include Helper
8
8
 
9
9
  # Initialize a new gill git instance.
10
10
  #
@@ -24,7 +24,10 @@ module Gill
24
24
  if @category
25
25
  @category_path = File.join(Gill.config.source_path, @category)
26
26
  else
27
- @category = 'misc'
27
+ # If passed only a repository uri.
28
+ # Set the category name to misc by default.
29
+ # TODO: Add the default repo sub-folder name to the gill configuration file.
30
+ @category = basename(Gill.config.default_path)
28
31
  @category_path = File.join(Gill.config.source_path, @category)
29
32
  end
30
33
 
@@ -58,13 +61,13 @@ module Gill
58
61
  updated_cache = Gill.config.cache
59
62
 
60
63
  if updated_cache.nil?
61
- updated_cache = updated_cache.merge!({:"#{@category}" => {:"#{@folder}" => @repo}})
64
+ updated_cache = updated_cache.merge!({:"#{@category}" => {:"#{@folder}" => { :repo => @repo, :path => @folder_path }}})
62
65
  else
63
66
 
64
67
  if updated_cache[:"#{@category}"]
65
- updated_cache[:"#{@category}"] = updated_cache[:"#{@category}"].merge!({:"#{@folder}" => @repo})
68
+ updated_cache[:"#{@category}"] = updated_cache[:"#{@category}"].merge!({:"#{@folder}" => { :repo => @repo, :path => @folder_path }})
66
69
  else
67
- updated_cache = updated_cache.merge!({:"#{@category}" => {:"#{@folder}" => @repo}})
70
+ updated_cache = updated_cache.merge!({:"#{@category}" => {:"#{@folder}" => { :repo => @repo, :path => @folder_path }}})
68
71
  end
69
72
 
70
73
  end
@@ -87,7 +90,9 @@ module Gill
87
90
  end
88
91
  end
89
92
 
90
- # Clone
93
+ #
94
+ # Clone the passed repository uri name.
95
+ #
91
96
  def clone
92
97
 
93
98
  if File.directory?(@folder_path) && @folder
data/lib/gill/helper.rb CHANGED
@@ -1,6 +1,14 @@
1
1
  module Gill
2
2
  module Helper
3
3
 
4
+ def basename(path)
5
+ Pathname.new(path).basename
6
+ end
7
+
8
+ def folder_empty?(folder)
9
+ Dir.enum_for(:foreach, folder).any? {|n| /\A\.\.?\z/ !~ n}
10
+ end
11
+
4
12
  # Prompt the use for input
5
13
  #
6
14
  # @param [String] msg
@@ -12,8 +20,9 @@ module Gill
12
20
  # The default option for a return.
13
21
  #
14
22
  def ask(msg, options={})
15
- default = options[:default] || :yes
16
- if default == :yes
23
+ default = options[:default] || false
24
+
25
+ if default
17
26
  STDOUT.print "#{msg} [Y/n] "
18
27
  else
19
28
  STDOUT.print "#{msg} [y/N] "
@@ -27,10 +36,8 @@ module Gill
27
36
  elsif input[/([Nn]|[Nn]o)$/i]
28
37
  exit -1
29
38
  else
30
- yield if default == :yes
39
+ yield if default
31
40
  end
32
- else
33
- exit -1
34
41
  end
35
42
  end
36
43
 
@@ -0,0 +1,113 @@
1
+ require 'pathname'
2
+
3
+ module Gill
4
+
5
+ class Import
6
+ # Include the gill cache convenience methods.
7
+ include Config::Cache
8
+ include Helper
9
+
10
+ def initialize
11
+ @updated_cache = Gill.config.cache || {}
12
+ STDOUT.puts "Please wait..."
13
+ end
14
+
15
+ def import(path=nil)
16
+
17
+ if path.nil?
18
+ folder = Gill.config.source_path
19
+ else
20
+ folder = path
21
+ end
22
+
23
+ search_folder(folder)
24
+ end
25
+
26
+ def find_repo(path,file,parent)
27
+
28
+ if has_git_folder?(path)
29
+ check_move_import(basename(parent.path), file, path) if has_git_config?(path)
30
+ else
31
+ import(path)
32
+ end
33
+
34
+ end
35
+
36
+ def search_folder(folder)
37
+ current_folder = Dir.new(folder)
38
+
39
+ current_folder.entries.each do |file|
40
+ next if %w(. ..).include?(file)
41
+ path = File.join(current_folder.path, file)
42
+ find_repo(path,file,current_folder) if File.directory?(path)
43
+ end
44
+
45
+ end
46
+
47
+ def check_move_import(basename,repo_name,path)
48
+ git_uri = git_uri_for(path)
49
+
50
+ if repo_in_root(basename)
51
+ ask "Do you want to move #{basename(Gill.config.source_path)}/#{basename(repo_name)} to #{basename(Gill.config.source_path)}/#{basename(Gill.config.default_path)}/#{basename(repo_name)}?", :default => false do
52
+ move_root_repos_to_default_path(path,File.join(Gill.config.source_path, 'misc', repo_name))
53
+ add(basename(Gill.config.default_path),repo_name,git_uri,File.join(Gill.config.source_path, 'misc', repo_name))
54
+ end
55
+ else
56
+ add(basename,repo_name,git_uri,path)
57
+ end
58
+
59
+ end
60
+
61
+ def has_git_config?(path)
62
+ return true if File.exist?(File.join(path, '.git', 'config'))
63
+ false
64
+ end
65
+
66
+ def move_root_repos_to_default_path(src,dest)
67
+ FileUtils.mv(src,dest)
68
+ end
69
+
70
+ def git_uri_for(path)
71
+ File.open(File.join(path, '.git', 'config'), 'r') do |file|
72
+ @git_uri = file.read[/url\s+\=\s+(\S+)/m,1]
73
+ file.close
74
+ end
75
+ @git_uri
76
+ end
77
+
78
+ def add(category,repo_name,git_uri,path)
79
+
80
+ if @updated_cache.has_key?(category.to_s.downcase.to_sym)
81
+
82
+ @updated_cache[category.to_s.downcase.to_sym].merge!({repo_name.to_sym => {:repo => git_uri, :path => path}})
83
+
84
+ else
85
+ @updated_cache[category.to_s.downcase.to_sym] = { repo_name.to_sym => { :repo => git_uri, :path => path }}
86
+ end
87
+
88
+ end
89
+
90
+ def update_cache
91
+ STDOUT.puts "Import Completed Successfully."
92
+ rebuild_cache(@updated_cache, Gill.config.cache_path)
93
+ end
94
+
95
+ def repo_in_root(folder)
96
+ return true if folder.to_s == basename(Gill.config.source_path).to_s
97
+ false
98
+ end
99
+
100
+ def has_git_folder?(path)
101
+ temp = Dir.new(path)
102
+
103
+ if temp.entries.include?('.git')
104
+ temp.close
105
+ return true
106
+ else
107
+ return false
108
+ end
109
+
110
+ end
111
+
112
+ end
113
+ end
data/lib/gill/parse.rb CHANGED
@@ -4,23 +4,46 @@ module Gill
4
4
 
5
5
  attr_accessor :category, :folder, :repo
6
6
 
7
+ # Initialize a ne wparse object.
8
+ #
9
+ # @param [String] uri
10
+ # The string to be parsed and retunred to create a gill cloned repository.
11
+ #
7
12
  def initialize(uri)
8
13
  @uri = uri.split(/\#/)
9
14
  self.start
10
15
  end
11
16
 
17
+ #
18
+ # Setter for the parsed objects category.
19
+ #
12
20
  def category=(category)
13
21
  @category = category
14
22
  end
15
23
 
24
+ #
25
+ # Setter for the parsed objects folder.
26
+ #
16
27
  def folder=(folder)
17
28
  @folder = folder
18
29
  end
19
30
 
31
+ #
32
+ # Setter for the parsed objects repository uri.
33
+ #
34
+ # @param [String] repo
35
+ # The parsed objects repository uri.
36
+ #
37
+ # @return [String] repo
38
+ # The uri for the repository.
39
+ #
20
40
  def repo=(repo)
21
41
  @repo = repo
22
42
  end
23
43
 
44
+ #
45
+ # Set and verefiy the category, folder and repository uri for the parsed object.
46
+ #
24
47
  def start
25
48
  self.category = @uri.first
26
49
 
@@ -49,6 +72,15 @@ module Gill
49
72
  end
50
73
  end
51
74
 
75
+ #
76
+ # Find the folder name from the repository uri.
77
+ #
78
+ # @param [String] repo
79
+ # The uri for the remote repository.
80
+ #
81
+ # @return [String] repo
82
+ # The folder/project name of the passed uri.
83
+ #
52
84
  def get_folder(repo)
53
85
 
54
86
  if repo =~ /\.git/i
@@ -60,6 +92,15 @@ module Gill
60
92
  repo_name
61
93
  end
62
94
 
95
+ #
96
+ # Check to verify the passed uri is a valid repository uri.
97
+ #
98
+ # @param [String] repo
99
+ # The uri to the remote repository.
100
+ #
101
+ # @return [String] repo
102
+ # Return the repository uri if it is indeed a valid uri.
103
+ #
63
104
  def valid?(repo)
64
105
  case repo
65
106
  when repo[/\A(http|https|git)\:\/\/\S+[\:|\/]\S+[\.git|\Z]\Z/i]
data/lib/gill/remove.rb CHANGED
@@ -1,25 +1,38 @@
1
1
  module Gill
2
2
 
3
3
  class Remove
4
+
5
+ # include the cache methods
4
6
  include Config::Cache
7
+
8
+ # include all helper methods
5
9
  include Helper
6
10
 
11
+ # Initialize a remove object.
12
+ #
13
+ # @param [String] args
14
+ # The string to be parsed for the remove object.
15
+ #
7
16
  def initialize(args)
8
17
  data = args.split('#')
18
+ # Raise ArgumentError if passed the incorrect amount of arguments.
9
19
  raise(ArgumentError, 'Wrong number of arguments.') if data.length != 2
10
20
  @source = Gill.config.source_path
11
21
  @category = data.first
12
22
  @folder = data.last
13
23
  end
14
24
 
25
+ #
26
+ # remove the repository from the gill cache.
27
+ #
15
28
  def remove_cache
16
29
  updated_cache = Gill.config.cache
17
30
 
18
- if updated_cache[:"#{@category}"]
19
- updated_cache[:"#{@category}"].delete(:"#{@folder}")
31
+ if updated_cache[@category.to_sym]
32
+ updated_cache[@category.to_sym].delete(@folder.to_sym)
20
33
 
21
- if updated_cache[:"#{@category}"].empty?
22
- updated_cache.delete(:"#{@category}")
34
+ if updated_cache[@category.to_sym].empty?
35
+ updated_cache.delete(@category.to_sym)
23
36
  rebuild_cache(updated_cache, Gill.config.cache_path)
24
37
  return true
25
38
 
@@ -33,36 +46,66 @@ module Gill
33
46
  end
34
47
  end
35
48
 
36
- def remove_repo
37
-
38
- type_folder = "#{@source}/#{@category}"
39
- folder = "#{@source}/#{@category}/#{@folder}"
40
-
41
- raise(CategoryMissing, "Unknown Category: `#{@folder}`") unless File.directory?(type_folder)
42
- raise(RepositoryMissing, "Unknown Repository: `#{@folder}`") unless File.directory?(folder)
43
-
44
- if File.directory?(type_folder) && File.directory?(folder) && !Gill.config.cache.empty?
45
-
46
- if Gill.config.cache[:"#{@category}"] && Gill.config.cache[:"#{@category}"][:"#{@folder}"]
47
-
48
- ask "Are you sure you want to remove #{@folder}?", :default => :no do
49
- STDOUT.puts "#{@folder.capitalize} removed successfully."
50
- FileUtils.rm_rf(folder)
51
- end
52
-
53
- unless Dir.enum_for(:foreach, type_folder).any? {|n| /\A\.\.?\z/ !~ n}
54
- ask "The `#{@category}` directory is empty. Would you like to remove it?", :default => :no do
55
- STDOUT.puts "#{@category.capitalize} directory removed successfully."
56
- FileUtils.rm_rf(type_folder)
57
- end
58
- end
49
+ #
50
+ # Return true if the passed key and value exists.
51
+ #
52
+ # @param [Hash] args
53
+ # A key and value to check the existence of.
54
+ #
55
+ # @return [Boolean] valid
56
+ # Return true if the passed key and value exists in the gill cache file.
57
+ #
58
+ def keys_exist(args={})
59
+ @valid = true
60
+ args.each do |key,value|
61
+ @valid = false if !Gill.config.cache[key.to_sym]
62
+ @valid = false if !Gill.config.cache[key.to_sym][value.to_sym]
63
+ end
64
+ @valid
65
+ end
59
66
 
67
+ #
68
+ # Return true or false if the passed folder contains any files and/or sub-folders.
69
+ #
70
+ def category_folder_empty?
71
+ Dir.enum_for(:foreach, @type_folder).any? {|n| /\A\.\.?\z/ !~ n}
72
+ end
73
+
74
+ #
75
+ # Check Cache - Raise exceptions
76
+ #
77
+ def check_gill_cache_and_folders
78
+ raise(CategoryMissing, "Unknown Category: `#{@folder}`") unless File.directory?(@type_folder)
79
+ raise(RepositoryMissing, "Unknown Repository: `#{@folder}`") unless File.directory?(@repo_name)
80
+ raise(CacheError, 'The gill cache appears to be empty.') if Gill.config.cache.empty?
81
+ raise(DirectoryError, "The directory #{@repo_name} does not exist or was not cloned with gill.") unless keys_exist(:"#{@category}" => @folder)
82
+ end
83
+
84
+ #
85
+ # Remove the gill category folder.
86
+ #
87
+ def remove_gill_category_folder
88
+ unless category_folder_empty?
89
+ ask "The `#{@category}` directory is empty. Would you like to remove it?", :default => false do
90
+ STDOUT.puts "#{@category.capitalize} directory removed successfully."
91
+ FileUtils.rm_rf(@type_folder)
60
92
  end
61
-
93
+ end
94
+ end
95
+
96
+ #
97
+ # remove all files and folders associated with the remove object.
98
+ #
99
+ def remove_repo
100
+ instance_variable_set(:@type_folder, File.join(@source,@category))
101
+ instance_variable_set(:@repo_name, File.join(@source,@category,@folder))
102
+ check_gill_cache_and_folders
103
+
104
+ ask "Are you sure you want to remove #{@folder}?", :default => false do
105
+ STDOUT.puts "#{@folder.capitalize} removed successfully."
106
+ FileUtils.rm_rf(@repo_name)
107
+ remove_gill_category_folder
62
108
  remove_cache
63
-
64
- else
65
- raise(DirectoryError, "The directory #{@source}/#{@category}/#{@folder} does not exist or was not cloned with gill.")
66
109
  end
67
110
  end
68
111
 
data/lib/gill/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Gill
2
2
  # Gill Version
3
- VERSION = '0.1.2'
3
+ VERSION = "1.0.0.rc.2" unless defined?(::Gill::VERSION)
4
4
  end
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gill
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease: false
4
+ prerelease: true
6
5
  segments:
7
- - 0
8
6
  - 1
7
+ - 0
8
+ - 0
9
+ - rc
9
10
  - 2
10
- version: 0.1.2
11
+ version: 1.0.0.rc.2
11
12
  platform: ruby
12
13
  authors:
13
14
  - Dustin Willis Webber
@@ -15,7 +16,7 @@ autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2010-07-14 00:00:00 -04:00
19
+ date: 2010-07-30 00:00:00 -07:00
19
20
  default_executable: gill
20
21
  dependencies: []
21
22
 
@@ -44,6 +45,7 @@ files:
44
45
  - lib/gill/config/setup.rb
45
46
  - lib/gill/exceptions.rb
46
47
  - lib/gill/exceptions/argument_error.rb
48
+ - lib/gill/exceptions/cache_error.rb
47
49
  - lib/gill/exceptions/category_missing.rb
48
50
  - lib/gill/exceptions/directory_error.rb
49
51
  - lib/gill/exceptions/error.rb
@@ -53,6 +55,7 @@ files:
53
55
  - lib/gill/gill.rb
54
56
  - lib/gill/git.rb
55
57
  - lib/gill/helper.rb
58
+ - lib/gill/import.rb
56
59
  - lib/gill/parse.rb
57
60
  - lib/gill/remove.rb
58
61
  - lib/gill/version.rb
@@ -74,19 +77,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
74
77
  requirements:
75
78
  - - ">="
76
79
  - !ruby/object:Gem::Version
77
- hash: 3
80
+ hash: 1109104530552266926
78
81
  segments:
79
82
  - 0
80
83
  version: "0"
81
84
  required_rubygems_version: !ruby/object:Gem::Requirement
82
85
  none: false
83
86
  requirements:
84
- - - ">="
87
+ - - ">"
85
88
  - !ruby/object:Gem::Version
86
- hash: 3
87
89
  segments:
88
- - 0
89
- version: "0"
90
+ - 1
91
+ - 3
92
+ - 1
93
+ version: 1.3.1
90
94
  requirements: []
91
95
 
92
96
  rubyforge_project: