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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 15620596e4be4a22b244d898375468629fac7e6a
4
- data.tar.gz: c78f3fc74f01743d248fb186e81f03ac64f8cd97
3
+ metadata.gz: ff7266f193439e9ad64523af16d9e3564381440d
4
+ data.tar.gz: d359081a75b1a0442f7cf6f1d27e987de68639e2
5
5
  SHA512:
6
- metadata.gz: 4406e92748c0a7604e36881c60416817c1d47150befd9894c59f30be5f67219e473c53120c95dd2cc070821b6cbe0291804966f1ea4802356550e7a328d4afd7
7
- data.tar.gz: 1a00dadd7ca9103e737c38ecdfefd066ed42e3b87e35a102459166e37cf7b11f2dd683ea416caf7df88c9b7b9bfd15b95f86b30d3ff41609fb0d0370e03705cc
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
@@ -169,7 +169,7 @@ module OSDN
169
169
  end
170
170
 
171
171
  def update_variables(dir, vars)
172
- write_variables(load_variables(dir, false).merge(vars), dir)
172
+ write_variables(load_variables(dir, false).deep_merge(vars), dir)
173
173
  end
174
174
 
175
175
  private
@@ -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
- logger.debug "Calculating digest for #{file}..."
82
- digests = {
83
- sha256: hexdigest(Digest::SHA256, file),
84
- sha1: hexdigest(Digest::SHA1, file),
85
- md5: hexdigest(Digest::MD5, file),
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.warn "Skip already uploaded file '#{file}'"
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
- digests = {
77
- sha256: hexdigest(Digest::SHA256, file),
78
- sha1: hexdigest(Digest::SHA1, file),
79
- md5: hexdigest(Digest::MD5, file),
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
@@ -1,5 +1,5 @@
1
1
  module OSDN
2
2
  module CLI
3
- VERSION = "0.0.7"
3
+ VERSION = "0.0.8"
4
4
  end
5
5
  end
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.7
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-22 00:00:00.000000000 Z
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