legit-the-git 0.0.4 → 0.0.5
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/bin/legit-the-git +1 -1
- data/legit-the-git.gemspec +1 -1
- data/lib/legit-the-git/command.rb +16 -19
- data/lib/legit-the-git/command_line.rb +52 -39
- data/lib/legit-the-git/commit.rb +2 -1
- metadata +4 -4
data/bin/legit-the-git
CHANGED
data/legit-the-git.gemspec
CHANGED
@@ -6,32 +6,29 @@ module LegitGit
|
|
6
6
|
class Command
|
7
7
|
require "shellwords"
|
8
8
|
|
9
|
+
def add(file_path)
|
10
|
+
if File.directory?(file_path) # Recursively add directory (`accurev add -x -R {Dir}`)
|
11
|
+
execute("add -x -R \"#{file_path}\"")
|
12
|
+
else # Add single file (`accurev add {File}`)
|
13
|
+
execute("add \"#{file_path}\"")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def keep(file_path, message)
|
18
|
+
execute("keep -c \"#{message}\" \"#{file_path}\"")
|
19
|
+
end
|
20
|
+
|
21
|
+
def defunct(file_path, message)
|
22
|
+
execute("defunct -c \"#{message}\" \"#{file_path}\"")
|
23
|
+
end
|
24
|
+
|
9
25
|
private
|
10
26
|
def execute(command)
|
11
27
|
args = Shellwords.split(command)
|
12
28
|
escaped_args = args.map {|arg| Shellwords.escape(arg)}
|
13
29
|
sub_command = Shellwords.join(escaped_args)
|
14
|
-
#puts "Running accurev #{sub_command}"
|
15
30
|
system("accurev #{sub_command}")
|
16
31
|
end
|
17
|
-
|
18
|
-
class << self
|
19
|
-
def add(file_path)
|
20
|
-
if File.directory?(file_path) # Recursively add directory (`accurev add -x -R {Dir}`)
|
21
|
-
execute("add -x -R \"#{file_path}\"")
|
22
|
-
else # Add single file (`accurev add {File}`)
|
23
|
-
execute("add \"#{file_path}\"")
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def keep(file_path, message)
|
28
|
-
execute("keep -c \"#{message}\" \"#{file_path}\"")
|
29
|
-
end
|
30
|
-
|
31
|
-
def defunct(file_path, message)
|
32
|
-
execute("defunct -c \"#{@last_commit_message}\" \"#{diff.a_path}\"")
|
33
|
-
end
|
34
|
-
end
|
35
32
|
end
|
36
33
|
end
|
37
34
|
end
|
@@ -3,65 +3,78 @@
|
|
3
3
|
|
4
4
|
require 'rubygems'
|
5
5
|
require 'legit-the-git'
|
6
|
-
require 'optparse'
|
7
|
-
require 'ostruct'
|
8
6
|
require 'fileutils'
|
9
7
|
|
10
8
|
module LegitGit
|
11
9
|
class CommandLine
|
10
|
+
|
12
11
|
# Parse command line options and execute
|
13
12
|
def self.execute(args)
|
14
|
-
options = parse_options(args)
|
15
13
|
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
help = <<-EOS
|
15
|
+
Usage #{File.basename $0} [--version] [--help] <command>
|
16
|
+
|
17
|
+
Commands:
|
18
|
+
install Install the Accurev Git hook into the current directory
|
19
|
+
uninstall Remove legit-the-git from the current repo
|
20
|
+
|
21
|
+
Workflow:
|
22
|
+
Once installed commit your changes like usual. When you would like to push
|
23
|
+
those changes to accurev, just run `git push accurev`. This will sync new
|
24
|
+
commits from the current branch to the accurev server. Just make sure you
|
25
|
+
are logged into accurev!
|
26
|
+
|
27
|
+
EOS
|
28
|
+
|
29
|
+
case args
|
30
|
+
when "install"
|
31
|
+
installation = LegitGit::Installation.new(Dir.pwd)
|
32
|
+
installation.install
|
33
|
+
puts 'Successfully installed!'
|
34
|
+
puts "Run #{File.basename $0} --help for usage."
|
19
35
|
exit 0
|
20
|
-
when
|
21
|
-
|
36
|
+
when "uninstall"
|
37
|
+
installation = LegitGit::Installation.new(Dir.pwd)
|
38
|
+
installation.uninstall
|
39
|
+
puts 'Successfully uninstalled!'
|
22
40
|
exit 0
|
41
|
+
when "--version"
|
42
|
+
puts "0.0.5"
|
43
|
+
exit 0
|
44
|
+
else
|
45
|
+
puts help
|
23
46
|
end
|
24
47
|
end
|
25
|
-
|
26
|
-
private
|
27
|
-
def self.parse_options(args)
|
28
|
-
options = OpenStruct.new
|
29
|
-
options.command = :help
|
30
|
-
options.path = Dir.pwd
|
31
|
-
|
32
|
-
opts = OptionParser.new do |opts|
|
33
|
-
opts.banner = "Usage #{File.basename $0} [options]"
|
34
|
-
opts.on_head("-i","--install", "Install Accurev Git hook in current dir") { options.command = :install }
|
35
|
-
opts.on("-p","--path=[path]", "Install Accurev Git hook to specified path") { |path| options.path = path }
|
36
|
-
opts.on_tail("--version", "Print current version and exit") {options.command = :version }
|
37
|
-
opts.on_tail("-h","--help", "Print help message")
|
38
|
-
end
|
39
|
-
opts.parse!(args)
|
40
|
-
(puts opts and exit 0) if options.command == :help
|
41
|
-
options
|
42
|
-
end
|
43
48
|
end
|
44
49
|
|
45
50
|
class Installation
|
51
|
+
# Refactor!
|
52
|
+
|
53
|
+
def initialize(repo_path)
|
54
|
+
@repository = Grit::Repo.new(repo_path)
|
55
|
+
@accurev_repo = File.join(repo_path, '.git', 'accurev.git')
|
46
56
|
|
47
|
-
|
48
|
-
|
57
|
+
@accurev_hooks = File.join(repo_path, '.git', 'accurev.git', 'hooks')
|
58
|
+
@repo_hooks = File.join(repo_path, '.git', 'accurev.git', 'hooks')
|
49
59
|
end
|
50
60
|
|
51
|
-
def install
|
52
|
-
repository
|
53
|
-
|
54
|
-
accurev_repo = File.join(repo_path, '.git', 'accurev.git')
|
55
|
-
accurev_hooks = File.join(repo_path, '.git', 'accurev.git', 'hooks')
|
61
|
+
def install
|
62
|
+
@repository.fork_bare(@accurev_repo, :shared => false, :mirror => true)
|
63
|
+
@repository.remote_add("accurev", @accurev_repo)
|
56
64
|
|
57
|
-
|
58
|
-
repository.remote_add("accurev", accurev_repo)
|
65
|
+
FileUtils.mkdir_p([@accurev_hooks, @repo_hooks])
|
59
66
|
|
60
|
-
FileUtils.
|
61
|
-
FileUtils.
|
67
|
+
FileUtils.install(File.join(File.dirname(__FILE__), "hooks", "post-commit"), @repo_hooks, :mode => 0755)
|
68
|
+
FileUtils.install(File.join(File.dirname(__FILE__), "hooks", "pre-receive"), @accurev_hooks, :mode => 0755)
|
69
|
+
end
|
70
|
+
|
71
|
+
def uninstall
|
72
|
+
unless @repository.remotes.select {|r| r.name =~ /accurev/}.empty?
|
73
|
+
git = Grit::Git.new(File.expand_path(File.join(Dir.pwd, '.git/')))
|
74
|
+
git.native(:remote, {}, 'rm', 'accurev')
|
75
|
+
end
|
62
76
|
|
63
|
-
FileUtils.
|
64
|
-
FileUtils.install(File.join(File.dirname(__FILE__), "hooks", "pre-receive"), accurev_hooks, :mode => 0755)
|
77
|
+
FileUtils.rm_rf([@accurev_repo, File.join(@repo_hooks, "hooks", "post-commit")])
|
65
78
|
end
|
66
79
|
end
|
67
80
|
end
|
data/lib/legit-the-git/commit.rb
CHANGED
@@ -7,12 +7,13 @@ module LegitGit
|
|
7
7
|
require File.dirname(__FILE__) + "/command"
|
8
8
|
|
9
9
|
def initialize(repository, commit_object)
|
10
|
-
@command =
|
10
|
+
@command = Command.new
|
11
11
|
commit!(commit_object, repository)
|
12
12
|
end
|
13
13
|
|
14
14
|
def commit!(commit_object, repository)
|
15
15
|
commit_object.each do |commit|
|
16
|
+
$stdout.puts "\e[\033[0;36mSyncing Commit \e[\033[0;32m#{commit.id_abbrev}\e[0m\n\e[\033[0;33m#{commit.message}\e[0m"
|
16
17
|
commit.show.each do |diff|
|
17
18
|
case
|
18
19
|
when diff.new_file # Accurev add, then keep
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: legit-the-git
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 5
|
10
|
+
version: 0.0.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Grayson Manley
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-02-
|
18
|
+
date: 2011-02-22 00:00:00 -06:00
|
19
19
|
default_executable: legit-the-git
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|