sink 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/sink +4 -0
  3. data/lib/sink.rb +105 -0
  4. metadata +47 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8e29134a0f278c7583f66572df1f85e6dbabe5b8
4
- data.tar.gz: c781b335ec8844ccb8b9530c0c8f6a2d1d3fe60f
3
+ metadata.gz: bff262117380aefd4a94f0715b6c4f274ac041cf
4
+ data.tar.gz: 0143f4f3242c3c95dce830e6c65c1a2ccc1797f4
5
5
  SHA512:
6
- metadata.gz: 7d420a2170042d9ebb27a602b79e9da2fa8bc5044a7159fa4353c457df3df64eb68ffda25d0fe884a94d7d30de248ae98f58f70e8005dca802c0eaaa3cd91ad2
7
- data.tar.gz: a2e66adece2467a74d246bc181a4794802e580703441bf625020051e2030db63df21e26abfd755594868b6e40728c496e068a6f3ce79677e1dc2c3eb219d463a
6
+ metadata.gz: bccee55344108bd3178b8e419a88180956cba93c30be0a809af97f95036aa668cdf09c85c0b1bab7fb8660d8d00a4d43d6db2fca14b765209db028e868c5357e
7
+ data.tar.gz: c8713629530e27985577f3cf04668f32d1a72abdb790dfd4601e4db24e37000f67739082ca1f2a9f55eb783c48d48a12e9e444724f9bd8be75179dad0655f46b
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'sink'
3
+
4
+ sink = Sink.new
@@ -0,0 +1,105 @@
1
+ require 'rubygems'
2
+ require 'git'
3
+ require 'octokit'
4
+ require 'dotenv'
5
+
6
+ class Sink
7
+
8
+ attr_accessor :dir, :git, :github, :nwo, :status
9
+
10
+ def initialize
11
+ Dotenv.load "~/.sinkconfig"
12
+ puts "Configuration loaded: ✔"
13
+
14
+ @dir = Dir.pwd
15
+ @git = Git.open(@dir)
16
+ @github = Octokit::Client.new(:access_token => ENV["GITHUB_TOKEN"])
17
+
18
+ if dir_is_syncable?
19
+ @nwo = @git.remotes.select { |r| r.name == 'origin' }
20
+ .first.url
21
+ .gsub(/https:\/\/github.com\//, '')
22
+ .gsub(/\.git/, '')
23
+ puts "GitHub remote detected: ✔"
24
+ else
25
+ puts "Not a git repo, sorry! Exiting…"
26
+ exit
27
+ end
28
+
29
+ watch
30
+ end
31
+
32
+ def watch
33
+ puts "Watching for changes…"
34
+
35
+ while true
36
+ if unstaged_changes?
37
+ @git.add(all: true)
38
+ @git.commit(commit_message)
39
+ @git.push('origin')
40
+ puts "Latest changes pushed!"
41
+ end
42
+
43
+ if remote_head_sha != local_head_sha
44
+ puts "Remote changes detected. Syncing…"
45
+ @git.pull('origin')
46
+ puts "Done."
47
+ end
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def remote_head_sha
54
+ @github.branch(@nwo, 'master')[:commit][:sha]
55
+ end
56
+
57
+ def local_head_sha
58
+ @git.log.first.sha
59
+ end
60
+
61
+ def status
62
+ @status ||= `git status -sb`
63
+ end
64
+
65
+ def recheck_status
66
+ @status = `git status -sb`
67
+ end
68
+
69
+ def status_changes
70
+ status.split("\n")[1..-1]
71
+ end
72
+
73
+ def unstaged_changes?
74
+ recheck_status
75
+ status_changes != []
76
+ end
77
+
78
+ def change_list
79
+ "- #{status_changes.join("\n- ")}"
80
+ end
81
+
82
+ def commit_message
83
+ # Recheck status after staging everything so we can commit renames.
84
+ # i.e. R oldname -> newname instead of D oldname + A newname.
85
+ recheck_status
86
+ count = status_changes.count
87
+ message = "#{count} file#{'s' if count > 1} changed.\n#{change_list}"
88
+ puts message
89
+ "Auto-sync: #{message}"
90
+ end
91
+
92
+ def dir_is_syncable?
93
+ begin
94
+ origin_exists = false
95
+ @git.remotes.each do |remote|
96
+ origin_exists = true if !origin_exists && remote.name == 'origin' && !remote.url.match(/github/).nil?
97
+ end
98
+ puts "Directory is syncable: ✔"
99
+ origin_exists
100
+ rescue ArgumentError
101
+ false
102
+ end
103
+ end
104
+
105
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sink
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Coby Chapple
@@ -9,13 +9,57 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2014-07-30 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: git
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: octokit
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: dotenv
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.11'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.11'
13
55
  description: Auto-sink folders via GitHub.
14
56
  email: coby@github.com
15
- executables: []
57
+ executables:
58
+ - sink
16
59
  extensions: []
17
60
  extra_rdoc_files: []
18
61
  files:
62
+ - bin/sink
19
63
  - lib/sink.rb
20
64
  homepage: http://rubygems.org/cobyism/sink
21
65
  licenses: