1 module OSDN; module CLI; module Command
4 puts "#{$0} frs_upload [opts] [target_dir]"
6 puts " -n --dry-run Do noting (use with global -v to inspect)"
7 puts " -p --project=<project> Target project (numeric id or name)"
8 #puts " --package=<project> Target package (numeric id)"
9 #puts " --release=<project> Target release (numeric id)"
10 puts " -v --visibility=<public|private|hidden>"
11 puts " Default visibility for newly created items"
16 opts = GetoptLong.new(
17 [ '--dry-run', '-n', GetoptLong::NO_ARGUMENT ],
18 [ '--project', '-p', GetoptLong::REQUIRED_ARGUMENT ],
19 [ '--release', '-r', GetoptLong::REQUIRED_ARGUMENT ],
20 [ '--visibility', '-v', GetoptLong::REQUIRED_ARGUMENT ],
22 opts.each do |opt, arg|
29 # @target_release = arg
32 # @target_package = arg
34 unless %w(public private hidden).member?(arg)
35 logger.fatal "Invalid visibility status: #{arg}"
44 @target_dir = Pathname.new(ARGV.shift || '.')
45 proj_info = api.get_project target_proj # check project existance
47 Pathname.glob(@target_dir+'*').each do |pdir|
48 unless load_variables(pdir).package_id
49 logger.info "Createing new package '#{pdir.basename}'"
50 pinfo = api.create_package target_proj, pdir.basename, visibility: @visibility
51 update_variables pdir, package_id: pinfo.id
52 $stdout.puts "New package '#{pinfo.name}' has been created; #{pinfo.url}"
55 Pathname.glob(pdir + '*').each do |rdir|
56 vars = load_variables(rdir)
59 rinfo = api.get_release target_proj, target_package(rdir), target_release(rdir)
61 logger.info "Createing new release '#{rdir.basename}'"
63 if api.respond_to? :create_reelase # TODO: remove, just typo...
64 rinfo = api.create_reelase target_proj, target_package(rdir), rdir.basename, visibility: @visibility
66 rinfo = api.create_release target_proj, target_package(rdir), rdir.basename, visibility: @visibility
68 update_variables rdir, release_id: rinfo.id
69 $stdout.puts "New release '#{rinfo.name}' has been created; #{rinfo.url}"
72 Pathname.glob(rdir + '*').each do |file|
74 logger.error "Skip direcotry #{file}"
78 if rinfo.files.find { |f| f.name == file.basename.to_s }
79 logger.warn "Skip already uploaded file '#{file}'"
81 logger.info "Uploading file #{file} (#{file.size} bytes)"
82 # TODO: show progress bar!
83 finfo = api.create_release_file target_proj, target_package(rdir), target_release(rdir), file.open, visibility: @visibility
84 logger.info "Upload completed."
85 $stdout.puts "New file '#{file}' has been uploaded; #{finfo.url}"
93 "Upload local file tree and create package/release implicitly."
98 @target_proj and return @target_proj
99 vars = load_variables(@target_dir)
100 vars.project && !vars.project.empty? and
102 logger.fatal "No target project is specified."
106 def target_package(dir)
107 @target_package and return @target_package
108 vars = load_variables(dir)
109 vars.package_id && !vars.package_id.to_s.empty? and
110 return vars.package_id
111 logger.fatal "No target package is specified."
115 def target_release(dir)
116 @target_release and return @target_release
117 vars = load_variables(dir)
118 vars.release_id && !vars.release_id.to_s.empty? and
119 return vars.release_id
120 logger.fatal "No target release is specified."
125 OSDNClient::ProjectApi.new