Skip to content

Commit

Permalink
Merge pull request #90 from progit/rework_files
Browse files Browse the repository at this point in the history
Rework files
  • Loading branch information
pismute authored Mar 4, 2018
2 parents add9929 + 5b52f06 commit 8a8828d
Show file tree
Hide file tree
Showing 303 changed files with 1,843 additions and 1,560 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ progit.pdfmarks
progit.epub
progit-kf8.epub
progit.mobi
/images/

34 changes: 34 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
language: ruby
sudo: false
git:
depth: false
cache: bundler
before_install:
- wget https://raw.githubusercontent.com/progit/progit2-pub/master/bootstrap.sh
- sh bootstrap.sh
script: bundle exec rake book:build
after_success: bundle exec rake book:tag
deploy:
provider: releases
file_glob: true
file:
- progit*.epub
- progit*.mobi
- progit*.pdf
skip_cleanup: true
on:
tags: true
api-key: $GITHUB_API_TOKEN
branches:
only:
- master
- /^2\.1(\.\d+)+$/

addons:
apt:
packages:
- epubcheck
notifications:
email:
on_success: never
on_failure: always
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[#A-git-in-other-environments]
[appendix]
//////////////////////////
== Git in Other Environments
Expand All @@ -15,18 +16,18 @@ Now we'll take a look at some of the other kinds of environments where Git can b
Git은 CLI말고 다른 도구로도 사용할 수 있다. CLI는 Git 생태계의 한 부분일 뿐이고 터미널이 진리인 것도 아니다.
이 장에서는 다른 환경에서 Git을 어떻게 사용할 수 있는지 살펴보고 어떤 Git 애플리케이션이 있는지도 소개한다.

include::sections/guis.asc[]
include::book/A-git-in-other-environments/sections/guis.asc[]

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

include::sections/eclipse.asc[]
include::book/A-git-in-other-environments/sections/eclipse.asc[]


include::sections/bash.asc[]
include::book/A-git-in-other-environments/sections/bash.asc[]

include::sections/zsh.asc[]
include::book/A-git-in-other-environments/sections/zsh.asc[]

include::sections/powershell.asc[]
include::book/A-git-in-other-environments/sections/powershell.asc[]

//////////////////////////
=== Summary
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[#B-embedding-git]
[appendix]
//////////////////////////
== Embedding Git in your Applications
Expand All @@ -16,8 +17,8 @@ If you need to integrate Git with your application, you have essentially three c
//////////////////////////
Git을 지원하는 애플리케이션을 만들 때는 세 가지 방법의 하나를 선택할 수 있다. 쉘 명령어를 실행시키거나 Libgit2를 사용하거나 JGit을 사용한다.

include::sections/command-line.asc[]
include::book/B-embedding-git/sections/command-line.asc[]

include::sections/libgit2.asc[]
include::book/B-embedding-git/sections/libgit2.asc[]

include::sections/jgit.asc[]
include::book/B-embedding-git/sections/jgit.asc[]
481 changes: 241 additions & 240 deletions book/C-git-commands/1-git-commands.asc → C-git-commands.asc

Large diffs are not rendered by default.

14 changes: 9 additions & 5 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
source 'https://rubygems.org'

gem 'rake'
gem 'asciidoctor', '1.5.4'
gem 'asciidoctor', '1.5.6.1'

gem 'json'
gem 'awesome_print'

gem 'asciidoctor-epub3', '1.5.0.alpha.6'
gem 'asciidoctor-pdf', '1.5.0.alpha.11'
gem 'asciidoctor-pdf-cjk-kai_gen_gothic', '0.1.1'
gem 'asciidoctor-epub3', :git => 'https://github.com/asciidoctor/asciidoctor-epub3'
gem 'asciidoctor-pdf', '1.5.0.alpha.16'
gem 'asciidoctor-pdf-cjk', '~> 0.1.3'
gem 'asciidoctor-pdf-cjk-kai_gen_gothic', '~> 0.1.1'

gem 'coderay'
gem 'pygments.rb'
gem 'thread_safe'
gem 'epubcheck'
gem 'epubcheck-ruby'
gem 'kindlegen'

gem 'octokit'
gem 'github_changelog_generator', github: 'Furtif/github-changelog-generator'
1 change: 1 addition & 0 deletions README.asc
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
image::https://travis-ci.org/progit/progit2-ko.svg?branch=master[]
= Pro Git, 2판

짜잔, Pro Git 책의 2판입니다.
Expand Down
235 changes: 219 additions & 16 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,30 +1,233 @@
namespace :book do
desc 'prepare build'
task :prebuild do
Dir.mkdir 'images' unless Dir.exists? 'images'
Dir.glob("book/*/images/*").each do |image|
FileUtils.copy(image, "images/" + File.basename(image))
end
# coding: utf-8
require 'octokit'
require 'github_changelog_generator'

def exec_or_raise(command)
puts `#{command}`
if (! $?.success?)
raise "'#{command}' failed"
end
end

module GitHubChangelogGenerator

#OPTIONS = %w[ user project token date_format output
# bug_prefix enhancement_prefix issue_prefix
# header merge_prefix issues
# add_issues_wo_labels add_pr_wo_labels
# pulls filter_issues_by_milestone author
# unreleased_only unreleased unreleased_label
# compare_link include_labels exclude_labels
# bug_labels enhancement_labels
# between_tags exclude_tags exclude_tags_regex since_tag max_issues
# github_site github_endpoint simple_list
# future_release release_branch verbose release_url
# base configure_sections add_sections]

def get_log(&task_block)
options = Parser.default_options
yield(options) if task_block

options[:user],options[:project] = ENV['TRAVIS_REPO_SLUG'].split('/')
options[:token] = ENV['GITHUB_API_TOKEN']
options[:unreleased] = false

generator = Generator.new options
generator.compound_changelog
end

module_function :get_log
end

namespace :book do
desc 'build basic book formats'
task :build => :prebuild do
task :build do

puts "Generating contributors list"
exec_or_raise("git shortlog -s --all| grep -v -E '(Straub|Chacon)' | cut -f 2- | column -c 120 > book/contributors.txt")

# detect if the deployment is using glob
travis = File.read(".travis.yml")
version_string = ENV['TRAVIS_TAG'] || '0'
if travis.match(/file_glob/)
progit_v = "progit_v#{version_string}"
else
progit_v = "progit"
end
text = File.read('progit.asc')
new_contents = text.gsub("$$VERSION$$", version_string).gsub("$$DATE$$", Time.now.strftime("%Y-%m-%d"))
File.open("#{progit_v}.asc", "w") {|file| file.puts new_contents }

puts "Converting to HTML..."
`bundle exec asciidoctor progit.asc`
puts " -- HTML output at progit.html"
exec_or_raise("bundle exec asciidoctor #{progit_v}.asc")
puts " -- HTML output at #{progit_v}.html"

puts "Converting to EPub..."
`bundle exec asciidoctor-epub3 progit.asc`
puts " -- Epub output at progit.epub"
exec_or_raise("bundle exec asciidoctor-epub3 #{progit_v}.asc")
puts " -- Epub output at #{progit_v}.epub"

exec_or_raise("epubcheck #{progit_v}.epub")

puts "Converting to Mobi (kf8)..."
`bundle exec asciidoctor-epub3 -a ebook-format=kf8 progit.asc`
puts " -- Mobi output at progit.mobi"
exec_or_raise("bundle exec asciidoctor-epub3 -a ebook-format=kf8 #{progit_v}.asc")
# remove the fake epub that would shadow the really one
exec_or_raise("rm progit*kf8.epub")
puts " -- Mobi output at #{progit_v}.mobi"

repo = ENV['TRAVIS_REPO_SLUG']
puts "Converting to PDF... (this one takes a while)"
`bundle exec asciidoctor-pdf -r asciidoctor-pdf-cjk-kai_gen_gothic -a pdf-style=KaiGenGothicKR progit.asc 2>/dev/null`
puts " -- PDF output at progit.pdf"
# exec_or_raise("asciidoctor-pdf-cjk-kai_gen_gothic-install")
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")
puts " -- PDF output at #{progit_v}.pdf"
end

desc 'tag the repo with the latest version'
task :tag do
api_token = ENV['GITHUB_API_TOKEN']
if ((api_token) && (ENV['TRAVIS_PULL_REQUEST'] == 'false'))
repo = ENV['TRAVIS_REPO_SLUG']
@octokit = Octokit::Client.new(:access_token => api_token)
begin
last_version=@octokit.latest_release(repo).tag_name
rescue
last_version="2.1.-1"
end
new_patchlevel= last_version.split('.')[-1].to_i + 1
new_version="2.1.#{new_patchlevel}"
if (ENV['TRAVIS_BRANCH']=='master')
obj = @octokit.create_tag(repo, new_version, "Version " + new_version,
ENV['TRAVIS_COMMIT'], 'commit',
'Automatic build', '[email protected]',
Time.now.utc.iso8601)
@octokit.create_ref(repo, "tags/#{new_version}", obj.sha)
p "Created tag #{last_version}"
elsif (ENV['TRAVIS_TAG'])
version = ENV['TRAVIS_TAG']
changelog = GitHubChangelogGenerator.get_log do |config|
config[:since_tag] = last_version
end
credit_line = "*This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*"
changelog.gsub!(credit_line, "")
@octokit.create_release(repo, new_version, {:name => "v#{new_version}", :body => changelog})
p "Created release #{new_version}"
else
p 'This only runs on a commit to master'
end
else
p 'No interaction with GitHub'
end
end

desc 'convert book to asciidoctor compatibility'
task:convert do
`cp -aR ../progit2/images .`
`sed -i -e 's!/images/!!' .gitignore`
`git add images`
`git rm -r book/*/images`

chapters = [
["01", "introduction" ],
["02", "git-basics" ],
["03", "git-branching" ],
["04", "git-server" ],
["05", "distributed-git" ],
["06", "github" ],
["07", "git-tools" ],
["08", "customizing-git" ],
["09", "git-and-other-scms" ],
["10", "git-internals" ],
["A", "git-in-other-environments" ],
["B", "embedding-git" ],
["C", "git-commands" ]
]

crossrefs = {}
chapters.each { | num, title |
if num =~ /[ABC]/
chap = "#{num}-#{title}"
else
chap = "ch#{num}-#{title}"
end
Dir[File.join ["book","#{num}-#{title}" , "sections","*.asc"]].map { |filename|
File.read(filename).scan(/\[\[(.*?)\]\]/)
}.flatten.each { |ref|
crossrefs[ref] = "#{chap}"
}
}

headrefs = {}
chapters.each { | num, title |
if num =~ /[ABC]/
chap = "#{num}-#{title}"
else
chap = "ch#{num}-#{title}"
end
Dir[File.join ["book","#{num}-#{title}", "*.asc"]].map { |filename|
File.read(filename).scan(/\[\[([_a-z0-9]*?)\]\]/)
}.flatten.each { |ref|
headrefs[ref] = "#{chap}"
}
}

# transform all internal cross refs
chapters.each { | num, title |
if num =~ /[ABC]/
chap = "#{num}-#{title}"
else
chap = "ch#{num}-#{title}"
end
files = Dir[File.join ["book","#{num}-#{title}" , "sections","*.asc"]] +
Dir[File.join ["book","#{num}-#{title}" ,"1-*.asc"]]
p files
files.each { |filename|
content = File.read(filename)
new_contents = content.gsub(/\[\[([_a-z0-9]*?)\]\]/, '[[r\1]]').gsub(
"&rarr;", "→").gsub(/<<([_a-z0-9]*?)>>/) { |match|
ch = crossrefs[$1]
h = headrefs[$1]
# p " #{match} -> #{ch}, #{h}"
if ch
# if local do not add the file
if ch==chap
"<<r#{$1}>>"
else
"<<#{ch}#r#{$1}>>"
end
elsif h
if h==chap
"<<#{chap}>>"
else
"<<#{h}##{h}>>"
end
else
p "could not match xref #{$1}"
"<<#{$1}>>"
end
}
File.open(filename, "w") {|file| file.puts new_contents }
}
}

chapters.each { | num, title |
if num =~ /[ABC]/
chap = "#{num}-#{title}"
else
chap = "ch#{num}-#{title}"
end
Dir[File.join ["book","#{num}-#{title}" ,"1*.asc"]].map { |filename|
content = File.read (filename)
new_contents = content.gsub(/include::(.*?)asc/) {|match|
"include::book/#{num}-#{title}/#{$1}asc"}
`git rm -f #{filename}`
File.open("#{chap}.asc", "w") {|file|
file.puts "[##{chap}]\n"
file.puts new_contents }
`git add "#{chap}.asc"`
}
}
end
end



task :default => "book:build"
Loading

0 comments on commit 8a8828d

Please sign in to comment.