master_delivery 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d57694762f369b51254410b1275d131512d6ee485a7ead16ad8287e8ace819a5
4
- data.tar.gz: 1adbdc9c1b0340d42c9c226b6ea6a7b82fb1954b6fb280cbf8e8f1b8778e8712
3
+ metadata.gz: b42150430f655e38f3b1c525f8a69e44131f0172d284caa86a9877797d347668
4
+ data.tar.gz: '05964dc0d64be2f97cdeb94644a7f54a96e543f904c6f71e2f392af9256ad24b'
5
5
  SHA512:
6
- metadata.gz: dcd1c969e89bc5224b898acc9081ed95e9ce5cddd14ef4a7c26cf56d68e07f864a61ac948d69c76d61dc0c7a50a2ade1ec41ab7b39a9704c27fe96dfe1331a6e
7
- data.tar.gz: aa87c276ff2bbc72c0b5fe3e8e0fd14c820b9afa2917f531dadc5e965c529303365940c01bb35f7666e93b3737c304e21c94fcd29321ec27570124628d9a5507
6
+ metadata.gz: bae487838a7e4a204bcac6defefe30d2f52e3e9491938af723cd2d0b434fe129eb830ed0029d13f23f71ee1eac35d660cac2333ddf4755e7674b9ff4acb04345
7
+ data.tar.gz: f6f964a1d3a613e9b8a5c4eeb985b065694dd46de861e81a273180e364d787acf573417e160009184aaccbc6f60bf67648a80515d73c1ca90c38e2375e306eb5
data/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [v1.0.6](https://github.com/shinyaohtani/master_delivery/tree/v1.0.6) (2020-05-06)
4
+
5
+ [Full Changelog](https://github.com/shinyaohtani/master_delivery/compare/v1.0.5...v1.0.6)
6
+
7
+ - Verbose mode has been introduced to trace delivery commands!
8
+
9
+
10
+ **Implemented enhancements:**
11
+
12
+ - Option to carefully trace delivery commands one by one [\#5](https://github.com/shinyaohtani/master_delivery/issues/5)
13
+
14
+ **Merged pull requests:**
15
+
16
+ - Feature/\#5 trace delivery commands [\#23](https://github.com/shinyaohtani/master_delivery/pull/23) ([shinyaohtani](https://github.com/shinyaohtani))
17
+
3
18
  ## [v1.0.5](https://github.com/shinyaohtani/master_delivery/tree/v1.0.5) (2020-05-03)
4
19
 
5
20
  [Full Changelog](https://github.com/shinyaohtani/master_delivery/compare/v1.0.4...v1.0.5)
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- master_delivery (1.0.5)
4
+ master_delivery (1.0.6)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -44,6 +44,11 @@ module MasterDelivery
44
44
  Suppress non-error messages
45
45
  (default: --no-quiet)
46
46
  QUIET
47
+ DESC_VERBOSE = <<~VERBOSE
48
+ Process actual commands for file operations, such as
49
+ moving files and creating folders, one by one.
50
+ (default: --no-verbose)
51
+ VERBOSE
47
52
  DESC_SKIP_CONF = <<~SKIP_CONF
48
53
  Skip confirmation. It is recommended to execute
49
54
  the command carefully without skipping confirmation.
@@ -89,17 +94,23 @@ module MasterDelivery
89
94
  return unless check_param_consistency
90
95
 
91
96
  fix_param_paths(%i[master delivery backup])
92
- master = @params[:master]
93
- md = MasterDelivery.new(File.dirname(master), @params[:backup])
94
- arg_set = [File.basename(master), @params[:delivery]]
95
- return unless md.confirm(*arg_set, @params.slice(:type, :quiet, :dryrun, :yes))
97
+ basics = delivery_basics
98
+ md = MasterDelivery.new(basics[:master_dir], basics[:backup_root])
99
+ return unless md.confirm(basics, @params.slice(:type, :quiet, :dryrun, :yes))
96
100
 
97
- md.deliver(*arg_set, **@params.slice(:type, :dryrun))
98
- puts 'done!' unless @params[:quiet]
101
+ mfiles, _tmpdir = md.deliver(basics, **@params.slice(:type, :dryrun, :verbose))
102
+ puts "done! (#{mfiles.size} master files are delivered.)" unless @params[:quiet]
99
103
  end
100
104
 
101
105
  private
102
106
 
107
+ def delivery_basics
108
+ { master_dir: File.dirname(@params[:master]),
109
+ master_id: File.basename(@params[:master]),
110
+ delivery_root: @params[:delivery],
111
+ backup_root: @params[:backup] }
112
+ end
113
+
103
114
  def define_options(opts) # rubocop:disable Metrics/AbcSize
104
115
  opts.version = VERSION
105
116
  opts.separator ' Required:'
@@ -111,10 +122,10 @@ module MasterDelivery
111
122
  opts.on('-b [BACKUP_ROOT]', '--backup [BACKUP_ROOT]', *DESC_BACKUP_ROOT.split(/\R/)) { |v| v }
112
123
  opts.on('-D', '--[no-]dryrun', *DESC_DRYRUN.split(/\R/)) { |v| v }
113
124
  opts.on('-q', '--[no-]quiet', *DESC_QUIET.split(/\R/)) { |v| v }
125
+ opts.on('-v', '--[no-]verbose', *DESC_VERBOSE.split(/\R/)) { |v| v }
114
126
  opts.on('-y', '--[no-]yes', *DESC_SKIP_CONF.split(/\R/)) { |v| v }
115
127
  opts.separator ''
116
128
  opts.separator ' Common options:'
117
- # opts.on('-v', '--verbose', 'Verbose mode. default: no') { |v| v }
118
129
  opts.on_tail('-h', '--help', 'Show this message') do
119
130
  puts opts
120
131
  exit
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MasterDelivery
4
- VERSION = '1.0.5'
4
+ VERSION = '1.0.6'
5
5
  DESCRIPTION = <<~DESC
6
6
  Deliver all master files managed in a single master snapshot directory
7
7
  into the specified directory while maintaining the hierarchy of the
@@ -38,7 +38,7 @@ module MasterDelivery
38
38
 
39
39
  # @param master_id [String] Top directory name of master
40
40
  #
41
- # @param target_prefix [String] Files will be delivered to this prefix location.
41
+ # @param delivery_root [String] Files will be delivered to this prefix location.
42
42
  # If this prefix is empty, it will be placed in the root directory.
43
43
  # This mechanism saves you from having to unnecessarily deepen the directory
44
44
  # hierarchy under master_id.
@@ -46,36 +46,38 @@ module MasterDelivery
46
46
  # Example of prefix
47
47
  # master_id: MID
48
48
  # master: $master_root/MID/a/b/readme.md
49
- # target_prefix: /Users/xxx/yyy
49
+ # delivery_root: /Users/xxx/yyy
50
50
  # delivery: /Users/xxx/yyy/a/b/readme.md
51
51
  #
52
52
  # Example of no-prefix
53
53
  # master_id: MID
54
54
  # master: $master_root/MID/a/b/readme.md
55
- # target_prefix: (empty)
55
+ # delivery_root: (empty)
56
56
  # delivery: /a/b/readme.md
57
57
  #
58
58
  # @param type [symbol] only link (:symbolic_link) or copy master (:regular_file)
59
59
  # @param dryrun [boolean] if set this false, FileUtils::DryRun will be used.
60
60
  # note: Even if dryrun: true, @backup_dir is actually created! (for name-consistency)
61
- def deliver(master_id, target_prefix, type: :symbolic_link, dryrun: false)
61
+ def deliver(basics, type: :symbolic_link, dryrun: false, verbose: false)
62
62
  FileUtils.mkdir_p(@backup_root)
63
63
  utils = dryrun ? FileUtils::DryRun : FileUtils
64
64
 
65
- backup_dir = Dir.mktmpdir("#{master_id}-original-", @backup_root)
66
- master_files(master_id).each do |master|
67
- tfile = move_to_backup(master, utils, master_id, target_prefix, backup_dir)
68
- deliver_to_target(master, utils, tfile, type)
65
+ backup_dir = Dir.mktmpdir("#{basics[:master_id]}-original-", @backup_root)
66
+ puts "mkdir -p #{backup_dir}" if verbose
67
+ mfiles = master_files(basics[:master_id])
68
+ mfiles.each do |master|
69
+ tfile = move_to_backup(master, utils, basics, backup_dir, verbose)
70
+ deliver_to_target(master, utils, tfile, type, verbose)
69
71
  end
70
- backup_dir
72
+ [mfiles, backup_dir]
71
73
  end
72
74
 
73
75
  # @param params [Hash] :type, :dryrun, :yes, :quiet
74
- def confirm(master_id, target_prefix, params)
76
+ def confirm(basics, params)
75
77
  unless params[:quiet]
76
78
  puts MSG_CONFIRMATION_INTRO unless params[:yes]
77
- print_params(master_id, target_prefix, params.slice(:type, :dryrun))
78
- print_sample(master_id, target_prefix)
79
+ print_params(basics, params.slice(:type, :dryrun))
80
+ print_sample(basics)
79
81
  end
80
82
  print MSG_CONFIRMATION.chomp unless params[:yes] # use print instead of puts for '\n'
81
83
  return true if params[:yes] || gets.chomp == 'y'
@@ -87,42 +89,42 @@ module MasterDelivery
87
89
  private
88
90
 
89
91
  # Move a master file currently used to backup/
90
- def move_to_backup(master, utils, master_id, target_prefix, backup_dir)
91
- backupfiledir = File.dirname(backup_file_path(master, master_id, backup_dir))
92
- utils.mkdir_p(backupfiledir)
93
- tfile = target_file_path(master, master_id, target_prefix)
94
- utils.mv(tfile, backupfiledir, force: true)
92
+ def move_to_backup(master, utils, basics, backup_dir, verbose)
93
+ backupfiledir = File.dirname(backup_file_path(master, basics[:master_id], backup_dir))
94
+ utils.mkdir_p(backupfiledir, verbose: verbose)
95
+ tfile = target_file_path(master, basics)
96
+ utils.mv(tfile, backupfiledir, force: true, verbose: verbose)
95
97
  tfile
96
98
  end
97
99
 
98
100
  # Deliver a link to a master (or a copy of a master) in the appropriate directory
99
- def deliver_to_target(master, utils, tfile, type)
101
+ def deliver_to_target(master, utils, tfile, type, verbose)
100
102
  tfiledir = File.dirname(tfile)
101
- utils.mkdir_p(tfiledir)
103
+ utils.mkdir_p(tfiledir, verbose: verbose)
102
104
  case type
103
105
  when :symbolic_link
104
- utils.ln_s(master, tfiledir)
106
+ utils.ln_s(master, tfiledir, verbose: verbose)
105
107
  when :regular_file
106
- utils.cp(master, tfiledir)
108
+ utils.cp(master, tfiledir, verbose: verbose)
107
109
  end
108
110
  end
109
111
 
110
112
  # @param params [Hash] :type, :dryrun
111
- def print_params(master_id, target_prefix, params)
112
- mfiles = master_files(master_id)
113
- msg = "(-m) MASTER_DIR: -m #{@master_root}/#{master_id} (#{mfiles.size} master files)\n"
114
- msg += "(-d) DELIVER_ROOT: -d #{File.expand_path(target_prefix)}\n"
113
+ def print_params(basics, params)
114
+ mfiles = master_files(basics[:master_id])
115
+ msg = "(-m) MASTER_DIR: -m #{@master_root}/#{basics[:master_id]} (#{mfiles.size} master files)\n"
116
+ msg += "(-d) DELIVER_ROOT: -d #{File.expand_path(basics[:delivery_root])}\n"
115
117
  msg += "(-t) DELIVER_TYPE: -t #{params[:type]}\n"
116
118
  msg += "(-b) BACKUP_ROOT: -b #{@backup_root}\n"
117
119
  msg += "(-D) DRYRUN: #{params[:dryrun] ? '--dryrun' : '--no-dryrun'}\n"
118
120
  puts msg
119
121
  end
120
122
 
121
- def print_sample(master_id, target_prefix)
122
- mfiles = master_files(master_id)
123
- sample_target = target_file_path(mfiles[0], master_id, target_prefix)
124
- sample_backup = backup_file_path(mfiles[0], master_id,
125
- @backup_root + "/#{master_id}-original-XXXX")
123
+ def print_sample(basics)
124
+ mfiles = master_files(basics[:master_id])
125
+ sample_target = target_file_path(mfiles[0], basics)
126
+ sample_backup = backup_file_path(mfiles[0], basics[:master_id],
127
+ @backup_root + "/#{basics[:master_id]}-original-XXXX")
126
128
  puts <<~SAMPLE
127
129
 
128
130
  Sample (from #{mfiles.size} master files):
@@ -152,8 +154,8 @@ module MasterDelivery
152
154
  Pathname.new(path).cleanpath.to_s
153
155
  end
154
156
 
155
- def target_file_path(master, master_id, target_prefix)
156
- path = relative_master_path(master, master_id).prepend(File.expand_path(target_prefix))
157
+ def target_file_path(master, basics)
158
+ path = relative_master_path(master, basics[:master_id]).prepend(File.expand_path(basics[:delivery_root]))
157
159
  Pathname.new(path).cleanpath.to_s
158
160
  end
159
161
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: master_delivery
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shinya Ohtani (shinyaohtani@github)
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-03 00:00:00.000000000 Z
11
+ date: 2020-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler