local_pac 0.1.13 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/{LICENSE.txt → LICENSE.md} +0 -0
- data/README.DEVELOPER.md +7 -0
- data/README.md +138 -2
- data/Rakefile +16 -8
- data/app/controllers/application_controller.rb +5 -3
- data/app/controllers/assets_controller.rb +3 -2
- data/app/controllers/file_serve_controller.rb +3 -6
- data/app/controllers/lookup_controller.rb +9 -9
- data/app/locales/en.yml +1 -0
- data/app/views/application.haml +1 -1
- data/bin/local_pac +49 -64
- data/config.ru +24 -7
- data/features/initializer.feature +4 -4
- data/features/show_status.feature +2 -2
- data/files/config.yaml +2 -2
- data/files/example-config.erb +10 -12
- data/files/git-hook.erb +1 -0
- data/lib/local_pac.rb +22 -5
- data/lib/local_pac/actions/create_directory.rb +2 -2
- data/lib/local_pac/actions/create_file.rb +8 -2
- data/lib/local_pac/actions/create_repository.rb +6 -8
- data/lib/local_pac/actions/get_system_information.rb +78 -0
- data/lib/local_pac/actions/print_newline.rb +19 -0
- data/lib/local_pac/actions/print_title.rb +41 -0
- data/lib/local_pac/actions/reload_configuration.rb +21 -0
- data/lib/local_pac/actions/reload_local_storage.rb +22 -0
- data/lib/local_pac/actions/send_signal.rb +32 -0
- data/lib/local_pac/actions/show_config.rb +10 -0
- data/lib/local_pac/actions/show_process_information.rb +94 -0
- data/lib/local_pac/application_status.rb +34 -0
- data/lib/local_pac/cli/helper.rb +34 -0
- data/lib/local_pac/cli/reload.rb +36 -0
- data/lib/local_pac/config.rb +15 -13
- data/lib/local_pac/exceptions.rb +6 -0
- data/lib/local_pac/file.rb +32 -0
- data/lib/local_pac/git.rb +20 -6
- data/lib/local_pac/git_repository.rb +40 -28
- data/lib/local_pac/git_storage.rb +60 -0
- data/lib/local_pac/initializer.rb +8 -5
- data/lib/local_pac/local_storage.rb +3 -4
- data/lib/local_pac/main.rb +2 -2
- data/lib/local_pac/{null_pac_file.rb → null_file.rb} +5 -1
- data/lib/local_pac/server.rb +1 -1
- data/lib/local_pac/spec_helper_file_server.rb +6 -5
- data/lib/local_pac/template_file.rb +1 -1
- data/lib/local_pac/template_repository.rb +3 -3
- data/lib/local_pac/version.rb +1 -1
- data/local_pac.gemspec +13 -9
- data/script/console +1 -1
- data/share/archlinux/PKGBUILD +4 -1
- data/share/archlinux/config.yaml +1 -1
- data/spec/actions/create_directory_spec.rb +3 -3
- data/spec/actions/create_file_spec.rb +23 -2
- data/spec/actions/create_repository_spec.rb +3 -3
- data/spec/actions/get_system_information_spec.rb +22 -0
- data/spec/actions/print_new_line_spec.rb +36 -0
- data/spec/actions/print_title_spec.rb +50 -0
- data/spec/actions/reload_configuration_spec.rb +38 -0
- data/spec/actions/reload_repository_spec.rb +35 -0
- data/spec/actions/send_signal_spec.rb +58 -0
- data/spec/actions/show_config_spec.rb +22 -0
- data/spec/actions/show_process_information_spec.rb +45 -0
- data/spec/application_status_spec.rb +40 -0
- data/spec/config_spec.rb +11 -11
- data/spec/features/fetch_proxy_pac_spec.rb +11 -10
- data/spec/features/lookup_proxy_spec.rb +32 -40
- data/spec/file_spec.rb +56 -0
- data/spec/git_spec.rb +13 -7
- data/spec/git_storage_spec.rb +64 -0
- data/spec/initializer_spec.rb +7 -5
- data/spec/{null_pac_file_spec.rb → null_file_spec.rb} +6 -6
- data/spec/proxy_pac/pac_result_html_stylist_spec.rb +3 -2
- data/spec/runner_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -2
- data/spec/spec_helper_features.rb +2 -2
- data/spec/support/config.rb +5 -0
- data/spec/support/filesystem.rb +1 -1
- data/spec/support/git.rb +23 -2
- data/spec/support/helper_features.rb +23 -0
- data/spec/template_repository_spec.rb +2 -2
- metadata +113 -32
- data/lib/local_pac/git_file.rb +0 -18
- data/lib/local_pac/pac_file.rb +0 -27
- data/spec/git_repository_spec.rb +0 -60
- data/spec/pac_file_spec.rb +0 -44
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module LocalPac
|
3
|
+
module Actions
|
4
|
+
class SendSignal
|
5
|
+
private
|
6
|
+
|
7
|
+
attr_reader :signal, :pid_file, :signalizer
|
8
|
+
|
9
|
+
public
|
10
|
+
|
11
|
+
def initialize(signal, pid_file = LocalPac.config.pid_file, signalizer = Process)
|
12
|
+
@signal = signal
|
13
|
+
@pid_file = pid_file
|
14
|
+
@signalizer = signalizer
|
15
|
+
end
|
16
|
+
|
17
|
+
def run
|
18
|
+
signalizer.kill signal, pid
|
19
|
+
rescue Exceptions::PidFileDoesNotExist
|
20
|
+
LocalPac.ui_logger.error "Pid-file \"#{pid_file}\" does not exist. I'm not able to send daemon signal \"#{signal}\"."
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def pid
|
26
|
+
::File.read(pid_file).to_i
|
27
|
+
rescue Errno::ENOENT => e
|
28
|
+
raise Exceptions::PidFileDoesNotExist, e.message
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module LocalPac
|
3
|
+
module Actions
|
4
|
+
class ShowProcessInformation
|
5
|
+
|
6
|
+
class IntegerPidInfo
|
7
|
+
attr_reader :pid, :error_message
|
8
|
+
|
9
|
+
def initialize(pid_info)
|
10
|
+
@pid = pid_info.to_i
|
11
|
+
@error_message = "Process \"#{@pid}\" cannot be found. It is not a running process."
|
12
|
+
@error_occured = false
|
13
|
+
end
|
14
|
+
|
15
|
+
def error?
|
16
|
+
@error_occured
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class FilePidInfo
|
21
|
+
attr_reader :pid, :error_message
|
22
|
+
|
23
|
+
def initialize(pid_info)
|
24
|
+
@pid = Pathname.new(pid_info).read.to_i
|
25
|
+
@error_message = "Process \"#{@pid}\" cannot be found. It is not a running process."
|
26
|
+
@error_occured = false
|
27
|
+
rescue Errno::ENOENT
|
28
|
+
@pid = nil
|
29
|
+
@error_message = "Pid-file #{pid_info} cannot be found. Please choose a correct path and try again."
|
30
|
+
@error_occured = true
|
31
|
+
end
|
32
|
+
|
33
|
+
def error?
|
34
|
+
@error_occured
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
attr_reader :pid_info
|
41
|
+
|
42
|
+
public
|
43
|
+
|
44
|
+
def initialize(pid_info)
|
45
|
+
if pid_info.kind_of? Integer
|
46
|
+
@pid_info = IntegerPidInfo.new(pid_info)
|
47
|
+
else
|
48
|
+
@pid_info = FilePidInfo.new(pid_info)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def run
|
53
|
+
if pid_info.error?
|
54
|
+
puts pid_info.error_message
|
55
|
+
return
|
56
|
+
end
|
57
|
+
|
58
|
+
s = Sys::ProcTable.ps(pid_info.pid)
|
59
|
+
|
60
|
+
if s.nil?
|
61
|
+
puts pid_info.error_message
|
62
|
+
return
|
63
|
+
end
|
64
|
+
|
65
|
+
printf( "%#{max_field_length}s | %s\n", 'Information', 'Value')
|
66
|
+
printf( "%s + %s\n", '-' * max_field_length, '-' * 40)
|
67
|
+
fields.each { |i| printf( "%#{max_field_length}s | %s\n", i, s.public_send(i)) }
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def max_field_length
|
73
|
+
all = fields + [ 'Information', 'Value' ]
|
74
|
+
all.inject(0) { |memo, f| memo = f.size if f.size > memo ; memo}
|
75
|
+
end
|
76
|
+
|
77
|
+
def fields
|
78
|
+
%w[
|
79
|
+
pid
|
80
|
+
name
|
81
|
+
exe
|
82
|
+
cmdline
|
83
|
+
uid
|
84
|
+
pgrp
|
85
|
+
egid
|
86
|
+
gid
|
87
|
+
ppid
|
88
|
+
root
|
89
|
+
environ
|
90
|
+
]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module LocalPac
|
3
|
+
class ApplicationStatus
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
include Pager
|
8
|
+
|
9
|
+
attr_reader :should_page
|
10
|
+
|
11
|
+
public
|
12
|
+
|
13
|
+
def initialize(options = {})
|
14
|
+
@should_page = options.fetch(:pager, :true)
|
15
|
+
config = options.fetch(:config, LocalPac.config)
|
16
|
+
|
17
|
+
@actions = []
|
18
|
+
@actions << Actions::PrintTitle.new('System Information')
|
19
|
+
@actions << Actions::GetSystemInformation.new
|
20
|
+
@actions << Actions::PrintNewline.new(2)
|
21
|
+
@actions << Actions::PrintTitle.new('Application Configuration')
|
22
|
+
@actions << Actions::ShowConfig.new
|
23
|
+
@actions << Actions::PrintNewline.new(2)
|
24
|
+
@actions << Actions::PrintTitle.new('Process Information')
|
25
|
+
@actions << Actions::ShowProcessInformation.new(config.pid_file)
|
26
|
+
end
|
27
|
+
|
28
|
+
def show
|
29
|
+
page if should_page
|
30
|
+
|
31
|
+
@actions.each(&:run)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module LocalPac
|
3
|
+
module Cli
|
4
|
+
module Helper
|
5
|
+
def pid(config = LocalPac.config)
|
6
|
+
::File.read(config.pid_file).chomp
|
7
|
+
rescue Errno::ENOENT
|
8
|
+
'Stale PID-file'
|
9
|
+
end
|
10
|
+
|
11
|
+
def set_log_level(requested_level)
|
12
|
+
case requested_level.to_s.to_sym
|
13
|
+
when :info
|
14
|
+
LocalPac.ui_logger.level = ::Logger::INFO
|
15
|
+
when :debug
|
16
|
+
LocalPac.ui_logger.level = ::Logger::DEBUG
|
17
|
+
else
|
18
|
+
LocalPac.ui_logger.level = ::Logger::WARN
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def set_debug(request)
|
23
|
+
if request
|
24
|
+
LocalPac.ui_logger.info "Activating debug mode."
|
25
|
+
|
26
|
+
require 'pry'
|
27
|
+
require 'debugger'
|
28
|
+
end
|
29
|
+
rescue LoadError
|
30
|
+
LocalPac.ui_logger.error "You tried to enable debug-mode, but either 'pry'- or 'debugger'-gem are not installed. Please fix that before using the debug-switch again."
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module LocalPac
|
3
|
+
module Cli
|
4
|
+
class Reload < Thor
|
5
|
+
no_commands {
|
6
|
+
include LocalPac::Cli::Helper
|
7
|
+
}
|
8
|
+
|
9
|
+
desc 'configuration', 'Reload configuration'
|
10
|
+
def configuration
|
11
|
+
LocalPac.config = LocalPac::Config.new(options[:config_file]) if options[:config_file]
|
12
|
+
LocalPac.config.pid_file = options[:pid_file] if options[:pid_file]
|
13
|
+
LocalPac.config.lock
|
14
|
+
|
15
|
+
set_log_level(options[:log_level])
|
16
|
+
set_debug(options[:debug])
|
17
|
+
|
18
|
+
LocalPac.ui_logger.info "Ask web application (PID: #{pid(LocalPac.config)}) to reload configuration"
|
19
|
+
Actions::SendSignal.new(LocalPac.config.reload_config_signal).run
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'local_storage', 'Reload local_storage'
|
23
|
+
def local_storage
|
24
|
+
LocalPac.config = LocalPac::Config.new(options[:config_file]) if options[:config_file]
|
25
|
+
LocalPac.config.pid_file = options[:pid_file] if options[:pid_file]
|
26
|
+
LocalPac.config.lock
|
27
|
+
|
28
|
+
set_log_level(options[:log_level])
|
29
|
+
set_debug(options[:debug])
|
30
|
+
|
31
|
+
LocalPac.ui_logger.info "Ask web application (PID: #{pid(LocalPac.config)}) to reload storage"
|
32
|
+
Actions::SendSignal.new(LocalPac.config.reload_storage_signal).run
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/local_pac/config.rb
CHANGED
@@ -32,7 +32,7 @@ module LocalPac
|
|
32
32
|
yaml = Psych.load_file(file)
|
33
33
|
|
34
34
|
if yaml.respond_to? :[]
|
35
|
-
@config = yaml.symbolize_keys
|
35
|
+
@config = yaml.symbolize_keys
|
36
36
|
else
|
37
37
|
@config = {}
|
38
38
|
end
|
@@ -45,13 +45,15 @@ module LocalPac
|
|
45
45
|
config.freeze
|
46
46
|
end
|
47
47
|
|
48
|
-
option :
|
49
|
-
option :
|
50
|
-
option :
|
51
|
-
option :
|
52
|
-
option :
|
53
|
-
option :
|
54
|
-
option :
|
48
|
+
option :local_storage, ::File.expand_path(::File.join(ENV['HOME'], '.local', 'share', 'local_pac', 'data', 'storage.git'))
|
49
|
+
option :executable, ::File.expand_path(::File.expand_path('../../../bin/local_pac', __FILE__))
|
50
|
+
option :pid_file, ::File.expand_path(::File.join(ENV['HOME'], '.local', 'share', 'local_pac', 'run', 'pid'))
|
51
|
+
option :gem_path, Gem.path.collect {|p|::File.expand_path(p) }
|
52
|
+
option :access_log, ::File.expand_path(::File.join(ENV['HOME'], '.local', 'share', 'local_pac', 'log', 'access.log'))
|
53
|
+
option :sass_cache, ::File.expand_path(::File.join(ENV['HOME'], '.local', 'share', 'local_pac', 'cache'))
|
54
|
+
option :config_file, ::File.expand_path(::File.join(ENV['HOME'], '.config', 'local_pac', 'config.yaml'))
|
55
|
+
option :reload_config_signal, :USR1
|
56
|
+
option :reload_storage_signal, :USR2
|
55
57
|
|
56
58
|
def to_s
|
57
59
|
result = []
|
@@ -67,17 +69,17 @@ module LocalPac
|
|
67
69
|
|
68
70
|
def allowed_config_file_paths
|
69
71
|
[
|
70
|
-
File.expand_path(File.join(ENV['HOME'], '.config', 'local_pac', 'config.yaml')),
|
71
|
-
File.expand_path(File.join(ENV['HOME'], '.local_pac', 'config.yaml')),
|
72
|
-
File.expand_path(File.join('/etc', 'local_pac', 'config.yaml')),
|
73
|
-
File.expand_path('../../../files/config.yaml', __FILE__),
|
72
|
+
::File.expand_path(::File.join(ENV['HOME'], '.config', 'local_pac', 'config.yaml')),
|
73
|
+
::File.expand_path(::File.join(ENV['HOME'], '.local_pac', 'config.yaml')),
|
74
|
+
::File.expand_path(::File.join('/etc', 'local_pac', 'config.yaml')),
|
75
|
+
::File.expand_path('../../../files/config.yaml', __FILE__),
|
74
76
|
]
|
75
77
|
end
|
76
78
|
|
77
79
|
private
|
78
80
|
|
79
81
|
def available_config_file
|
80
|
-
allowed_config_file_paths.find { |f| File.exists? f }
|
82
|
+
allowed_config_file_paths.find { |f| ::File.exists? f }
|
81
83
|
end
|
82
84
|
end
|
83
85
|
end
|
data/lib/local_pac/exceptions.rb
CHANGED
@@ -20,5 +20,11 @@ module LocalPac
|
|
20
20
|
|
21
21
|
# raised if request is invalid
|
22
22
|
class GivenUrlInvalid < Exception; end
|
23
|
+
|
24
|
+
# raised if pid file does not exist
|
25
|
+
class PidFileDoesNotExist < Exception; end
|
26
|
+
|
27
|
+
# raised if repository does not exist
|
28
|
+
class RepositoryDoesNotExist < Exception; end
|
23
29
|
end
|
24
30
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module LocalPac
|
3
|
+
class File
|
4
|
+
private
|
5
|
+
|
6
|
+
attr_reader :extension
|
7
|
+
|
8
|
+
public
|
9
|
+
|
10
|
+
attr_accessor :compressed_content
|
11
|
+
attr_reader :path, :name, :content
|
12
|
+
|
13
|
+
def initialize(path, content = '')
|
14
|
+
@path = path
|
15
|
+
@extension = ::File.extname(path)
|
16
|
+
@name = path.sub(/\..*$/, '').camelize.downcase.to_sym
|
17
|
+
@content = content
|
18
|
+
end
|
19
|
+
|
20
|
+
def nil?
|
21
|
+
false
|
22
|
+
end
|
23
|
+
|
24
|
+
def extension?(ext)
|
25
|
+
extension == ext
|
26
|
+
end
|
27
|
+
|
28
|
+
def prepare(handler)
|
29
|
+
handler.prepare(self)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/local_pac/git.rb
CHANGED
@@ -2,29 +2,43 @@ module LocalPac
|
|
2
2
|
class Git
|
3
3
|
def self.ls_files(filter = nil)
|
4
4
|
cmd = ['git ls-files']
|
5
|
-
cmd <<
|
5
|
+
cmd << filter if filter
|
6
6
|
|
7
7
|
runner = Runner.new(cmd.join(" "))
|
8
8
|
runner.result
|
9
9
|
end
|
10
10
|
|
11
|
-
def self.
|
11
|
+
def self.config(option, value, git_dir, is_global = true)
|
12
12
|
cmd = ['git']
|
13
13
|
cmd << "--git-dir #{git_dir}" if git_dir
|
14
|
-
cmd << '
|
14
|
+
cmd << 'config'
|
15
|
+
cmd << option
|
16
|
+
cmd << "\"#{value}\""
|
17
|
+
cmd << "--global" if is_global
|
15
18
|
|
16
19
|
runner = Runner.new(cmd.join(" "))
|
17
20
|
runner.result
|
18
21
|
end
|
19
22
|
|
20
|
-
|
21
|
-
|
22
|
-
cmd
|
23
|
+
|
24
|
+
def self.ls_tree(git_dir = nil, filter = nil)
|
25
|
+
cmd = ['git']
|
26
|
+
cmd << "--git-dir #{git_dir}" if git_dir
|
27
|
+
cmd << 'ls-tree -r HEAD'
|
28
|
+
cmd << filter if filter
|
23
29
|
|
24
30
|
runner = Runner.new(cmd.join(" "))
|
25
31
|
runner.result
|
26
32
|
end
|
27
33
|
|
34
|
+
def self.init(path, is_bare = false)
|
35
|
+
if is_bare
|
36
|
+
Rugged::Repository.init_at(path, :bare)
|
37
|
+
else
|
38
|
+
Rugged::Repository.init_at(path)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
28
42
|
def self.add(object)
|
29
43
|
runner = Runner.new("git add #{object}")
|
30
44
|
runner.result
|
@@ -1,50 +1,62 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
module LocalPac
|
3
|
-
|
4
3
|
class GitRepository
|
5
4
|
private
|
6
5
|
|
7
|
-
attr_reader :
|
6
|
+
attr_reader :repository, :root_commit
|
8
7
|
|
9
8
|
public
|
10
9
|
|
11
|
-
|
12
|
-
@storage_path = File.expand_path(storage_path)
|
13
|
-
javascript_compressor = compressor_engine.new
|
10
|
+
attr_reader :storage_path
|
14
11
|
|
15
|
-
|
12
|
+
def initialize(storage_path)
|
13
|
+
@storage_path = ::File.expand_path(storage_path)
|
14
|
+
@repository = Rugged::Repository.new(storage_path)
|
15
|
+
rescue Rugged::RepositoryError
|
16
|
+
raise Exceptions::RepositoryDoesNotExist, "Sorry, but #{storage_path} is not a git repository."
|
17
|
+
end
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
pac_file = file_creator.new(git_file)
|
21
|
-
javascript_compressor.prepare(pac_file)
|
22
|
-
memo[pac_file.name.to_sym] = pac_file
|
19
|
+
def self.create(storage_path)
|
20
|
+
storage_path = ::File.expand_path(storage_path)
|
21
|
+
Rugged::Repository.init_at(storage_path, :bare)
|
23
22
|
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
23
|
+
new(storage_path)
|
27
24
|
end
|
28
25
|
|
29
|
-
def
|
30
|
-
|
31
|
-
|
26
|
+
def add_content(path, content = '', mode = 0100644, commit_info = default_commit_info)
|
27
|
+
oid = repository.write(content, :blob)
|
28
|
+
index = Rugged::Index.new
|
29
|
+
index.add(:path => path, :oid => oid, :mode => mode)
|
32
30
|
|
33
|
-
|
31
|
+
unless repository.empty?
|
32
|
+
root_commit = @repository.lookup(@repository.head.target)
|
33
|
+
|
34
|
+
root_commit.tree.walk_blobs(:postorder) do |r, e|
|
35
|
+
e.merge!( { path: "#{r}#{e[:name]}" } )
|
36
|
+
e.delete(:name)
|
34
37
|
|
35
|
-
|
36
|
-
|
38
|
+
index.add(e)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
options = {}
|
43
|
+
options[:tree] = index.write_tree(repository)
|
44
|
+
options[:parents] = repository.empty? ? [] : [ repository.head.target ].compact
|
45
|
+
options[:update_ref] = 'HEAD'
|
46
|
+
options.merge! commit_info
|
47
|
+
|
48
|
+
Rugged::Commit.create(repository, options)
|
37
49
|
end
|
38
50
|
|
39
|
-
|
40
|
-
LocalPac.ui_logger.debug "I'm using the following storage path: \"#{storage_path}\"."
|
51
|
+
private
|
41
52
|
|
42
|
-
|
43
|
-
|
44
|
-
|
53
|
+
def default_commit_info
|
54
|
+
options = {}
|
55
|
+
options[:author] = { :email => 'local_pac@local_pac', :name => 'Local Pac', :time => Time.now }
|
56
|
+
options[:committer] = { :email => 'local_pac@local_pac', :name => 'Local Pac', :time => Time.now }
|
57
|
+
options[:message] = 'Commit made by local pac itself'
|
45
58
|
|
46
|
-
|
47
|
-
files
|
59
|
+
options
|
48
60
|
end
|
49
61
|
end
|
50
62
|
end
|