Skip to content

Commit 74aa617

Browse files
committed
Conversion du livre finie
La structure interne du livre reste valide. Il peut manquer des modifications
1 parent 31556ee commit 74aa617

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+913
-813
lines changed

A-git-in-other-environments.asc

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ include::book/A-git-in-other-environments/sections/guis.asc[]
1111

1212
include::book/A-git-in-other-environments/sections/visualstudio.asc[]
1313

14-
include::book/A-git-in-other-environments/sections/eclipse.asc[]
15-
16-
1714
include::book/A-git-in-other-environments/sections/bash.asc[]
1815

1916
include::book/A-git-in-other-environments/sections/zsh.asc[]
File renamed without changes.

C-git-commands.asc

Lines changed: 104 additions & 60 deletions
Large diffs are not rendered by default.

Gemfile

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
source 'https://rubygems.org'
22

33
gem 'rake'
4-
gem 'asciidoctor', '1.5.6.2'
4+
gem 'asciidoctor', '2.0.12'
55

66
gem 'json'
77
gem 'awesome_print'
88

9-
gem 'asciidoctor-epub3', '~> 1.5.0.alpha.9'
10-
gem 'asciidoctor-pdf', '~> 1.5.0.beta.8'
9+
gem 'ttfunk', '1.5.1'
10+
gem 'asciidoctor-epub3', '1.5.0.alpha.19'
11+
gem 'asciidoctor-pdf', '1.5.0.alpha.16'
12+
gem 'asciidoctor-pdf-cjk', '~> 0.1.3'
13+
gem 'asciidoctor-pdf-cjk-kai_gen_gothic', '~> 0.1.1'
1114

1215
gem 'coderay'
1316
gem 'pygments.rb'
1417
gem 'thread_safe'
15-
gem 'epubcheck'
16-
gem 'kindlegen'
18+
gem 'epubcheck-ruby'
19+
20+
gem 'octokit'
21+
gem 'github_changelog_generator', github: 'Furtif/github-changelog-generator'

Rakefile

Lines changed: 231 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,244 @@
1+
# coding: utf-8
2+
require 'octokit'
3+
require 'github_changelog_generator'
4+
5+
def exec_or_raise(command)
6+
puts `#{command}`
7+
if (! $?.success?)
8+
raise "'#{command}' failed"
9+
end
10+
end
11+
12+
module GitHubChangelogGenerator
13+
14+
#OPTIONS = %w[ user project token date_format output
15+
# bug_prefix enhancement_prefix issue_prefix
16+
# header merge_prefix issues
17+
# add_issues_wo_labels add_pr_wo_labels
18+
# pulls filter_issues_by_milestone author
19+
# unreleased_only unreleased unreleased_label
20+
# compare_link include_labels exclude_labels
21+
# bug_labels enhancement_labels
22+
# between_tags exclude_tags exclude_tags_regex since_tag max_issues
23+
# github_site github_endpoint simple_list
24+
# future_release release_branch verbose release_url
25+
# base configure_sections add_sections]
26+
27+
def get_log(&task_block)
28+
options = Parser.default_options
29+
yield(options) if task_block
30+
31+
options[:user],options[:project] = ENV['TRAVIS_REPO_SLUG'].split('/')
32+
options[:token] = ENV['GITHUB_API_TOKEN']
33+
options[:unreleased] = false
34+
35+
generator = Generator.new options
36+
generator.compound_changelog
37+
end
38+
39+
module_function :get_log
40+
end
41+
142
namespace :book do
243
desc 'build basic book formats'
344
task :build do
45+
46+
puts "Generating contributors list"
47+
exec_or_raise("git shortlog -s --all $translation_origin | grep -v -E '(Straub|Chacon)' | cut -f 2- | sort | column -c 110 > book/contributors.txt")
48+
49+
# detect if the deployment is using glob
50+
travis = File.read(".travis.yml")
51+
version_string = ENV['TRAVIS_TAG'] || '0'
52+
if travis.match(/file_glob/)
53+
progit_v = "progit_v#{version_string}"
54+
else
55+
progit_v = "progit"
56+
end
57+
text = File.read('progit.asc')
58+
new_contents = text.gsub("$$VERSION$$", version_string).gsub("$$DATE$$", Time.now.strftime("%Y-%m-%d"))
59+
File.open("#{progit_v}.asc", "w") {|file| file.puts new_contents }
60+
461
puts "Converting to HTML..."
5-
`bundle exec asciidoctor progit.asc`
6-
puts " -- HTML output at progit.html"
62+
exec_or_raise("bundle exec asciidoctor -a data-uri #{progit_v}.asc")
63+
puts " -- HTML output at #{progit_v}.html"
764

865
puts "Converting to EPub..."
9-
`bundle exec asciidoctor-epub3 progit.asc`
10-
puts " -- Epub output at progit.epub"
66+
exec_or_raise("bundle exec asciidoctor-epub3 #{progit_v}.asc")
67+
puts " -- Epub output at #{progit_v}.epub"
1168

12-
puts "Converting to Mobi (kf8)..."
13-
`bundle exec asciidoctor-epub3 -a ebook-format=kf8 progit.asc`
14-
puts " -- Mobi output at progit.mobi"
69+
exec_or_raise("epubcheck #{progit_v}.epub")
1570

71+
repo = ENV['TRAVIS_REPO_SLUG']
1672
puts "Converting to PDF... (this one takes a while)"
17-
`bundle exec asciidoctor-pdf progit.asc 2> /dev/null`
18-
puts " -- PDF output at progit.pdf"
73+
if (repo == "progit/progit2-zh")
74+
exec_or_raise("asciidoctor-pdf-cjk-kai_gen_gothic-install")
75+
exec_or_raise("bundle exec asciidoctor-pdf -r asciidoctor-pdf-cjk -r asciidoctor-pdf-cjk-kai_gen_gothic -a pdf-style=KaiGenGothicCN #{progit_v}.asc")
76+
elsif (repo == "progit/progit2-ja")
77+
exec_or_raise("asciidoctor-pdf-cjk-kai_gen_gothic-install")
78+
exec_or_raise("bundle exec asciidoctor-pdf -r asciidoctor-pdf-cjk -r asciidoctor-pdf-cjk-kai_gen_gothic -a pdf-style=KaiGenGothicJP #{progit_v}.asc")
79+
elsif (repo == "progit/progit2-zh-tw")
80+
exec_or_raise("asciidoctor-pdf-cjk-kai_gen_gothic-install")
81+
exec_or_raise("bundle exec asciidoctor-pdf -r asciidoctor-pdf-cjk -r asciidoctor-pdf-cjk-kai_gen_gothic -a pdf-style=KaiGenGothicTW #{progit_v}.asc")
82+
elsif (repo == "progit/progit2-ko")
83+
exec_or_raise("asciidoctor-pdf-cjk-kai_gen_gothic-install")
84+
exec_or_raise("bundle exec asciidoctor-pdf -r asciidoctor-pdf-cjk -r asciidoctor-pdf-cjk-kai_gen_gothic -a pdf-style=KaiGenGothicKR #{progit_v}.asc")
85+
else
86+
exec_or_raise("bundle exec asciidoctor-pdf #{progit_v}.asc 2>/dev/null")
87+
end
88+
puts " -- PDF output at #{progit_v}.pdf"
89+
end
90+
91+
desc 'tag the repo with the latest version'
92+
task :tag do
93+
api_token = ENV['GITHUB_API_TOKEN']
94+
if ((api_token) && (ENV['TRAVIS_PULL_REQUEST'] == 'false'))
95+
repo = ENV['TRAVIS_REPO_SLUG']
96+
@octokit = Octokit::Client.new(:access_token => api_token)
97+
begin
98+
last_version=@octokit.latest_release(repo).tag_name
99+
rescue
100+
last_version="2.1.-1"
101+
end
102+
new_patchlevel= last_version.split('.')[-1].to_i + 1
103+
new_version="2.1.#{new_patchlevel}"
104+
if (ENV['TRAVIS_BRANCH']=='master')
105+
obj = @octokit.create_tag(repo, new_version, "Version " + new_version,
106+
ENV['TRAVIS_COMMIT'], 'commit',
107+
'Automatic build', '[email protected]',
108+
Time.now.utc.iso8601)
109+
begin
110+
@octokit.create_ref(repo, "tags/#{new_version}", obj.sha)
111+
rescue
112+
p "the ref already exists ???"
113+
end
114+
p "Created tag #{last_version}"
115+
elsif (ENV['TRAVIS_TAG'])
116+
version = ENV['TRAVIS_TAG']
117+
changelog = GitHubChangelogGenerator.get_log do |config|
118+
config[:since_tag] = last_version
119+
end
120+
credit_line = "\\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*"
121+
changelog.gsub!(credit_line, "")
122+
@octokit.create_release(repo, new_version, {:name => "v#{new_version}", :body => changelog})
123+
p "Created release #{new_version}"
124+
else
125+
p 'This only runs on a commit to master'
126+
end
127+
else
128+
p 'No interaction with GitHub'
129+
end
130+
end
131+
132+
desc 'convert book to asciidoctor compatibility'
133+
task:convert do
134+
`cp -aR ../progit2/images .`
135+
`sed -i -e 's!/images/!!' .gitignore`
136+
`git add images`
137+
`git rm -r book/*/images`
138+
139+
chapters = [
140+
["01", "introduction" ],
141+
["02", "git-basics" ],
142+
["03", "git-branching" ],
143+
["04", "git-server" ],
144+
["05", "distributed-git" ],
145+
["06", "github" ],
146+
["07", "git-tools" ],
147+
["08", "customizing-git" ],
148+
["09", "git-and-other-scms" ],
149+
["10", "git-internals" ],
150+
["A", "git-in-other-environments" ],
151+
["B", "embedding-git" ],
152+
["C", "git-commands" ]
153+
]
154+
155+
crossrefs = {}
156+
chapters.each { | num, title |
157+
if num =~ /[ABC]/
158+
chap = "#{num}-#{title}"
159+
else
160+
chap = "ch#{num}-#{title}"
161+
end
162+
Dir[File.join ["book","#{num}-#{title}" , "sections","*.asc"]].map { |filename|
163+
File.read(filename).scan(/\[\[(.*?)\]\]/)
164+
}.flatten.each { |ref|
165+
crossrefs[ref] = "#{chap}"
166+
}
167+
}
168+
169+
headrefs = {}
170+
chapters.each { | num, title |
171+
if num =~ /[ABC]/
172+
chap = "#{num}-#{title}"
173+
else
174+
chap = "ch#{num}-#{title}"
175+
end
176+
Dir[File.join ["book","#{num}-#{title}", "*.asc"]].map { |filename|
177+
File.read(filename).scan(/\[\[([_a-z0-9]*?)\]\]/)
178+
}.flatten.each { |ref|
179+
headrefs[ref] = "#{chap}"
180+
}
181+
}
182+
183+
# transform all internal cross refs
184+
chapters.each { | num, title |
185+
if num =~ /[ABC]/
186+
chap = "#{num}-#{title}"
187+
else
188+
chap = "ch#{num}-#{title}"
189+
end
190+
files = Dir[File.join ["book","#{num}-#{title}" , "sections","*.asc"]] +
191+
Dir[File.join ["book","#{num}-#{title}" ,"1-*.asc"]]
192+
p files
193+
files.each { |filename|
194+
content = File.read(filename)
195+
new_contents = content.gsub(/\[\[([_a-z0-9]*?)\]\]/, '[[r\1]]').gsub(
196+
"&rarr;", "→").gsub(/<<([_a-z0-9]*?)>>/) { |match|
197+
ch = crossrefs[$1]
198+
h = headrefs[$1]
199+
# p " #{match} -> #{ch}, #{h}"
200+
if ch
201+
# if local do not add the file
202+
if ch==chap
203+
"<<r#{$1}>>"
204+
else
205+
"<<#{ch}#r#{$1}>>"
206+
end
207+
elsif h
208+
if h==chap
209+
"<<#{chap}>>"
210+
else
211+
"<<#{h}##{h}>>"
212+
end
213+
else
214+
p "could not match xref #{$1}"
215+
"<<#{$1}>>"
216+
end
217+
}
218+
File.open(filename, "w") {|file| file.puts new_contents }
219+
}
220+
}
221+
222+
chapters.each { | num, title |
223+
if num =~ /[ABC]/
224+
chap = "#{num}-#{title}"
225+
else
226+
chap = "ch#{num}-#{title}"
227+
end
228+
Dir[File.join ["book","#{num}-#{title}" ,"1*.asc"]].map { |filename|
229+
content = File.read (filename)
230+
new_contents = content.gsub(/include::(.*?)asc/) {|match|
231+
"include::book/#{num}-#{title}/#{$1}asc"}
232+
`git rm -f #{filename}`
233+
File.open("#{chap}.asc", "w") {|file|
234+
file.puts "[##{chap}]\n"
235+
file.puts new_contents }
236+
`git add "#{chap}.asc"`
237+
}
238+
}
19239
end
20240
end
21241

242+
243+
22244
task :default => "book:build"

book/01-introduction/sections/first-time-setup.asc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ Si vous souhaitez surcharger ces valeurs avec un nom ou une adresse de courriel
4545

4646
De nombreux outils graphiques vous aideront à le faire la première fois que vous les lancerez.
4747

48+
[[ch_editor]]
4849
==== Votre éditeur de texte
4950

5051
À présent que votre identité est renseignée, vous pouvez configurer l'éditeur de texte qui sera utilisé quand Git vous demande de saisir un message.

book/02-git-basics/sections/recording-changes.asc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ Les règles de construction des patrons à placer dans le fichier `.gitignore` s
225225
* un patron commençant par un point d'exclamation (`!`) indique des fichiers à inclure malgré les autres règles.
226226

227227
Les patrons standards de fichiers sont des expressions régulières simplifiées utilisées par les shells.
228-
Un astérisque (`*`) correspond à un ou plusieurs caractères ; `[abc]` correspond à un des trois caractères listés dans les crochets, donc a ou b ou c ; un point d'interrogation (`?`) correspond à un unique caractère ; des crochets entourant des caractères séparés par un tiret (`[0-9]`) correspond à un caractère dans l'intervalle des deux caractères indiqués, donc ici de 0 à 9.
228+
Un astérisque (`\*`) correspond à un ou plusieurs caractères ; `[abc]` correspond à un des trois caractères listés dans les crochets, donc a ou b ou c ; un point d'interrogation (`?`) correspond à un unique caractère ; des crochets entourant des caractères séparés par un tiret (`[0-9]`) correspond à un caractère dans l'intervalle des deux caractères indiqués, donc ici de 0 à 9.
229229
Vous pouvez aussi utiliser deux astérisques pour indiquer une série de répertoires inclus ; `a/**/z` correspond donc à `a/z`, `a/b/z`, `a/b/c/z` et ainsi de suite.
230230

231231
Voici un autre exemple de fichier `.gitignore` :
@@ -559,8 +559,8 @@ Cela signifie que vous pouvez lancer des commandes telles que :
559559
$ git rm log/\*.log
560560
----
561561

562-
Notez bien la barre oblique inverse (`\`) devant `*`.
563-
Il est nécessaire d'échapper le caractère `*` car Git utilise sa propre expansion de nom de fichier en addition de l'expansion du shell.
562+
Notez bien la barre oblique inverse (`\`) devant `\*`.
563+
Il est nécessaire d'échapper le caractère `\*` car Git utilise sa propre expansion de nom de fichier en addition de l'expansion du shell.
564564
Ce caractère d'échappement doit être omis sous Windows si vous utilisez le terminal système.
565565
Cette commande efface tous les fichiers avec l'extension `.log` présents dans le répertoire `log/`.
566566
Vous pouvez aussi lancer une commande telle que :

book/02-git-basics/sections/undoing.asc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ L'intérêt immédiat de la rectification de commit est de faire des petites am
4343
====
4444
Ne rectifiez que les commits qui ne sont que locaux et n'ont pas été poussés.
4545
La rectification de commit qui ont été poussés et la poussée en force de branche risque de créer des problèmes avec vos collaborateurs.
46-
Pour plus d'information sur ce qui arrive si vous le faites et comment s'en sortir en fin de compte, lisez <<s_rebase_perils>>
46+
Pour plus d'information sur ce qui arrive si vous le faites et comment s'en sortir en fin de compte, lisez <<s_rebase_peril>>
4747
====
4848

4949
[[s_unstaging]]

book/06-github/sections/2-contributing.asc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ To https://github.com/tonychacon/blink
122122

123123
Maintenant, si nous allons sur notre projet dupliqué sur GitHub, nous pouvons voir que GitHub a remarqué que nous avons poussé une nouvelle branche thématique et affiche un gros bouton vert pour vérifier nos modifications et ouvrir une requête de tirage sur le projet original.
124124

125-
Vous pouvez aussi vous rendre à la page « Branches » à `https://github.com/<utilisateur>/<projet>/branches` pour trouver votre branche et ouvrir une requête de tirage à partir de là.
125+
Vous pouvez aussi vous rendre à la page « Branches » à `\https://github.com/<utilisateur>/<projet>/branches` pour trouver votre branche et ouvrir une requête de tirage à partir de là.
126126

127127
.Le bouton Pull Request
128128
image::images/blink-02-pr.png[Le bouton Pull Request]
@@ -303,7 +303,7 @@ En fait, il y a de très très nombreuses manières de faire référence à d'au
303303
Commençons par la manière de faire référence à une autre requête de tirage ou à une anomalie (Issue).
304304
Toutes les requêtes de tirage et toutes les anomalies sont identifiées par des numéros qui sont uniques au sein d'un projet.
305305
Par exemple, vous ne pouvez avoir une requête de tirage numéro 3 et une anomalie numéro 3.
306-
Si vous voulez faire référence à n'importe quelle requête de tirage ou anomalie depuis l'une ou l'autre du même projet, il vous suffit d'insérer `#<numéro>` dans n'importe quel commentaire ou n'importe quelle description.
306+
Si vous voulez faire référence à n'importe quelle requête de tirage ou anomalie depuis l'une ou l'autre du même projet, il vous suffit d'insérer `\#<numéro>` dans n'importe quel commentaire ou n'importe quelle description.
307307
Vous pouvez aussi référencer une requête ou une anomalie d'un autre dépôt dupliqué du dépôt actuel en utilisant la syntaxe `<utilisateur>#<numéro>`, ou même un autre dépôt indépendant avec la syntaxe `<utilisateur>/<dépôt>#<numéro>`.
308308

309309
Voyons cela sur un exemple.

book/06-github/sections/3-maintaining.asc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Puisque vous n'avez pas encore de code, GitHub vous affiche des instructions sur
2727
Nous ne détaillerons pas cela ici ; si vous avez besoin d'un rappel, vérifiez <<ch02-git-basics#ch02-git-basics>>.
2828

2929
Maintenant que votre projet est hébergé sur GitHub, vous pouvez donner l'URL à toutes les personnes avec lesquelles vous voulez partager votre projet.
30-
Chaque projet est accessible via HTTP par `https://github.com/<utilisateur>/<nom_du_projet>` et via SSH par `[email protected]:<utilisateur>/<nom_du_projet>`.
30+
Chaque projet est accessible via HTTP par `\https://github.com/<utilisateur>/<nom_du_projet>` et via SSH par `[email protected]:<utilisateur>/<nom_du_projet>`.
3131
Git peut récupérer et pousser en utilisant les deux URL mais l'accès est contrôlé sur la base des paramètres d'authentification de l'utilisateur qui s'y connecte.
3232

3333
[NOTE]

0 commit comments

Comments
 (0)