osdn-cli 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
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