jive 0.2.1 → 0.2.2

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.
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: