jive 0.2.1 → 0.2.2

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
  SHA256:
3
- metadata.gz: bddc17f6e7de98fa8523b1397b9b71ba62d9a3f3d8a1afe0d3f2e199c1ae455d
4
- data.tar.gz: 116b830e7c5f78974da8c983218ddeb85e9cf3ca848845fdfad03c0a5b61e866
3
+ metadata.gz: ecf28e3a1d722522cb6fc2bb810c34563ba78f81209f78f8a4abc7e628c6f23e
4
+ data.tar.gz: 9c8c3e0390939c7393b7cc170d538f3f1a97595d8c4b8783dac66cd000067ecd
5
5
  SHA512:
6
- metadata.gz: 334e951bcf57081638f45c698cc75f3bfa9bc196286b19e0bb0e11031dc595b82c85df4354c4d1b7b93803072319e9ab958b75cfdf472eb36f5ad30ceda32234
7
- data.tar.gz: dc64e8622088871e639cfcc1465aa00ede6653539d8f1959529215c8c3b1efae5bb11eefd2b1e888f64d58e05b09df3fc074b8bc0f0d1cd56111b16b09abd043
6
+ metadata.gz: f1631fb5229c44e2ab09e3c38723e7db97822a3c7fa0525220b9f901b38d8ee1a6f7e19e2c9d138bab405edb7ec1d4c7c210020e18c3092fc76577b867db9f73
7
+ data.tar.gz: 842ac071b5edf167f5c9c240faf4466cbee6979bdfa797fed89e60f4db852486da68ae2d8e1186e8d4229af69e671e08a0b2716a4435f0eea96dd25b47d4b62d
data/jive.sh CHANGED
@@ -43,7 +43,7 @@ __jive_open_pipe() {
43
43
  local tmpfile
44
44
  tmpfile="$(\mktemp -u)"
45
45
 
46
- exec 9>"${tmpfile}" # Open the tempfile for writing on FD 9.
46
+ exec 42>"${tmpfile}" # Open the tempfile for writing on FD 42.
47
47
  exec 8<"${tmpfile}" # Open the tempfile for reading on FD 8.
48
48
  \rm -f "${tmpfile}" # Unlink the tempfile. (we've already opened it).
49
49
  }
@@ -76,7 +76,7 @@ __jive_flush_tasks() {
76
76
 
77
77
  __jive_close_pipe() {
78
78
  exec 8<&- # close FD 8.
79
- exec 9<&- # close FD 9.
79
+ exec 42<&- # close FD 42.
80
80
  }
81
81
 
82
82
  jive() {
data/lib/jive.rb CHANGED
@@ -4,8 +4,10 @@ require "fileutils"
4
4
  require "open3"
5
5
 
6
6
  require "jive/batch_runner"
7
+ require "jive/git"
7
8
  require "jive/popen"
8
9
  require "jive/runner"
10
+ require "jive/shell"
9
11
  require "jive/version"
10
12
 
11
13
  module Jive
data/lib/jive/cli.rb CHANGED
@@ -11,17 +11,18 @@ module Jive
11
11
  true
12
12
  end
13
13
 
14
+ desc "cd <org>/<project>", "cd to ~/src/github.com/<org>/<project>"
15
+ def cd(slug)
16
+ runner.run_safely do
17
+ Git.new(runner).cd(slug)
18
+ end
19
+ end
20
+
14
21
  desc "clone <org>/<project>", "git clone to ~/src/github.com/<org>/<project>"
15
22
  def clone(slug)
16
- target_dir = Pathname.new(Dir.home).join("src/github.com/#{slug}")
17
- run_each([
18
- [:mkdir, "-p", target_dir.parent.to_s],
19
- [:git, "clone", "git@github.com:#{slug}.git", target_dir]
20
- ])
21
- after_run([
22
- ["cd", target_dir],
23
- ["setenv", "JIVE_LAST_RUN=#{Time.now.to_i}"]
24
- ])
23
+ runner.run_safely do
24
+ Git.new(runner).clone(slug)
25
+ end
25
26
  end
26
27
 
27
28
  desc "setup", "provide instructions to integrate into shell"
@@ -35,34 +36,8 @@ module Jive
35
36
 
36
37
  private
37
38
 
38
- COMMAND_MAP = {
39
- cd: "/usr/bin/cd",
40
- echo: "/usr/bin/echo",
41
- git: "/usr/bin/git",
42
- mkdir: "/usr/bin/mkdir"
43
- }.freeze
44
-
45
- def run_each(tasks)
46
- tasks.each do |task|
47
- break unless execute(task)
48
- end
49
- end
50
-
51
- def execute(command, env: {})
52
- system(env, expand(command))
53
- end
54
-
55
- def after_run(tasks)
56
- finalizer_fd = 9
57
- pipe = IO.new(finalizer_fd)
58
- pipe.puts(tasks.map { |x| x.join(":") }.join("\n"))
59
- end
60
-
61
- def expand(command)
62
- Array(command)
63
- .flatten
64
- .map { |x| COMMAND_MAP.fetch(x, x).to_s }
65
- .join(" ")
39
+ def runner
40
+ @runner ||= ::Jive::Shell.new
66
41
  end
67
42
  end
68
43
  end
data/lib/jive/git.rb ADDED
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jive
4
+ class Git
5
+ attr_reader :shell
6
+
7
+ def initialize(shell)
8
+ @shell = shell
9
+ end
10
+
11
+ def clone(slug)
12
+ dir = target_dir_for(slug)
13
+ unless dir.exist?
14
+ shell.run_each([
15
+ [:mkdir, "-p", dir.parent.to_s],
16
+ [:git, "clone", "git@github.com:#{slug}.git", dir]
17
+ ])
18
+ end
19
+ cd(slug)
20
+ end
21
+
22
+ def cd(slug)
23
+ dir = target_dir_for(slug)
24
+ if dir.exist?
25
+ shell.after_run([
26
+ ["cd", dir],
27
+ ["setenv", "JIVE_LAST_RUN=#{Time.now.to_i}"]
28
+ ])
29
+ else
30
+ clone(slug)
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def target_dir_for(slug)
37
+ Pathname.new(Dir.home).join("src/github.com/#{slug}")
38
+ end
39
+ end
40
+ end
data/lib/jive/shell.rb ADDED
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jive
4
+ class Shell
5
+ COMMAND_MAP = {
6
+ cd: "/usr/bin/cd",
7
+ echo: "/usr/bin/echo",
8
+ git: "/usr/bin/git",
9
+ mkdir: "/usr/bin/mkdir"
10
+ }.freeze
11
+
12
+ def run_each(tasks)
13
+ tasks.each do |task|
14
+ break unless execute(task)
15
+ end
16
+ end
17
+
18
+ def execute(command, env: {})
19
+ system(env, expand(command))
20
+ end
21
+
22
+ def after_run(tasks)
23
+ finalizer_fd = 42
24
+ pipe = IO.new(finalizer_fd)
25
+ pipe.puts(tasks.map { |x| x.join(":") }.join("\n"))
26
+ rescue Errno::EBADF => e
27
+ puts e
28
+ exit 1
29
+ end
30
+
31
+ def expand(command)
32
+ Array(command)
33
+ .flatten
34
+ .map { |x| COMMAND_MAP.fetch(x, x).to_s }
35
+ .join(" ")
36
+ end
37
+
38
+ def run_safely
39
+ yield
40
+ rescue StandardError => e
41
+ puts e
42
+ after_run([%w[noop noop]])
43
+ end
44
+ end
45
+ end
data/lib/jive/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Jive
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.2"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - mo khan
@@ -110,8 +110,10 @@ files:
110
110
  - lib/jive.rb
111
111
  - lib/jive/batch_runner.rb
112
112
  - lib/jive/cli.rb
113
+ - lib/jive/git.rb
113
114
  - lib/jive/popen.rb
114
115
  - lib/jive/runner.rb
116
+ - lib/jive/shell.rb
115
117
  - lib/jive/version.rb
116
118
  homepage: https://rubygems.org/gems/jive
117
119
  licenses: