pullable 0.0.2 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9c72eee2e32e955b9e0ccc101eeb0dab1547f387
4
- data.tar.gz: 7697adc78e13837c90252ab6b5aef25911b708aa
3
+ metadata.gz: ba1c8bbf6d383e5772d0cf55811f4afc961e3b63
4
+ data.tar.gz: e83d49e8d69e26d12babda9ccf6778720372995d
5
5
  SHA512:
6
- metadata.gz: 5a5c8e1fcc6da41419013d7fc1c4fc9ae6b1151901c63e41912cf31f359cf8d925bb76e7927275b2f81047802648ef831029548c18ed90d383758b119b057b3f
7
- data.tar.gz: d79fe282915e8535fb150289de3fd52bfd61123302a99037d2a380719c1fad576fefae72a32af9565f8cfb7353ce90384d012b2d85f8c19a3f34b3daae7f6942
6
+ metadata.gz: ab68f3c9aacd86de1e4fc6f349bbfba9867b0f8302dbe41cb6b1762bcd4c29cc85d6fae38cd2f159fc0db087269238ca7c315c7199ac9f8890e9e3353ee52726
7
+ data.tar.gz: 66c727d42f2cfccd7ea70789fd64b2b341a6bb5caed73554a629c9103b919858d3c5277982ebc43850e7b0f81a7fa322b4d8bf9e75deb85f20aaa0aa83218bfe
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Pullable
2
2
 
3
+ [![Build Status](https://travis-ci.org/itsmeduncan/pullable.png?branch=master)](https://travis-ci.org/itsmeduncan/pullable)
4
+
3
5
  Loop over a directory of Git repositories, fetch, and fast-forward merge from
4
6
  origin.
5
7
 
@@ -19,9 +21,28 @@ Or install it yourself as:
19
21
 
20
22
  ## Usage
21
23
 
22
- ```ruby
23
- pullable ~/Projects
24
- ```
24
+ ls ~/Projects
25
+ foo bar .DS_Store
26
+
27
+ pullable ~/Projects
28
+ # cd ~/Projects
29
+ # cd ~/Projects/foo
30
+ # git fetch -p && git merge --ff-only origin/master
31
+ # cd ~/Projects/bar
32
+ # git fetch -p && git merge --ff-only origin/master
33
+
34
+ pullable ~/Projects pull
35
+ # cd ~/Projects
36
+ # cd ~/Projects/foo
37
+ # git fetch -p && git pull origin master
38
+ # cd ~/Projects/bar
39
+ # git fetch -p && git pull origin master
40
+
41
+ ## TODO
42
+
43
+ * Logging
44
+ * Finer grain command line options
45
+ * Grit?
25
46
 
26
47
  ## Contributing
27
48
 
data/bin/pullable CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  require 'pullable'
4
4
 
5
- Pullable.process!(ARGF.argv[0])
5
+ Pullable.process!(ARGF.argv[0], ARGF.argv[1])
@@ -0,0 +1,60 @@
1
+ require 'fileutils'
2
+
3
+ module Pullable
4
+ class Directory
5
+
6
+ VALID_METHODS = ['pull', 'merge']
7
+ SKIPPED_DIRECTORIES = ['.DS_Store']
8
+
9
+ attr_reader :path, :method
10
+
11
+ def initialize(path, method)
12
+ unless File.directory?(path)
13
+ raise ArgumentError.new('Please pass a directory that exists!')
14
+ end
15
+
16
+ unless VALID_METHODS.include?(method)
17
+ raise ArgumentError.new("#{method} cannot be used to update the repo!")
18
+ end
19
+
20
+ @path = path
21
+ @method = method
22
+ end
23
+
24
+ def process!
25
+ Dir.foreach(path) do |directory|
26
+ if File.directory?(directory)
27
+ unless SKIPPED_DIRECTORIES.include?(directory)
28
+ FileUtils.cd(directory)
29
+
30
+ if File.directory?('.git')
31
+ puts "Updated:\t#{directory}"
32
+ update!
33
+ end
34
+
35
+ FileUtils.cd(path)
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ def self.process!(path, method = 'merge')
42
+ new(path, method).process!
43
+ end
44
+
45
+ def update!
46
+ system "git fetch -p && #{command} > /dev/null"
47
+ end
48
+
49
+ def command
50
+ case @method
51
+ when 'merge'
52
+ 'git merge --ff-only origin/master'
53
+ when 'pull'
54
+ 'git pull origin master'
55
+ else
56
+ raise NotImplementedError
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,3 +1,3 @@
1
1
  module Pullable
2
- VERSION = "0.0.2"
2
+ VERSION = "1.0.1"
3
3
  end
data/lib/pullable.rb CHANGED
@@ -1,42 +1,14 @@
1
- require "pullable/version"
2
- require "fileutils"
3
-
4
- SKIPPED_DIRECTORIES = ['.DS_Store']
1
+ require 'pullable/directory'
2
+ require 'pullable/version'
5
3
 
6
4
  module Pullable
7
5
 
8
- def self.process!(root)
9
- pulled, skipped, failed = [], [], []
10
-
11
- raise ArgumentError.new("Please pass a root directoy!") if root.nil?
12
- raise ArgumentError.new("Please pass a valid root directoy!") unless File.directory?(root)
13
-
14
- Dir.foreach(root) do |directory|
15
- if File.directory?(directory)
16
- unless SKIPPED_DIRECTORIES.include?(directory)
17
- FileUtils.cd(directory)
18
-
19
- if File.directory?('.git')
20
- puts "Pulling:\t#{directory}"
21
- `git fetch -p`
22
- `git merge --ff-only origin/master`
23
- end
24
-
25
- unless $?.success?
26
- failed << directory
27
- else
28
- pulled << directory
29
- end
30
-
31
- FileUtils.cd(root)
32
- end
33
- else
34
- skipped << directory
35
- end
6
+ def self.process!(path, method = 'merge')
7
+ if method == '' || method == nil
8
+ method = 'merge'
36
9
  end
37
10
 
38
- puts "Pulled:\t\t#{pulled.inspect}" unless pulled.empty?
39
- puts "Skipped:\t#{skipped.inspect}" unless skipped.empty?
40
- puts "Failed:\t\t#{failed.inspect}" unless failed.empty?
11
+ Pullable::Directory.process!(path, method)
41
12
  end
13
+
42
14
  end
data/pullable.gemspec CHANGED
@@ -4,21 +4,23 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'pullable/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "pullable"
7
+ spec.name = 'pullable'
8
8
  spec.version = Pullable::VERSION
9
- spec.authors = ["Duncan Grazier"]
10
- spec.email = ["itsmeduncan@gmail.com"]
9
+ spec.authors = ['Duncan Grazier']
10
+ spec.email = ['itsmeduncan@gmail.com']
11
11
  spec.description = %q{Update your Git repositories}
12
12
  spec.summary = %q{A simple tool to update your local repositories}
13
- spec.homepage = "https://github.com/itsmeduncan/pullable"
14
- spec.license = "MIT"
13
+ spec.homepage = 'https://github.com/itsmeduncan/pullable'
14
+ spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
19
+ spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
23
- spec.add_development_dependency "rspec"
21
+ spec.add_development_dependency 'bundler', '~> 1.3'
22
+ spec.add_development_dependency 'mocha'
23
+ spec.add_development_dependency 'rake'
24
+ spec.add_development_dependency 'rspec'
25
+ spec.add_development_dependency 'simplecov'
24
26
  end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe Pullable::Directory do
4
+
5
+ describe '.new' do
6
+ it 'raises if the directory does not exist' do
7
+ File.expects(:directory?).with('foo').returns(false)
8
+
9
+ expect {
10
+ described_class.new('foo', 'merge')
11
+ }.to raise_error(ArgumentError, 'Please pass a directory that exists!')
12
+ end
13
+
14
+ it 'raises if the method is invalid' do
15
+ expect {
16
+ described_class.new('.', 'foo')
17
+ }.to raise_error(ArgumentError, 'foo cannot be used to update the repo!')
18
+ end
19
+ end
20
+
21
+ describe '#process!' do
22
+ it 'initializes a new Pullable::Directory with the given parameters' do
23
+ Pullable::Directory.expects(:new).with('foo', 'bar').returns(mock(:process! => true))
24
+ Pullable::Directory.process!('foo', 'bar')
25
+ end
26
+
27
+ it 'defaults the method to merge' do
28
+ Pullable::Directory.expects(:new).with('foo', 'merge').returns(mock(:process! => true))
29
+ Pullable::Directory.process!('foo')
30
+ end
31
+ end
32
+
33
+ describe '.process!' do
34
+ it 'calls update for each directory that has a .git under the root'
35
+ it 'skips known weird directories'
36
+ it 'skips non-git repos'
37
+ end
38
+
39
+ describe '#update!' do
40
+ it 'calls the correct system command' do
41
+ directory = described_class.new('.', 'merge')
42
+ directory.expects(:system).with('git fetch -p && git merge --ff-only origin/master > /dev/null')
43
+
44
+ directory.update!
45
+ end
46
+ end
47
+
48
+ describe "#command" do
49
+ it 'generates the merge command' do
50
+ directory = described_class.new('.', 'merge')
51
+ directory.command.should == 'git merge --ff-only origin/master'
52
+ end
53
+
54
+ it 'generates the pull command' do
55
+ directory = described_class.new('.', 'pull')
56
+ directory.command.should == 'git pull origin master'
57
+ end
58
+ end
59
+
60
+ end
@@ -6,4 +6,19 @@ describe Pullable do
6
6
  Pullable::VERSION.should_not be_nil
7
7
  end
8
8
 
9
+ it 'calls process! with the correct arguments' do
10
+ Pullable::Directory.expects(:process!).with('foo', 'bar')
11
+ Pullable.process!('foo', 'bar')
12
+ end
13
+
14
+ it 'handles a blank string for the method' do
15
+ Pullable::Directory.expects(:process!).with('foo', 'merge')
16
+ Pullable.process!('foo', '')
17
+ end
18
+
19
+ it 'handles a nil method' do
20
+ Pullable::Directory.expects(:process!).with('foo', 'merge')
21
+ Pullable.process!('foo')
22
+ end
23
+
9
24
  end
data/spec/spec_helper.rb CHANGED
@@ -1,2 +1,10 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
1
4
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
5
  require 'pullable'
6
+ require 'mocha/api'
7
+
8
+ RSpec.configure do |config|
9
+ config.mock_framework = :mocha
10
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pullable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Duncan Grazier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-03 00:00:00.000000000 Z
11
+ date: 2013-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mocha
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,20 @@ dependencies:
52
66
  - - '>='
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description: Update your Git repositories
56
84
  email:
57
85
  - itsmeduncan@gmail.com
@@ -71,8 +99,10 @@ files:
71
99
  - Rakefile
72
100
  - bin/pullable
73
101
  - lib/pullable.rb
102
+ - lib/pullable/directory.rb
74
103
  - lib/pullable/version.rb
75
104
  - pullable.gemspec
105
+ - spec/lib/pullable/directory_spec.rb
76
106
  - spec/pullable_spec.rb
77
107
  - spec/spec_helper.rb
78
108
  homepage: https://github.com/itsmeduncan/pullable
@@ -100,5 +130,6 @@ signing_key:
100
130
  specification_version: 4
101
131
  summary: A simple tool to update your local repositories
102
132
  test_files:
133
+ - spec/lib/pullable/directory_spec.rb
103
134
  - spec/pullable_spec.rb
104
135
  - spec/spec_helper.rb