OSDN Git Service

Update to compat API change (no digest infomation when file uploaded).
[osdn-codes/osdn-cli.git] / lib / osdn / cli / command / relfile.rb
index de060ac..7ba54da 100644 (file)
@@ -3,6 +3,8 @@ require 'pathname'
 
 module OSDN; module CLI; module Command
   class Relfile < FrsBase
+    attr_accessor :target_proj, :target_package, :target_release, :visibility, :force_digest, :show_progress
+
     def help
       puts "#{$0} relfile [opts] [list]"
       puts "#{$0} relfile [opts] create <target-file> [target-files...]"
@@ -93,16 +95,14 @@ module OSDN; module CLI; module Command
       end
     end
 
-    def create_one(filename)
+    def calc_file_digest(filename)
       file = Pathname('.') + filename
-      logger.debug "Calculating digest for #{file}..."
-
       vars = load_variables(file.dirname)
       digests = nil
       if !@force_digest && vars.local_file_info &&
-         vars.local_file_info[file.basename.to_s]
+        vars.local_file_info[file.basename.to_s]
         finfo = vars.local_file_info[file.basename.to_s]
-        if finfo[:size] == file.size && finfo.mtime == file.mtime
+        if finfo.filesize == file.size && finfo.mtime == file.mtime
           digests = vars.local_file_info[file.basename.to_s].digests
         end
       end
@@ -114,19 +114,24 @@ module OSDN; module CLI; module Command
           sha1:   hexdigest(Digest::SHA1, file),
           md5:    hexdigest(Digest::MD5, file),
         }
-        update_variables file.dirname, {local_file_info: {file.basename.to_s => {digests: digests, mtime: file.mtime, size: file.size}}}
+        update_variables file.dirname, {local_file_info: {file.basename.to_s => {digests: digests, mtime: file.mtime, filesize: file.size}}}
       end
+    end
 
+    def create_one(filename)
+      file = Pathname('.') + filename
+      calc_file_digest file
+      vars = load_variables(file.dirname)
       fio = file.open
       logger.level <= Logger::INFO && @show_progress != false || @show_progress and
         OSDN::CLI._show_progress = true
-      logger.info "Starting upload #{file}..."
+      logger.info "Starting upload #{file} (#{file.size} bytes)..."
       max_upload_tries = 5
       upload_tries = 0
-      f = nil
+      remote_file = nil
       begin
         upload_tries += 1
-        f = api.create_release_file target_proj, target_package, target_release, fio, visibility: @visibility
+        remote_file = api.create_release_file target_proj, target_package, target_release, fio, visibility: @visibility
       rescue OSDNClient::ApiError => e
         if max_upload_tries - upload_tries <= 0 
           logger.error "Max upload attempts (#{max_upload_tries}) has been exceeded, give up!"
@@ -144,12 +149,15 @@ module OSDN; module CLI; module Command
         OSDN::CLI._show_progress = false
       end
       
-      if digests.find { |type, dig| dig != f.send("digest_#{type}") }
-        logger.error "File digests are mismatch! Upload file #{file} may be broken! Please check."
+      if vars.local_file_info[file.basename.to_s].digests.find { |type, dig| rd = remote_file.send("digest_#{type}"); rd && rd != '' && rd != dig }
+        logger.error "File digest mismatch! Uploaded file #{file} may be broken! Please check."
+      elsif file.size != remote_file.size
+        logger.error "File size mismatch! Uploaded file #{file} may be broken! Please check."
       else
         logger.info "Upload complete."
       end
-      puts format_file(f)
+      puts format_file(remote_file)
+      remote_file
     end
 
     def update