OSDN Git Service

Add check for remote package and release existance.
[osdn-codes/osdn-cli.git] / lib / osdn / cli / command / frs_upload.rb
index bbe1678..64349c6 100644 (file)
@@ -49,7 +49,23 @@ module OSDN; module CLI; module Command
       proj_info = api.get_project target_proj # check project existance
 
       Pathname.glob(@target_dir+'*').sort.each do |pdir|
-        unless load_variables(pdir).package_id
+        if cur_pkgid = load_variables(pdir).package_id
+          # check package existance on server
+          begin
+            api.get_package target_proj, target_package(pdir)
+          rescue OSDNClient::ApiError => e
+            begin
+              err = JSON.parse(e.response_body)
+            rescue
+              raise e
+            end
+            if err['status'] == 404
+              logger.warn "Package ##{cur_pkgid} has been deleted on server and local directory '#{pdir}' remains. You can delete the local directory or delete '#{pdir}/.osdn.vars' file to create a package again with new ID."
+              next
+            end
+            raise e
+          end
+        else
           logger.info "Createing new package '#{pdir.basename}'"
           if @dry_run
             pinfo = Hashie::Mash.new id: '(dry-run)', name: pdir.basename, url: '(dry-run)'
@@ -69,7 +85,20 @@ module OSDN; module CLI; module Command
           vars = load_variables(rdir)
           rinfo = nil
           if vars.release_id
-            rinfo = api.get_release target_proj, target_package(rdir), target_release(rdir)
+            begin
+              rinfo = api.get_release target_proj, target_package(rdir), target_release(rdir)
+            rescue OSDNClient::ApiError => e
+              begin
+                err = JSON.parse(e.response_body)
+              rescue
+                raise e
+              end
+              if err['status'] == 404
+                logger.warn "Release ##{vars.release_id} has been deleted on server and local directory '#{rdir}' remains. You can delete the local directory or delete '#{rdir}/.osdn.vars' file to create a release again with new ID."
+                next
+              end
+              raise e
+            end
           else vars.release_id
             logger.info "Createing new release '#{rdir.basename}'"
             if @dry_run