bookbindery 5.0.1 → 6.0.0
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 +4 -4
- data/bookbinder.gemspec +1 -1
- data/lib/bookbinder/code_example_reader.rb +3 -2
- data/lib/bookbinder/commands/collection.rb +15 -16
- data/lib/bookbinder/config/configuration.rb +19 -2
- data/lib/bookbinder/dita_command_creator.rb +8 -11
- data/lib/bookbinder/ingest/git_accessor.rb +7 -19
- data/lib/bookbinder/ingest/section_repository.rb +0 -1
- data/lib/bookbinder/{local_file_system_accessor.rb → local_filesystem_accessor.rb} +1 -1
- data/lib/bookbinder/preprocessing/dita_preprocessor.rb +44 -30
- data/lib/bookbinder/values/section.rb +0 -1
- data/master_middleman/bookbinder_helpers.rb +9 -3
- metadata +3 -4
- data/lib/bookbinder/commands/tag.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c73a7a9a4f263f7730ce38c6e09b98ae457a9571
|
4
|
+
data.tar.gz: bbd94c2710ce6052e2ad401525b9e024a584245b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6dbef842e82feb7bb9e4ab4dd273cc25bee08d6fb0ce4119f041c304e461ecca957269b2a96b96677e8ab03e8bfb05579654a9b47f1ff4cebe3e82723d76e5a
|
7
|
+
data.tar.gz: c6331e3c72ee6a989f26b879d1234f2e9ae1d809b10c50bc6e2e8e633157ee155d6ffa97b7243e1d9f7944b18d532d0ed1eaa517fb7876f3fae6377db8883e2f
|
data/bookbinder.gemspec
CHANGED
@@ -2,7 +2,7 @@ require 'base64'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'bookbindery'
|
5
|
-
s.version = '
|
5
|
+
s.version = '6.0.0'
|
6
6
|
s.summary = 'Markdown to Rackup application documentation generator'
|
7
7
|
s.description = 'A command line utility to be run in Book repositories to stitch together their constituent Markdown repos into a static-HTML-serving application'
|
8
8
|
s.authors = ['Mike Grafton', 'Lucas Marks', 'Gavin Morgan', 'Nikhil Gajwani', 'Dan Wendorf', 'Brenda Chan', 'Matthew Boedicker', 'Frank Kotsianas', 'Elena Sharma', 'Christa Hartsock']
|
@@ -15,7 +15,7 @@ module Bookbinder
|
|
15
15
|
if working_copy.available?
|
16
16
|
process_snippet(marker, working_copy)
|
17
17
|
else
|
18
|
-
out
|
18
|
+
out.puts(" skipping (not found) #{working_copy.full_name}")
|
19
19
|
''
|
20
20
|
end
|
21
21
|
end
|
@@ -67,7 +67,8 @@ module Bookbinder
|
|
67
67
|
def find_text(start_path, pattern)
|
68
68
|
fs.find_files_recursively(start_path).
|
69
69
|
lazy.
|
70
|
-
|
70
|
+
select {|path| fs.file_exist?(path) }.
|
71
|
+
map {|path| fs.read(path) }.
|
71
72
|
map {|contents|
|
72
73
|
begin
|
73
74
|
contents.scan(pattern)
|
@@ -13,7 +13,7 @@ require_relative '../dita_html_to_middleman_formatter'
|
|
13
13
|
require_relative '../html_document_manipulator'
|
14
14
|
require_relative '../ingest/cloner_factory'
|
15
15
|
require_relative '../ingest/section_repository'
|
16
|
-
require_relative '../
|
16
|
+
require_relative '../local_filesystem_accessor'
|
17
17
|
require_relative '../middleman_runner'
|
18
18
|
require_relative '../postprocessing/sitemap_writer'
|
19
19
|
require_relative '../preprocessing/dita_preprocessor'
|
@@ -60,7 +60,7 @@ module Bookbinder
|
|
60
60
|
def standard_commands
|
61
61
|
@standard_commands ||= [
|
62
62
|
Commands::Generate.new(
|
63
|
-
|
63
|
+
local_filesystem_accessor,
|
64
64
|
sheller,
|
65
65
|
Dir.pwd,
|
66
66
|
streams
|
@@ -71,7 +71,6 @@ module Bookbinder
|
|
71
71
|
push_local_to_staging,
|
72
72
|
Commands::PushToProd.new(streams, logger, configuration_fetcher, Dir.mktmpdir),
|
73
73
|
Commands::RunPublishCI.new(bind, push_local_to_staging, build_and_push_tarball),
|
74
|
-
Commands::Tag.new(streams, configuration_fetcher, version_control_system),
|
75
74
|
Commands::UpdateLocalDocRepos.new(
|
76
75
|
streams,
|
77
76
|
configuration_fetcher,
|
@@ -91,19 +90,19 @@ module Bookbinder
|
|
91
90
|
OutputLocations.new(final_app_dir: final_app_directory, context_dir: File.absolute_path('.')),
|
92
91
|
configuration_fetcher,
|
93
92
|
Config::ArchiveMenuConfiguration.new(loader: config_loader, config_filename: 'bookbinder.yml'),
|
94
|
-
|
93
|
+
local_filesystem_accessor,
|
95
94
|
runner,
|
96
95
|
Postprocessing::SitemapWriter.build(logger, final_app_directory, sitemap_port),
|
97
96
|
Preprocessing::Preprocessor.new(
|
98
97
|
Preprocessing::DitaPreprocessor.new(
|
99
|
-
DitaHtmlToMiddlemanFormatter.new(
|
100
|
-
|
98
|
+
DitaHtmlToMiddlemanFormatter.new(local_filesystem_accessor, subnav_formatter, html_document_manipulator),
|
99
|
+
local_filesystem_accessor,
|
101
100
|
DitaCommandCreator.new(ENV['PATH_TO_DITA_OT_LIBRARY']),
|
102
101
|
sheller
|
103
102
|
),
|
104
|
-
Preprocessing::LinkToSiteGenDir.new(
|
103
|
+
Preprocessing::LinkToSiteGenDir.new(local_filesystem_accessor),
|
105
104
|
),
|
106
|
-
Ingest::ClonerFactory.new(streams,
|
105
|
+
Ingest::ClonerFactory.new(streams, local_filesystem_accessor, version_control_system),
|
107
106
|
Ingest::SectionRepository.new,
|
108
107
|
directory_preparer
|
109
108
|
)
|
@@ -116,8 +115,8 @@ module Bookbinder
|
|
116
115
|
output_locations: OutputLocations.new(final_app_dir: final_app_directory, context_dir: File.absolute_path('.')),
|
117
116
|
config_fetcher: configuration_fetcher,
|
118
117
|
config_decorator: Config::ArchiveMenuConfiguration.new(loader: config_loader, config_filename: 'bookbinder.yml'),
|
119
|
-
file_system_accessor:
|
120
|
-
preprocessor: Preprocessing::Preprocessor.new(Preprocessing::LinkToSiteGenDir.new(
|
118
|
+
file_system_accessor: local_filesystem_accessor,
|
119
|
+
preprocessor: Preprocessing::Preprocessor.new(Preprocessing::LinkToSiteGenDir.new(local_filesystem_accessor)),
|
121
120
|
cloner: local_file_system_cloner,
|
122
121
|
section_repository: Ingest::SectionRepository.new,
|
123
122
|
directory_preparer: directory_preparer
|
@@ -142,7 +141,7 @@ module Bookbinder
|
|
142
141
|
|
143
142
|
def configuration_fetcher
|
144
143
|
@configuration_fetcher ||= Config::Fetcher.new(
|
145
|
-
Config::Validator.new(
|
144
|
+
Config::Validator.new(local_filesystem_accessor),
|
146
145
|
config_loader,
|
147
146
|
Config::RemoteYamlCredentialProvider.new(logger, version_control_system)
|
148
147
|
).tap do |fetcher|
|
@@ -155,7 +154,7 @@ module Bookbinder
|
|
155
154
|
end
|
156
155
|
|
157
156
|
def directory_preparer
|
158
|
-
Commands::BindComponents::DirectoryPreparer.new(
|
157
|
+
Commands::BindComponents::DirectoryPreparer.new(local_filesystem_accessor)
|
159
158
|
end
|
160
159
|
|
161
160
|
def final_app_directory
|
@@ -170,8 +169,8 @@ module Bookbinder
|
|
170
169
|
@html_document_manipulator ||= HtmlDocumentManipulator.new
|
171
170
|
end
|
172
171
|
|
173
|
-
def
|
174
|
-
@
|
172
|
+
def local_filesystem_accessor
|
173
|
+
@local_filesystem_accessor ||= LocalFilesystemAccessor.new
|
175
174
|
end
|
176
175
|
|
177
176
|
def sheller
|
@@ -183,11 +182,11 @@ module Bookbinder
|
|
183
182
|
end
|
184
183
|
|
185
184
|
def runner
|
186
|
-
MiddlemanRunner.new(
|
185
|
+
MiddlemanRunner.new(local_filesystem_accessor, sheller)
|
187
186
|
end
|
188
187
|
|
189
188
|
def local_file_system_cloner
|
190
|
-
Ingest::LocalFilesystemCloner.new(streams,
|
189
|
+
Ingest::LocalFilesystemCloner.new(streams, local_filesystem_accessor, File.expand_path('..'))
|
191
190
|
end
|
192
191
|
end
|
193
192
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require_relative '../ingest/destination_directory'
|
1
2
|
require_relative '../ingest/repo_identifier'
|
2
3
|
require_relative 'section_config'
|
3
4
|
|
@@ -32,18 +33,34 @@ module Bookbinder
|
|
32
33
|
end
|
33
34
|
|
34
35
|
def dita_sections(input_config)
|
35
|
-
|
36
|
+
dita_sections = input_config['dita_sections']
|
37
|
+
(dita_sections || []).map { |dita_section|
|
36
38
|
dita_section.merge(
|
37
39
|
'preprocessor_config' => {
|
38
40
|
'ditamap_location' => dita_section['ditamap_location'],
|
39
41
|
'ditaval_location' => dita_section['ditaval_location']
|
40
42
|
},
|
41
|
-
'subnav_template' =>
|
43
|
+
'subnav_template' => dita_subnav_template(dita_sections, dita_section)
|
42
44
|
).reject { |k, _|
|
43
45
|
%w(ditamap_location ditaval_location).include?(k)
|
44
46
|
}
|
45
47
|
}
|
46
48
|
end
|
49
|
+
|
50
|
+
def dita_subnav_template(all_sections, current_section)
|
51
|
+
subnav_sections = all_sections.select { |section| section['ditamap_location'] }
|
52
|
+
if subnav_sections.empty?
|
53
|
+
nil
|
54
|
+
elsif subnav_sections.one?
|
55
|
+
"dita_subnav"
|
56
|
+
else
|
57
|
+
subnav_section = subnav_sections.include?(current_section) ? current_section : subnav_sections.first
|
58
|
+
dest_dir = Ingest::DestinationDirectory.new(
|
59
|
+
subnav_section.fetch('repository', {})['name'], subnav_section['directory'])
|
60
|
+
|
61
|
+
dest_dir ? "dita_subnav_#{dest_dir}" : "dita_subnav"
|
62
|
+
end
|
63
|
+
end
|
47
64
|
end
|
48
65
|
|
49
66
|
def initialize(config)
|
@@ -40,11 +40,7 @@ module Bookbinder
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def filter(ditaval_path)
|
43
|
-
|
44
|
-
{ 'args.filter' => ditaval_path }
|
45
|
-
else
|
46
|
-
{}
|
47
|
-
end
|
43
|
+
ditaval_path ? { 'args.filter' => ditaval_path } : {}
|
48
44
|
end
|
49
45
|
|
50
46
|
def base_flags
|
@@ -59,18 +55,19 @@ module Bookbinder
|
|
59
55
|
|
60
56
|
def optional_flags(flags_str)
|
61
57
|
flags = flags_str ? flags_str.split(" ") : []
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
58
|
+
{}.tap do |h|
|
59
|
+
flags.each do |f|
|
60
|
+
k,v = f.split('=')
|
61
|
+
h[k] = v
|
62
|
+
raise MissingDitaOTFlagValue.new("The DITA-flag '#{k}' that you passed is missing a value. Please pass your DITA option in the format '#{k}=<value>'.") unless v
|
63
|
+
end
|
67
64
|
end
|
68
65
|
end
|
69
66
|
|
70
67
|
def format(flags)
|
71
68
|
flags.inject("") do |res, f|
|
72
69
|
k,v = f
|
73
|
-
res
|
70
|
+
res + "-D#{k}='#{stripped_flag_value v}' "
|
74
71
|
end
|
75
72
|
end
|
76
73
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'git'
|
2
|
+
require_relative '../directory_helpers'
|
2
3
|
require_relative 'update_failure'
|
3
4
|
require_relative 'update_success'
|
4
5
|
|
@@ -7,6 +8,7 @@ module Bookbinder
|
|
7
8
|
class GitAccessor
|
8
9
|
TagExists = Class.new(RuntimeError)
|
9
10
|
InvalidTagRef = Class.new(RuntimeError)
|
11
|
+
include DirectoryHelperMethods
|
10
12
|
|
11
13
|
def clone(url, name, path: nil, checkout: 'master')
|
12
14
|
cached_clone(url, name, Pathname(path)).tap do |git|
|
@@ -37,26 +39,12 @@ module Bookbinder
|
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
40
|
-
def
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
git.config('user.email', 'bookbinder@cloudfoundry.org')
|
46
|
-
begin
|
47
|
-
git.add_tag(tagname, "origin/#{commit_or_object}",
|
48
|
-
message: 'Tagged by Bookbinder')
|
49
|
-
rescue Git::GitExecuteError => e
|
50
|
-
case e.message
|
51
|
-
when /already exists/
|
52
|
-
raise TagExists
|
53
|
-
when /as a valid ref/
|
54
|
-
raise InvalidTagRef
|
55
|
-
else
|
56
|
-
raise
|
57
|
-
end
|
42
|
+
def author_date(path)
|
43
|
+
Pathname(path).dirname.ascend do |current_dir|
|
44
|
+
if current_dir.to_s.include?(source_dir_name) && current_dir.entries.include?(Pathname(".git"))
|
45
|
+
git = Git.open(current_dir)
|
46
|
+
return git.gblob(path).log.first.author.date
|
58
47
|
end
|
59
|
-
git.push("origin", "master", tags: true)
|
60
48
|
end
|
61
49
|
end
|
62
50
|
|
@@ -15,36 +15,31 @@ module Bookbinder
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def applicable_to?(section)
|
18
|
-
section.subnav_template
|
18
|
+
section.subnav_template.include?('dita_subnav') if section.subnav_template
|
19
19
|
end
|
20
20
|
|
21
|
-
def preprocess(dita_sections, output_locations, options:
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
21
|
+
def preprocess(dita_sections, output_locations, options: [], output_streams: nil)
|
22
|
+
dita_options = dita_flags(options)
|
23
|
+
dita_sections.each do |dita_section|
|
24
|
+
if dita_section.path_to_preprocessor_attribute('ditamap_location')
|
25
|
+
convert_dita_files(dita_section,
|
26
|
+
command_creator,
|
27
|
+
dita_options,
|
28
|
+
output_locations.html_from_preprocessing_dir.join(dita_section.destination_directory),
|
29
|
+
sheller,
|
30
|
+
output_streams)
|
31
|
+
|
32
|
+
generate_subnav(dita_section,
|
33
|
+
output_locations,
|
34
|
+
output_locations.source_for_site_generator.join('subnavs', '_dita_subnav_template.erb'),
|
35
|
+
output_locations.subnavs_for_layout_dir)
|
34
36
|
end
|
35
37
|
|
36
|
-
|
37
|
-
output_locations,
|
38
|
-
output_locations.source_for_site_generator.join('subnavs', '_dita_subnav_template.erb'),
|
39
|
-
output_locations.subnavs_for_layout_dir)
|
40
|
-
end
|
41
|
-
|
42
|
-
dita_sections.each do |dita_section|
|
43
|
-
html_dir = output_locations.html_from_preprocessing_dir.join(dita_section.destination_directory)
|
38
|
+
section_html_dir = output_locations.html_from_preprocessing_dir.join(dita_section.destination_directory)
|
44
39
|
formatted_dir = output_locations.formatted_dir.join(dita_section.destination_directory)
|
45
40
|
source_for_site_gen_dir = output_locations.source_for_site_generator.join(dita_section.destination_directory)
|
46
41
|
|
47
|
-
dita_formatter.format_html
|
42
|
+
dita_formatter.format_html section_html_dir, formatted_dir
|
48
43
|
|
49
44
|
copy_images(dita_section.path_to_repository, formatted_dir)
|
50
45
|
|
@@ -56,26 +51,41 @@ module Bookbinder
|
|
56
51
|
|
57
52
|
attr_reader :dita_formatter, :local_fs_accessor, :command_creator, :sheller
|
58
53
|
|
59
|
-
def
|
54
|
+
def convert_dita_files(section, command_creator, options, section_html_dir, sheller, output_streams)
|
55
|
+
command = command_creator.convert_to_html_command(
|
56
|
+
section,
|
57
|
+
dita_flags: options,
|
58
|
+
write_to: section_html_dir
|
59
|
+
)
|
60
|
+
status = sheller.run_command(command, output_streams.to_h)
|
61
|
+
unless status.success?
|
62
|
+
raise DitaToHtmlLibraryFailure.new 'The DITA-to-HTML conversion failed. ' +
|
63
|
+
'Please check that you have specified the path to your DITA-OT library in the ENV, ' +
|
64
|
+
'that your DITA-specific keys/values in config.yml are set, ' +
|
65
|
+
'and that your DITA toolkit is correctly configured.'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def generate_subnav(dita_section, output_locations, dita_subnav_template_path, subnavs_dir)
|
60
70
|
dita_subnav_template_text = local_fs_accessor.read(dita_subnav_template_path)
|
61
71
|
|
62
72
|
tocjs_text = local_fs_accessor.read(
|
63
73
|
File.join(
|
64
|
-
output_locations.html_from_preprocessing_dir.join(
|
74
|
+
output_locations.html_from_preprocessing_dir.join(dita_section.destination_directory),
|
65
75
|
'index.html')
|
66
76
|
)
|
67
|
-
json_props_location =
|
77
|
+
json_props_location = json_props_location(dita_section.destination_directory)
|
68
78
|
props_file_location = File.join(subnavs_dir, json_props_location)
|
69
79
|
|
70
|
-
subnav = dita_formatter.format_subnav(
|
80
|
+
subnav = dita_formatter.format_subnav(dita_section.destination_directory,
|
71
81
|
dita_subnav_template_text,
|
72
82
|
json_props_location,
|
73
83
|
tocjs_text)
|
74
84
|
|
75
|
-
|
85
|
+
local_fs_accessor.write text: subnav.json_links, to: props_file_location
|
76
86
|
|
77
|
-
|
78
|
-
|
87
|
+
local_fs_accessor.write text: subnav.text,
|
88
|
+
to: File.join(subnavs_dir, "#{dita_section.subnav_template}.erb")
|
79
89
|
end
|
80
90
|
|
81
91
|
def copy_images(src, dest)
|
@@ -90,6 +100,10 @@ module Bookbinder
|
|
90
100
|
end
|
91
101
|
end
|
92
102
|
|
103
|
+
def json_props_location(section_dir)
|
104
|
+
(["dita-subnav-props"] + Array(section_dir.to_s)).join("-") + ".json"
|
105
|
+
end
|
106
|
+
|
93
107
|
def dita_flags(opts)
|
94
108
|
matching_flags = opts.map {|o| o[flag_value_regex("dita-flags"), 1] }
|
95
109
|
matching_flags.compact.first
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'bookbinder/code_example_reader'
|
2
2
|
require 'bookbinder/ingest/cloner_factory'
|
3
3
|
require 'bookbinder/ingest/git_accessor'
|
4
|
-
require 'bookbinder/
|
4
|
+
require 'bookbinder/local_filesystem_accessor'
|
5
5
|
require 'date'
|
6
6
|
require_relative 'archive_drop_down_menu'
|
7
7
|
require_relative 'quicklinks_renderer'
|
@@ -22,12 +22,12 @@ module Bookbinder
|
|
22
22
|
|
23
23
|
def yield_for_code_snippet(from: nil, at: nil)
|
24
24
|
cloner_factory = Ingest::ClonerFactory.new({out: $stdout},
|
25
|
-
|
25
|
+
LocalFilesystemAccessor.new,
|
26
26
|
Ingest::GitAccessor.new)
|
27
27
|
|
28
28
|
cloner = cloner_factory.produce(config[:local_repo_dir])
|
29
29
|
code_example_reader = CodeExampleReader.new({out: $stdout},
|
30
|
-
|
30
|
+
LocalFilesystemAccessor.new)
|
31
31
|
working_copy = cloner.call(source_repo_name: from,
|
32
32
|
source_ref: 'master',
|
33
33
|
destination_parent_dir: config[:workspace])
|
@@ -53,6 +53,12 @@ module Bookbinder
|
|
53
53
|
dropdown_links: menu.dropdown_links }
|
54
54
|
end
|
55
55
|
|
56
|
+
def modified_date(format="%B %-d, %Y")
|
57
|
+
git_accessor = Ingest::GitAccessor.new
|
58
|
+
date = git_accessor.author_date(current_page.source_file) || Time.new(1984,1,1)
|
59
|
+
"Page last updated: #{date.strftime(format)}"
|
60
|
+
end
|
61
|
+
|
56
62
|
def breadcrumbs
|
57
63
|
page_chain = add_ancestors_of(current_page, [])
|
58
64
|
breadcrumbs = page_chain.map do |page|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bookbindery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Grafton
|
@@ -17,7 +17,7 @@ authors:
|
|
17
17
|
autorequire:
|
18
18
|
bindir: install_bin
|
19
19
|
cert_chain: []
|
20
|
-
date: 2015-08
|
20
|
+
date: 2015-09-08 00:00:00.000000000 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: fog-aws
|
@@ -311,7 +311,6 @@ files:
|
|
311
311
|
- lib/bookbinder/commands/push_from_local.rb
|
312
312
|
- lib/bookbinder/commands/push_to_prod.rb
|
313
313
|
- lib/bookbinder/commands/run_publish_ci.rb
|
314
|
-
- lib/bookbinder/commands/tag.rb
|
315
314
|
- lib/bookbinder/commands/update_local_doc_repos.rb
|
316
315
|
- lib/bookbinder/commands/version.rb
|
317
316
|
- lib/bookbinder/commands/watch.rb
|
@@ -358,7 +357,7 @@ files:
|
|
358
357
|
- lib/bookbinder/ingest/update_failure.rb
|
359
358
|
- lib/bookbinder/ingest/update_success.rb
|
360
359
|
- lib/bookbinder/ingest/working_copy.rb
|
361
|
-
- lib/bookbinder/
|
360
|
+
- lib/bookbinder/local_filesystem_accessor.rb
|
362
361
|
- lib/bookbinder/middleman_runner.rb
|
363
362
|
- lib/bookbinder/postprocessing/sitemap_writer.rb
|
364
363
|
- lib/bookbinder/preprocessing/dita_preprocessor.rb
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require_relative '../errors/cli_error'
|
2
|
-
require_relative 'naming'
|
3
|
-
|
4
|
-
module Bookbinder
|
5
|
-
module Commands
|
6
|
-
class Tag
|
7
|
-
include Commands::Naming
|
8
|
-
|
9
|
-
def initialize(streams, configuration_fetcher, version_control_system)
|
10
|
-
@streams = streams
|
11
|
-
@configuration_fetcher = configuration_fetcher
|
12
|
-
@version_control_system = version_control_system
|
13
|
-
end
|
14
|
-
|
15
|
-
def usage
|
16
|
-
["tag <git tag>", "Apply the specified <git tag> to your book and all sections of your book"]
|
17
|
-
end
|
18
|
-
|
19
|
-
def run((tag, *))
|
20
|
-
raise CliError::InvalidArguments unless tag
|
21
|
-
|
22
|
-
urls(config).each do |url|
|
23
|
-
version_control_system.remote_tag(url, tag, 'HEAD')
|
24
|
-
end
|
25
|
-
|
26
|
-
streams[:success].puts 'Success!'
|
27
|
-
streams[:out].puts "#{config.book_repo} and its sections were tagged with #{tag}"
|
28
|
-
0
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
attr_reader :streams, :configuration_fetcher, :version_control_system
|
34
|
-
|
35
|
-
def urls(config)
|
36
|
-
[config.book_repo_url] + config.sections.map(&:repo_url).uniq
|
37
|
-
end
|
38
|
-
|
39
|
-
def config
|
40
|
-
@config ||= configuration_fetcher.fetch_config
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|