4 module OSDN; module CLI; module Command
7 puts "#{$0} frs_mkdirs [opts] [target_dir]"
9 puts " -p --project=<project> Target project (numeric id or name)"
10 #puts " --package=<package_id> Target package (numeric id)"
11 #puts " --release=<release_id> Target release (numeric id)"
16 opts = GetoptLong.new(
17 [ '--dry-run', '-n', GetoptLong::NO_ARGUMENT ],
18 [ '--project', '-p', GetoptLong::REQUIRED_ARGUMENT ],
20 opts.each do |opt, arg|
28 proj_info = api.get_project target_proj # check project existance
30 target_dir = Pathname.new(ARGV.shift || '.')
31 FileUtils.mkdir_p target_dir
32 update_variables target_dir, project: target_proj
34 logger.debug "Getting Package list..."
35 packages = api.list_packages target_proj
36 logger.debug "Making each package directry"
38 packages.each do |package|
39 pname = fsname(package.name)
40 if pname != package.name
41 logger.warn "Package name '#{package.name}' is not suitable for filesystem, using '#{pname}'."
43 logger.info "Making directory for package #{pname}"
44 pdir = target_dir + pname
45 FileUtils.mkdir_p(pdir)
46 update_variables pdir, package_id: package.id
47 package.releases.each do |release|
48 rname = fsname(release.name)
49 if rname != release.name
50 logger.warn "Release name '#{release.name}' is not suitable for filesystem, using '#{rname}'."
52 logger.info "Making directory for release #{rname}"
54 FileUtils.mkdir_p(rdir)
55 update_variables rdir, release_id: release.id
61 "Make directory tree for current project release"
66 @target_proj and return @target_proj
68 vars.project && !vars.project.empty? and
70 logger.fatal "No target project is specified."
75 OSDNClient::ProjectApi.new
79 name = name.to_s.tr('/', '-')