osdn-cli 0.0.7 → 0.0.8
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 +4 -4
- data/ChangeLog +44 -0
- data/README.md +51 -0
- data/lib/osdn/cli.rb +1 -1
- data/lib/osdn/cli/command/frs_base.rb +3 -3
- data/lib/osdn/cli/command/frs_upload.rb +29 -7
- data/lib/osdn/cli/command/relfile.rb +25 -5
- data/lib/osdn/cli/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff7266f193439e9ad64523af16d9e3564381440d
|
4
|
+
data.tar.gz: d359081a75b1a0442f7cf6f1d27e987de68639e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8729f64fd407d96ffe265dee88b5b13e4ee77724e14220b55949ac17eebd6b0ace27b429db96b682f4cd56fd7383749e998a0d1c172af6c8ad403a3c77bcc39
|
7
|
+
data.tar.gz: 8862640ebc555996e644674bbbfdf5e2c3a105116dc15c3a89da62587dc6f5993ea7fda4a43c28351f4c13cf3998a71fd1f63c63a7143930eb1aa050d81eeb3a
|
data/ChangeLog
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
2016-03-23 Tatsuki Sugiura <sugi@nemui.org>
|
2
|
+
|
3
|
+
* Version 0.0.8
|
4
|
+
* frs_upload: Save local file digest to vars
|
5
|
+
* relfile: Save local file digest to vars
|
6
|
+
|
7
|
+
2016-03-22 Tatsuki Sugiura <sugi@nemui.org>
|
8
|
+
|
9
|
+
* Version 0.0.7
|
10
|
+
* Enable SSL validation again, search some major CA bundle paths.
|
11
|
+
|
12
|
+
2016-03-16 Tatsuki Sugiura <sugi@nemui.org>
|
13
|
+
|
14
|
+
* Version 0.0.6
|
15
|
+
* Disable SSL validation temporarily.
|
16
|
+
|
17
|
+
2016-03-16 Tatsuki Sugiura <sugi@nemui.org>
|
18
|
+
|
19
|
+
* Version 0.0.5
|
20
|
+
* Default loglevel has been changed to INFO.
|
21
|
+
* Add release and relfile command.
|
22
|
+
* frs_upload: sort files in alphabetical order.
|
23
|
+
|
24
|
+
2016-03-15 Tatsuki Sugiura <sugi@nemui.org>
|
25
|
+
|
26
|
+
* Version 0.0.4
|
27
|
+
* login: stop to launch web browser on non-X11 environment.
|
28
|
+
|
29
|
+
2016-03-15 Tatsuki Sugiura <sugi@nemui.org>
|
30
|
+
|
31
|
+
* Version 0.0.3
|
32
|
+
* frs_upload: show upload progres in verbose mode.
|
33
|
+
* frs_upload: validates file digest after upload.
|
34
|
+
|
35
|
+
2016-03-14 Tatsuki Sugiura <sugi@nemui.org>
|
36
|
+
|
37
|
+
* Version 0.0.2
|
38
|
+
* frs_upload: Implement dry-run mode option.
|
39
|
+
* frs_upload: check file digest.
|
40
|
+
* frs_mkdirs: mangle non-suitable chars for local filesystem.
|
41
|
+
|
42
|
+
2016-03-11 Tatsuki Sugiura <sugi@osdn.jp>
|
43
|
+
|
44
|
+
* Initial Version (0.0.1)
|
data/README.md
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# OSDN Command Line Interface
|
2
|
+
|
3
|
+
OSDN command line interface using REST API.
|
4
|
+
|
5
|
+
## Requirement
|
6
|
+
|
7
|
+
* ruby (>= 1.9.3)
|
8
|
+
* gem build environment or pre-build ffi gem
|
9
|
+
* libcurl
|
10
|
+
|
11
|
+
On debian (ubuntu) system, you can install with following packages.
|
12
|
+
|
13
|
+
$ sudo apt-get install ruby ruby-ffi libcurl3
|
14
|
+
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
You can install by rubygem, type following on terminal.
|
18
|
+
|
19
|
+
$ gem install osdn-cli
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
First you need to login to API with 'login' subcommand.
|
24
|
+
|
25
|
+
$ osdn login
|
26
|
+
|
27
|
+
To get command list use help.
|
28
|
+
|
29
|
+
$ osdn help
|
30
|
+
osdn [global-options] <command> [command-options] [args]
|
31
|
+
osdn help <command>
|
32
|
+
Global Options:
|
33
|
+
-h --help Show help message. use 'help <command>' for specific command.
|
34
|
+
-v --verbose Increase log level (multiple)
|
35
|
+
-q --quiet Decrease log level (multiple)
|
36
|
+
Avaiable Commands:
|
37
|
+
help
|
38
|
+
login Login and save access token.
|
39
|
+
package Manipulate frs packages of project
|
40
|
+
release Manipulate frs releases of project
|
41
|
+
relfile Manipulate frs files of project
|
42
|
+
frs_mkdirs Make directory tree for current project release
|
43
|
+
frs_upload Upload local file tree and create package/release implicitly.
|
44
|
+
ping Test API request.
|
45
|
+
vars Get/set request environment variable.
|
46
|
+
|
47
|
+
|
48
|
+
## Contributing
|
49
|
+
|
50
|
+
Bug reports and pull requests are welcome on OSDN at https://osdn.jp/projects/osdn-codes/ticket/
|
51
|
+
|
data/lib/osdn/cli.rb
CHANGED
@@ -26,7 +26,7 @@ module OSDN; module CLI; module Command
|
|
26
26
|
def target_proj
|
27
27
|
@target_proj and return @target_proj
|
28
28
|
vars = load_variables
|
29
|
-
vars.project && !vars.project.empty? and
|
29
|
+
vars.project && !vars.project.to_s.empty? and
|
30
30
|
return vars.project
|
31
31
|
logger.fatal "No target project is specified."
|
32
32
|
exit
|
@@ -35,7 +35,7 @@ module OSDN; module CLI; module Command
|
|
35
35
|
def target_package
|
36
36
|
@target_package and return @target_package
|
37
37
|
vars = load_variables
|
38
|
-
vars.package_id && !vars.package_id.empty? and
|
38
|
+
vars.package_id && !vars.package_id.to_s.empty? and
|
39
39
|
return vars.package_id
|
40
40
|
logger.fatal "No target package is specified."
|
41
41
|
exit
|
@@ -44,7 +44,7 @@ module OSDN; module CLI; module Command
|
|
44
44
|
def target_release
|
45
45
|
@target_release and return @target_release
|
46
46
|
vars = load_variables
|
47
|
-
vars.release_id && !vars.release_id.empty? and
|
47
|
+
vars.release_id && !vars.release_id.to_s.empty? and
|
48
48
|
return vars.release_id
|
49
49
|
logger.fatal "No target release is specified."
|
50
50
|
exit
|
@@ -9,6 +9,7 @@ module OSDN; module CLI; module Command
|
|
9
9
|
#puts " --release=<project> Target release (numeric id)"
|
10
10
|
puts " -v --visibility=<public|private|hidden>"
|
11
11
|
puts " Default visibility for newly created items"
|
12
|
+
puts " --force-digest Calc local file digest forcely"
|
12
13
|
end
|
13
14
|
|
14
15
|
def run
|
@@ -18,6 +19,7 @@ module OSDN; module CLI; module Command
|
|
18
19
|
[ '--project', '-p', GetoptLong::REQUIRED_ARGUMENT ],
|
19
20
|
[ '--release', '-r', GetoptLong::REQUIRED_ARGUMENT ],
|
20
21
|
[ '--visibility', '-v', GetoptLong::REQUIRED_ARGUMENT ],
|
22
|
+
[ '--force-digest', GetoptLong::NO_ARGUMENT],
|
21
23
|
)
|
22
24
|
opts.each do |opt, arg|
|
23
25
|
case opt
|
@@ -36,6 +38,8 @@ module OSDN; module CLI; module Command
|
|
36
38
|
exit
|
37
39
|
end
|
38
40
|
@visibility = arg
|
41
|
+
when '--force-digest'
|
42
|
+
@force_digest = true
|
39
43
|
when '--dry-run'
|
40
44
|
@dry_run = true
|
41
45
|
end
|
@@ -57,6 +61,11 @@ module OSDN; module CLI; module Command
|
|
57
61
|
end
|
58
62
|
|
59
63
|
Pathname.glob(pdir + '*').sort.each do |rdir|
|
64
|
+
if !rdir.directory?
|
65
|
+
logger.warn "Skip normal file '#{rdir}' in release level"
|
66
|
+
next
|
67
|
+
end
|
68
|
+
|
60
69
|
vars = load_variables(rdir)
|
61
70
|
rinfo = nil
|
62
71
|
if vars.release_id
|
@@ -78,17 +87,30 @@ module OSDN; module CLI; module Command
|
|
78
87
|
next
|
79
88
|
end
|
80
89
|
|
81
|
-
|
82
|
-
digests =
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
90
|
+
vars = load_variables(rdir)
|
91
|
+
digests = nil
|
92
|
+
if !@force_digest && vars.local_file_info &&
|
93
|
+
vars.local_file_info[file.basename.to_s]
|
94
|
+
finfo = vars.local_file_info[file.basename.to_s]
|
95
|
+
if finfo[:size] == file.size && finfo.mtime == file.mtime
|
96
|
+
digests = vars.local_file_info[file.basename.to_s].digests
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
unless digests
|
101
|
+
logger.info "Calculating digest for #{file}..."
|
102
|
+
digests = {
|
103
|
+
sha256: hexdigest(Digest::SHA256, file),
|
104
|
+
sha1: hexdigest(Digest::SHA1, file),
|
105
|
+
md5: hexdigest(Digest::MD5, file),
|
106
|
+
}
|
107
|
+
update_variables rdir, {local_file_info: {file.basename.to_s => {digests: digests, mtime: file.mtime, size: file.size}}}
|
108
|
+
end
|
87
109
|
if remote_f = rinfo.files.find { |f| f.name == file.basename.to_s }
|
88
110
|
if digests.find { |type, dig| dig != remote_f.send("digest_#{type}") }
|
89
111
|
logger.error "#{file} was changed from remote file! Please delete remote file before uploading new one."
|
90
112
|
end
|
91
|
-
logger.
|
113
|
+
logger.info "Skip already uploaded file '#{file}'"
|
92
114
|
else
|
93
115
|
logger.info "Uploading file #{file} (#{file.size} bytes)"
|
94
116
|
if @dry_run
|
@@ -14,6 +14,7 @@ module OSDN; module CLI; module Command
|
|
14
14
|
puts " --package=<project> Target package (numeric id)"
|
15
15
|
puts " --release=<project> Target release (numeric id)"
|
16
16
|
puts " -v --visibility=<public|private|hidden>"
|
17
|
+
puts " --force-digest Calc local file digest forcely"
|
17
18
|
end
|
18
19
|
|
19
20
|
def self.description
|
@@ -27,6 +28,7 @@ module OSDN; module CLI; module Command
|
|
27
28
|
[ '--package', GetoptLong::REQUIRED_ARGUMENT ],
|
28
29
|
[ '--release', GetoptLong::REQUIRED_ARGUMENT ],
|
29
30
|
[ '--visibility', '-v', GetoptLong::REQUIRED_ARGUMENT ],
|
31
|
+
[ '--force-digest', GetoptLong::NO_ARGUMENT],
|
30
32
|
)
|
31
33
|
opts.each do |opt, arg|
|
32
34
|
case opt
|
@@ -42,6 +44,8 @@ module OSDN; module CLI; module Command
|
|
42
44
|
when '--release'
|
43
45
|
arg.empty? or
|
44
46
|
@target_release = arg
|
47
|
+
when '--force-digest'
|
48
|
+
@force_digest = true
|
45
49
|
when '--visibility'
|
46
50
|
unless %w(public private hidden).member?(arg)
|
47
51
|
logger.fatal "Invalid visibility status: #{arg}"
|
@@ -73,11 +77,27 @@ module OSDN; module CLI; module Command
|
|
73
77
|
end
|
74
78
|
file = Pathname('.') + filename
|
75
79
|
logger.debug "Calculating digest for #{file}..."
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
80
|
+
|
81
|
+
vars = load_variables(file.dirname)
|
82
|
+
digests = nil
|
83
|
+
if !@force_digest && vars.local_file_info &&
|
84
|
+
vars.local_file_info[file.basename.to_s]
|
85
|
+
finfo = vars.local_file_info[file.basename.to_s]
|
86
|
+
if finfo[:size] == file.size && finfo.mtime == file.mtime
|
87
|
+
digests = vars.local_file_info[file.basename.to_s].digests
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
unless digests
|
92
|
+
logger.info "Calculating digest for #{file}..."
|
93
|
+
digests = {
|
94
|
+
sha256: hexdigest(Digest::SHA256, file),
|
95
|
+
sha1: hexdigest(Digest::SHA1, file),
|
96
|
+
md5: hexdigest(Digest::MD5, file),
|
97
|
+
}
|
98
|
+
update_variables file.dirname, {local_file_info: {file.basename.to_s => {digests: digests, mtime: file.mtime, size: file.size}}}
|
99
|
+
end
|
100
|
+
|
81
101
|
fio = file.open
|
82
102
|
logger.level <= Logger::INFO and
|
83
103
|
OSDN::CLI._show_progress = true
|
data/lib/osdn/cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: osdn-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OSDN
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -88,6 +88,8 @@ executables:
|
|
88
88
|
extensions: []
|
89
89
|
extra_rdoc_files: []
|
90
90
|
files:
|
91
|
+
- ChangeLog
|
92
|
+
- README.md
|
91
93
|
- exe/osdn
|
92
94
|
- lib/osdn-cli.rb
|
93
95
|
- lib/osdn/cli.rb
|