-require 'digest'
-require 'ethon'
-
-module OSDN; module CLI; module Command
- class FrsUpload < Base
- @@_show_progress = false
- def self._show_progress
- @@_show_progress
- end
- def self._show_progress=(v)
- need_reset = (!!@@_show_progress != !!v)
- @@_show_progress = v
- need_reset and _reset_all_typhoeus_pool
- end
-
- def self._reset_all_typhoeus_pool
- first_easyid = nil
- while true
- e = Typhoeus::Pool.get
- Typhoeus::Pool.release(e)
- e.__id__ == first_easyid and break
- first_easyid ||= e.__id__
- end
- end
- end
-end; end; end
-
-module Ethon
- class Easy
- module Callbacks
- alias_method :set_callbacks_orig, :set_callbacks
- def set_callbacks
- set_callbacks_orig
- if OSDN::CLI::Command::FrsUpload._show_progress
- Curl.set_option(:noprogress, false, handle)
- else
- Curl.set_option(:noprogress, true, handle)
- end
- end
- end
- end
-end
-
module OSDN; module CLI; module Command
class FrsUpload < Base
def help
@target_dir = Pathname.new(ARGV.shift || '.')
proj_info = api.get_project target_proj # check project existance
- Pathname.glob(@target_dir+'*').each do |pdir|
+ Pathname.glob(@target_dir+'*').sort.each do |pdir|
unless load_variables(pdir).package_id
logger.info "Createing new package '#{pdir.basename}'"
if @dry_run
$stdout.puts "New package '#{pinfo.name}' has been created; #{pinfo.url}"
end
- Pathname.glob(pdir + '*').each do |rdir|
+ Pathname.glob(pdir + '*').sort.each do |rdir|
vars = load_variables(rdir)
rinfo = nil
if vars.release_id
$stdout.puts "New release '#{rinfo.name}' has been created; #{rinfo.url}"
end
- Pathname.glob(rdir + '*').each do |file|
+ Pathname.glob(rdir + '*').sort.each do |file|
if file.directory?
logger.error "Skip direcotry #{file}"
next
finfo = Hashie::Mash.new id: '(dry-run)', url: '(dry-run)'
else
logger.level <= Logger::INFO and
- self.class._show_progress = true
+ OSDN::CLI._show_progress = true
fio = file.open
logger.info "Starting upload #{file}..."
finfo = api.create_release_file target_proj, target_package(rdir), target_release(rdir), fio, visibility: @visibility
fio.close
- self.class._show_progress = false
+ OSDN::CLI._show_progress = false
if digests.find { |type, dig| dig != finfo.send("digest_#{type}") }
logger.error "File digests are mismatch! Upload file #{file} may be broken! Please check."
else
def api
OSDNClient::ProjectApi.new
end
-
- def hexdigest(klass, file)
- fio = file.open
- dig = klass.new
- while buf = fio.read(1024*1024) and buf.length > 0
- dig << buf
- end
- fio.close
- dig.hexdigest
- end
-
end
end; end; end