gill 0.0.8 → 0.1.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.
data/README.rdoc CHANGED
@@ -22,10 +22,10 @@ Gill Usage:
22
22
 
23
23
  -l, --list List all cloned repositories.
24
24
  -r, --remove Remove a cloned repository. ie. -r category#folder
25
+ -u, --update Update repository. ie. -u category#folder#branch
25
26
  -h, --help This help summary page.
26
27
  -v, --version Version number
27
28
 
28
-
29
29
  Cloning a git repository with gill:
30
30
 
31
31
  $ gill https://mephux@github.com/mephux/Snorby.git#rails#snorby-dev
@@ -102,4 +102,4 @@ Only the parent folder to the cloned repo will be removed.
102
102
 
103
103
  == Copyright
104
104
 
105
- Copyright (c) 2010 Dustin Willis Webber. See LICENSE for details.
105
+ Copyright (c) 2010 Dustin Willis Webber. See LICENSE for details.
data/bin/gill CHANGED
@@ -7,4 +7,5 @@ end
7
7
 
8
8
  require 'rubygems'
9
9
  require 'gill'
10
+
10
11
  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.0.8"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Dustin Willis Webber"]
12
- s.date = %q{2010-07-04}
12
+ s.date = %q{2010-07-10}
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}
@@ -29,13 +29,17 @@ Gem::Specification.new do |s|
29
29
  "bin/gill",
30
30
  "gill.gemspec",
31
31
  "lib/gill.rb",
32
- "lib/gill/app.rb",
33
32
  "lib/gill/config.rb",
33
+ "lib/gill/config/cache.rb",
34
+ "lib/gill/config/setup.rb",
35
+ "lib/gill/exceptions.rb",
34
36
  "lib/gill/exceptions/argument_error.rb",
35
37
  "lib/gill/exceptions/directory_error.rb",
36
38
  "lib/gill/exceptions/error.rb",
37
39
  "lib/gill/exceptions/repository_error.rb",
40
+ "lib/gill/gill.rb",
38
41
  "lib/gill/git.rb",
42
+ "lib/gill/helper.rb",
39
43
  "lib/gill/parse.rb",
40
44
  "lib/gill/remove.rb",
41
45
  "lib/gill/version.rb",
@@ -0,0 +1,74 @@
1
+ module Gill
2
+ class Config
3
+
4
+ module Cache
5
+
6
+ # Returns the gill cache yaml file.
7
+ # @return [Hash] the gill cache
8
+ def cache
9
+ @cache ||= find_or_create_cache
10
+ end
11
+
12
+ # Returns the path of the .gillcache file.
13
+ # @return [String] path to the gill cache file.
14
+ def cache_path
15
+ @cache_path
16
+ end
17
+
18
+ # Find or created the gill cache file.
19
+ def find_or_create_cache
20
+ if File.exists?("#{@cache_path}")
21
+ @cache = YAML.load_file(@cache_path) || build_cache
22
+ else
23
+ build_cache
24
+ end
25
+ end
26
+
27
+ # Build the inital .gillache file in the user home directory.
28
+ # @return [Hash] the gill cache
29
+ def build_cache
30
+ puts 'in build cache'
31
+ new_cache = {}
32
+ File.open(@cache_path, 'w') do |out|
33
+ YAML.dump(new_cache, out)
34
+ end
35
+ YAML.load_file(@cache_path)
36
+ end
37
+
38
+ # Rebuild cache writes updated entries to the .gillache file in the user home directory.
39
+ # @param [String] path to the gill cache file
40
+ # @param [String] override the default cache path in the gill configuration file.
41
+ def rebuild_cache(cache, path=false)
42
+ @cache_path = path if path
43
+ File.open("#{@cache_path}", 'w+') do |out|
44
+ YAML.dump(cache, out)
45
+ end
46
+ end
47
+
48
+ # Checks the current gill cache file for missing entries and removes them accordingly.
49
+ def cache_check!
50
+
51
+ updated_cache = cache
52
+ updated_cache.each do |key,value|
53
+
54
+ 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}")
59
+ end
60
+ end
61
+
62
+ else
63
+
64
+ updated_cache.delete(:"#{key}")
65
+ end
66
+
67
+ end
68
+
69
+ rebuild_cache(updated_cache)
70
+ end
71
+
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,68 @@
1
+ module Gill
2
+ class Config
3
+
4
+ module Setup
5
+
6
+ # Returns the gill configuration.
7
+ # @return [Hash] the gill configuration
8
+ def config
9
+ @config
10
+ end
11
+
12
+ # Finds or created the gill configuration file.
13
+ # @return [Hash] the gill configuration file
14
+ def find_or_create_config
15
+
16
+ if File.exists?("#{@config_path}")
17
+ find_or_create_cache
18
+ @config = YAML.load_file(@config_path)
19
+ build_source_folder
20
+ else
21
+ build_config && find_or_create_cache
22
+ @config = YAML.load_file(@config_path)
23
+ build_source_folder
24
+ end
25
+
26
+ YAML.load_file(@config_path)
27
+ end
28
+
29
+ # The gill configuration path.
30
+ # @return [String] the gill configuration path
31
+ def config_path
32
+ @config_path
33
+ end
34
+
35
+ # The source folder path set in the gill configuration file.
36
+ # @return [String] the gill source folder path.
37
+ def source_path
38
+ @config[:source]
39
+ end
40
+
41
+ # Build the initial .gillrc configuration file.
42
+ def build_config
43
+
44
+ config = { :home => @home, :config => @config_path, :source => "#{@home}/source", :cache => @cache_path }
45
+
46
+ File.open(@config_path, 'w') do |out|
47
+ YAML.dump(config, out)
48
+ end
49
+
50
+ end
51
+
52
+ # Build the initial source directory configured in the .gillrc file.
53
+ # The initial source directory is only created if it does not exist.
54
+ def build_source_folder
55
+
56
+ unless File.directory?(@config[:source])
57
+
58
+ STDERR.puts "Creating Source Directory: " + "#{@config[:source]}"
59
+ Dir.mkdir(@config[:source])
60
+
61
+ end
62
+
63
+ end
64
+
65
+
66
+ end
67
+ end
68
+ end
data/lib/gill/config.rb CHANGED
@@ -1,102 +1,30 @@
1
+ require 'gill/config/setup'
2
+ require 'gill/config/cache'
3
+
1
4
  module Gill
2
5
 
3
6
  class Config
4
-
5
- attr_accessor :config
6
-
7
- def initialize
8
- @home = File.expand_path('~')
9
- @path = File.join(@home, '.gillrc')
10
- @cache = File.join(@home, '.gillcache')
11
- self.setup
12
- end
13
7
 
14
- #
15
- # Build the initial .gillrc configuration file.
16
- #
17
- def build_config
18
-
19
- config = { :home => @home, :config => @path, :source => "#{@home}/source", :cache => @cache }
20
- File.open(@path, 'w') do |out|
21
- YAML.dump(config, out)
22
- end
23
-
24
- end
25
-
26
- #
27
- # Build the initial source directory configured in the .gillrc file.
28
- #
29
- # The initial source directory is only created if it does not exist.
30
- #
31
- def build_source_folder
32
-
33
- unless File.directory?(self.config[:source])
34
-
35
- STDOUT.puts "Creating Source Directory: " + "#{self.config[:source]}"
36
- Dir.mkdir(self.config[:source])
37
-
38
- end
39
-
40
- end
8
+ # Include the gill setup and cache convenience methods.
9
+ include Setup, Cache
41
10
 
42
- #
43
- # Build the inital .gillache file in the user home directory.
44
- #
45
- def build_cache
46
-
47
- cache = { }
48
- File.open(@cache, 'w') do |out|
49
-
50
- YAML.dump(cache, out)
51
-
52
- end
53
-
54
- end
11
+ attr_reader :home, :config_path, :cache_path, :config, :cache
55
12
 
56
- #
57
- # Rebuild cache writes updated entries to the .gillache file in the user home directory.
58
- #
59
- def self.rebuild_cache(path, cache)
60
-
61
- File.open(path, 'w+') do |out|
62
-
63
- YAML.dump(cache, out)
64
-
65
- end
13
+ # Initialize the Gill configuration.
14
+ # @return [Object] the gill configuration
15
+ def initialize
66
16
 
67
- end
68
-
69
- #
70
- # Setup - Determine if the current user has the proper gill configuration file in place
71
- # or return the current configuration files.
72
- #
73
- def setup
17
+ @home = File.expand_path('~')
18
+ @config_path = File.join(@home, '.gillrc')
19
+ @cache_path = File.join(@home, '.gillcache')
20
+ @config = find_or_create_config
21
+ @cache = cache
22
+ cache_check! # Check The Cache For Missing Entries.
74
23
 
75
- if File.exists?("#{@path}")
76
-
77
- self.build_cache unless File.exists?("#{@cache}")
78
- self.config = YAML.load_file(@path)
79
- self.build_source_folder
80
-
81
- else
82
-
83
- self.build_config
84
- self.build_cache unless File.exists?("#{@cache}")
85
- self.config = YAML.load_file(@path)
86
- self.build_source_folder
87
-
88
- end
24
+ self
89
25
 
90
26
  end
91
-
92
- #
93
- # Yaml
94
- # return the configuration file in yaml format.
95
- #
96
- def yaml
97
- self.config
98
- end
99
-
27
+
100
28
  end
101
-
29
+
102
30
  end
@@ -1,4 +1,4 @@
1
1
  module Gill
2
- class Error < StandardError
2
+ class Error < RuntimeError
3
3
  end
4
4
  end
@@ -0,0 +1,4 @@
1
+ require 'gill/exceptions/error'
2
+ require 'gill/exceptions/argument_error'
3
+ require 'gill/exceptions/repository_error'
4
+ require 'gill/exceptions/directory_error'
data/lib/gill/gill.rb ADDED
@@ -0,0 +1,144 @@
1
+ require 'gill/config'
2
+ require 'gill/helper'
3
+ require 'gill/git'
4
+ require 'gill/remove'
5
+ require 'gill/parse'
6
+ require 'gill/version'
7
+ require 'gill/exceptions'
8
+
9
+ require 'fileutils'
10
+ require 'optparse'
11
+ require 'yaml'
12
+
13
+ module Gill
14
+
15
+ # Module method for the gill configuration.
16
+ # @return [Object] the gill configuration
17
+ def Gill.config
18
+ @config ||= Config.new
19
+ end
20
+
21
+ # Run Gill
22
+ def Gill.run
23
+ Gill.optparse(*ARGV)
24
+ begin
25
+ uri = Parse.new(@options[:uri])
26
+ git = Git.new(uri.category, uri.folder, uri.repo)
27
+ git.clone
28
+ rescue TypeError => e
29
+ STDERR.puts "Error: #{e}\nError: Please make sure to remove all whitespace from the category and/or folder name."
30
+ rescue => e
31
+ STDERR.puts "Error: #{e}"
32
+ end
33
+ end
34
+
35
+ # Gill option parser
36
+ # @param [Array] passed gill options.
37
+ def Gill.optparse(*args)
38
+
39
+ Gill.config # Load the gill configuration file
40
+ @opts = OptionParser.new
41
+
42
+ @options = {}
43
+
44
+ @opts.banner = "Gill - Git, Clone, Cleanliness.\nUsage: gill git://host/repository.git#category/sub-category/...\n\n"
45
+
46
+ @opts.on('-l','--list','List all cloned repositories.') do |list|
47
+ @options[:list] = list
48
+ end
49
+
50
+ @opts.on('-r ','--remove ','Remove a cloned repository. ie. -r category#folder') do |remove|
51
+ @options[:remove] = remove
52
+ end
53
+
54
+ @opts.on('-u ', '--update ','Update repository. ie. -u category#folder#branch') do |update|
55
+ @options[:update] = update
56
+ end
57
+
58
+ @opts.on('-h','--help','This help summary page.') do |help|
59
+ @options[:help] = help
60
+ end
61
+
62
+ @opts.on('-v','--version','Version number') do |version|
63
+ STDERR.puts "Version: #{Gill::VERSION}"
64
+ exit -1
65
+ end
66
+
67
+ begin
68
+ @args = @opts.parse!(args)
69
+ @options[:uri] = @args[0]
70
+ Gill.error if @options[:help]
71
+ Gill.list if @options[:list]
72
+ Gill.remove if @options[:remove]
73
+ Gill.update if @options[:update]
74
+ Gill.error if @options.empty? or @options[:uri].nil?
75
+ rescue OptionParser::MissingArgument => e
76
+ STDERR.puts e.message
77
+ STDERR.puts @opts
78
+ STDERR.puts "\n"
79
+ exit -1
80
+ rescue OptionParser::InvalidOption => e
81
+ STDERR.puts e.message
82
+ STDERR.puts @opts
83
+ STDERR.puts "\n"
84
+ exit -1
85
+ end
86
+ end
87
+
88
+ # Update a gill repository.
89
+ def Gill.update
90
+ begin
91
+ args = @options[:update].split(/\#/)
92
+ raise(ArgumentError, "Requires three arguments. category#title#branch") if args.length > 4
93
+ category, folder, branch = args
94
+ git = Git.new(category, folder, false)
95
+ if branch
96
+ git.update(branch)
97
+ else
98
+ git.update
99
+ end
100
+ exit -1
101
+ rescue TypeError => e
102
+ STDERR.puts "Error: #{e}\nError: Please make sure to remove all whitespace from the category and/or folder name."
103
+ exit -1
104
+ rescue => e
105
+ STDERR.puts "Error: #{e}"
106
+ exit -1
107
+ end
108
+ end
109
+
110
+ # List all gill cloned repositories.
111
+ def Gill.list
112
+ STDERR.puts "\n*** Listing Cloned Repositories ***\n\n"
113
+ unless @config.cache.nil?
114
+ Gill.config.cache.each do |type,repos|
115
+ STDERR.puts "\t#{type}:"
116
+ repos.each do |repo|
117
+ STDERR.puts "\t #{repo[0]} => " + "#{repo[1]}"
118
+ end
119
+ STDERR.puts "\n"
120
+ end
121
+ end
122
+ exit -1
123
+ end
124
+
125
+ # Remove a gill cloned repository.
126
+ def Gill.remove
127
+ begin
128
+ Remove.new(@options[:remove]).remove_repo
129
+ rescue Gill::DirectoryError => e
130
+ STDERR.puts "Error: #{e}"
131
+ rescue => e
132
+ STDERR.puts "Error: #{e}"
133
+ end
134
+ exit -1
135
+ end
136
+
137
+ # Gill Error
138
+ # @return [Object] gill usage
139
+ def Gill.error
140
+ STDERR.puts "#{@opts}\n"
141
+ exit -1
142
+ end
143
+
144
+ end
data/lib/gill/git.rb CHANGED
@@ -1,12 +1,24 @@
1
1
  module Gill
2
2
 
3
- class Git < App
3
+ class Git
4
+ # Include the gill cache convenience methods.
5
+ include Config::Cache
4
6
 
7
+ # Initialize a new gill git instance.
8
+ #
9
+ # @param [String] category
10
+ # The category for the new cloned repository
11
+ #
12
+ # @param [String] folder
13
+ # The folder name in which the cloned repository will be stored
14
+ #
15
+ # @param [String] repo
16
+ # The git uri for the repository
17
+ #
5
18
  def initialize(category,folder,repo)
6
- super()
7
19
 
8
20
  @repo, @category, @folder = repo, category, folder
9
- @category_path = File.join(@source, @category)
21
+ @category_path = File.join(Gill.config.source_path, @category)
10
22
 
11
23
  if @folder
12
24
  @folder_path = File.join(@category_path, @folder)
@@ -16,7 +28,11 @@ module Gill
16
28
 
17
29
  end
18
30
 
19
-
31
+ # Update A Repository
32
+ #
33
+ # @param [String] branch
34
+ # The branch to git pull
35
+ #
20
36
  def update(branch='master')
21
37
  Dir.chdir(@folder_path)
22
38
  STDOUT.puts "Updating #{@folder} repository."
@@ -26,51 +42,48 @@ module Gill
26
42
  STDOUT.puts "Failed to update #{@folder.capitalize} successfully."
27
43
  end
28
44
  end
29
-
45
+
46
+ # Update the gill cache after cloning a new repository.
30
47
  def build_cache
48
+ updated_cache = Gill.config.cache
31
49
 
32
- old_cache = @cache_file
33
-
34
- if old_cache[:"#{@category}"]
35
-
36
- old_cache[:"#{@category}"] = old_cache[:"#{@category}"].merge!({:"#{@folder}" => @repo})
37
-
50
+ if updated_cache.nil?
51
+ updated_cache = updated_cache.merge!({:"#{@category}" => {:"#{@folder}" => @repo}})
38
52
  else
39
-
40
- old_cache = old_cache.merge!({:"#{@category}" => {:"#{@folder}" => @repo}})
53
+
54
+ if updated_cache[:"#{@category}"]
55
+ updated_cache[:"#{@category}"] = updated_cache[:"#{@category}"].merge!({:"#{@folder}" => @repo})
56
+ else
57
+ updated_cache = updated_cache.merge!({:"#{@category}" => {:"#{@folder}" => @repo}})
58
+ end
41
59
 
42
60
  end
43
-
44
- Gill::Config.rebuild_cache(@cache, old_cache)
45
-
61
+ rebuild_cache(updated_cache,Gill.config.cache_path)
46
62
  end
47
63
 
64
+ # Create the repository category folder if it does not exist.
65
+ #
66
+ # @param [Boolean] make_folder
67
+ # Pass false to ignore the creation of the passed gill folder
68
+ #
48
69
  def build_type_folder(make_folder=true)
49
-
50
70
  unless File.directory?(@category_path)
51
-
52
71
  FileUtils.mkdir_p(@category_path)
53
-
54
72
  if make_folder
55
-
56
73
  unless File.directory?(@folder_path)
57
-
58
74
  FileUtils.mkdir_p(@folder_path)
59
-
60
75
  end
61
-
62
76
  end
63
77
  end
64
78
  end
65
-
79
+
80
+ #
81
+ #
82
+ #
66
83
  def clone
67
-
68
84
  if File.directory?(@folder_path) && @folder
69
-
70
85
  raise(DirectoryError, "destination path '#{@folder_path}' already exists and is not an empty directory.")
71
-
72
86
  else
73
-
74
87
  if @folder
75
88
  build_type_folder
76
89
  build_cache if system('git', 'clone', @repo, @folder_path)
@@ -79,9 +92,9 @@ module Gill
79
92
  Dir.chdir(@folder_path)
80
93
  build_cache if system('git', 'clone', @repo)
81
94
  end
82
-
83
95
  end
84
96
  end
85
97
 
86
98
  end
99
+
87
100
  end
@@ -0,0 +1,39 @@
1
+ module Gill
2
+ module Helper
3
+
4
+ # Prompt the use for input
5
+ #
6
+ # @param [String] msg
7
+ # Message to prompt for user input.
8
+ #
9
+ # @param [Hash] options
10
+ #
11
+ # @option options [Symbol, String] :default
12
+ # The default option for a return.
13
+ #
14
+ def ask(msg, options={})
15
+ default = options[:default] || :yes
16
+ if default == :yes
17
+ STDOUT.print "#{msg} [Y/n] "
18
+ else
19
+ STDOUT.print "#{msg} [y/N] "
20
+ end
21
+ input = STDIN.gets.chomp
22
+ STDOUT.flush
23
+
24
+ if block_given?
25
+ if input[/([Yy]|[Yy]es)$/i]
26
+ yield
27
+ elsif input[/([Nn]|[Nn]o)$/i]
28
+ exit -1
29
+ else
30
+ yield if default == :yes
31
+ end
32
+ else
33
+ exit -1
34
+ end
35
+ end
36
+
37
+
38
+ end
39
+ end
data/lib/gill/parse.rb CHANGED
@@ -23,27 +23,38 @@ module Gill
23
23
 
24
24
  def start
25
25
  self.category = @uri.first
26
+
26
27
  if @uri.length == 3
28
+
27
29
  self.repo = @uri.first if valid?(@uri.first)
28
30
  self.category = @uri[1]
29
31
  self.folder = @uri.last
32
+
30
33
  elsif @uri.length == 2
34
+
31
35
  self.category = @uri.last
32
36
  self.repo = @uri.first if valid?(@uri.first)
33
37
  self.folder = get_folder(self.repo)
38
+
34
39
  elsif @uri.length < 2
40
+
35
41
  raise(ArgumentError, "too few arguments.")
42
+
36
43
  else
44
+
37
45
  raise(ArgumentError, "too many arguments.")
46
+
38
47
  end
39
48
  end
40
49
 
41
50
  def get_folder(repo)
51
+
42
52
  if repo =~ /\.git/i
43
53
  repo_name = repo.match(/\S+[\/|\:](\S+)\.git/i)[1]
44
54
  else
45
55
  repo_name = repo.match(/\S+[\/|\:](\S+)\Z/i)[1]
46
56
  end
57
+
47
58
  repo_name
48
59
  end
49
60
 
data/lib/gill/remove.rb CHANGED
@@ -1,13 +1,36 @@
1
1
  module Gill
2
2
 
3
- class Remove < App
3
+ class Remove
4
+ include Config::Cache
5
+ include Gill::Helper
4
6
 
5
7
  def initialize(args)
6
8
  data = args.split('#')
7
9
  raise(ArgumentError, 'Wrong number of arguments.') if data.length != 2
10
+ @source = Gill.config.source_path
8
11
  @category = data.first
9
12
  @folder = data.last
10
- super()
13
+ end
14
+
15
+ def remove_cache
16
+ updated_cache = Gill.config.cache
17
+
18
+ if updated_cache[:"#{@category}"]
19
+ updated_cache[:"#{@category}"].delete(:"#{@folder}")
20
+
21
+ if updated_cache[:"#{@category}"].empty?
22
+ updated_cache.delete(:"#{@category}")
23
+ rebuild_cache(updated_cache, Gill.config.cache_path)
24
+ return true
25
+
26
+ else
27
+
28
+ rebuild_cache(updated_cache, Gill.config.cache_path)
29
+ return false
30
+
31
+ end
32
+
33
+ end
11
34
  end
12
35
 
13
36
  def remove_repo
@@ -15,9 +38,9 @@ module Gill
15
38
  type_folder = "#{@source}/#{@category}"
16
39
  folder = "#{@source}/#{@category}/#{@folder}"
17
40
 
18
- if File.directory?(type_folder) && File.directory?(folder) && !@cache_file.empty?
19
-
20
- if @cache_file[:"#{@category}"][:"#{@folder}"]
41
+ if File.directory?(type_folder) && File.directory?(folder) && !Gill.config.cache.empty?
42
+
43
+ if Gill.config.cache[:"#{@category}"][:"#{@folder}"]
21
44
 
22
45
  ask "Are you sure you want to remove #{@folder}?", :default => :no do
23
46
  STDOUT.puts "#{@folder.capitalize} removed successfully."
@@ -25,20 +48,18 @@ module Gill
25
48
  end
26
49
 
27
50
  unless Dir.enum_for(:foreach, type_folder).any? {|n| /\A\.\.?\z/ !~ n}
28
-
29
51
  ask "The `#{@category}` directory is empty. Would you like to remove it?", :default => :no do
30
52
  STDOUT.puts "#{@category.capitalize} directory removed successfully."
31
53
  FileUtils.rm_rf(type_folder)
32
54
  end
33
-
34
55
  end
35
56
 
36
57
  end
37
-
38
- else
39
58
 
40
- raise(DirectoryError, "The directory #{@source}/#{@category}/#{@folder} does not exist or was not cloned with gill.")
59
+ remove_cache
41
60
 
61
+ else
62
+ raise(DirectoryError, "The directory #{@source}/#{@category}/#{@folder} does not exist or was not cloned with gill.")
42
63
  end
43
64
  end
44
65
 
data/lib/gill/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Gill
2
2
  # Gill Version
3
- VERSION = '0.0.8'
3
+ VERSION = '0.1.0'
4
4
  end
data/lib/gill.rb CHANGED
@@ -1,174 +1 @@
1
- require 'gill/app'
2
- require 'gill/config'
3
- require 'gill/git'
4
- require 'gill/remove'
5
- require 'gill/parse'
6
- require 'gill/version'
7
-
8
- require 'gill/exceptions/error'
9
- require 'gill/exceptions/argument_error'
10
- require 'gill/exceptions/repository_error'
11
- require 'gill/exceptions/directory_error'
12
-
13
- require 'fileutils'
14
- require 'yaml'
15
- require 'optparse'
16
-
17
-
18
- module Gill
19
-
20
- #
21
- # Load Gill Configuration
22
- #
23
- GILL_CONFIG = App.config
24
-
25
- #
26
- # Run Gill
27
- #
28
- def Gill.run
29
- Gill.check_cache
30
- Gill.optparse(*ARGV)
31
- begin
32
-
33
- uri = Parse.new(@options[:uri])
34
- git = Git.new(uri.category, uri.folder, uri.repo)
35
- git.clone
36
-
37
- rescue TypeError => e
38
- STDERR.puts "Error: #{e}\nError: Please make sure to remove all whitespace from the category and/or folder name."
39
- exit -1
40
- rescue => e
41
- STDERR.puts "Error: #{e}"
42
- exit -1
43
- end
44
- end
45
-
46
- def Gill.update
47
- begin
48
- args = @options[:update].split(/\#/)
49
- raise(ArgumentError, "Requires three arguments. category#title#branch") if args.length > 4
50
- category, folder, branch = args
51
- git = Git.new(category, folder, false)
52
- if branch
53
- git.update(branch)
54
- else
55
- git.update
56
- end
57
- exit -1
58
- rescue TypeError => e
59
- STDERR.puts "Error: #{e}\nError: Please make sure to remove all whitespace from the category and/or folder name."
60
- exit -1
61
- rescue => e
62
- STDERR.puts "Error: #{e}"
63
- exit -1
64
- end
65
- end
66
-
67
- private
68
-
69
- def Gill.check_cache
70
- cache = GILL_CONFIG[:cache]
71
- @new_cache = YAML.load_file(GILL_CONFIG[:cache])
72
- source_dir = GILL_CONFIG[:source]
73
- @new_cache.each do |key,value|
74
- if File.directory?("#{source_dir}/#{key}")
75
- value.each do |skey,svalue|
76
- unless File.directory?("#{source_dir}/#{key}/#{skey}")
77
- @new_cache[:"#{key}"].delete(:"#{skey}")
78
- end
79
- end
80
- else
81
- @new_cache.delete(:"#{key}")
82
- end
83
- end
84
- Config.rebuild_cache(cache, @new_cache)
85
- end
86
-
87
- def Gill.error
88
- STDERR.puts "#{@opts}\n"
89
- exit -1
90
- end
91
-
92
- def Gill.list
93
- cache = YAML.load_file(GILL_CONFIG[:cache])
94
- STDOUT.puts "\n*** Listing Cloned Repositories ***\n\n"
95
- cache.each do |type,repos|
96
- STDOUT.puts " #{type}:"
97
- repos.each do |repo|
98
- STDOUT.puts " - #{repo[0]} => " + "#{repo[1]}"
99
- end
100
- STDOUT.puts "\n"
101
- end
102
- exit -1
103
- end
104
-
105
- def Gill.remove
106
- begin
107
- Remove.new(@options[:remove]).remove_repo
108
- rescue Gill::DirectoryError => e
109
- STDERR.puts "Error: #{e}"
110
- exit -1
111
- rescue => e
112
- STDERR.puts "Error: #{e}"
113
- exit -1
114
- end
115
- exit -1
116
- end
117
-
118
- def Gill.optparse(*args)
119
- @opts = OptionParser.new
120
-
121
- @options = {}
122
-
123
- @opts.banner = "Gill - Git, Clone, Cleanliness.\nUsage: gill git://host/repository.git#category/sub-category/...\n\n"
124
-
125
- @opts.on('-l','--list','List repositories.') do |list|
126
- @options[:list] = list
127
- end
128
-
129
- @opts.on('-r ', '--remove ','Remove repository. ie. -r category#folder') do |remove|
130
- @options[:remove] = remove
131
- end
132
-
133
- @opts.on('-u ', '--update ','Update repository. ie. -u category#folder#branch') do |update|
134
- @options[:update] = update
135
- end
136
-
137
- @opts.on('-x','--reload','Force gill cache reload.') do |remove|
138
- STDOUT.print "Updating Gill Cache... "
139
- Gill.check_cache
140
- STDOUT.puts "Done."
141
- exit -1
142
- end
143
-
144
- @opts.on('-h','--help','This help summary page.') do |help|
145
- @options[:help] = help
146
- end
147
-
148
- @opts.on('-v','--version','Version number') do |version|
149
- puts "Version: #{Gill::VERSION}"
150
- exit -1
151
- end
152
-
153
- begin
154
- @args = @opts.parse!(args)
155
- @options[:uri] = @args[0]
156
- Gill.error if @options[:help]
157
- Gill.list if @options[:list]
158
- Gill.remove if @options[:remove]
159
- Gill.update if @options[:update]
160
- Gill.error if @options.empty? or @options[:uri].nil?
161
- rescue OptionParser::MissingArgument => e
162
- STDERR.puts e.message
163
- STDERR.puts @opts
164
- STDERR.puts "\n"
165
- exit -1
166
- rescue OptionParser::InvalidOption => e
167
- STDERR.puts e.message
168
- STDERR.puts @opts
169
- STDERR.puts "\n"
170
- exit -1
171
- end
172
- end
173
-
174
- end
1
+ require 'gill/gill'
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
+ - 1
7
8
  - 0
8
- - 8
9
- version: 0.0.8
9
+ version: 0.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Dustin Willis Webber
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-07-04 00:00:00 -04:00
17
+ date: 2010-07-10 00:00:00 -04:00
18
18
  default_executable: gill
19
19
  dependencies: []
20
20
 
@@ -38,13 +38,17 @@ files:
38
38
  - bin/gill
39
39
  - gill.gemspec
40
40
  - lib/gill.rb
41
- - lib/gill/app.rb
42
41
  - lib/gill/config.rb
42
+ - lib/gill/config/cache.rb
43
+ - lib/gill/config/setup.rb
44
+ - lib/gill/exceptions.rb
43
45
  - lib/gill/exceptions/argument_error.rb
44
46
  - lib/gill/exceptions/directory_error.rb
45
47
  - lib/gill/exceptions/error.rb
46
48
  - lib/gill/exceptions/repository_error.rb
49
+ - lib/gill/gill.rb
47
50
  - lib/gill/git.rb
51
+ - lib/gill/helper.rb
48
52
  - lib/gill/parse.rb
49
53
  - lib/gill/remove.rb
50
54
  - lib/gill/version.rb
data/lib/gill/app.rb DELETED
@@ -1,58 +0,0 @@
1
- module Gill
2
-
3
- class App
4
- attr_accessor :gill, :cache, :source, :cache_file
5
-
6
- def initialize
7
- @gill = Gill::Config.new.yaml
8
- @cache = @gill[:cache]
9
- @source = @gill[:source]
10
- @cache_file = cache
11
- end
12
-
13
- #
14
- # Return the gill YAML configuration file.
15
- #
16
- def cache
17
- YAML.load_file(@cache)
18
- end
19
-
20
- #
21
- # Return the path for the passed type.
22
- #
23
- def path(type)
24
- return @gill[:'#{type}'] if %w(source cache).include?(type.to_sym)
25
- end
26
-
27
- def ask(msg, options={})
28
- default = options[:default] || :yes
29
- if default == :yes
30
- STDOUT.print "#{msg} [Y/n] "
31
- else
32
- STDOUT.print "#{msg} [y/N] "
33
- end
34
- input = STDIN.gets.chomp
35
- STDOUT.flush
36
-
37
- if block_given?
38
- if input[/([Yy]|[Yy]es)$/i]
39
- yield
40
- elsif input[/([Nn]|[Nn]o)$/i]
41
- exit -1
42
- else
43
- yield if default == :yes
44
- end
45
- else
46
- exit -1
47
- end
48
- end
49
-
50
- #
51
- # Return the gill configuration file.
52
- #
53
- def self.config
54
- @gill || Gill::Config.new.yaml
55
- end
56
- end
57
-
58
- end