From 732a4463121fd27c825e64bbaf71a7cca19700b4 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Wed, 18 May 2011 18:52:20 +0800 Subject: [PATCH 01/84] GotGit references initialized. --- .gitignore | 2 + Rakefile | 103 + html/.gitignore | 1 + html/inc/cc-icon.png | Bin 0 -> 5083 bytes html/inc/common.css | 147 ++ html/inc/showtty.js | 315 +++ html/inc/streamtty.js | 347 +++ html/inc/tty.css | 5 + html/templates/index.erb | 73 + html/templates/ttyplay.erb | 17 + jsttyplay/JSON.pm | 2264 ++++++++++++++++++ jsttyplay/JSON/backportPP.pm | 2792 +++++++++++++++++++++++ jsttyplay/JSON/backportPP/Boolean.pm | 26 + jsttyplay/JSON/backportPP/Compat5005.pm | 131 ++ jsttyplay/JSON/backportPP/Compat5006.pm | 173 ++ jsttyplay/LICENSE | 14 + jsttyplay/Term/Emulator.pm | 258 +++ jsttyplay/Term/Emulator/Parser.pm | 766 +++++++ jsttyplay/Term/TtyRec.pm | 105 + jsttyplay/Term/TtyRec/Player.pm | 126 + jsttyplay/TermEncoder.pm | 161 ++ jsttyplay/html/showtty.js | 315 +++ jsttyplay/html/streamtty.js | 347 +++ jsttyplay/html/test.html | 11 + jsttyplay/interactive_test.pl | 36 + jsttyplay/lighttpd.conf | 16 + jsttyplay/play.pl | 60 + jsttyplay/preprocess.pl | 127 ++ jsttyplay/respawn.sh | 12 + jsttyplay/shell_server.pl | 147 ++ jsttyplay/t/parser/01_use.t | 8 + jsttyplay/t/parser/02_constructor.t | 18 + jsttyplay/t/parser/03_parse_char.t | 29 + jsttyplay/t/parser/04_parse_escape.t | 128 ++ jsttyplay/ttydump.pl | 14 + part1/ch01-01-diff-patch.ttyrec | Bin 0 -> 5249 bytes part2/ch04-01-first-commit.ttyrec | Bin 0 -> 6368 bytes part2/ch04-02-git-config.ttyrec | Bin 0 -> 12553 bytes part2/ch04-03-who-does-commit.ttyrec | Bin 0 -> 13327 bytes part2/ch05-01-commit-modified.ttyrec | Bin 0 -> 10625 bytes part2/ch05-02-index-and-diff.ttyrec | Bin 0 -> 13293 bytes part2/ch05-03-git-stash.ttyrec | Bin 0 -> 1475 bytes part2/ch06-01-git-objects.ttyrec | Bin 0 -> 14860 bytes part2/ch06-02-sha1-hash.ttyrec | Bin 0 -> 8865 bytes part2/ch07-01-git-reset.ttyrec | Bin 0 -> 6428 bytes part2/ch07-02-reflog.ttyrec | Bin 0 -> 5369 bytes part2/ch08-01-checkout.ttyrec | Bin 0 -> 12781 bytes part2/ch09-01-i-am-back.ttyrec | Bin 0 -> 8865 bytes part2/ch09-02-inside-stash.ttyrec | Bin 0 -> 20279 bytes part2/ch10-01-tag.ttyrec | Bin 0 -> 3848 bytes part2/ch10-02-rm1.ttyrec | Bin 0 -> 6012 bytes part2/ch10-03-rm2.ttyrec | Bin 0 -> 6210 bytes part2/ch10-04-undelete.ttyrec | Bin 0 -> 4466 bytes part2/ch10-05-mv.ttyrec | Bin 0 -> 5647 bytes part2/ch10-06-hello-world.ttyrec | Bin 0 -> 7746 bytes part2/ch10-07-add-i.ttyrec | Bin 0 -> 8235 bytes part2/ch10-08-ignore.ttyrec | Bin 0 -> 15500 bytes part2/ch11-01-clone.ttyrec | Bin 0 -> 9515 bytes part2/ch11-02-rev-parse.ttyrec | Bin 0 -> 13968 bytes part2/ch11-03-rev-list.ttyrec | Bin 0 -> 7689 bytes part2/ch12-01-back2future-1.ttyrec | Bin 0 -> 16665 bytes part2/ch12-02-back2future-2.ttyrec | Bin 0 -> 9920 bytes part2/ch12-03-back2future-3.ttyrec | Bin 0 -> 10008 bytes part3/smart-and-dump-protocol.ttyrec | Bin 0 -> 36042 bytes 64 files changed, 9094 insertions(+) create mode 100644 .gitignore create mode 100644 Rakefile create mode 100644 html/.gitignore create mode 100644 html/inc/cc-icon.png create mode 100755 html/inc/common.css create mode 100644 html/inc/showtty.js create mode 100644 html/inc/streamtty.js create mode 100644 html/inc/tty.css create mode 100644 html/templates/index.erb create mode 100644 html/templates/ttyplay.erb create mode 100644 jsttyplay/JSON.pm create mode 100644 jsttyplay/JSON/backportPP.pm create mode 100644 jsttyplay/JSON/backportPP/Boolean.pm create mode 100644 jsttyplay/JSON/backportPP/Compat5005.pm create mode 100644 jsttyplay/JSON/backportPP/Compat5006.pm create mode 100644 jsttyplay/LICENSE create mode 100644 jsttyplay/Term/Emulator.pm create mode 100644 jsttyplay/Term/Emulator/Parser.pm create mode 100644 jsttyplay/Term/TtyRec.pm create mode 100644 jsttyplay/Term/TtyRec/Player.pm create mode 100644 jsttyplay/TermEncoder.pm create mode 100644 jsttyplay/html/showtty.js create mode 100644 jsttyplay/html/streamtty.js create mode 100644 jsttyplay/html/test.html create mode 100644 jsttyplay/interactive_test.pl create mode 100644 jsttyplay/lighttpd.conf create mode 100644 jsttyplay/play.pl create mode 100644 jsttyplay/preprocess.pl create mode 100755 jsttyplay/respawn.sh create mode 100755 jsttyplay/shell_server.pl create mode 100644 jsttyplay/t/parser/01_use.t create mode 100644 jsttyplay/t/parser/02_constructor.t create mode 100644 jsttyplay/t/parser/03_parse_char.t create mode 100644 jsttyplay/t/parser/04_parse_escape.t create mode 100644 jsttyplay/ttydump.pl create mode 100644 part1/ch01-01-diff-patch.ttyrec create mode 100644 part2/ch04-01-first-commit.ttyrec create mode 100644 part2/ch04-02-git-config.ttyrec create mode 100644 part2/ch04-03-who-does-commit.ttyrec create mode 100644 part2/ch05-01-commit-modified.ttyrec create mode 100644 part2/ch05-02-index-and-diff.ttyrec create mode 100644 part2/ch05-03-git-stash.ttyrec create mode 100644 part2/ch06-01-git-objects.ttyrec create mode 100644 part2/ch06-02-sha1-hash.ttyrec create mode 100644 part2/ch07-01-git-reset.ttyrec create mode 100644 part2/ch07-02-reflog.ttyrec create mode 100644 part2/ch08-01-checkout.ttyrec create mode 100644 part2/ch09-01-i-am-back.ttyrec create mode 100644 part2/ch09-02-inside-stash.ttyrec create mode 100644 part2/ch10-01-tag.ttyrec create mode 100644 part2/ch10-02-rm1.ttyrec create mode 100644 part2/ch10-03-rm2.ttyrec create mode 100644 part2/ch10-04-undelete.ttyrec create mode 100644 part2/ch10-05-mv.ttyrec create mode 100644 part2/ch10-06-hello-world.ttyrec create mode 100644 part2/ch10-07-add-i.ttyrec create mode 100644 part2/ch10-08-ignore.ttyrec create mode 100644 part2/ch11-01-clone.ttyrec create mode 100644 part2/ch11-02-rev-parse.ttyrec create mode 100644 part2/ch11-03-rev-list.ttyrec create mode 100644 part2/ch12-01-back2future-1.ttyrec create mode 100644 part2/ch12-02-back2future-2.ttyrec create mode 100644 part2/ch12-03-back2future-3.ttyrec create mode 100644 part3/smart-and-dump-protocol.ttyrec diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..e84b0ccdc --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/screencast.html +*.json diff --git a/Rakefile b/Rakefile new file mode 100644 index 000000000..1ae328d87 --- /dev/null +++ b/Rakefile @@ -0,0 +1,103 @@ +#!/usr/bin/ruby +# -*- coding: UTF-8 -*- + +require 'ftools' +require 'erb' + +ABS_CSS_FILE = File.expand_path('html/inc/tty.css') +ABS_JS_FILE = File.expand_path('html/inc/showtty.js') +ABS_CSS_COMMON_FILE = File.expand_path('html/inc/common.css') +TTYPLAY_TMPL = File.expand_path('html/templates/ttyplay.erb') +INDEX_TMPL = File.expand_path('html/templates/index.erb') +INDEX_FILE = File.expand_path('screencast.html') + +def strip_common_dir(path1, path2) + if path1+"\t"+path2 =~ %r{^(.*/)(.*?)\t\1(.*)$} + path1, path2 = $2, $3 + end + return path1, path2 +end + +def rel_path(path1, path2) + path1, path2 = strip_common_dir path1, path2 + return ('../' * path1.count('/')) + path2 +end + +def rel_path_dir(dir1, dir2) + dir1 += '/' if dir1[-1,1] != '/' + dir2 += '/' if dir2[-1,1] != '/' + return rel_path dir1, dir2 +end + +rule( /\.json$/ => [ + proc {|tn| tn.sub(/\.[^.]+$/, '.ttyrec').sub(/^html\//, '') } +]) do |t| + abs_source = File.expand_path(t.source) + abs_name = File.expand_path(t.name) + File.makedirs File.dirname abs_name + puts "parse #{abs_source}" + sh "(cd jsttyplay; perl preprocess.pl --size 80x25 #{abs_source} #{abs_name})" +end + +FileList["**/*.ttyrec"].exclude(/^html\//).each do |t| + json = 'html/' + t.sub(/\.[^.]+$/, '.json') + task :json => json +end + +desc 'compile ttyrec files to json files' +task :json + +task :html_chunks do + FileList["html/**/*.json"].each do |t| + title = File.basename(t).sub(/\.[^.]+$/, '') + html_file = File.expand_path(t.sub(/\.[^.]+$/, '.html')) + json_file = rel_path(html_file, File.expand_path(t)) + css_files = [ rel_path(html_file, ABS_CSS_FILE), + rel_path(html_file, ABS_CSS_COMMON_FILE) ] + js_file = rel_path(html_file, ABS_JS_FILE) + unless uptodate?(html_file, TTYPLAY_TMPL) + File.open(html_file, "w") do |file| + template = ERB.new(File.read(TTYPLAY_TMPL)) + file.puts template.result(binding) + end + end + end +end + +desc 'create index.html and other html files for ttyplay.' +task :html => [:html_chunks] do + index_file = INDEX_FILE + ttyrec_list = {} + css_files = [rel_path(index_file, ABS_CSS_COMMON_FILE)] + FileList["html/**/*.json"].each do |t| + title = File.basename(t).sub(/\.[^.]+$/, '') + part = t.sub(/.*\/(part[0-9]+)\/.*$/, '\1') + html_file = rel_path(index_file, File.expand_path(t.sub(/\.[^.]+$/, '.html'))) + ttyrec_list[part] = [] unless ttyrec_list.member?(part) + ttyrec_list[part].push( { 'title' => title, 'html' => html_file } ) + end + unless uptodate?(index_file, INDEX_TMPL) + File.open(index_file, "w") do |file| + template = ERB.new(File.read(INDEX_TMPL)) + file.puts template.result(binding) + end + end +end + +desc 'clean *.json and *.html files' +task :clean => [:clean_json, :clean_html] + +task :clean_json do + FileList["html/**/*.json"].each do |t| + File.unlink t + end +end + +task :clean_html do + FileList["html/**/*.html"].each do |t| + File.unlink t + end + File.unlink INDEX_FILE if File.exists?(INDEX_FILE) +end + +task :default => [:json, :html] diff --git a/html/.gitignore b/html/.gitignore new file mode 100644 index 000000000..2d19fc766 --- /dev/null +++ b/html/.gitignore @@ -0,0 +1 @@ +*.html diff --git a/html/inc/cc-icon.png b/html/inc/cc-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a944e0b89642ae282047846e55393007b04686 GIT binary patch literal 5083 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 literal 0 HcmV?d00001 diff --git a/html/inc/common.css b/html/inc/common.css new file mode 100755 index 000000000..2fac10d20 --- /dev/null +++ b/html/inc/common.css @@ -0,0 +1,147 @@ +/* Stylesheet for ossxp documents at: http://www.ossxp.com/doc/ */ + +html,body{min-height:100%;} +body{font-style:normal;color:#4e4e4e;font-family: Verdana, sans-serif; padding: 0;} + +/* body with background color */ +body { + text-align:center; /* for IE */ + margin:0 auto; /* for the rest */ + background:#39424b; +} + +/* content: align center with fixed width */ +div.document +{ + text-align:left; + width:780px; /* or a percentage, or whatever */ + margin:0 auto 0 auto; + padding:1em; + background:#ffffff; +} + +/* header and footer: align center with fixed width */ +div.header, div.footer +{ + width:780px; /* or a percentage, or whatever */ + margin:0 auto 0 auto; + padding:1em; +} + +div.header,div.footer {background-color:#FFFFBB;text-align:right;font-size:9pt;font-style:italic;} +div.footer {text-align:center;} +hr.header, hr.footer {color:#b4aca1;background-color:#b4aca1;border-bottom:1px solid #ffffff;} + +/* links */ +a{color:#0071bb;outline:none;} +a:hover{color:#ed1e24;text-decoration:none;} +div.header a, div.footer a{text-decoration:none;} +table.docinfo a{text-decoration:none;} + +/* headings */ +h1, h2, h3, h4, h5, h6 { + color: #990000; + font-family: "Trebuchet MS", Verdana, Tahoma, Ariel, Helvetica, sans-serif; +} +h1{font-weight:normal;font-size:270%;letter-spacing:-.04em;line-height:100%;margin:.8em 0 .2em;letter-spacing:-0.04em;} +h2{font-weight:normal;font-size:200%;letter-spacing:-.04em;line-height:110%;margin:.7em 0 .2em;letter-spacing:-0.03em;} +h3{font-size:160%;font-weight:normal;letter-spacing:-.04em;line-height:110%;margin:.7em 0 .2em;letter-spacing:-0.02em;} +h4{font-size:140%;font-weight:bold;margin:.7em 0 .2em;letter-spacing:-0.02em;color: #4e4e4e;} +h5{font-size:140%;font-weight:bold;margin:.5em 0 .2em;letter-spacing:-0.02em;color: #4e4e4e;} +h6{font-size:120%;font-weight:normal;text-transform:uppercase;margin:.5em 0 .2em;color: #4e4e4e;} + +/* header links */ +h1 a:link, h1 a:visited, h1 a:active, h1 a:hover { color: #990000; text-decoration: none; } +h2 a:link, h2 a:visited, h2 a:active, h2 a:hover { color: #990000; text-decoration: none; } +h3 a:link, h3 a:visited, h3 a:active, h3 a:hover { color: #990000; text-decoration: none; } +h4 a:link, h4 a:visited, h4 a:active, h4 a:hover { color: #4e4e4e; text-decoration: none; } +h5 a:link, h5 a:visited, h5 a:active, h5 a:hover { color: #4e4e4e; text-decoration: none; } +h6 a:link, h6 a:visited, h6 a:active, h6 a:hover { color: #4e4e4e; text-decoration: none; } + +/* document title */ +h1.title {text-align:center;margin:1em 0 1em 0;} +h2.subtitle {text-align:center;margin:1em 0 1em 0;} + +/* note and hint backgroud-color */ +div.note {background-color:#ddd} +div.hint {background-color:#ddd} + +/* note and hint title font */ +p.admonition-title {font-size:150%;font-weight:bold} + +/* toc */ +div.topic {font-size:9pt;background-color:#E0E0E0;padding:.4em;margin: 1em;} +p.topic-title {font-weight:bold;font-size:180%;letter-spacing:.05em;line-height:110%;margin-bottom:.7em;margin-left:0;} +.topic a:link, .topic a:visited { text-decoration: none; } +.topic ul li,.topic ol li {list-style: none;margin-left:.7em;} + + +/* tables */ +table{margin:.5em 0 1em;} +table td,table th{text-align:left;border-right:1px solid #fff;padding:.4em .8em;} +table th{background-color:#5e5e5e;color:#fff;text-transform:uppercase;font-weight:bold;border-bottom:1px solid #e8e1c8;} +table td{background-color:#eee;} +table th a{color:#d6f325;} +table th a:hover{color:#fff;} +table tr.even td{background-color:#ddd;} +table tr:hover td{background-color:#fff;} +table.docinfo th {vertical-align: middle;} + +table.nostyle td,table.nostyle th,table.nostyle tr.even td,table.nostyle tr:hover td{border:0;background:none;background-color:transparent;} + +/* docinfo table: center */ +table.docinfo { + margin-left:auto;margin-right:auto; /* for the rest browser other then IE */ + font-size:9pt; +} + + +/* forms */ +input,textarea,select{font-size:100%;margin:.2em 0;} +input,textarea{padding:.2em .4em;margin:0 2px 4px 2px;} +input.radio,input.checkbox{background-color:#fff;padding:2px;} +textarea{width:90%;} +form label{font-weight:normal;margin:0 2px;} +form .row label{display:block;margin:10px 2px 0 2px;} +fieldset{padding:.8em;border:1px solid #ddd;background-color:#fff;margin:1em 0;} +legend{padding:2px 15px 10px;text-transform:uppercase;font-style:italic;font-size:115%;background-color:#fff;border-top:1px solid #ddd;} + +/* lists */ +ul,ol{margin:.4em 0 1em;line-height:150%;} +ul li,ol li{list-style-position:outside;margin-left:2.5em;} +dl{padding:.3em 0 .8em;} +dt{font-weight:bold;text-decoration:none;} +dd{} + + +/* programming list */ +pre.programlisting, pre.screen, pre.literal-block { + overflow:auto;white-space:pre;/* <- css3 */ + white-space:0;/* <- ff */ + font-size:12px; + font-family:"Courier New", Courier, "Lucida Console", Monaco, "DejaVu Sans Mono", "Nimbus Mono L", "Bitstream Vera Sans Mono"; + background-color:#E0E0E0; + padding:.4em; + padding-top:1.2em;padding-bottom:1.6em;/* <- one line pre with scroll bar visible */ + margin: 1em 1em 1em 2em; +} + +pre{width:80%;overflow:auto;padding:.8em;margin:1em 0;} + +/* Fixed IE bug: one line pre with scrollbar, visible zone is too small */ +pre{word-wrap:normal;padding-top:1.2em;padding-bottom:1.6em;/* <- one line pre with scroll bar visible */} + +/* Paragraph */ +p {margin:.6em 0 .3em;line-height:150%;} +/* Chinese style: indent 2 spaces */ +p,dd {font-size:14px;text-indent: 2em } +dt {font-size:16px;text-indent: 2em; margin:1em 0 0.5em 0; } +/* Paragraph do not indent in li */ +li p {font-size:14px;text-indent: 0em } + +/* other */ +img{border:0;margin:.6em 0 .3em 2em;} +td img{border:0;margin:0;} +p img{border:0;margin:0;margin-bottom:-5px;} +hr{color:#b4aca1;background-color:#b4aca1;border-bottom:1px solid #f6f4eb;} +small{font-size:80%;} diff --git a/html/inc/showtty.js b/html/inc/showtty.js new file mode 100644 index 000000000..0b2789e27 --- /dev/null +++ b/html/inc/showtty.js @@ -0,0 +1,315 @@ +// showtty.js - a building block for viewing tty animations +// Copyright 2008 Jack Christopher Kastorff +(function(){ + +var repeatString = function (str, rep) { + var outstr = ''; + for (var i = 0; i < rep; i++) { + outstr += str; + } + return outstr; +}; + +var makeTable = function (width, height) { + var table = document.createElement("div"); + var arr = []; + for (var j = 1; j <= height; j++) { + var row = document.createElement("div"); + var arrrow = []; + row.style.fontFamily = '"ProFont", "Luxi Mono", "Monaco", "Courier", "Courier new", monospace'; + row.style.margin = '0'; + row.style.padding = '0'; + row.style.wordSpacing = '0'; + row.style.height = '1.2em'; + for (var i = 1; i <= width; i++) { + var charelem = document.createElement("pre"); + charelem.style.backgroundColor = '#000'; + charelem.style.color = '#FFF'; + charelem.style.display = 'inline'; + charelem.style.fontWeight = 'normal'; + charelem.style.textDecoration = 'none'; + charelem.style.letterSpacing = '0'; + charelem.style.margin = '0'; + charelem.style.padding = '0 0 0.2em 0'; + charelem.appendChild(document.createTextNode(" ")); + row.appendChild(charelem); + arrrow.push(charelem); + } + table.appendChild(row); + arr.push(arrrow); + } + return { "arr": arr, "elem": table }; +}; + +var setTextChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].firstChild.replaceData(0, 1, r.charAt(i)); + } +}; + +var setBoldChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.fontWeight = r.charAt(i) == 0 ? 'normal' : 'bold'; + } +}; + +var setUnderlineChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.textDecoration = r.charAt(i) == 0 ? 'none' : 'underline'; + } +}; + +var clut = { 0: "#000", 1: "#D00", 2: "#0D0", 3: "#DD0", 4: "#00D", 5: "#D0D", 6: "#0DD", 7: "#DDD" }; + +var setFcolorChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.color = clut[r.charAt(i)]; + } +}; + +var t = 0; +var setBcolorChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.backgroundColor = clut[r.charAt(i)]; + } +}; + +var loadIFrame = function (tb, rowcaches, fr, width, height) { + var d = uncompressIFrameBlock(fr.d, width); + for (var i = 0; i < d.length; i++) { + setTextChunk(tb, d[i], i, 0); + rowcaches.d[i] = d[i]; + } + var B = uncompressIFrameBlock(fr.B, width); + for (var i = 0; i < B.length; i++) { + setBoldChunk(tb, B[i], i, 0); + rowcaches.B[i] = B[i]; + } + var U = uncompressIFrameBlock(fr.U, width); + for (var i = 0; i < U.length; i++) { + setUnderlineChunk(tb, U[i], i, 0); + rowcaches.U[i] = U[i]; + } + var f = uncompressIFrameBlock(fr.f, width); + for (var i = 0; i < f.length; i++) { + setFcolorChunk(tb, f[i], i, 0); + rowcaches.f[i] = f[i]; + } + var b = uncompressIFrameBlock(fr.b, width); + for (var i = 0; i < b.length; i++) { + setBcolorChunk(tb, b[i], i, 0); + rowcaches.b[i] = b[i]; + } +}; + +var uncompressIFrameBlock = function (d,width) { + var uncomp = []; + var last = null; + for (var i = 0; i < d.length; i++) { + var uncomprow = null; + if ( typeof d[i] == 'array' || typeof d[i] == 'object' ) { + if ( d[i][0] == "r" ) { + uncomprow = d[i][1]; + } else if ( d[i][0] == "a" ) { + uncomprow = repeatString(d[i][1], width); + } else { + throw new Error ("bad iframe data: subarray is not valid"); + } + } else if ( typeof d[i] == 'string' && d[i] == 'd' ) { + uncomprow = last; + } else { + throw new Error ("bad iframe data: unknown " + (typeof d[i]) + " in array"); + } + uncomp.push(uncomprow); + last = uncomprow; + } + return uncomp; +}; + +var loadPFrame = function (table, rowcaches, fr, width, height) { + if ( fr.d ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.d, width), rowcaches.d, setTextChunk); + } + if ( fr.B ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.B, width), rowcaches.B, setBoldChunk); + } + if ( fr.U ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.U, width), rowcaches.U, setUnderlineChunk); + } + if ( fr.f ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.f, width), rowcaches.f, setFcolorChunk); + } + if ( fr.b ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.b, width), rowcaches.b, setBcolorChunk); + } +}; + +var diffPushGeneric = function (table, d, rowcache, set) { + // convert everything to line operations + for (var i = 0; i < d.length; i++) { + var e = d[i]; + if ( e[0] == "cp" ) { + set(table, rowcache[e[1]], e[2], 0); + rowcache[e[2]] = rowcache[e[1]]; + } else if ( e[0] == 'char' ) { + var r = e[1]; + var v = rowcache[r]; + var da = v.slice(0, e[2]) + e[3] + v.slice(e[2]+1); + set(table, e[3], e[1], e[2]); + rowcache[r] = da; + } else if ( e[0] == 'chunk' ) { + var r = e[1]; + var v = rowcache[r]; + var da = v.slice(0, e[2]) + e[4] + v.slice(e[3]+1); + set(table, e[4], e[1], e[2]); + rowcache[r] = da; + } else if ( e[0] == 'line' ) { + set(table, e[2], e[1], 0); + rowcache[e[1]] = e[2]; + } else { + throw new Error ("unknown p-frame item type " + e[0] + ", len " + e.length); + } + } +}; + +var annotatedPFrameBlock = function (frame, width) { + var ann = []; + for (var i = 0; i < frame.length; i++) { + var e = frame[i]; + if ( e[0] == 'cp' ) { + ann.push(e); + } else if ( e.length == 2 ) { + // raw line + if ( typeof e[1] == 'string' ) { + ann.push(['line', e[0], e[1]]); + } else if ( e[1][0] == "a" ) { + ann.push(['line', e[0], repeatString(e[1][1], width)]); + } else { + throw new Error ("p-frame corrupted: invalid 2-len"); + } + } else if ( e.length == 3 ) { + // char + ann.push(['char', e[0], e[1], e[2]]); + } else if ( e.length == 4 ) { + // chunk + if ( typeof e[3] == 'string' ) { + ann.push(['chunk', e[0], e[1], e[2], e[3]]); + } else if ( e[3][0] == 'a' ) { + ann.push(['chunk', e[0], e[1], e[2], repeatString(e[3][1], e[2]-e[1]+1)]); + } else { + throw new Error ("p-frame corrupted: invalid 4-len"); + } + } else { + throw new Error ("p-frame corrupted: no such thing as a " + e.length + "-len"); + } + } + return ann; +}; + +var handleCursor = function (table, bgcache, curpos, dx, dy) { + if ( typeof dx == 'number' || typeof dy == 'number' ) { + // make sure the old cursor position has been overwritten + setBcolorChunk(table, bgcache[curpos[1]-1].charAt(curpos[0]-1), curpos[1]-1, curpos[0]-1); + if ( typeof dx == 'number' ) { + curpos[0] = dx; + } + if ( typeof dy == 'number' ) { + curpos[1] = dy; + } + } + + // draw the cursor + table.arr[curpos[1]-1][curpos[0]-1].style.backgroundColor = '#FFF'; +}; + +var animateNextFrame = function (holder) { with (holder) { + var fr = timeline[nextframe]; + if ( fr.i ) { + loadIFrame(table, rowcaches, fr, width, height); + } else { + loadPFrame(table, rowcaches, fr, width, height); + } + handleCursor(table, rowcaches.b, curpos, fr.x, fr.y); + nextframe++; + if ( timeline.length > nextframe ) { + var wait = timeadd + timeline[nextframe].t - (new Date).getTime()/1000; + if ( wait < 0 ) { + // we're out of date! try to catch up. + return animateNextFrame(holder); + } else { + setTimeout(function(){animateNextFrame(holder);}, wait*1000); + } + } +}}; + +var makeCache = function (ch, wid, hei) { + var c = []; + for (var y = 0; y < hei; y++) { + c.push( repeatString(ch, wid) ); + } + return c; +}; + +showTTY = function (elem, data) { + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + var width = data.width; + var height = data.height; + var timeline = data.timeline; + + var table = makeTable(width, height); + elem.appendChild(table.elem); + + var holder = { + 'width': width, + 'height': height, + 'timeline': timeline, + 'table': table, + 'nextframe': 0, + 'time': 0, + 'rowcaches': { + 'd': makeCache(" ", width, height), + 'f': makeCache("7", width, height), + 'b': makeCache("0", width, height), + 'B': makeCache("0", width, height), + 'U': makeCache("0", width, height) + }, + 'curpos': [1,1], + 'timeadd': (new Date).getTime()/1000-timeline[0].t + }; + + animateNextFrame(holder); +}; + +showTTYURL = function (elem, url) { + var showText = function (text) { + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + elem.appendChild( document.createTextNode( text ) ); + }; + + showText("Loading " + url); + + var req = new XMLHttpRequest(); + req.open("GET", url, true); + req.onreadystatechange = function () { + if ( req.readyState == 4 && ( req.status = 200 || req.status == 0 ) ) { + var data = eval("(" + req.responseText + ")"); + if ( typeof data == "undefined" ) { + showText("Error: didn't get tty data from " + url); + req = null; + return; + } + showTTY(elem, data); + } else if ( req.readyState == 4 && req.status != 200 ) { + showText("Error: couldn't retrieve " + url + ", got status code " + this.status); + req = null; + } + }; + req.send(null); +}; + +}()); diff --git a/html/inc/streamtty.js b/html/inc/streamtty.js new file mode 100644 index 000000000..0f611847d --- /dev/null +++ b/html/inc/streamtty.js @@ -0,0 +1,347 @@ +// streamtty.js - a pty client for jstty +// Copyright 2008 Jack Christopher Kastorff +(function(){ + +var repeatString = function (str, rep) { + var outstr = ''; + for (var i = 0; i < rep; i++) { + outstr += str; + } + return outstr; +}; + +var makeTable = function (width, height) { + var table = document.createElement("div"); + var arr = []; + for (var j = 1; j <= height; j++) { + var row = document.createElement("div"); + var arrrow = []; + row.style.fontFamily = '"ProFont", "Luxi Mono", "Monaco", "Courier", "Courier new", monospace'; + row.style.margin = '0'; + row.style.padding = '0'; + row.style.wordSpacing = '0'; + row.style.height = '1.2em'; + for (var i = 1; i <= width; i++) { + var charelem = document.createElement("pre"); + charelem.style.backgroundColor = '#000'; + charelem.style.color = '#FFF'; + charelem.style.display = 'inline'; + charelem.style.fontWeight = 'normal'; + charelem.style.textDecoration = 'none'; + charelem.style.letterSpacing = '0'; + charelem.style.margin = '0'; + charelem.style.padding = '0 0 0.2em 0'; + charelem.appendChild(document.createTextNode(" ")); + row.appendChild(charelem); + arrrow.push(charelem); + } + table.appendChild(row); + arr.push(arrrow); + } + return { "arr": arr, "elem": table }; +}; + +var setTextChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].firstChild.replaceData(0, 1, r.charAt(i)); + } +}; + +var setBoldChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.fontWeight = r.charAt(i) == 0 ? 'normal' : 'bold'; + } +}; + +var setUnderlineChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.textDecoration = r.charAt(i) == 0 ? 'none' : 'underline'; + } +}; + +var clut = { 0: "#000", 1: "#D00", 2: "#0D0", 3: "#DD0", 4: "#00D", 5: "#D0D", 6: "#0DD", 7: "#DDD" }; + +var setFcolorChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.color = clut[r.charAt(i)]; + } +}; + +var t = 0; +var setBcolorChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.backgroundColor = clut[r.charAt(i)]; + } +}; + +var loadIFrame = function (tb, rowcaches, fr, width, height) { + var d = uncompressIFrameBlock(fr.d, width); + for (var i = 0; i < d.length; i++) { + setTextChunk(tb, d[i], i, 0); + rowcaches.d[i] = d[i]; + } + var B = uncompressIFrameBlock(fr.B, width); + for (var i = 0; i < B.length; i++) { + setBoldChunk(tb, B[i], i, 0); + rowcaches.B[i] = B[i]; + } + var U = uncompressIFrameBlock(fr.U, width); + for (var i = 0; i < U.length; i++) { + setUnderlineChunk(tb, U[i], i, 0); + rowcaches.U[i] = U[i]; + } + var f = uncompressIFrameBlock(fr.f, width); + for (var i = 0; i < f.length; i++) { + setFcolorChunk(tb, f[i], i, 0); + rowcaches.f[i] = f[i]; + } + var b = uncompressIFrameBlock(fr.b, width); + for (var i = 0; i < b.length; i++) { + setBcolorChunk(tb, b[i], i, 0); + rowcaches.b[i] = b[i]; + } +}; + +var uncompressIFrameBlock = function (d,width) { + var uncomp = []; + var last = null; + for (var i = 0; i < d.length; i++) { + var uncomprow = null; + if ( typeof d[i] == 'array' || typeof d[i] == 'object' ) { + if ( d[i][0] == "r" ) { + uncomprow = d[i][1]; + } else if ( d[i][0] == "a" ) { + uncomprow = repeatString(d[i][1], width); + } else { + throw new Error ("bad iframe data: subarray is not valid"); + } + } else if ( typeof d[i] == 'string' && d[i] == 'd' ) { + uncomprow = last; + } else { + throw new Error ("bad iframe data: unknown " + (typeof d[i]) + " in array"); + } + uncomp.push(uncomprow); + last = uncomprow; + } + return uncomp; +}; + +var loadPFrame = function (table, rowcaches, fr, width, height) { + if ( fr.d ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.d, width), rowcaches.d, setTextChunk); + } + if ( fr.B ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.B, width), rowcaches.B, setBoldChunk); + } + if ( fr.U ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.U, width), rowcaches.U, setUnderlineChunk); + } + if ( fr.f ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.f, width), rowcaches.f, setFcolorChunk); + } + if ( fr.b ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.b, width), rowcaches.b, setBcolorChunk); + } +}; + +var diffPushGeneric = function (table, d, rowcache, set) { + // convert everything to line operations + for (var i = 0; i < d.length; i++) { + var e = d[i]; + if ( e[0] == "cp" ) { + set(table, rowcache[e[1]], e[2], 0); + rowcache[e[2]] = rowcache[e[1]]; + } else if ( e[0] == 'char' ) { + var r = e[1]; + var v = rowcache[r]; + var da = v.slice(0, e[2]) + e[3] + v.slice(e[2]+1); + set(table, e[3], e[1], e[2]); + rowcache[r] = da; + } else if ( e[0] == 'chunk' ) { + var r = e[1]; + var v = rowcache[r]; + var da = v.slice(0, e[2]) + e[4] + v.slice(e[3]+1); + set(table, e[4], e[1], e[2]); + rowcache[r] = da; + } else if ( e[0] == 'line' ) { + set(table, e[2], e[1], 0); + rowcache[e[1]] = e[2]; + } else { + throw new Error ("unknown p-frame item type " + e[0] + ", len " + e.length); + } + } +}; + +var annotatedPFrameBlock = function (frame, width) { + var ann = []; + for (var i = 0; i < frame.length; i++) { + var e = frame[i]; + if ( e[0] == 'cp' ) { + ann.push(e); + } else if ( e.length == 2 ) { + // raw line + if ( typeof e[1] == 'string' ) { + ann.push(['line', e[0], e[1]]); + } else if ( e[1][0] == "a" ) { + ann.push(['line', e[0], repeatString(e[1][1], width)]); + } else { + throw new Error ("p-frame corrupted: invalid 2-len"); + } + } else if ( e.length == 3 ) { + // char + ann.push(['char', e[0], e[1], e[2]]); + } else if ( e.length == 4 ) { + // chunk + if ( typeof e[3] == 'string' ) { + ann.push(['chunk', e[0], e[1], e[2], e[3]]); + } else if ( e[3][0] == 'a' ) { + ann.push(['chunk', e[0], e[1], e[2], repeatString(e[3][1], e[2]-e[1]+1)]); + } else { + throw new Error ("p-frame corrupted: invalid 4-len"); + } + } else { + throw new Error ("p-frame corrupted: no such thing as a " + e.length + "-len"); + } + } + return ann; +}; + +var handleCursor = function (table, bgcache, curpos, dx, dy) { + if ( typeof dx == 'number' || typeof dy == 'number' ) { + // make sure the old cursor position has been overwritten + setBcolorChunk(table, bgcache[curpos[1]-1].charAt(curpos[0]-1), curpos[1]-1, curpos[0]-1); + if ( typeof dx == 'number' ) { + curpos[0] = dx; + } + if ( typeof dy == 'number' ) { + curpos[1] = dy; + } + } + + // draw the cursor + table.arr[curpos[1]-1][curpos[0]-1].style.backgroundColor = '#FFF'; +}; + +var makeCache = function (ch, wid, hei) { + var c = []; + for (var y = 0; y < hei; y++) { + c.push( repeatString(ch, wid) ); + } + return c; +}; + +var newSendBuffer = function (h) { + if ( ! h.activeRequest && h.sendBuffer.length > 0 ) { + if ( h.timer ) clearTimeout(h.timer); + request(h, "user input", { keys: h.sendBuffer } ); + h.sendBuffer = ''; + } +}; + +var request = function (h, cmd, args) { + if ( h.activeRequest ) return; + var url = '/api?'; + args['type'] = cmd; + if ( h.id ) args['id'] = h.id; + var urlargs = []; + for (var k in args) { + urlargs.push( encodeURIComponent(k) + '=' + encodeURIComponent(args[k]) ); + } + url += urlargs.join("&"); + + h.activeRequest = true; + var req = new XMLHttpRequest(); + req.open("GET", url, true); + req.onreadystatechange = function () { + if ( req.readyState == 4 && req.status == 200 ) { + var data = eval('(' + req.responseText + ')'); + if ( typeof data == "undefined" ) { + alert("err: undefined"); + h.activeRequest = false; + req = null; + return; + } + if ( data.ok ) { + if ( data.id ) h.id = data.id; + if ( data.pframe ) { + loadPFrame(h.table, h.rowcaches, data.pframe, h.width, h.height); + if ( data.pframe.x && data.pframe.y ) { + handleCursor(h.table, h.rowcaches.b, h.curpos, data.pframe.x, data.pframe.y); + } + } + if ( data.iframe ) { + loadIFrame(h.table, h.rowcaches, data.iframe, h.width, h.height); + handleCursor(h.table, h.rowcaches.b, h.curpos, data.iframe.x, data.iframe.y); + } + h.timer = setTimeout( function () { request(h, "pframe", { }); }, h.timerlen.current ); + h.timerlen.current *= h.timerlen.step; + if ( h.timerlen.current > h.timerlen.max ) { + h.timerlen.current = h.timerlen.max; + } + h.activeRequest = false; + newSendBuffer(h); + } else { + h.activeRequest = false; + alert("err: " + data.error); + } + req = null; + return; + } else if ( req.readyState == 4 && req.status != 200 ) { + alert("err: response code " + req.status); + h.activeRequest = false; + req = null; + return; + } + }; + req.send(null); +}; + +var keyPressHandler = function (h, e) { + var str = String.fromCharCode(e.charCode); + h.sendBuffer += str; + h.timerlen.current = h.timerlen.min; + e.stopPropagation(); + e.preventDefault(); + newSendBuffer(h); + return false; +}; + +startStreamTTY = function (elem) { + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + var width = 80; + var height = 24; + + var table = makeTable(width, height); + elem.appendChild(table.elem); + + var holder = { + 'width': width, + 'height': height, + 'table': table, + 'rowcaches': { + 'd': makeCache(" ", width, height), + 'f': makeCache("7", width, height), + 'b': makeCache("0", width, height), + 'B': makeCache("0", width, height), + 'U': makeCache("0", width, height) + }, + 'curpos': [1,1], + 'sendBuffer': '', + 'timerlen': { + 'max': 15000, + 'current': 100, + 'min': 100, + 'step': 1.05 + }, + 'activeRequest': false, + }; + + document.body.addEventListener( "keypress", function (e) { return keyPressHandler(holder, e); }, true ); + + request(holder, "create session", {}); +}; + +}()); diff --git a/html/inc/tty.css b/html/inc/tty.css new file mode 100644 index 000000000..c65e717ee --- /dev/null +++ b/html/inc/tty.css @@ -0,0 +1,5 @@ +div#tty +{ + background: #000; + width: 80%; +} diff --git a/html/templates/index.erb b/html/templates/index.erb new file mode 100644 index 000000000..9ea2cf95b --- /dev/null +++ b/html/templates/index.erb @@ -0,0 +1,73 @@ + + + +Git权威指南——参考资料 +<% css_files.each do |t| %> + +<% end %> + + +
+ +

《Git权威指南》

+

参考资料

+ +++ + + + + + + + + + + + + + +
作者:@gotgit
网址:http://www.ossxp.com/GotGit/
版本:0.1
日期:2011-05
版权信息:Creative Commons
+ +

操作回放

+<% +parts = { 'part1' => '第1篇:初识Git', + 'part2' => '第2篇:Git独奏', + 'part3' => '第3篇:Git和声', + 'part4' => '第4篇:Git协同模型', + 'part5' => '第5篇:搭建Git服务器', + 'part6' => '第6篇:迁移到Git', + 'part7' => '第7篇:Git的其他应用', + 'part8' => '第8篇:Git杂谈', + 'part9' => '第9篇:附录', + } +%> + +<% parts.keys.sort.each do |key| %> +

<%= parts[key] %>

+ <% if ttyrec_list.member?(key) %> + + <% end %> +<% end %> + +

资源下载

+ +
+
演示版本库1
+
https://github.com/ossxp-com/gitdemo-commit-tree/
+
演示版本库2 (Hello world)
+
https://github.com/ossxp-com/hello-world/
+
本资料库
+
https://github.com/ossxp-com/gotgit-refs/
+
+ + +
+ + + diff --git a/html/templates/ttyplay.erb b/html/templates/ttyplay.erb new file mode 100644 index 000000000..53e176100 --- /dev/null +++ b/html/templates/ttyplay.erb @@ -0,0 +1,17 @@ + + +<%=title %> +<% css_files.each do |t| %> + +<% end %> + + +
+
Enable JavaScript to see the animation.
+ + +
+ + diff --git a/jsttyplay/JSON.pm b/jsttyplay/JSON.pm new file mode 100644 index 000000000..d4cdc75ea --- /dev/null +++ b/jsttyplay/JSON.pm @@ -0,0 +1,2264 @@ +package JSON; + + +use strict; +use Carp (); +use base qw(Exporter); +@JSON::EXPORT = qw(from_json to_json jsonToObj objToJson encode_json decode_json); + +BEGIN { + $JSON::VERSION = '2.51'; + $JSON::DEBUG = 0 unless (defined $JSON::DEBUG); + $JSON::DEBUG = $ENV{ PERL_JSON_DEBUG } if exists $ENV{ PERL_JSON_DEBUG }; +} + +my $Module_XS = 'JSON::XS'; +my $Module_PP = 'JSON::PP'; +my $Module_bp = 'JSON::backportPP'; # included in JSON distribution +my $PP_Version = '2.27105'; +my $XS_Version = '2.27'; + + +# XS and PP common methods + +my @PublicMethods = qw/ + ascii latin1 utf8 pretty indent space_before space_after relaxed canonical allow_nonref + allow_blessed convert_blessed filter_json_object filter_json_single_key_object + shrink max_depth max_size encode decode decode_prefix allow_unknown +/; + +my @Properties = qw/ + ascii latin1 utf8 indent space_before space_after relaxed canonical allow_nonref + allow_blessed convert_blessed shrink max_depth max_size allow_unknown +/; + +my @XSOnlyMethods = qw//; # Currently nothing + +my @PPOnlyMethods = qw/ + indent_length sort_by + allow_singlequote allow_bignum loose allow_barekey escape_slash as_nonblessed +/; # JSON::PP specific + + +# used in _load_xs and _load_pp ($INSTALL_ONLY is not used currently) +my $_INSTALL_DONT_DIE = 1; # When _load_xs fails to load XS, don't die. +my $_INSTALL_ONLY = 2; # Don't call _set_methods() +my $_ALLOW_UNSUPPORTED = 0; +my $_UNIV_CONV_BLESSED = 0; +my $_USSING_bpPP = 0; + + +# Check the environment variable to decide worker module. + +unless ($JSON::Backend) { + $JSON::DEBUG and Carp::carp("Check used worker module..."); + + my $backend = exists $ENV{PERL_JSON_BACKEND} ? $ENV{PERL_JSON_BACKEND} : 1; + + if ($backend eq '1' or $backend =~ /JSON::XS\s*,\s*JSON::PP/) { + _load_xs($_INSTALL_DONT_DIE) or _load_pp(); + } + elsif ($backend eq '0' or $backend eq 'JSON::PP') { + _load_pp(); + } + elsif ($backend eq '2' or $backend eq 'JSON::XS') { + _load_xs(); + } + elsif ($backend eq 'JSON::backportPP') { + $_USSING_bpPP = 1; + _load_pp(); + } + else { + Carp::croak "The value of environmental variable 'PERL_JSON_BACKEND' is invalid."; + } +} + + +sub import { + my $pkg = shift; + my @what_to_export; + my $no_export; + + for my $tag (@_) { + if ($tag eq '-support_by_pp') { + if (!$_ALLOW_UNSUPPORTED++) { + JSON::Backend::XS + ->support_by_pp(@PPOnlyMethods) if ($JSON::Backend eq $Module_XS); + } + next; + } + elsif ($tag eq '-no_export') { + $no_export++, next; + } + elsif ( $tag eq '-convert_blessed_universally' ) { + eval q| + require B; + *UNIVERSAL::TO_JSON = sub { + my $b_obj = B::svref_2object( $_[0] ); + return $b_obj->isa('B::HV') ? { %{ $_[0] } } + : $b_obj->isa('B::AV') ? [ @{ $_[0] } ] + : undef + ; + } + | if ( !$_UNIV_CONV_BLESSED++ ); + next; + } + push @what_to_export, $tag; + } + + return if ($no_export); + + __PACKAGE__->export_to_level(1, $pkg, @what_to_export); +} + + +# OBSOLETED + +sub jsonToObj { + my $alternative = 'from_json'; + if (defined $_[0] and UNIVERSAL::isa($_[0], 'JSON')) { + shift @_; $alternative = 'decode'; + } + Carp::carp "'jsonToObj' will be obsoleted. Please use '$alternative' instead."; + return JSON::from_json(@_); +}; + +sub objToJson { + my $alternative = 'to_json'; + if (defined $_[0] and UNIVERSAL::isa($_[0], 'JSON')) { + shift @_; $alternative = 'encode'; + } + Carp::carp "'objToJson' will be obsoleted. Please use '$alternative' instead."; + JSON::to_json(@_); +}; + + +# INTERFACES + +sub to_json ($@) { + if ( ref($_[0]) eq 'JSON' or $_[0] eq 'JSON' ) { + Carp::croak "to_json should not be called as a method."; + } + my $json = new JSON; + + if (@_ == 2 and ref $_[1] eq 'HASH') { + my $opt = $_[1]; + for my $method (keys %$opt) { + $json->$method( $opt->{$method} ); + } + } + + $json->encode($_[0]); +} + + +sub from_json ($@) { + if ( ref($_[0]) eq 'JSON' or $_[0] eq 'JSON' ) { + Carp::croak "from_json should not be called as a method."; + } + my $json = new JSON; + + if (@_ == 2 and ref $_[1] eq 'HASH') { + my $opt = $_[1]; + for my $method (keys %$opt) { + $json->$method( $opt->{$method} ); + } + } + + return $json->decode( $_[0] ); +} + + +sub true { $JSON::true } + +sub false { $JSON::false } + +sub null { undef; } + + +sub require_xs_version { $XS_Version; } + +sub backend { + my $proto = shift; + $JSON::Backend; +} + +#*module = *backend; + + +sub is_xs { + return $_[0]->module eq $Module_XS; +} + + +sub is_pp { + return not $_[0]->xs; +} + + +sub pureperl_only_methods { @PPOnlyMethods; } + + +sub property { + my ($self, $name, $value) = @_; + + if (@_ == 1) { + my %props; + for $name (@Properties) { + my $method = 'get_' . $name; + if ($name eq 'max_size') { + my $value = $self->$method(); + $props{$name} = $value == 1 ? 0 : $value; + next; + } + $props{$name} = $self->$method(); + } + return \%props; + } + elsif (@_ > 3) { + Carp::croak('property() can take only the option within 2 arguments.'); + } + elsif (@_ == 2) { + if ( my $method = $self->can('get_' . $name) ) { + if ($name eq 'max_size') { + my $value = $self->$method(); + return $value == 1 ? 0 : $value; + } + $self->$method(); + } + } + else { + $self->$name($value); + } + +} + + + +# INTERNAL + +sub _load_xs { + my $opt = shift; + + $JSON::DEBUG and Carp::carp "Load $Module_XS."; + + # if called after install module, overload is disable.... why? + JSON::Boolean::_overrride_overload($Module_XS); + JSON::Boolean::_overrride_overload($Module_PP); + + eval qq| + use $Module_XS $XS_Version (); + |; + + if ($@) { + if (defined $opt and $opt & $_INSTALL_DONT_DIE) { + $JSON::DEBUG and Carp::carp "Can't load $Module_XS...($@)"; + return 0; + } + Carp::croak $@; + } + + unless (defined $opt and $opt & $_INSTALL_ONLY) { + _set_module( $JSON::Backend = $Module_XS ); + my $data = join("", ); # this code is from Jcode 2.xx. + close(DATA); + eval $data; + JSON::Backend::XS->init; + } + + return 1; +}; + + +sub _load_pp { + my $opt = shift; + my $backend = $_USSING_bpPP ? $Module_bp : $Module_PP; + + $JSON::DEBUG and Carp::carp "Load $backend."; + + # if called after install module, overload is disable.... why? + JSON::Boolean::_overrride_overload($Module_XS); + JSON::Boolean::_overrride_overload($backend); + + if ( $_USSING_bpPP ) { + eval qq| require $backend |; + } + else { + eval qq| use $backend $PP_Version () |; + } + + if ($@) { + if ( $backend eq $Module_PP ) { + $JSON::DEBUG and Carp::carp "Can't load $Module_PP ($@), so try to load $Module_bp"; + $_USSING_bpPP++; + $backend = $Module_bp; + JSON::Boolean::_overrride_overload($backend); + local $^W; # if PP installed but invalid version, backportPP redifines methods. + eval qq| require $Module_bp |; + } + Carp::croak $@ if $@; + } + + unless (defined $opt and $opt & $_INSTALL_ONLY) { + _set_module( $JSON::Backend = $Module_PP ); # even if backportPP, set $Backend with 'JSON::PP' + JSON::Backend::PP->init; + } +}; + + +sub _set_module { + return if defined $JSON::true; + + my $module = shift; + + local $^W; + no strict qw(refs); + + $JSON::true = ${"$module\::true"}; + $JSON::false = ${"$module\::false"}; + + push @JSON::ISA, $module; + push @{"$module\::Boolean::ISA"}, qw(JSON::Boolean); + + *{"JSON::is_bool"} = \&{"$module\::is_bool"}; + + for my $method ($module eq $Module_XS ? @PPOnlyMethods : @XSOnlyMethods) { + *{"JSON::$method"} = sub { + Carp::carp("$method is not supported in $module."); + $_[0]; + }; + } + + return 1; +} + + + +# +# JSON Boolean +# + +package JSON::Boolean; + +my %Installed; + +sub _overrride_overload { + return if ($Installed{ $_[0] }++); + + my $boolean = $_[0] . '::Boolean'; + + eval sprintf(q| + package %s; + use overload ( + '""' => sub { ${$_[0]} == 1 ? 'true' : 'false' }, + 'eq' => sub { + my ($obj, $op) = ref ($_[0]) ? ($_[0], $_[1]) : ($_[1], $_[0]); + if ($op eq 'true' or $op eq 'false') { + return "$obj" eq 'true' ? 'true' eq $op : 'false' eq $op; + } + else { + return $obj ? 1 == $op : 0 == $op; + } + }, + ); + |, $boolean); + + if ($@) { Carp::croak $@; } + + return 1; +} + + +# +# Helper classes for Backend Module (PP) +# + +package JSON::Backend::PP; + +sub init { + local $^W; + no strict qw(refs); # this routine may be called after JSON::Backend::XS init was called. + *{"JSON::decode_json"} = \&{"JSON::PP::decode_json"}; + *{"JSON::encode_json"} = \&{"JSON::PP::encode_json"}; + *{"JSON::PP::is_xs"} = sub { 0 }; + *{"JSON::PP::is_pp"} = sub { 1 }; + return 1; +} + +# +# To save memory, the below lines are read only when XS backend is used. +# + +package JSON; + +1; +__DATA__ + + +# +# Helper classes for Backend Module (XS) +# + +package JSON::Backend::XS; + +use constant INDENT_LENGTH_FLAG => 15 << 12; + +use constant UNSUPPORTED_ENCODE_FLAG => { + ESCAPE_SLASH => 0x00000010, + ALLOW_BIGNUM => 0x00000020, + AS_NONBLESSED => 0x00000040, + EXPANDED => 0x10000000, # for developer's +}; + +use constant UNSUPPORTED_DECODE_FLAG => { + LOOSE => 0x00000001, + ALLOW_BIGNUM => 0x00000002, + ALLOW_BAREKEY => 0x00000004, + ALLOW_SINGLEQUOTE => 0x00000008, + EXPANDED => 0x20000000, # for developer's +}; + + +sub init { + local $^W; + no strict qw(refs); + *{"JSON::decode_json"} = \&{"JSON::XS::decode_json"}; + *{"JSON::encode_json"} = \&{"JSON::XS::encode_json"}; + *{"JSON::XS::is_xs"} = sub { 1 }; + *{"JSON::XS::is_pp"} = sub { 0 }; + return 1; +} + + +sub support_by_pp { + my ($class, @methods) = @_; + + local $^W; + no strict qw(refs); + + my $JSON_XS_encode_orignal = \&JSON::XS::encode; + my $JSON_XS_decode_orignal = \&JSON::XS::decode; + my $JSON_XS_incr_parse_orignal = \&JSON::XS::incr_parse; + + *JSON::XS::decode = \&JSON::Backend::XS::Supportable::_decode; + *JSON::XS::encode = \&JSON::Backend::XS::Supportable::_encode; + *JSON::XS::incr_parse = \&JSON::Backend::XS::Supportable::_incr_parse; + + *{JSON::XS::_original_decode} = $JSON_XS_decode_orignal; + *{JSON::XS::_original_encode} = $JSON_XS_encode_orignal; + *{JSON::XS::_original_incr_parse} = $JSON_XS_incr_parse_orignal; + + push @JSON::Backend::XS::Supportable::ISA, 'JSON'; + + my $pkg = 'JSON::Backend::XS::Supportable'; + + *{JSON::new} = sub { + my $proto = new JSON::XS; $$proto = 0; + bless $proto, $pkg; + }; + + + for my $method (@methods) { + my $flag = uc($method); + my $type |= (UNSUPPORTED_ENCODE_FLAG->{$flag} || 0); + $type |= (UNSUPPORTED_DECODE_FLAG->{$flag} || 0); + + next unless($type); + + $pkg->_make_unsupported_method($method => $type); + } + + push @{"JSON::XS::Boolean::ISA"}, qw(JSON::PP::Boolean); + push @{"JSON::PP::Boolean::ISA"}, qw(JSON::Boolean); + + $JSON::DEBUG and Carp::carp("set -support_by_pp mode."); + + return 1; +} + + + + +# +# Helper classes for XS +# + +package JSON::Backend::XS::Supportable; + +$Carp::Internal{'JSON::Backend::XS::Supportable'} = 1; + +sub _make_unsupported_method { + my ($pkg, $method, $type) = @_; + + local $^W; + no strict qw(refs); + + *{"$pkg\::$method"} = sub { + local $^W; + if (defined $_[1] ? $_[1] : 1) { + ${$_[0]} |= $type; + } + else { + ${$_[0]} &= ~$type; + } + $_[0]; + }; + + *{"$pkg\::get_$method"} = sub { + ${$_[0]} & $type ? 1 : ''; + }; + +} + + +sub _set_for_pp { + JSON::_load_pp( $_INSTALL_ONLY ); + + my $type = shift; + my $pp = new JSON::PP; + my $prop = $_[0]->property; + + for my $name (keys %$prop) { + $pp->$name( $prop->{$name} ? $prop->{$name} : 0 ); + } + + my $unsupported = $type eq 'encode' ? JSON::Backend::XS::UNSUPPORTED_ENCODE_FLAG + : JSON::Backend::XS::UNSUPPORTED_DECODE_FLAG; + my $flags = ${$_[0]} || 0; + + for my $name (keys %$unsupported) { + next if ($name eq 'EXPANDED'); # for developer's + my $enable = ($flags & $unsupported->{$name}) ? 1 : 0; + my $method = lc $name; + $pp->$method($enable); + } + + $pp->indent_length( $_[0]->get_indent_length ); + + return $pp; +} + +sub _encode { # using with PP encod + if (${$_[0]}) { + _set_for_pp('encode' => @_)->encode($_[1]); + } + else { + $_[0]->_original_encode( $_[1] ); + } +} + + +sub _decode { # if unsupported-flag is set, use PP + if (${$_[0]}) { + _set_for_pp('decode' => @_)->decode($_[1]); + } + else { + $_[0]->_original_decode( $_[1] ); + } +} + + +sub decode_prefix { # if unsupported-flag is set, use PP + _set_for_pp('decode' => @_)->decode_prefix($_[1]); +} + + +sub _incr_parse { + if (${$_[0]}) { + _set_for_pp('decode' => @_)->incr_parse($_[1]); + } + else { + $_[0]->_original_incr_parse( $_[1] ); + } +} + + +sub get_indent_length { + ${$_[0]} << 4 >> 16; +} + + +sub indent_length { + my $length = $_[1]; + + if (!defined $length or $length > 15 or $length < 0) { + Carp::carp "The acceptable range of indent_length() is 0 to 15."; + } + else { + local $^W; + $length <<= 12; + ${$_[0]} &= ~ JSON::Backend::XS::INDENT_LENGTH_FLAG; + ${$_[0]} |= $length; + *JSON::XS::encode = \&JSON::Backend::XS::Supportable::_encode; + } + + $_[0]; +} + + +1; +__END__ + +=head1 NAME + +JSON - JSON (JavaScript Object Notation) encoder/decoder + +=head1 SYNOPSIS + + use JSON; # imports encode_json, decode_json, to_json and from_json. + + # simple and fast interfaces (expect/generate UTF-8) + + $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref; + $perl_hash_or_arrayref = decode_json $utf8_encoded_json_text; + + # OO-interface + + $json = JSON->new->allow_nonref; + + $json_text = $json->encode( $perl_scalar ); + $perl_scalar = $json->decode( $json_text ); + + $pretty_printed = $json->pretty->encode( $perl_scalar ); # pretty-printing + + # If you want to use PP only support features, call with '-support_by_pp' + # When XS unsupported feature is enable, using PP (de|en)code instead of XS ones. + + use JSON -support_by_pp; + + # option-acceptable interfaces (expect/generate UNICODE by default) + + $json_text = to_json( $perl_scalar, { ascii => 1, pretty => 1 } ); + $perl_scalar = from_json( $json_text, { utf8 => 1 } ); + + # Between (en|de)code_json and (to|from)_json, if you want to write + # a code which communicates to an outer world (encoded in UTF-8), + # recommend to use (en|de)code_json. + +=head1 VERSION + + 2.51 + +This version is compatible with JSON::XS B<2.27> and later. + + +=head1 NOTE + +JSON::PP was inculded in C distribution. +It comes to be a perl core module in Perl 5.14. +And L will be split away it. + +C distribution will inculde yet another JSON::PP modules. +They are JSNO::backportPP and so on. JSON.pm should work as it did at all. + +=head1 DESCRIPTION + + ************************** CAUTION ******************************** + * This is 'JSON module version 2' and there are many differences * + * to version 1.xx * + * Please check your applications useing old version. * + * See to 'INCOMPATIBLE CHANGES TO OLD VERSION' * + ******************************************************************* + +JSON (JavaScript Object Notation) is a simple data format. +See to L and C(L). + +This module converts Perl data structures to JSON and vice versa using either +L or L. + +JSON::XS is the fastest and most proper JSON module on CPAN which must be +compiled and installed in your environment. +JSON::PP is a pure-Perl module which is bundled in this distribution and +has a strong compatibility to JSON::XS. + +This module try to use JSON::XS by default and fail to it, use JSON::PP instead. +So its features completely depend on JSON::XS or JSON::PP. + +See to L. + +To distinguish the module name 'JSON' and the format type JSON, +the former is quoted by CEE (its results vary with your using media), +and the latter is left just as it is. + +Module name : C + +Format type : JSON + +=head2 FEATURES + +=over + +=item * correct unicode handling + +This module (i.e. backend modules) knows how to handle Unicode, documents +how and when it does so, and even documents what "correct" means. + +Even though there are limitations, this feature is available since Perl version 5.6. + +JSON::XS requires Perl 5.8.2 (but works correctly in 5.8.8 or later), so in older versions +C sholud call JSON::PP as the backend which can be used since Perl 5.005. + +With Perl 5.8.x JSON::PP works, but from 5.8.0 to 5.8.2, because of a Perl side problem, +JSON::PP works slower in the versions. And in 5.005, the Unicode handling is not available. +See to L for more information. + +See also to L +and L. + + +=item * round-trip integrity + +When you serialise a perl data structure using only data types supported +by JSON and Perl, the deserialised data structure is identical on the Perl +level. (e.g. the string "2.0" doesn't suddenly become "2" just because +it looks like a number). There I minor exceptions to this, read the +L section below to learn about those. + + +=item * strict checking of JSON correctness + +There is no guessing, no generating of illegal JSON texts by default, +and only JSON is accepted as input by default (the latter is a security +feature). + +See to L and L. + +=item * fast + +This module returns a JSON::XS object itself if available. +Compared to other JSON modules and other serialisers such as Storable, +JSON::XS usually compares favourably in terms of speed, too. + +If not available, C returns a JSON::PP object instead of JSON::XS and +it is very slow as pure-Perl. + +=item * simple to use + +This module has both a simple functional interface as well as an +object oriented interface interface. + +=item * reasonably versatile output formats + +You can choose between the most compact guaranteed-single-line format possible +(nice for simple line-based protocols), a pure-ASCII format (for when your transport +is not 8-bit clean, still supports the whole Unicode range), or a pretty-printed +format (for when you want to read that stuff). Or you can combine those features +in whatever way you like. + +=back + +=head1 FUNCTIONAL INTERFACE + +Some documents are copied and modified from L. +C and C are additional functions. + +=head2 encode_json + + $json_text = encode_json $perl_scalar + +Converts the given Perl data structure to a UTF-8 encoded, binary string. + +This function call is functionally identical to: + + $json_text = JSON->new->utf8->encode($perl_scalar) + +=head2 decode_json + + $perl_scalar = decode_json $json_text + +The opposite of C: expects an UTF-8 (binary) string and tries +to parse that as an UTF-8 encoded JSON text, returning the resulting +reference. + +This function call is functionally identical to: + + $perl_scalar = JSON->new->utf8->decode($json_text) + + +=head2 to_json + + $json_text = to_json($perl_scalar) + +Converts the given Perl data structure to a json string. + +This function call is functionally identical to: + + $json_text = JSON->new->encode($perl_scalar) + +Takes a hash reference as the second. + + $json_text = to_json($perl_scalar, $flag_hashref) + +So, + + $json_text = to_json($perl_scalar, {utf8 => 1, pretty => 1}) + +equivalent to: + + $json_text = JSON->new->utf8(1)->pretty(1)->encode($perl_scalar) + +If you want to write a modern perl code which communicates to outer world, +you should use C (supposed that JSON data are encoded in UTF-8). + +=head2 from_json + + $perl_scalar = from_json($json_text) + +The opposite of C: expects a json string and tries +to parse it, returning the resulting reference. + +This function call is functionally identical to: + + $perl_scalar = JSON->decode($json_text) + +Takes a hash reference as the second. + + $perl_scalar = from_json($json_text, $flag_hashref) + +So, + + $perl_scalar = from_json($json_text, {utf8 => 1}) + +equivalent to: + + $perl_scalar = JSON->new->utf8(1)->decode($json_text) + +If you want to write a modern perl code which communicates to outer world, +you should use C (supposed that JSON data are encoded in UTF-8). + +=head2 JSON::is_bool + + $is_boolean = JSON::is_bool($scalar) + +Returns true if the passed scalar represents either JSON::true or +JSON::false, two constants that act like C<1> and C<0> respectively +and are also used to represent JSON C and C in Perl strings. + +=head2 JSON::true + +Returns JSON true value which is blessed object. +It C JSON::Boolean object. + +=head2 JSON::false + +Returns JSON false value which is blessed object. +It C JSON::Boolean object. + +=head2 JSON::null + +Returns C. + +See L, below, for more information on how JSON values are mapped to +Perl. + +=head1 HOW DO I DECODE A DATA FROM OUTER AND ENCODE TO OUTER + +This section supposes that your perl vresion is 5.8 or later. + +If you know a JSON text from an outer world - a network, a file content, and so on, +is encoded in UTF-8, you should use C or C module object +with C enable. And the decoded result will contain UNICODE characters. + + # from network + my $json = JSON->new->utf8; + my $json_text = CGI->new->param( 'json_data' ); + my $perl_scalar = $json->decode( $json_text ); + + # from file content + local $/; + open( my $fh, '<', 'json.data' ); + $json_text = <$fh>; + $perl_scalar = decode_json( $json_text ); + +If an outer data is not encoded in UTF-8, firstly you should C it. + + use Encode; + local $/; + open( my $fh, '<', 'json.data' ); + my $encoding = 'cp932'; + my $unicode_json_text = decode( $encoding, <$fh> ); # UNICODE + + # or you can write the below code. + # + # open( my $fh, "<:encoding($encoding)", 'json.data' ); + # $unicode_json_text = <$fh>; + +In this case, C<$unicode_json_text> is of course UNICODE string. +So you B use C nor C module object with C enable. +Instead of them, you use C module object with C disable or C. + + $perl_scalar = $json->utf8(0)->decode( $unicode_json_text ); + # or + $perl_scalar = from_json( $unicode_json_text ); + +Or C and C: + + $perl_scalar = decode_json( encode( 'utf8', $unicode_json_text ) ); + # this way is not efficient. + +And now, you want to convert your C<$perl_scalar> into JSON data and +send it to an outer world - a network or a file content, and so on. + +Your data usually contains UNICODE strings and you want the converted data to be encoded +in UTF-8, you should use C or C module object with C enable. + + print encode_json( $perl_scalar ); # to a network? file? or display? + # or + print $json->utf8->encode( $perl_scalar ); + +If C<$perl_scalar> does not contain UNICODE but C<$encoding>-encoded strings +for some reason, then its characters are regarded as B for perl +(because it does not concern with your $encoding). +You B use C nor C module object with C enable. +Instead of them, you use C module object with C disable or C. +Note that the resulted text is a UNICODE string but no problem to print it. + + # $perl_scalar contains $encoding encoded string values + $unicode_json_text = $json->utf8(0)->encode( $perl_scalar ); + # or + $unicode_json_text = to_json( $perl_scalar ); + # $unicode_json_text consists of characters less than 0x100 + print $unicode_json_text; + +Or C all string values and C: + + $perl_scalar->{ foo } = decode( $encoding, $perl_scalar->{ foo } ); + # ... do it to each string values, then encode_json + $json_text = encode_json( $perl_scalar ); + +This method is a proper way but probably not efficient. + +See to L, L. + + +=head1 COMMON OBJECT-ORIENTED INTERFACE + +=head2 new + + $json = new JSON + +Returns a new C object inherited from either JSON::XS or JSON::PP +that can be used to de/encode JSON strings. + +All boolean flags described below are by default I. + +The mutators for flags all return the JSON object again and thus calls can +be chained: + + my $json = JSON->new->utf8->space_after->encode({a => [1,2]}) + => {"a": [1, 2]} + +=head2 ascii + + $json = $json->ascii([$enable]) + + $enabled = $json->get_ascii + +If $enable is true (or missing), then the encode method will not generate characters outside +the code range 0..127. Any Unicode characters outside that range will be escaped using either +a single \uXXXX or a double \uHHHH\uLLLLL escape sequence, as per RFC4627. + +If $enable is false, then the encode method will not escape Unicode characters unless +required by the JSON syntax or other flags. This results in a faster and more compact format. + +This feature depends on the used Perl version and environment. + +See to L if the backend is PP. + + JSON->new->ascii(1)->encode([chr 0x10401]) + => ["\ud801\udc01"] + +=head2 latin1 + + $json = $json->latin1([$enable]) + + $enabled = $json->get_latin1 + +If $enable is true (or missing), then the encode method will encode the resulting JSON +text as latin1 (or iso-8859-1), escaping any characters outside the code range 0..255. + +If $enable is false, then the encode method will not escape Unicode characters +unless required by the JSON syntax or other flags. + + JSON->new->latin1->encode (["\x{89}\x{abc}"] + => ["\x{89}\\u0abc"] # (perl syntax, U+abc escaped, U+89 not) + +=head2 utf8 + + $json = $json->utf8([$enable]) + + $enabled = $json->get_utf8 + +If $enable is true (or missing), then the encode method will encode the JSON result +into UTF-8, as required by many protocols, while the decode method expects to be handled +an UTF-8-encoded string. Please note that UTF-8-encoded strings do not contain any +characters outside the range 0..255, they are thus useful for bytewise/binary I/O. + +In future versions, enabling this option might enable autodetection of the UTF-16 and UTF-32 +encoding families, as described in RFC4627. + +If $enable is false, then the encode method will return the JSON string as a (non-encoded) +Unicode string, while decode expects thus a Unicode string. Any decoding or encoding +(e.g. to UTF-8 or UTF-16) needs to be done yourself, e.g. using the Encode module. + + +Example, output UTF-16BE-encoded JSON: + + use Encode; + $jsontext = encode "UTF-16BE", JSON::XS->new->encode ($object); + +Example, decode UTF-32LE-encoded JSON: + + use Encode; + $object = JSON::XS->new->decode (decode "UTF-32LE", $jsontext); + +See to L if the backend is PP. + + +=head2 pretty + + $json = $json->pretty([$enable]) + +This enables (or disables) all of the C, C and +C (and in the future possibly more) flags in one call to +generate the most readable (or most compact) form possible. + +Equivalent to: + + $json->indent->space_before->space_after + +The indent space length is three and JSON::XS cannot change the indent +space length. + +=head2 indent + + $json = $json->indent([$enable]) + + $enabled = $json->get_indent + +If C<$enable> is true (or missing), then the C method will use a multiline +format as output, putting every array member or object/hash key-value pair +into its own line, identing them properly. + +If C<$enable> is false, no newlines or indenting will be produced, and the +resulting JSON text is guarenteed not to contain any C. + +This setting has no effect when decoding JSON texts. + +The indent space length is three. +With JSON::PP, you can also access C to change indent space length. + + +=head2 space_before + + $json = $json->space_before([$enable]) + + $enabled = $json->get_space_before + +If C<$enable> is true (or missing), then the C method will add an extra +optional space before the C<:> separating keys from values in JSON objects. + +If C<$enable> is false, then the C method will not add any extra +space at those places. + +This setting has no effect when decoding JSON texts. + +Example, space_before enabled, space_after and indent disabled: + + {"key" :"value"} + + +=head2 space_after + + $json = $json->space_after([$enable]) + + $enabled = $json->get_space_after + +If C<$enable> is true (or missing), then the C method will add an extra +optional space after the C<:> separating keys from values in JSON objects +and extra whitespace after the C<,> separating key-value pairs and array +members. + +If C<$enable> is false, then the C method will not add any extra +space at those places. + +This setting has no effect when decoding JSON texts. + +Example, space_before and indent disabled, space_after enabled: + + {"key": "value"} + + +=head2 relaxed + + $json = $json->relaxed([$enable]) + + $enabled = $json->get_relaxed + +If C<$enable> is true (or missing), then C will accept some +extensions to normal JSON syntax (see below). C will not be +affected in anyway. I. I suggest only to use this option to +parse application-specific files written by humans (configuration files, +resource files etc.) + +If C<$enable> is false (the default), then C will only accept +valid JSON texts. + +Currently accepted extensions are: + +=over 4 + +=item * list items can have an end-comma + +JSON I array elements and key-value pairs with commas. This +can be annoying if you write JSON texts manually and want to be able to +quickly append elements, so this extension accepts comma at the end of +such items not just between them: + + [ + 1, + 2, <- this comma not normally allowed + ] + { + "k1": "v1", + "k2": "v2", <- this comma not normally allowed + } + +=item * shell-style '#'-comments + +Whenever JSON allows whitespace, shell-style comments are additionally +allowed. They are terminated by the first carriage-return or line-feed +character, after which more white-space and comments are allowed. + + [ + 1, # this comment not allowed in JSON + # neither this one... + ] + +=back + + +=head2 canonical + + $json = $json->canonical([$enable]) + + $enabled = $json->get_canonical + +If C<$enable> is true (or missing), then the C method will output JSON objects +by sorting their keys. This is adding a comparatively high overhead. + +If C<$enable> is false, then the C method will output key-value +pairs in the order Perl stores them (which will likely change between runs +of the same script). + +This option is useful if you want the same data structure to be encoded as +the same JSON text (given the same overall settings). If it is disabled, +the same hash might be encoded differently even if contains the same data, +as key-value pairs have no inherent ordering in Perl. + +This setting has no effect when decoding JSON texts. + +=head2 allow_nonref + + $json = $json->allow_nonref([$enable]) + + $enabled = $json->get_allow_nonref + +If C<$enable> is true (or missing), then the C method can convert a +non-reference into its corresponding string, number or null JSON value, +which is an extension to RFC4627. Likewise, C will accept those JSON +values instead of croaking. + +If C<$enable> is false, then the C method will croak if it isn't +passed an arrayref or hashref, as JSON texts must either be an object +or array. Likewise, C will croak if given something that is not a +JSON object or array. + + JSON->new->allow_nonref->encode ("Hello, World!") + => "Hello, World!" + +=head2 allow_unknown + + $json = $json->allow_unknown ([$enable]) + + $enabled = $json->get_allow_unknown + +If $enable is true (or missing), then "encode" will *not* throw an +exception when it encounters values it cannot represent in JSON (for +example, filehandles) but instead will encode a JSON "null" value. +Note that blessed objects are not included here and are handled +separately by c. + +If $enable is false (the default), then "encode" will throw an +exception when it encounters anything it cannot encode as JSON. + +This option does not affect "decode" in any way, and it is +recommended to leave it off unless you know your communications +partner. + +=head2 allow_blessed + + $json = $json->allow_blessed([$enable]) + + $enabled = $json->get_allow_blessed + +If C<$enable> is true (or missing), then the C method will not +barf when it encounters a blessed reference. Instead, the value of the +B option will decide whether C (C +disabled or no C method found) or a representation of the +object (C enabled and C method found) is being +encoded. Has no effect on C. + +If C<$enable> is false (the default), then C will throw an +exception when it encounters a blessed object. + + +=head2 convert_blessed + + $json = $json->convert_blessed([$enable]) + + $enabled = $json->get_convert_blessed + +If C<$enable> is true (or missing), then C, upon encountering a +blessed object, will check for the availability of the C method +on the object's class. If found, it will be called in scalar context +and the resulting scalar will be encoded instead of the object. If no +C method is found, the value of C will decide what +to do. + +The C method may safely call die if it wants. If C +returns other blessed objects, those will be handled in the same +way. C must take care of not causing an endless recursion cycle +(== crash) in this case. The name of C was chosen because other +methods called by the Perl core (== not by the user of the object) are +usually in upper case letters and to avoid collisions with the C +function or method. + +This setting does not yet influence C in any way. + +If C<$enable> is false, then the C setting will decide what +to do when a blessed object is found. + +=over + +=item convert_blessed_universally mode + +If use C with C<-convert_blessed_universally>, the C +subroutine is defined as the below code: + + *UNIVERSAL::TO_JSON = sub { + my $b_obj = B::svref_2object( $_[0] ); + return $b_obj->isa('B::HV') ? { %{ $_[0] } } + : $b_obj->isa('B::AV') ? [ @{ $_[0] } ] + : undef + ; + } + +This will cause that C method converts simple blessed objects into +JSON objects as non-blessed object. + + JSON -convert_blessed_universally; + $json->allow_blessed->convert_blessed->encode( $blessed_object ) + +This feature is experimental and may be removed in the future. + +=back + +=head2 filter_json_object + + $json = $json->filter_json_object([$coderef]) + +When C<$coderef> is specified, it will be called from C each +time it decodes a JSON object. The only argument passed to the coderef +is a reference to the newly-created hash. If the code references returns +a single scalar (which need not be a reference), this value +(i.e. a copy of that scalar to avoid aliasing) is inserted into the +deserialised data structure. If it returns an empty list +(NOTE: I C, which is a valid scalar), the original deserialised +hash will be inserted. This setting can slow down decoding considerably. + +When C<$coderef> is omitted or undefined, any existing callback will +be removed and C will not change the deserialised hash in any +way. + +Example, convert all JSON objects into the integer 5: + + my $js = JSON->new->filter_json_object (sub { 5 }); + # returns [5] + $js->decode ('[{}]'); # the given subroutine takes a hash reference. + # throw an exception because allow_nonref is not enabled + # so a lone 5 is not allowed. + $js->decode ('{"a":1, "b":2}'); + + +=head2 filter_json_single_key_object + + $json = $json->filter_json_single_key_object($key [=> $coderef]) + +Works remotely similar to C, but is only called for +JSON objects having a single key named C<$key>. + +This C<$coderef> is called before the one specified via +C, if any. It gets passed the single value in the JSON +object. If it returns a single value, it will be inserted into the data +structure. If it returns nothing (not even C but the empty list), +the callback from C will be called next, as if no +single-key callback were specified. + +If C<$coderef> is omitted or undefined, the corresponding callback will be +disabled. There can only ever be one callback for a given key. + +As this callback gets called less often then the C +one, decoding speed will not usually suffer as much. Therefore, single-key +objects make excellent targets to serialise Perl objects into, especially +as single-key JSON objects are as close to the type-tagged value concept +as JSON gets (it's basically an ID/VALUE tuple). Of course, JSON does not +support this in any way, so you need to make sure your data never looks +like a serialised Perl hash. + +Typical names for the single object key are C<__class_whatever__>, or +C<$__dollars_are_rarely_used__$> or C<}ugly_brace_placement>, or even +things like C<__class_md5sum(classname)__>, to reduce the risk of clashing +with real hashes. + +Example, decode JSON objects of the form C<< { "__widget__" => } >> +into the corresponding C<< $WIDGET{} >> object: + + # return whatever is in $WIDGET{5}: + JSON + ->new + ->filter_json_single_key_object (__widget__ => sub { + $WIDGET{ $_[0] } + }) + ->decode ('{"__widget__": 5') + + # this can be used with a TO_JSON method in some "widget" class + # for serialisation to json: + sub WidgetBase::TO_JSON { + my ($self) = @_; + + unless ($self->{id}) { + $self->{id} = ..get..some..id..; + $WIDGET{$self->{id}} = $self; + } + + { __widget__ => $self->{id} } + } + + +=head2 shrink + + $json = $json->shrink([$enable]) + + $enabled = $json->get_shrink + +With JSON::XS, this flag resizes strings generated by either +C or C to their minimum size possible. This can save +memory when your JSON texts are either very very long or you have many +short strings. It will also try to downgrade any strings to octet-form +if possible: perl stores strings internally either in an encoding called +UTF-X or in octet-form. The latter cannot store everything but uses less +space in general (and some buggy Perl or C code might even rely on that +internal representation being used). + +With JSON::PP, it is noop about resizing strings but tries +C to the returned string by C. See to L. + +See to L and L. + +=head2 max_depth + + $json = $json->max_depth([$maximum_nesting_depth]) + + $max_depth = $json->get_max_depth + +Sets the maximum nesting level (default C<512>) accepted while encoding +or decoding. If a higher nesting level is detected in JSON text or a Perl +data structure, then the encoder and decoder will stop and croak at that +point. + +Nesting level is defined by number of hash- or arrayrefs that the encoder +needs to traverse to reach a given point or the number of C<{> or C<[> +characters without their matching closing parenthesis crossed to reach a +given character in a string. + +If no argument is given, the highest possible setting will be used, which +is rarely useful. + +Note that nesting is implemented by recursion in C. The default value has +been chosen to be as large as typical operating systems allow without +crashing. (JSON::XS) + +With JSON::PP as the backend, when a large value (100 or more) was set and +it de/encodes a deep nested object/text, it may raise a warning +'Deep recursion on subroutin' at the perl runtime phase. + +See L for more info on why this is useful. + +=head2 max_size + + $json = $json->max_size([$maximum_string_size]) + + $max_size = $json->get_max_size + +Set the maximum length a JSON text may have (in bytes) where decoding is +being attempted. The default is C<0>, meaning no limit. When C +is called on a string that is longer then this many bytes, it will not +attempt to decode the string but throw an exception. This setting has no +effect on C (yet). + +If no argument is given, the limit check will be deactivated (same as when +C<0> is specified). + +See L, below, for more info on why this is useful. + +=head2 encode + + $json_text = $json->encode($perl_scalar) + +Converts the given Perl data structure (a simple scalar or a reference +to a hash or array) to its JSON representation. Simple scalars will be +converted into JSON string or number sequences, while references to arrays +become JSON arrays and references to hashes become JSON objects. Undefined +Perl values (e.g. C) become JSON C values. +References to the integers C<0> and C<1> are converted into C and C. + +=head2 decode + + $perl_scalar = $json->decode($json_text) + +The opposite of C: expects a JSON text and tries to parse it, +returning the resulting simple scalar or reference. Croaks on error. + +JSON numbers and strings become simple Perl scalars. JSON arrays become +Perl arrayrefs and JSON objects become Perl hashrefs. C becomes +C<1> (C), C becomes C<0> (C) and +C becomes C. + +=head2 decode_prefix + + ($perl_scalar, $characters) = $json->decode_prefix($json_text) + +This works like the C method, but instead of raising an exception +when there is trailing garbage after the first JSON object, it will +silently stop parsing there and return the number of characters consumed +so far. + + JSON->new->decode_prefix ("[1] the tail") + => ([], 3) + +See to L + +=head2 property + + $boolean = $json->property($property_name) + +Returns a boolean value about above some properties. + +The available properties are C, C, C, +C,C, C, C, C, +C, C, C, C, +C, C and C. + + $boolean = $json->property('utf8'); + => 0 + $json->utf8; + $boolean = $json->property('utf8'); + => 1 + +Sets the property with a given boolean value. + + $json = $json->property($property_name => $boolean); + +With no argumnt, it returns all the above properties as a hash reference. + + $flag_hashref = $json->property(); + +=head1 INCREMENTAL PARSING + +Most of this section are copied and modified from L. + +In some cases, there is the need for incremental parsing of JSON texts. +This module does allow you to parse a JSON stream incrementally. +It does so by accumulating text until it has a full JSON object, which +it then can decode. This process is similar to using C +to see if a full JSON object is available, but is much more efficient +(and can be implemented with a minimum of method calls). + +The backend module will only attempt to parse the JSON text once it is sure it +has enough text to get a decisive result, using a very simple but +truly incremental parser. This means that it sometimes won't stop as +early as the full parser, for example, it doesn't detect parenthese +mismatches. The only thing it guarantees is that it starts decoding as +soon as a syntactically valid JSON text has been seen. This means you need +to set resource limits (e.g. C) to ensure the parser will stop +parsing in the presence if syntax errors. + +The following methods implement this incremental parser. + +=head2 incr_parse + + $json->incr_parse( [$string] ) # void context + + $obj_or_undef = $json->incr_parse( [$string] ) # scalar context + + @obj_or_empty = $json->incr_parse( [$string] ) # list context + +This is the central parsing function. It can both append new text and +extract objects from the stream accumulated so far (both of these +functions are optional). + +If C<$string> is given, then this string is appended to the already +existing JSON fragment stored in the C<$json> object. + +After that, if the function is called in void context, it will simply +return without doing anything further. This can be used to add more text +in as many chunks as you want. + +If the method is called in scalar context, then it will try to extract +exactly I JSON object. If that is successful, it will return this +object, otherwise it will return C. If there is a parse error, +this method will croak just as C would do (one can then use +C to skip the errornous part). This is the most common way of +using the method. + +And finally, in list context, it will try to extract as many objects +from the stream as it can find and return them, or the empty list +otherwise. For this to work, there must be no separators between the JSON +objects or arrays, instead they must be concatenated back-to-back. If +an error occurs, an exception will be raised as in the scalar context +case. Note that in this case, any previously-parsed JSON texts will be +lost. + +Example: Parse some JSON arrays/objects in a given string and return them. + + my @objs = JSON->new->incr_parse ("[5][7][1,2]"); + +=head2 incr_text + + $lvalue_string = $json->incr_text + +This method returns the currently stored JSON fragment as an lvalue, that +is, you can manipulate it. This I works when a preceding call to +C in I successfully returned an object. Under +all other circumstances you must not call this function (I mean it. +although in simple tests it might actually work, it I fail under +real world conditions). As a special exception, you can also call this +method before having parsed anything. + +This function is useful in two cases: a) finding the trailing text after a +JSON object or b) parsing multiple JSON objects separated by non-JSON text +(such as commas). + + $json->incr_text =~ s/\s*,\s*//; + +In Perl 5.005, C attribute is not available. +You must write codes like the below: + + $string = $json->incr_text; + $string =~ s/\s*,\s*//; + $json->incr_text( $string ); + +=head2 incr_skip + + $json->incr_skip + +This will reset the state of the incremental parser and will remove the +parsed text from the input buffer. This is useful after C +died, in which case the input buffer and incremental parser state is left +unchanged, to skip the text parsed so far and to reset the parse state. + +=head2 incr_reset + + $json->incr_reset + +This completely resets the incremental parser, that is, after this call, +it will be as if the parser had never parsed anything. + +This is useful if you want ot repeatedly parse JSON objects and want to +ignore any trailing data, which means you have to reset the parser after +each successful decode. + +See to L for examples. + + +=head1 JSON::PP SUPPORT METHODS + +The below methods are JSON::PP own methods, so when C works +with JSON::PP (i.e. the created object is a JSON::PP object), available. +See to L in detail. + +If you use C with additonal C<-support_by_pp>, some methods +are available even with JSON::XS. See to L. + + BEING { $ENV{PERL_JSON_BACKEND} = 'JSON::XS' } + + use JSON -support_by_pp; + + my $json = new JSON; + $json->allow_nonref->escape_slash->encode("/"); + + # functional interfaces too. + print to_json(["/"], {escape_slash => 1}); + print from_json('["foo"]', {utf8 => 1}); + +If you do not want to all functions but C<-support_by_pp>, +use C<-no_export>. + + use JSON -support_by_pp, -no_export; + # functional interfaces are not exported. + +=head2 allow_singlequote + + $json = $json->allow_singlequote([$enable]) + +If C<$enable> is true (or missing), then C will accept +any JSON strings quoted by single quotations that are invalid JSON +format. + + $json->allow_singlequote->decode({"foo":'bar'}); + $json->allow_singlequote->decode({'foo':"bar"}); + $json->allow_singlequote->decode({'foo':'bar'}); + +As same as the C option, this option may be used to parse +application-specific files written by humans. + +=head2 allow_barekey + + $json = $json->allow_barekey([$enable]) + +If C<$enable> is true (or missing), then C will accept +bare keys of JSON object that are invalid JSON format. + +As same as the C option, this option may be used to parse +application-specific files written by humans. + + $json->allow_barekey->decode('{foo:"bar"}'); + +=head2 allow_bignum + + $json = $json->allow_bignum([$enable]) + +If C<$enable> is true (or missing), then C will convert +the big integer Perl cannot handle as integer into a L +object and convert a floating number (any) into a L. + +On the contary, C converts C objects and C +objects into JSON numbers with C enable. + + $json->allow_nonref->allow_blessed->allow_bignum; + $bigfloat = $json->decode('2.000000000000000000000000001'); + print $json->encode($bigfloat); + # => 2.000000000000000000000000001 + +See to L aboout the conversion of JSON number. + +=head2 loose + + $json = $json->loose([$enable]) + +The unescaped [\x00-\x1f\x22\x2f\x5c] strings are invalid in JSON strings +and the module doesn't allow to C to these (except for \x2f). +If C<$enable> is true (or missing), then C will accept these +unescaped strings. + + $json->loose->decode(qq|["abc + def"]|); + +See to L. + +=head2 escape_slash + + $json = $json->escape_slash([$enable]) + +According to JSON Grammar, I (U+002F) is escaped. But by default +JSON backend modules encode strings without escaping slash. + +If C<$enable> is true (or missing), then C will escape slashes. + +=head2 indent_length + + $json = $json->indent_length($length) + +With JSON::XS, The indent space length is 3 and cannot be changed. +With JSON::PP, it sets the indent space length with the given $length. +The default is 3. The acceptable range is 0 to 15. + +=head2 sort_by + + $json = $json->sort_by($function_name) + $json = $json->sort_by($subroutine_ref) + +If $function_name or $subroutine_ref are set, its sort routine are used. + + $js = $pc->sort_by(sub { $JSON::PP::a cmp $JSON::PP::b })->encode($obj); + # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|); + + $js = $pc->sort_by('own_sort')->encode($obj); + # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|); + + sub JSON::PP::own_sort { $JSON::PP::a cmp $JSON::PP::b } + +As the sorting routine runs in the JSON::PP scope, the given +subroutine name and the special variables C<$a>, C<$b> will begin +with 'JSON::PP::'. + +If $integer is set, then the effect is same as C on. + +See to L. + +=head1 MAPPING + +This section is copied from JSON::XS and modified to C. +JSON::XS and JSON::PP mapping mechanisms are almost equivalent. + +See to L. + +=head2 JSON -> PERL + +=over 4 + +=item object + +A JSON object becomes a reference to a hash in Perl. No ordering of object +keys is preserved (JSON does not preserver object key ordering itself). + +=item array + +A JSON array becomes a reference to an array in Perl. + +=item string + +A JSON string becomes a string scalar in Perl - Unicode codepoints in JSON +are represented by the same codepoints in the Perl string, so no manual +decoding is necessary. + +=item number + +A JSON number becomes either an integer, numeric (floating point) or +string scalar in perl, depending on its range and any fractional parts. On +the Perl level, there is no difference between those as Perl handles all +the conversion details, but an integer may take slightly less memory and +might represent more values exactly than floating point numbers. + +If the number consists of digits only, C will try to represent +it as an integer value. If that fails, it will try to represent it as +a numeric (floating point) value if that is possible without loss of +precision. Otherwise it will preserve the number as a string value (in +which case you lose roundtripping ability, as the JSON number will be +re-encoded toa JSON string). + +Numbers containing a fractional or exponential part will always be +represented as numeric (floating point) values, possibly at a loss of +precision (in which case you might lose perfect roundtripping ability, but +the JSON number will still be re-encoded as a JSON number). + +Note that precision is not accuracy - binary floating point values cannot +represent most decimal fractions exactly, and when converting from and to +floating point, C only guarantees precision up to but not including +the leats significant bit. + +If the backend is JSON::PP and C is enable, the big integers +and the numeric can be optionally converted into L and +L objects. + +=item true, false + +These JSON atoms become C and C, +respectively. They are overloaded to act almost exactly like the numbers +C<1> and C<0>. You can check wether a scalar is a JSON boolean by using +the C function. + +If C and C are used as strings or compared as strings, +they represent as C and C respectively. + + print JSON::true . "\n"; + => true + print JSON::true + 1; + => 1 + + ok(JSON::true eq 'true'); + ok(JSON::true eq '1'); + ok(JSON::true == 1); + +C will install these missing overloading features to the backend modules. + + +=item null + +A JSON null atom becomes C in Perl. + +C returns C. + +=back + + +=head2 PERL -> JSON + +The mapping from Perl to JSON is slightly more difficult, as Perl is a +truly typeless language, so we can only guess which JSON type is meant by +a Perl value. + +=over 4 + +=item hash references + +Perl hash references become JSON objects. As there is no inherent ordering +in hash keys (or JSON objects), they will usually be encoded in a +pseudo-random order that can change between runs of the same program but +stays generally the same within a single run of a program. C +optionally sort the hash keys (determined by the I flag), so +the same datastructure will serialise to the same JSON text (given same +settings and version of JSON::XS), but this incurs a runtime overhead +and is only rarely useful, e.g. when you want to compare some JSON text +against another for equality. + +In future, the ordered object feature will be added to JSON::PP using C mechanism. + + +=item array references + +Perl array references become JSON arrays. + +=item other references + +Other unblessed references are generally not allowed and will cause an +exception to be thrown, except for references to the integers C<0> and +C<1>, which get turned into C and C atoms in JSON. You can +also use C and C to improve readability. + + to_json [\0,JSON::true] # yields [false,true] + +=item JSON::true, JSON::false, JSON::null + +These special values become JSON true and JSON false values, +respectively. You can also use C<\1> and C<\0> directly if you want. + +JSON::null returns C. + +=item blessed objects + +Blessed objects are not directly representable in JSON. See the +C and C methods on various options on +how to deal with this: basically, you can choose between throwing an +exception, encoding the reference as if it weren't blessed, or provide +your own serialiser method. + +With C mode, C converts blessed +hash references or blessed array references (contains other blessed references) +into JSON members and arrays. + + use JSON -convert_blessed_universally; + JSON->new->allow_blessed->convert_blessed->encode( $blessed_object ); + +See to L. + +=item simple scalars + +Simple Perl scalars (any scalar that is not a reference) are the most +difficult objects to encode: JSON::XS and JSON::PP will encode undefined scalars as +JSON C values, scalars that have last been used in a string context +before encoding as JSON strings, and anything else as number value: + + # dump as number + encode_json [2] # yields [2] + encode_json [-3.0e17] # yields [-3e+17] + my $value = 5; encode_json [$value] # yields [5] + + # used as string, so dump as string + print $value; + encode_json [$value] # yields ["5"] + + # undef becomes null + encode_json [undef] # yields [null] + +You can force the type to be a string by stringifying it: + + my $x = 3.1; # some variable containing a number + "$x"; # stringified + $x .= ""; # another, more awkward way to stringify + print $x; # perl does it for you, too, quite often + +You can force the type to be a number by numifying it: + + my $x = "3"; # some variable containing a string + $x += 0; # numify it, ensuring it will be dumped as a number + $x *= 1; # same thing, the choise is yours. + +You can not currently force the type in other, less obscure, ways. + +Note that numerical precision has the same meaning as under Perl (so +binary to decimal conversion follows the same rules as in Perl, which +can differ to other languages). Also, your perl interpreter might expose +extensions to the floating point numbers of your platform, such as +infinities or NaN's - these cannot be represented in JSON, and it is an +error to pass those in. + +=item Big Number + +If the backend is JSON::PP and C is enable, +C converts C objects and C +objects into JSON numbers. + + +=back + +=head1 JSON and ECMAscript + +See to L. + +=head1 JSON and YAML + +JSON is not a subset of YAML. +See to L. + + +=head1 BACKEND MODULE DECISION + +When you use C, C tries to C JSON::XS. If this call failed, it will +C JSON::PP. The required JSON::XS version is I<2.2> or later. + +The C constructor method returns an object inherited from the backend module, +and JSON::XS object is a blessed scaler reference while JSON::PP is a blessed hash +reference. + +So, your program should not depend on the backend module, especially +returned objects should not be modified. + + my $json = JSON->new; # XS or PP? + $json->{stash} = 'this is xs object'; # this code may raise an error! + +To check the backend module, there are some methods - C, C and C. + + JSON->backend; # 'JSON::XS' or 'JSON::PP' + + JSON->backend->is_pp: # 0 or 1 + + JSON->backend->is_xs: # 1 or 0 + + $json->is_xs; # 1 or 0 + + $json->is_pp; # 0 or 1 + + +If you set an enviornment variable C, The calling action will be changed. + +=over + +=item PERL_JSON_BACKEND = 0 or PERL_JSON_BACKEND = 'JSON::PP' + +Always use JSON::PP + +=item PERL_JSON_BACKEND == 1 or PERL_JSON_BACKEND = 'JSON::XS,JSON::PP' + +(The default) Use compiled JSON::XS if it is properly compiled & installed, +otherwise use JSON::PP. + +=item PERL_JSON_BACKEND == 2 or PERL_JSON_BACKEND = 'JSON::XS' + +Always use compiled JSON::XS, die if it isn't properly compiled & installed. + +=item PERL_JSON_BACKEND = 'JSON::backportPP' + +Always use JSON::backportPP. +JSON::backportPP is JSON::PP back port module. +C includs JSON::backportPP instead of JSON::PP. + +=back + +These ideas come from L mechanism. + +example: + + BEGIN { $ENV{PERL_JSON_BACKEND} = 'JSON::PP' } + use JSON; # always uses JSON::PP + +In future, it may be able to specify another module. + +=head1 USE PP FEATURES EVEN THOUGH XS BACKEND + +Many methods are available with either JSON::XS or JSON::PP and +when the backend module is JSON::XS, if any JSON::PP specific (i.e. JSON::XS unspported) +method is called, it will C and be noop. + +But If you C C passing the optional string C<-support_by_pp>, +it makes a part of those unupported methods available. +This feature is achieved by using JSON::PP in C. + + BEGIN { $ENV{PERL_JSON_BACKEND} = 2 } # with JSON::XS + use JSON -support_by_pp; + my $json = new JSON; + $json->allow_nonref->escape_slash->encode("/"); + +At this time, the returned object is a C +object (re-blessed XS object), and by checking JSON::XS unsupported flags +in de/encoding, can support some unsupported methods - C, C, +C, C, C and C. + +When any unsupported methods are not enable, C will be +used as is. The switch is achieved by changing the symbolic tables. + +C<-support_by_pp> is effective only when the backend module is JSON::XS +and it makes the de/encoding speed down a bit. + +See to L. + +=head1 INCOMPATIBLE CHANGES TO OLD VERSION + +There are big incompatibility between new version (2.00) and old (1.xx). +If you use old C 1.xx in your code, please check it. + +See to L + +=over + +=item jsonToObj and objToJson are obsoleted. + +Non Perl-style name C and C are obsoleted +(but not yet deleted from the source). +If you use these functions in your code, please replace them +with C and C. + + +=item Global variables are no longer available. + +C class variables - C<$JSON::AUTOCONVERT>, C<$JSON::BareKey>, etc... +- are not available any longer. +Instead, various features can be used through object methods. + + +=item Package JSON::Converter and JSON::Parser are deleted. + +Now C bundles with JSON::PP which can handle JSON more properly than them. + +=item Package JSON::NotString is deleted. + +There was C class which represents JSON value C, C, C +and numbers. It was deleted and replaced by C. + +C represents C and C. + +C does not represent C. + +C returns C. + +C makes L and L is-a relation +to L. + +=item function JSON::Number is obsoleted. + +C is now needless because JSON::XS and JSON::PP have +round-trip integrity. + +=item JSONRPC modules are deleted. + +Perl implementation of JSON-RPC protocol - C, C +and C are deleted in this distribution. +Instead of them, there is L which supports JSON-RPC protocol version 1.1. + +=back + +=head2 Transition ways from 1.xx to 2.xx. + +You should set C mode firstly, because +it is always successful for the below codes even with JSON::XS. + + use JSON -support_by_pp; + +=over + +=item Exported jsonToObj (simple) + + from_json($json_text); + +=item Exported objToJson (simple) + + to_json($perl_scalar); + +=item Exported jsonToObj (advanced) + + $flags = {allow_barekey => 1, allow_singlequote => 1}; + from_json($json_text, $flags); + +equivalent to: + + $JSON::BareKey = 1; + $JSON::QuotApos = 1; + jsonToObj($json_text); + +=item Exported objToJson (advanced) + + $flags = {allow_blessed => 1, allow_barekey => 1}; + to_json($perl_scalar, $flags); + +equivalent to: + + $JSON::BareKey = 1; + objToJson($perl_scalar); + +=item jsonToObj as object method + + $json->decode($json_text); + +=item objToJson as object method + + $json->encode($perl_scalar); + +=item new method with parameters + +The C method in 2.x takes any parameters no longer. +You can set parameters instead; + + $json = JSON->new->pretty; + +=item $JSON::Pretty, $JSON::Indent, $JSON::Delimiter + +If C is enable, that means C<$JSON::Pretty> flag set. And +C<$JSON::Delimiter> was substituted by C and C. +In conclusion: + + $json->indent->space_before->space_after; + +Equivalent to: + + $json->pretty; + +To change indent length, use C. + +(Only with JSON::PP, if C<-support_by_pp> is not used.) + + $json->pretty->indent_length(2)->encode($perl_scalar); + +=item $JSON::BareKey + +(Only with JSON::PP, if C<-support_by_pp> is not used.) + + $json->allow_barekey->decode($json_text) + +=item $JSON::ConvBlessed + +use C<-convert_blessed_universally>. See to L. + +=item $JSON::QuotApos + +(Only with JSON::PP, if C<-support_by_pp> is not used.) + + $json->allow_singlequote->decode($json_text) + +=item $JSON::SingleQuote + +Disable. C does not make such a invalid JSON string any longer. + +=item $JSON::KeySort + + $json->canonical->encode($perl_scalar) + +This is the ascii sort. + +If you want to use with your own sort routine, check the C method. + +(Only with JSON::PP, even if C<-support_by_pp> is used currently.) + + $json->sort_by($sort_routine_ref)->encode($perl_scalar) + + $json->sort_by(sub { $JSON::PP::a <=> $JSON::PP::b })->encode($perl_scalar) + +Can't access C<$a> and C<$b> but C<$JSON::PP::a> and C<$JSON::PP::b>. + +=item $JSON::SkipInvalid + + $json->allow_unknown + +=item $JSON::AUTOCONVERT + +Needless. C backend modules have the round-trip integrity. + +=item $JSON::UTF8 + +Needless because C (JSON::XS/JSON::PP) sets +the UTF8 flag on properly. + + # With UTF8-flagged strings + + $json->allow_nonref; + $str = chr(1000); # UTF8-flagged + + $json_text = $json->utf8(0)->encode($str); + utf8::is_utf8($json_text); + # true + $json_text = $json->utf8(1)->encode($str); + utf8::is_utf8($json_text); + # false + + $str = '"' . chr(1000) . '"'; # UTF8-flagged + + $perl_scalar = $json->utf8(0)->decode($str); + utf8::is_utf8($perl_scalar); + # true + $perl_scalar = $json->utf8(1)->decode($str); + # died because of 'Wide character in subroutine' + +See to L. + +=item $JSON::UnMapping + +Disable. See to L. + +=item $JSON::SelfConvert + +This option was deleted. +Instead of it, if a givien blessed object has the C method, +C will be executed with C. + + $json->convert_blessed->encode($bleesed_hashref_or_arrayref) + # if need, call allow_blessed + +Note that it was C in old version, but now not C but C. + +=back + +=head1 TODO + +=over + +=item example programs + +=back + +=head1 THREADS + +No test with JSON::PP. If with JSON::XS, See to L. + + +=head1 BUGS + +Please report bugs relevant to C to Emakamaka[at]cpan.orgE. + + +=head1 SEE ALSO + +Most of the document is copied and modified from JSON::XS doc. + +L, L + +C(L) + +=head1 AUTHOR + +Makamaka Hannyaharamitu, Emakamaka[at]cpan.orgE + +JSON::XS was written by Marc Lehmann + +The relese of this new version owes to the courtesy of Marc Lehmann. + + +=head1 COPYRIGHT AND LICENSE + +Copyright 2005-2010 by Makamaka Hannyaharamitu + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut + diff --git a/jsttyplay/JSON/backportPP.pm b/jsttyplay/JSON/backportPP.pm new file mode 100644 index 000000000..15420f2a8 --- /dev/null +++ b/jsttyplay/JSON/backportPP.pm @@ -0,0 +1,2792 @@ +package # This is JSON::backportPP + JSON::PP; + +# JSON-2.0 + +use 5.005; +use strict; +use base qw(Exporter); +use overload (); + +use Carp (); +use B (); +#use Devel::Peek; + +$JSON::PP::VERSION = '2.27105'; + +@JSON::PP::EXPORT = qw(encode_json decode_json from_json to_json); + +# instead of hash-access, i tried index-access for speed. +# but this method is not faster than what i expected. so it will be changed. + +use constant P_ASCII => 0; +use constant P_LATIN1 => 1; +use constant P_UTF8 => 2; +use constant P_INDENT => 3; +use constant P_CANONICAL => 4; +use constant P_SPACE_BEFORE => 5; +use constant P_SPACE_AFTER => 6; +use constant P_ALLOW_NONREF => 7; +use constant P_SHRINK => 8; +use constant P_ALLOW_BLESSED => 9; +use constant P_CONVERT_BLESSED => 10; +use constant P_RELAXED => 11; + +use constant P_LOOSE => 12; +use constant P_ALLOW_BIGNUM => 13; +use constant P_ALLOW_BAREKEY => 14; +use constant P_ALLOW_SINGLEQUOTE => 15; +use constant P_ESCAPE_SLASH => 16; +use constant P_AS_NONBLESSED => 17; + +use constant P_ALLOW_UNKNOWN => 18; + +use constant OLD_PERL => $] < 5.008 ? 1 : 0; + +BEGIN { + my @xs_compati_bit_properties = qw( + latin1 ascii utf8 indent canonical space_before space_after allow_nonref shrink + allow_blessed convert_blessed relaxed allow_unknown + ); + my @pp_bit_properties = qw( + allow_singlequote allow_bignum loose + allow_barekey escape_slash as_nonblessed + ); + + # Perl version check, Unicode handling is enable? + # Helper module sets @JSON::PP::_properties. + if ($] < 5.008 ) { + my $helper = $] >= 5.006 ? 'JSON::backportPP::Compat5006' : 'JSON::backportPP::Compat5005'; + eval qq| require $helper |; + if ($@) { Carp::croak $@; } + } + + for my $name (@xs_compati_bit_properties, @pp_bit_properties) { + my $flag_name = 'P_' . uc($name); + + eval qq/ + sub $name { + my \$enable = defined \$_[1] ? \$_[1] : 1; + + if (\$enable) { + \$_[0]->{PROPS}->[$flag_name] = 1; + } + else { + \$_[0]->{PROPS}->[$flag_name] = 0; + } + + \$_[0]; + } + + sub get_$name { + \$_[0]->{PROPS}->[$flag_name] ? 1 : ''; + } + /; + } + +} + + + +# Functions + +my %encode_allow_method + = map {($_ => 1)} qw/utf8 pretty allow_nonref latin1 self_encode escape_slash + allow_blessed convert_blessed indent indent_length allow_bignum + as_nonblessed + /; +my %decode_allow_method + = map {($_ => 1)} qw/utf8 allow_nonref loose allow_singlequote allow_bignum + allow_barekey max_size relaxed/; + + +my $JSON; # cache + +sub encode_json ($) { # encode + ($JSON ||= __PACKAGE__->new->utf8)->encode(@_); +} + + +sub decode_json { # decode + ($JSON ||= __PACKAGE__->new->utf8)->decode(@_); +} + +# Obsoleted + +sub to_json($) { + Carp::croak ("JSON::PP::to_json has been renamed to encode_json."); +} + + +sub from_json($) { + Carp::croak ("JSON::PP::from_json has been renamed to decode_json."); +} + + +# Methods + +sub new { + my $class = shift; + my $self = { + max_depth => 512, + max_size => 0, + indent => 0, + FLAGS => 0, + fallback => sub { encode_error('Invalid value. JSON can only reference.') }, + indent_length => 3, + }; + + bless $self, $class; +} + + +sub encode { + return $_[0]->PP_encode_json($_[1]); +} + + +sub decode { + return $_[0]->PP_decode_json($_[1], 0x00000000); +} + + +sub decode_prefix { + return $_[0]->PP_decode_json($_[1], 0x00000001); +} + + +# accessor + + +# pretty printing + +sub pretty { + my ($self, $v) = @_; + my $enable = defined $v ? $v : 1; + + if ($enable) { # indent_length(3) for JSON::XS compatibility + $self->indent(1)->indent_length(3)->space_before(1)->space_after(1); + } + else { + $self->indent(0)->space_before(0)->space_after(0); + } + + $self; +} + +# etc + +sub max_depth { + my $max = defined $_[1] ? $_[1] : 0x80000000; + $_[0]->{max_depth} = $max; + $_[0]; +} + + +sub get_max_depth { $_[0]->{max_depth}; } + + +sub max_size { + my $max = defined $_[1] ? $_[1] : 0; + $_[0]->{max_size} = $max; + $_[0]; +} + + +sub get_max_size { $_[0]->{max_size}; } + + +sub filter_json_object { + $_[0]->{cb_object} = defined $_[1] ? $_[1] : 0; + $_[0]->{F_HOOK} = ($_[0]->{cb_object} or $_[0]->{cb_sk_object}) ? 1 : 0; + $_[0]; +} + +sub filter_json_single_key_object { + if (@_ > 1) { + $_[0]->{cb_sk_object}->{$_[1]} = $_[2]; + } + $_[0]->{F_HOOK} = ($_[0]->{cb_object} or $_[0]->{cb_sk_object}) ? 1 : 0; + $_[0]; +} + +sub indent_length { + if (!defined $_[1] or $_[1] > 15 or $_[1] < 0) { + Carp::carp "The acceptable range of indent_length() is 0 to 15."; + } + else { + $_[0]->{indent_length} = $_[1]; + } + $_[0]; +} + +sub get_indent_length { + $_[0]->{indent_length}; +} + +sub sort_by { + $_[0]->{sort_by} = defined $_[1] ? $_[1] : 1; + $_[0]; +} + +sub allow_bigint { + Carp::carp("allow_bigint() is obsoleted. use allow_bignum() insted."); +} + +############################### + +### +### Perl => JSON +### + + +{ # Convert + + my $max_depth; + my $indent; + my $ascii; + my $latin1; + my $utf8; + my $space_before; + my $space_after; + my $canonical; + my $allow_blessed; + my $convert_blessed; + + my $indent_length; + my $escape_slash; + my $bignum; + my $as_nonblessed; + + my $depth; + my $indent_count; + my $keysort; + + + sub PP_encode_json { + my $self = shift; + my $obj = shift; + + $indent_count = 0; + $depth = 0; + + my $idx = $self->{PROPS}; + + ($ascii, $latin1, $utf8, $indent, $canonical, $space_before, $space_after, $allow_blessed, + $convert_blessed, $escape_slash, $bignum, $as_nonblessed) + = @{$idx}[P_ASCII .. P_SPACE_AFTER, P_ALLOW_BLESSED, P_CONVERT_BLESSED, + P_ESCAPE_SLASH, P_ALLOW_BIGNUM, P_AS_NONBLESSED]; + + ($max_depth, $indent_length) = @{$self}{qw/max_depth indent_length/}; + + $keysort = $canonical ? sub { $a cmp $b } : undef; + + if ($self->{sort_by}) { + $keysort = ref($self->{sort_by}) eq 'CODE' ? $self->{sort_by} + : $self->{sort_by} =~ /\D+/ ? $self->{sort_by} + : sub { $a cmp $b }; + } + + encode_error("hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this)") + if(!ref $obj and !$idx->[ P_ALLOW_NONREF ]); + + my $str = $self->object_to_json($obj); + + $str .= "\n" if ( $indent ); # JSON::XS 2.26 compatible + + unless ($ascii or $latin1 or $utf8) { + utf8::upgrade($str); + } + + if ($idx->[ P_SHRINK ]) { + utf8::downgrade($str, 1); + } + + return $str; + } + + + sub object_to_json { + my ($self, $obj) = @_; + my $type = ref($obj); + + if($type eq 'HASH'){ + return $self->hash_to_json($obj); + } + elsif($type eq 'ARRAY'){ + return $self->array_to_json($obj); + } + elsif ($type) { # blessed object? + if (blessed($obj)) { + + return $self->value_to_json($obj) if ( $obj->isa('JSON::PP::Boolean') ); + + if ( $convert_blessed and $obj->can('TO_JSON') ) { + my $result = $obj->TO_JSON(); + if ( defined $result and ref( $result ) ) { + if ( refaddr( $obj ) eq refaddr( $result ) ) { + encode_error( sprintf( + "%s::TO_JSON method returned same object as was passed instead of a new one", + ref $obj + ) ); + } + } + + return $self->object_to_json( $result ); + } + + return "$obj" if ( $bignum and _is_bignum($obj) ); + return $self->blessed_to_json($obj) if ($allow_blessed and $as_nonblessed); # will be removed. + + encode_error( sprintf("encountered object '%s', but neither allow_blessed " + . "nor convert_blessed settings are enabled", $obj) + ) unless ($allow_blessed); + + return 'null'; + } + else { + return $self->value_to_json($obj); + } + } + else{ + return $self->value_to_json($obj); + } + } + + + sub hash_to_json { + my ($self, $obj) = @_; + my @res; + + encode_error("json text or perl structure exceeds maximum nesting level (max_depth set too low?)") + if (++$depth > $max_depth); + + my ($pre, $post) = $indent ? $self->_up_indent() : ('', ''); + my $del = ($space_before ? ' ' : '') . ':' . ($space_after ? ' ' : ''); + + for my $k ( _sort( $obj ) ) { + if ( OLD_PERL ) { utf8::decode($k) } # key for Perl 5.6 / be optimized + push @res, string_to_json( $self, $k ) + . $del + . ( $self->object_to_json( $obj->{$k} ) || $self->value_to_json( $obj->{$k} ) ); + } + + --$depth; + $self->_down_indent() if ($indent); + + return '{' . ( @res ? $pre : '' ) . ( @res ? join( ",$pre", @res ) . $post : '' ) . '}'; + } + + + sub array_to_json { + my ($self, $obj) = @_; + my @res; + + encode_error("json text or perl structure exceeds maximum nesting level (max_depth set too low?)") + if (++$depth > $max_depth); + + my ($pre, $post) = $indent ? $self->_up_indent() : ('', ''); + + for my $v (@$obj){ + push @res, $self->object_to_json($v) || $self->value_to_json($v); + } + + --$depth; + $self->_down_indent() if ($indent); + + return '[' . ( @res ? $pre : '' ) . ( @res ? join( ",$pre", @res ) . $post : '' ) . ']'; + } + + + sub value_to_json { + my ($self, $value) = @_; + + return 'null' if(!defined $value); + + my $b_obj = B::svref_2object(\$value); # for round trip problem + my $flags = $b_obj->FLAGS; + + return $value # as is + if $flags & ( B::SVp_IOK | B::SVp_NOK ) and !( $flags & B::SVp_POK ); # SvTYPE is IV or NV? + + my $type = ref($value); + + if(!$type){ + return string_to_json($self, $value); + } + elsif( blessed($value) and $value->isa('JSON::PP::Boolean') ){ + return $$value == 1 ? 'true' : 'false'; + } + elsif ($type) { + if ((overload::StrVal($value) =~ /=(\w+)/)[0]) { + return $self->value_to_json("$value"); + } + + if ($type eq 'SCALAR' and defined $$value) { + return $$value eq '1' ? 'true' + : $$value eq '0' ? 'false' + : $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ? 'null' + : encode_error("cannot encode reference to scalar"); + } + + if ( $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ) { + return 'null'; + } + else { + if ( $type eq 'SCALAR' or $type eq 'REF' ) { + encode_error("cannot encode reference to scalar"); + } + else { + encode_error("encountered $value, but JSON can only represent references to arrays or hashes"); + } + } + + } + else { + return $self->{fallback}->($value) + if ($self->{fallback} and ref($self->{fallback}) eq 'CODE'); + return 'null'; + } + + } + + + my %esc = ( + "\n" => '\n', + "\r" => '\r', + "\t" => '\t', + "\f" => '\f', + "\b" => '\b', + "\"" => '\"', + "\\" => '\\\\', + "\'" => '\\\'', + ); + + + sub string_to_json { + my ($self, $arg) = @_; + + $arg =~ s/([\x22\x5c\n\r\t\f\b])/$esc{$1}/g; + $arg =~ s/\//\\\//g if ($escape_slash); + $arg =~ s/([\x00-\x08\x0b\x0e-\x1f])/'\\u00' . unpack('H2', $1)/eg; + + if ($ascii) { + $arg = JSON_PP_encode_ascii($arg); + } + + if ($latin1) { + $arg = JSON_PP_encode_latin1($arg); + } + + if ($utf8) { + utf8::encode($arg); + } + + return '"' . $arg . '"'; + } + + + sub blessed_to_json { + my $reftype = reftype($_[1]) || ''; + if ($reftype eq 'HASH') { + return $_[0]->hash_to_json($_[1]); + } + elsif ($reftype eq 'ARRAY') { + return $_[0]->array_to_json($_[1]); + } + else { + return 'null'; + } + } + + + sub encode_error { + my $error = shift; + Carp::croak "$error"; + } + + + sub _sort { + defined $keysort ? (sort $keysort (keys %{$_[0]})) : keys %{$_[0]}; + } + + + sub _up_indent { + my $self = shift; + my $space = ' ' x $indent_length; + + my ($pre,$post) = ('',''); + + $post = "\n" . $space x $indent_count; + + $indent_count++; + + $pre = "\n" . $space x $indent_count; + + return ($pre,$post); + } + + + sub _down_indent { $indent_count--; } + + + sub PP_encode_box { + { + depth => $depth, + indent_count => $indent_count, + }; + } + +} # Convert + + +sub _encode_ascii { + join('', + map { + $_ <= 127 ? + chr($_) : + $_ <= 65535 ? + sprintf('\u%04x', $_) : sprintf('\u%x\u%x', _encode_surrogates($_)); + } unpack('U*', $_[0]) + ); +} + + +sub _encode_latin1 { + join('', + map { + $_ <= 255 ? + chr($_) : + $_ <= 65535 ? + sprintf('\u%04x', $_) : sprintf('\u%x\u%x', _encode_surrogates($_)); + } unpack('U*', $_[0]) + ); +} + + +sub _encode_surrogates { # from perlunicode + my $uni = $_[0] - 0x10000; + return ($uni / 0x400 + 0xD800, $uni % 0x400 + 0xDC00); +} + + +sub _is_bignum { + $_[0]->isa('Math::BigInt') or $_[0]->isa('Math::BigFloat'); +} + + + +# +# JSON => Perl +# + +my $max_intsize; + +BEGIN { + my $checkint = 1111; + for my $d (5..64) { + $checkint .= 1; + my $int = eval qq| $checkint |; + if ($int =~ /[eE]/) { + $max_intsize = $d - 1; + last; + } + } +} + +{ # PARSE + + my %escapes = ( # by Jeremy Muhlich + b => "\x8", + t => "\x9", + n => "\xA", + f => "\xC", + r => "\xD", + '\\' => '\\', + '"' => '"', + '/' => '/', + ); + + my $text; # json data + my $at; # offset + my $ch; # 1chracter + my $len; # text length (changed according to UTF8 or NON UTF8) + # INTERNAL + my $depth; # nest counter + my $encoding; # json text encoding + my $is_valid_utf8; # temp variable + my $utf8_len; # utf8 byte length + # FLAGS + my $utf8; # must be utf8 + my $max_depth; # max nest nubmer of objects and arrays + my $max_size; + my $relaxed; + my $cb_object; + my $cb_sk_object; + + my $F_HOOK; + + my $allow_bigint; # using Math::BigInt + my $singlequote; # loosely quoting + my $loose; # + my $allow_barekey; # bareKey + + # $opt flag + # 0x00000001 .... decode_prefix + # 0x10000000 .... incr_parse + + sub PP_decode_json { + my ($self, $opt); # $opt is an effective flag during this decode_json. + + ($self, $text, $opt) = @_; + + ($at, $ch, $depth) = (0, '', 0); + + if ( !defined $text or ref $text ) { + decode_error("malformed JSON string, neither array, object, number, string or atom"); + } + + my $idx = $self->{PROPS}; + + ($utf8, $relaxed, $loose, $allow_bigint, $allow_barekey, $singlequote) + = @{$idx}[P_UTF8, P_RELAXED, P_LOOSE .. P_ALLOW_SINGLEQUOTE]; + + if ( $utf8 ) { + utf8::downgrade( $text, 1 ) or Carp::croak("Wide character in subroutine entry"); + } + else { + utf8::upgrade( $text ); + } + + $len = length $text; + + ($max_depth, $max_size, $cb_object, $cb_sk_object, $F_HOOK) + = @{$self}{qw/max_depth max_size cb_object cb_sk_object F_HOOK/}; + + if ($max_size > 1) { + use bytes; + my $bytes = length $text; + decode_error( + sprintf("attempted decode of JSON text of %s bytes size, but max_size is set to %s" + , $bytes, $max_size), 1 + ) if ($bytes > $max_size); + } + + # Currently no effect + # should use regexp + my @octets = unpack('C4', $text); + $encoding = ( $octets[0] and $octets[1]) ? 'UTF-8' + : (!$octets[0] and $octets[1]) ? 'UTF-16BE' + : (!$octets[0] and !$octets[1]) ? 'UTF-32BE' + : ( $octets[2] ) ? 'UTF-16LE' + : (!$octets[2] ) ? 'UTF-32LE' + : 'unknown'; + + white(); # remove head white space + + my $valid_start = defined $ch; # Is there a first character for JSON structure? + + my $result = value(); + + return undef if ( !$result && ( $opt & 0x10000000 ) ); # for incr_parse + + decode_error("malformed JSON string, neither array, object, number, string or atom") unless $valid_start; + + if ( !$idx->[ P_ALLOW_NONREF ] and !ref $result ) { + decode_error( + 'JSON text must be an object or array (but found number, string, true, false or null,' + . ' use allow_nonref to allow this)', 1); + } + + Carp::croak('something wrong.') if $len < $at; # we won't arrive here. + + my $consumed = defined $ch ? $at - 1 : $at; # consumed JSON text length + + white(); # remove tail white space + + if ( $ch ) { + return ( $result, $consumed ) if ($opt & 0x00000001); # all right if decode_prefix + decode_error("garbage after JSON object"); + } + + ( $opt & 0x00000001 ) ? ( $result, $consumed ) : $result; + } + + + sub next_chr { + return $ch = undef if($at >= $len); + $ch = substr($text, $at++, 1); + } + + + sub value { + white(); + return if(!defined $ch); + return object() if($ch eq '{'); + return array() if($ch eq '['); + return string() if($ch eq '"' or ($singlequote and $ch eq "'")); + return number() if($ch =~ /[0-9]/ or $ch eq '-'); + return word(); + } + + sub string { + my ($i, $s, $t, $u); + my $utf16; + my $is_utf8; + + ($is_valid_utf8, $utf8_len) = ('', 0); + + $s = ''; # basically UTF8 flag on + + if($ch eq '"' or ($singlequote and $ch eq "'")){ + my $boundChar = $ch; + + OUTER: while( defined(next_chr()) ){ + + if($ch eq $boundChar){ + next_chr(); + + if ($utf16) { + decode_error("missing low surrogate character in surrogate pair"); + } + + utf8::decode($s) if($is_utf8); + + return $s; + } + elsif($ch eq '\\'){ + next_chr(); + if(exists $escapes{$ch}){ + $s .= $escapes{$ch}; + } + elsif($ch eq 'u'){ # UNICODE handling + my $u = ''; + + for(1..4){ + $ch = next_chr(); + last OUTER if($ch !~ /[0-9a-fA-F]/); + $u .= $ch; + } + + # U+D800 - U+DBFF + if ($u =~ /^[dD][89abAB][0-9a-fA-F]{2}/) { # UTF-16 high surrogate? + $utf16 = $u; + } + # U+DC00 - U+DFFF + elsif ($u =~ /^[dD][c-fC-F][0-9a-fA-F]{2}/) { # UTF-16 low surrogate? + unless (defined $utf16) { + decode_error("missing high surrogate character in surrogate pair"); + } + $is_utf8 = 1; + $s .= JSON_PP_decode_surrogates($utf16, $u) || next; + $utf16 = undef; + } + else { + if (defined $utf16) { + decode_error("surrogate pair expected"); + } + + if ( ( my $hex = hex( $u ) ) > 127 ) { + $is_utf8 = 1; + $s .= JSON_PP_decode_unicode($u) || next; + } + else { + $s .= chr $hex; + } + } + + } + else{ + unless ($loose) { + $at -= 2; + decode_error('illegal backslash escape sequence in string'); + } + $s .= $ch; + } + } + else{ + + if ( ord $ch > 127 ) { + if ( $utf8 ) { + unless( $ch = is_valid_utf8($ch) ) { + $at -= 1; + decode_error("malformed UTF-8 character in JSON string"); + } + else { + $at += $utf8_len - 1; + } + } + else { + utf8::encode( $ch ); + } + + $is_utf8 = 1; + } + + if (!$loose) { + if ($ch =~ /[\x00-\x1f\x22\x5c]/) { # '/' ok + $at--; + decode_error('invalid character encountered while parsing JSON string'); + } + } + + $s .= $ch; + } + } + } + + decode_error("unexpected end of string while parsing JSON string"); + } + + + sub white { + while( defined $ch ){ + if($ch le ' '){ + next_chr(); + } + elsif($ch eq '/'){ + next_chr(); + if(defined $ch and $ch eq '/'){ + 1 while(defined(next_chr()) and $ch ne "\n" and $ch ne "\r"); + } + elsif(defined $ch and $ch eq '*'){ + next_chr(); + while(1){ + if(defined $ch){ + if($ch eq '*'){ + if(defined(next_chr()) and $ch eq '/'){ + next_chr(); + last; + } + } + else{ + next_chr(); + } + } + else{ + decode_error("Unterminated comment"); + } + } + next; + } + else{ + $at--; + decode_error("malformed JSON string, neither array, object, number, string or atom"); + } + } + else{ + if ($relaxed and $ch eq '#') { # correctly? + pos($text) = $at; + $text =~ /\G([^\n]*(?:\r\n|\r|\n|$))/g; + $at = pos($text); + next_chr; + next; + } + + last; + } + } + } + + + sub array { + my $a = $_[0] || []; # you can use this code to use another array ref object. + + decode_error('json text or perl structure exceeds maximum nesting level (max_depth set too low?)') + if (++$depth > $max_depth); + + next_chr(); + white(); + + if(defined $ch and $ch eq ']'){ + --$depth; + next_chr(); + return $a; + } + else { + while(defined($ch)){ + push @$a, value(); + + white(); + + if (!defined $ch) { + last; + } + + if($ch eq ']'){ + --$depth; + next_chr(); + return $a; + } + + if($ch ne ','){ + last; + } + + next_chr(); + white(); + + if ($relaxed and $ch eq ']') { + --$depth; + next_chr(); + return $a; + } + + } + } + + decode_error(", or ] expected while parsing array"); + } + + + sub object { + my $o = $_[0] || {}; # you can use this code to use another hash ref object. + my $k; + + decode_error('json text or perl structure exceeds maximum nesting level (max_depth set too low?)') + if (++$depth > $max_depth); + next_chr(); + white(); + + if(defined $ch and $ch eq '}'){ + --$depth; + next_chr(); + if ($F_HOOK) { + return _json_object_hook($o); + } + return $o; + } + else { + while (defined $ch) { + $k = ($allow_barekey and $ch ne '"' and $ch ne "'") ? bareKey() : string(); + white(); + + if(!defined $ch or $ch ne ':'){ + $at--; + decode_error("':' expected"); + } + + next_chr(); + $o->{$k} = value(); + white(); + + last if (!defined $ch); + + if($ch eq '}'){ + --$depth; + next_chr(); + if ($F_HOOK) { + return _json_object_hook($o); + } + return $o; + } + + if($ch ne ','){ + last; + } + + next_chr(); + white(); + + if ($relaxed and $ch eq '}') { + --$depth; + next_chr(); + if ($F_HOOK) { + return _json_object_hook($o); + } + return $o; + } + + } + + } + + $at--; + decode_error(", or } expected while parsing object/hash"); + } + + + sub bareKey { # doesn't strictly follow Standard ECMA-262 3rd Edition + my $key; + while($ch =~ /[^\x00-\x23\x25-\x2F\x3A-\x40\x5B-\x5E\x60\x7B-\x7F]/){ + $key .= $ch; + next_chr(); + } + return $key; + } + + + sub word { + my $word = substr($text,$at-1,4); + + if($word eq 'true'){ + $at += 3; + next_chr; + return $JSON::PP::true; + } + elsif($word eq 'null'){ + $at += 3; + next_chr; + return undef; + } + elsif($word eq 'fals'){ + $at += 3; + if(substr($text,$at,1) eq 'e'){ + $at++; + next_chr; + return $JSON::PP::false; + } + } + + $at--; # for decode_error report + + decode_error("'null' expected") if ($word =~ /^n/); + decode_error("'true' expected") if ($word =~ /^t/); + decode_error("'false' expected") if ($word =~ /^f/); + decode_error("malformed JSON string, neither array, object, number, string or atom"); + } + + + sub number { + my $n = ''; + my $v; + + # According to RFC4627, hex or oct digts are invalid. + if($ch eq '0'){ + my $peek = substr($text,$at,1); + my $hex = $peek =~ /[xX]/; # 0 or 1 + + if($hex){ + decode_error("malformed number (leading zero must not be followed by another digit)"); + ($n) = ( substr($text, $at+1) =~ /^([0-9a-fA-F]+)/); + } + else{ # oct + ($n) = ( substr($text, $at) =~ /^([0-7]+)/); + if (defined $n and length $n > 1) { + decode_error("malformed number (leading zero must not be followed by another digit)"); + } + } + + if(defined $n and length($n)){ + if (!$hex and length($n) == 1) { + decode_error("malformed number (leading zero must not be followed by another digit)"); + } + $at += length($n) + $hex; + next_chr; + return $hex ? hex($n) : oct($n); + } + } + + if($ch eq '-'){ + $n = '-'; + next_chr; + if (!defined $ch or $ch !~ /\d/) { + decode_error("malformed number (no digits after initial minus)"); + } + } + + while(defined $ch and $ch =~ /\d/){ + $n .= $ch; + next_chr; + } + + if(defined $ch and $ch eq '.'){ + $n .= '.'; + + next_chr; + if (!defined $ch or $ch !~ /\d/) { + decode_error("malformed number (no digits after decimal point)"); + } + else { + $n .= $ch; + } + + while(defined(next_chr) and $ch =~ /\d/){ + $n .= $ch; + } + } + + if(defined $ch and ($ch eq 'e' or $ch eq 'E')){ + $n .= $ch; + next_chr; + + if(defined($ch) and ($ch eq '+' or $ch eq '-')){ + $n .= $ch; + next_chr; + if (!defined $ch or $ch =~ /\D/) { + decode_error("malformed number (no digits after exp sign)"); + } + $n .= $ch; + } + elsif(defined($ch) and $ch =~ /\d/){ + $n .= $ch; + } + else { + decode_error("malformed number (no digits after exp sign)"); + } + + while(defined(next_chr) and $ch =~ /\d/){ + $n .= $ch; + } + + } + + $v .= $n; + + if ($v !~ /[.eE]/ and length $v > $max_intsize) { + if ($allow_bigint) { # from Adam Sussman + require Math::BigInt; + return Math::BigInt->new($v); + } + else { + return "$v"; + } + } + elsif ($allow_bigint) { + require Math::BigFloat; + return Math::BigFloat->new($v); + } + + return 0+$v; + } + + + sub is_valid_utf8 { + + $utf8_len = $_[0] =~ /[\x00-\x7F]/ ? 1 + : $_[0] =~ /[\xC2-\xDF]/ ? 2 + : $_[0] =~ /[\xE0-\xEF]/ ? 3 + : $_[0] =~ /[\xF0-\xF4]/ ? 4 + : 0 + ; + + return unless $utf8_len; + + my $is_valid_utf8 = substr($text, $at - 1, $utf8_len); + + return ( $is_valid_utf8 =~ /^(?: + [\x00-\x7F] + |[\xC2-\xDF][\x80-\xBF] + |[\xE0][\xA0-\xBF][\x80-\xBF] + |[\xE1-\xEC][\x80-\xBF][\x80-\xBF] + |[\xED][\x80-\x9F][\x80-\xBF] + |[\xEE-\xEF][\x80-\xBF][\x80-\xBF] + |[\xF0][\x90-\xBF][\x80-\xBF][\x80-\xBF] + |[\xF1-\xF3][\x80-\xBF][\x80-\xBF][\x80-\xBF] + |[\xF4][\x80-\x8F][\x80-\xBF][\x80-\xBF] + )$/x ) ? $is_valid_utf8 : ''; + } + + + sub decode_error { + my $error = shift; + my $no_rep = shift; + my $str = defined $text ? substr($text, $at) : ''; + my $mess = ''; + my $type = $] >= 5.008 ? 'U*' + : $] < 5.006 ? 'C*' + : utf8::is_utf8( $str ) ? 'U*' # 5.6 + : 'C*' + ; + + for my $c ( unpack( $type, $str ) ) { # emulate pv_uni_display() ? + $mess .= $c == 0x07 ? '\a' + : $c == 0x09 ? '\t' + : $c == 0x0a ? '\n' + : $c == 0x0d ? '\r' + : $c == 0x0c ? '\f' + : $c < 0x20 ? sprintf('\x{%x}', $c) + : $c == 0x5c ? '\\\\' + : $c < 0x80 ? chr($c) + : sprintf('\x{%x}', $c) + ; + if ( length $mess >= 20 ) { + $mess .= '...'; + last; + } + } + + unless ( length $mess ) { + $mess = '(end of string)'; + } + + Carp::croak ( + $no_rep ? "$error" : "$error, at character offset $at (before \"$mess\")" + ); + + } + + + sub _json_object_hook { + my $o = $_[0]; + my @ks = keys %{$o}; + + if ( $cb_sk_object and @ks == 1 and exists $cb_sk_object->{ $ks[0] } and ref $cb_sk_object->{ $ks[0] } ) { + my @val = $cb_sk_object->{ $ks[0] }->( $o->{$ks[0]} ); + if (@val == 1) { + return $val[0]; + } + } + + my @val = $cb_object->($o) if ($cb_object); + if (@val == 0 or @val > 1) { + return $o; + } + else { + return $val[0]; + } + } + + + sub PP_decode_box { + { + text => $text, + at => $at, + ch => $ch, + len => $len, + depth => $depth, + encoding => $encoding, + is_valid_utf8 => $is_valid_utf8, + }; + } + +} # PARSE + + +sub _decode_surrogates { # from perlunicode + my $uni = 0x10000 + (hex($_[0]) - 0xD800) * 0x400 + (hex($_[1]) - 0xDC00); + my $un = pack('U*', $uni); + utf8::encode( $un ); + return $un; +} + + +sub _decode_unicode { + my $un = pack('U', hex shift); + utf8::encode( $un ); + return $un; +} + +# +# Setup for various Perl versions (the code from JSON::PP58) +# + +BEGIN { + + unless ( defined &utf8::is_utf8 ) { + require Encode; + *utf8::is_utf8 = *Encode::is_utf8; + } + + if ( $] >= 5.008 ) { + *JSON::PP::JSON_PP_encode_ascii = \&_encode_ascii; + *JSON::PP::JSON_PP_encode_latin1 = \&_encode_latin1; + *JSON::PP::JSON_PP_decode_surrogates = \&_decode_surrogates; + *JSON::PP::JSON_PP_decode_unicode = \&_decode_unicode; + } + + if ($] >= 5.008 and $] < 5.008003) { # join() in 5.8.0 - 5.8.2 is broken. + package JSON::PP; + require subs; + subs->import('join'); + eval q| + sub join { + return '' if (@_ < 2); + my $j = shift; + my $str = shift; + for (@_) { $str .= $j . $_; } + return $str; + } + |; + } + + + sub JSON::PP::incr_parse { + local $Carp::CarpLevel = 1; + ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_parse( @_ ); + } + + + sub JSON::PP::incr_skip { + ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_skip; + } + + + sub JSON::PP::incr_reset { + ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_reset; + } + + eval q{ + sub JSON::PP::incr_text : lvalue { + $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new; + + if ( $_[0]->{_incr_parser}->{incr_parsing} ) { + Carp::croak("incr_text can not be called when the incremental parser already started parsing"); + } + $_[0]->{_incr_parser}->{incr_text}; + } + } if ( $] >= 5.006 ); + +} # Setup for various Perl versions (the code from JSON::PP58) + + +############################### +# Utilities +# + +BEGIN { + eval 'require Scalar::Util'; + unless($@){ + *JSON::PP::blessed = \&Scalar::Util::blessed; + *JSON::PP::reftype = \&Scalar::Util::reftype; + *JSON::PP::refaddr = \&Scalar::Util::refaddr; + } + else{ # This code is from Sclar::Util. + # warn $@; + eval 'sub UNIVERSAL::a_sub_not_likely_to_be_here { ref($_[0]) }'; + *JSON::PP::blessed = sub { + local($@, $SIG{__DIE__}, $SIG{__WARN__}); + ref($_[0]) ? eval { $_[0]->a_sub_not_likely_to_be_here } : undef; + }; + my %tmap = qw( + B::NULL SCALAR + B::HV HASH + B::AV ARRAY + B::CV CODE + B::IO IO + B::GV GLOB + B::REGEXP REGEXP + ); + *JSON::PP::reftype = sub { + my $r = shift; + + return undef unless length(ref($r)); + + my $t = ref(B::svref_2object($r)); + + return + exists $tmap{$t} ? $tmap{$t} + : length(ref($$r)) ? 'REF' + : 'SCALAR'; + }; + *JSON::PP::refaddr = sub { + return undef unless length(ref($_[0])); + + my $addr; + if(defined(my $pkg = blessed($_[0]))) { + $addr .= bless $_[0], 'Scalar::Util::Fake'; + bless $_[0], $pkg; + } + else { + $addr .= $_[0] + } + + $addr =~ /0x(\w+)/; + local $^W; + #no warnings 'portable'; + hex($1); + } + } +} + + +# shamely copied and modified from JSON::XS code. + +$JSON::PP::true = do { bless \(my $dummy = 1), "JSON::backportPP::Boolean" }; +$JSON::PP::false = do { bless \(my $dummy = 0), "JSON::backportPP::Boolean" }; + +sub is_bool { defined $_[0] and UNIVERSAL::isa($_[0], "JSON::PP::Boolean"); } + +sub true { $JSON::PP::true } +sub false { $JSON::PP::false } +sub null { undef; } + +############################### + +package JSON::backportPP::Boolean; + +@JSON::backportPP::Boolean::ISA = ('JSON::PP::Boolean'); +use overload ( + "0+" => sub { ${$_[0]} }, + "++" => sub { $_[0] = ${$_[0]} + 1 }, + "--" => sub { $_[0] = ${$_[0]} - 1 }, + fallback => 1, +); + + +############################### + +package + JSON::PP::IncrParser; + +use strict; + +use constant INCR_M_WS => 0; # initial whitespace skipping +use constant INCR_M_STR => 1; # inside string +use constant INCR_M_BS => 2; # inside backslash +use constant INCR_M_JSON => 3; # outside anything, count nesting +use constant INCR_M_C0 => 4; +use constant INCR_M_C1 => 5; + +$JSON::PP::IncrParser::VERSION = '1.01'; + +my $unpack_format = $] < 5.006 ? 'C*' : 'U*'; + +sub new { + my ( $class ) = @_; + + bless { + incr_nest => 0, + incr_text => undef, + incr_parsing => 0, + incr_p => 0, + }, $class; +} + + +sub incr_parse { + my ( $self, $coder, $text ) = @_; + + $self->{incr_text} = '' unless ( defined $self->{incr_text} ); + + if ( defined $text ) { + if ( utf8::is_utf8( $text ) and !utf8::is_utf8( $self->{incr_text} ) ) { + utf8::upgrade( $self->{incr_text} ) ; + utf8::decode( $self->{incr_text} ) ; + } + $self->{incr_text} .= $text; + } + + + my $max_size = $coder->get_max_size; + + if ( defined wantarray ) { + + $self->{incr_mode} = INCR_M_WS; + + if ( wantarray ) { + my @ret; + + $self->{incr_parsing} = 1; + + do { + push @ret, $self->_incr_parse( $coder, $self->{incr_text} ); + + unless ( !$self->{incr_nest} and $self->{incr_mode} == INCR_M_JSON ) { + $self->{incr_mode} = INCR_M_WS; + } + + } until ( !$self->{incr_text} ); + + $self->{incr_parsing} = 0; + + return @ret; + } + else { # in scalar context + $self->{incr_parsing} = 1; + my $obj = $self->_incr_parse( $coder, $self->{incr_text} ); + $self->{incr_parsing} = 0 if defined $obj; # pointed by Martin J. Evans + return $obj ? $obj : undef; # $obj is an empty string, parsing was completed. + } + + } + +} + + +sub _incr_parse { + my ( $self, $coder, $text, $skip ) = @_; + my $p = $self->{incr_p}; + my $restore = $p; + + my @obj; + my $len = length $text; + + if ( $self->{incr_mode} == INCR_M_WS ) { + while ( $len > $p ) { + my $s = substr( $text, $p, 1 ); + $p++ and next if ( 0x20 >= unpack($unpack_format, $s) ); + $self->{incr_mode} = INCR_M_JSON; + last; + } + } + + while ( $len > $p ) { + my $s = substr( $text, $p++, 1 ); + + if ( $s eq '"' ) { + if ( $self->{incr_mode} != INCR_M_STR ) { + $self->{incr_mode} = INCR_M_STR; + } + else { + $self->{incr_mode} = INCR_M_JSON; + unless ( $self->{incr_nest} ) { + last; + } + } + } + + if ( $self->{incr_mode} == INCR_M_JSON ) { + + if ( $s eq '[' or $s eq '{' ) { + if ( ++$self->{incr_nest} > $coder->get_max_depth ) { + Carp::croak('json text or perl structure exceeds maximum nesting level (max_depth set too low?)'); + } + } + elsif ( $s eq ']' or $s eq '}' ) { + last if ( --$self->{incr_nest} <= 0 ); + } + elsif ( $s eq '#' ) { + while ( $len > $p ) { + last if substr( $text, $p++, 1 ) eq "\n"; + } + } + + } + + } + + $self->{incr_p} = $p; + + return if ( $self->{incr_mode} == INCR_M_JSON and $self->{incr_nest} > 0 ); + + return '' unless ( length substr( $self->{incr_text}, 0, $p ) ); + + local $Carp::CarpLevel = 2; + + $self->{incr_p} = $restore; + $self->{incr_c} = $p; + + my ( $obj, $tail ) = $coder->PP_decode_json( substr( $self->{incr_text}, 0, $p ), 0x10000001 ); + + $self->{incr_text} = substr( $self->{incr_text}, $p ); + $self->{incr_p} = 0; + + return $obj or ''; +} + + +sub incr_text { + if ( $_[0]->{incr_parsing} ) { + Carp::croak("incr_text can not be called when the incremental parser already started parsing"); + } + $_[0]->{incr_text}; +} + + +sub incr_skip { + my $self = shift; + $self->{incr_text} = substr( $self->{incr_text}, $self->{incr_c} ); + $self->{incr_p} = 0; +} + + +sub incr_reset { + my $self = shift; + $self->{incr_text} = undef; + $self->{incr_p} = 0; + $self->{incr_mode} = 0; + $self->{incr_nest} = 0; + $self->{incr_parsing} = 0; +} + +############################### + + +1; +__END__ +=pod + +=head1 NAME + +JSON::PP - JSON::XS compatible pure-Perl module. + +=head1 SYNOPSIS + + use JSON::PP; + + # exported functions, they croak on error + # and expect/generate UTF-8 + + $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref; + $perl_hash_or_arrayref = decode_json $utf8_encoded_json_text; + + # OO-interface + + $coder = JSON::PP->new->ascii->pretty->allow_nonref; + + $json_text = $json->encode( $perl_scalar ); + $perl_scalar = $json->decode( $json_text ); + + $pretty_printed = $json->pretty->encode( $perl_scalar ); # pretty-printing + + # Note that JSON version 2.0 and above will automatically use + # JSON::XS or JSON::PP, so you should be able to just: + + use JSON; + + +=head1 VERSION + + 2.27105 + +L 2.27 compatible. + +=head1 DESCRIPTION + +This module is L compatible pure Perl module. +(Perl 5.8 or later is recommended) + +JSON::XS is the fastest and most proper JSON module on CPAN. +It is written by Marc Lehmann in C, so must be compiled and +installed in the used environment. + +JSON::PP is a pure-Perl module and has compatibility to JSON::XS. + + +=head2 FEATURES + +=over + +=item * correct unicode handling + +This module knows how to handle Unicode (depending on Perl version). + +See to L and L. + + +=item * round-trip integrity + +When you serialise a perl data structure using only data types supported +by JSON and Perl, the deserialised data structure is identical on the Perl +level. (e.g. the string "2.0" doesn't suddenly become "2" just because +it looks like a number). There I minor exceptions to this, read the +MAPPING section below to learn about those. + + +=item * strict checking of JSON correctness + +There is no guessing, no generating of illegal JSON texts by default, +and only JSON is accepted as input by default (the latter is a security feature). +But when some options are set, loose chcking features are available. + +=back + +=head1 FUNCTIONAL INTERFACE + +Some documents are copied and modified from L. + +=head2 encode_json + + $json_text = encode_json $perl_scalar + +Converts the given Perl data structure to a UTF-8 encoded, binary string. + +This function call is functionally identical to: + + $json_text = JSON::PP->new->utf8->encode($perl_scalar) + +=head2 decode_json + + $perl_scalar = decode_json $json_text + +The opposite of C: expects an UTF-8 (binary) string and tries +to parse that as an UTF-8 encoded JSON text, returning the resulting +reference. + +This function call is functionally identical to: + + $perl_scalar = JSON::PP->new->utf8->decode($json_text) + +=head2 JSON::PP::is_bool + + $is_boolean = JSON::PP::is_bool($scalar) + +Returns true if the passed scalar represents either JSON::PP::true or +JSON::PP::false, two constants that act like C<1> and C<0> respectively +and are also used to represent JSON C and C in Perl strings. + +=head2 JSON::PP::true + +Returns JSON true value which is blessed object. +It C JSON::PP::Boolean object. + +=head2 JSON::PP::false + +Returns JSON false value which is blessed object. +It C JSON::PP::Boolean object. + +=head2 JSON::PP::null + +Returns C. + +See L, below, for more information on how JSON values are mapped to +Perl. + + +=head1 HOW DO I DECODE A DATA FROM OUTER AND ENCODE TO OUTER + +This section supposes that your perl vresion is 5.8 or later. + +If you know a JSON text from an outer world - a network, a file content, and so on, +is encoded in UTF-8, you should use C or C module object +with C enable. And the decoded result will contain UNICODE characters. + + # from network + my $json = JSON::PP->new->utf8; + my $json_text = CGI->new->param( 'json_data' ); + my $perl_scalar = $json->decode( $json_text ); + + # from file content + local $/; + open( my $fh, '<', 'json.data' ); + $json_text = <$fh>; + $perl_scalar = decode_json( $json_text ); + +If an outer data is not encoded in UTF-8, firstly you should C it. + + use Encode; + local $/; + open( my $fh, '<', 'json.data' ); + my $encoding = 'cp932'; + my $unicode_json_text = decode( $encoding, <$fh> ); # UNICODE + + # or you can write the below code. + # + # open( my $fh, "<:encoding($encoding)", 'json.data' ); + # $unicode_json_text = <$fh>; + +In this case, C<$unicode_json_text> is of course UNICODE string. +So you B use C nor C module object with C enable. +Instead of them, you use C module object with C disable. + + $perl_scalar = $json->utf8(0)->decode( $unicode_json_text ); + +Or C and C: + + $perl_scalar = decode_json( encode( 'utf8', $unicode_json_text ) ); + # this way is not efficient. + +And now, you want to convert your C<$perl_scalar> into JSON data and +send it to an outer world - a network or a file content, and so on. + +Your data usually contains UNICODE strings and you want the converted data to be encoded +in UTF-8, you should use C or C module object with C enable. + + print encode_json( $perl_scalar ); # to a network? file? or display? + # or + print $json->utf8->encode( $perl_scalar ); + +If C<$perl_scalar> does not contain UNICODE but C<$encoding>-encoded strings +for some reason, then its characters are regarded as B for perl +(because it does not concern with your $encoding). +You B use C nor C module object with C enable. +Instead of them, you use C module object with C disable. +Note that the resulted text is a UNICODE string but no problem to print it. + + # $perl_scalar contains $encoding encoded string values + $unicode_json_text = $json->utf8(0)->encode( $perl_scalar ); + # $unicode_json_text consists of characters less than 0x100 + print $unicode_json_text; + +Or C all string values and C: + + $perl_scalar->{ foo } = decode( $encoding, $perl_scalar->{ foo } ); + # ... do it to each string values, then encode_json + $json_text = encode_json( $perl_scalar ); + +This method is a proper way but probably not efficient. + +See to L, L. + + +=head1 METHODS + +Basically, check to L or L. + +=head2 new + + $json = new JSON::PP + +Rturns a new JSON::PP object that can be used to de/encode JSON +strings. + +All boolean flags described below are by default I. + +The mutators for flags all return the JSON object again and thus calls can +be chained: + + my $json = JSON::PP->new->utf8->space_after->encode({a => [1,2]}) + => {"a": [1, 2]} + +=head2 ascii + + $json = $json->ascii([$enable]) + + $enabled = $json->get_ascii + +If $enable is true (or missing), then the encode method will not generate characters outside +the code range 0..127. Any Unicode characters outside that range will be escaped using either +a single \uXXXX or a double \uHHHH\uLLLLL escape sequence, as per RFC4627. +(See to L). + +In Perl 5.005, there is no character having high value (more than 255). +See to L. + +If $enable is false, then the encode method will not escape Unicode characters unless +required by the JSON syntax or other flags. This results in a faster and more compact format. + + JSON::PP->new->ascii(1)->encode([chr 0x10401]) + => ["\ud801\udc01"] + +=head2 latin1 + + $json = $json->latin1([$enable]) + + $enabled = $json->get_latin1 + +If $enable is true (or missing), then the encode method will encode the resulting JSON +text as latin1 (or iso-8859-1), escaping any characters outside the code range 0..255. + +If $enable is false, then the encode method will not escape Unicode characters +unless required by the JSON syntax or other flags. + + JSON::XS->new->latin1->encode (["\x{89}\x{abc}"] + => ["\x{89}\\u0abc"] # (perl syntax, U+abc escaped, U+89 not) + +See to L. + +=head2 utf8 + + $json = $json->utf8([$enable]) + + $enabled = $json->get_utf8 + +If $enable is true (or missing), then the encode method will encode the JSON result +into UTF-8, as required by many protocols, while the decode method expects to be handled +an UTF-8-encoded string. Please note that UTF-8-encoded strings do not contain any +characters outside the range 0..255, they are thus useful for bytewise/binary I/O. + +(In Perl 5.005, any character outside the range 0..255 does not exist. +See to L.) + +In future versions, enabling this option might enable autodetection of the UTF-16 and UTF-32 +encoding families, as described in RFC4627. + +If $enable is false, then the encode method will return the JSON string as a (non-encoded) +Unicode string, while decode expects thus a Unicode string. Any decoding or encoding +(e.g. to UTF-8 or UTF-16) needs to be done yourself, e.g. using the Encode module. + +Example, output UTF-16BE-encoded JSON: + + use Encode; + $jsontext = encode "UTF-16BE", JSON::PP->new->encode ($object); + +Example, decode UTF-32LE-encoded JSON: + + use Encode; + $object = JSON::PP->new->decode (decode "UTF-32LE", $jsontext); + + +=head2 pretty + + $json = $json->pretty([$enable]) + +This enables (or disables) all of the C, C and +C flags in one call to generate the most readable +(or most compact) form possible. + +Equivalent to: + + $json->indent->space_before->space_after + +=head2 indent + + $json = $json->indent([$enable]) + + $enabled = $json->get_indent + +The default indent space length is three. +You can use C to change the length. + +=head2 space_before + + $json = $json->space_before([$enable]) + + $enabled = $json->get_space_before + +If C<$enable> is true (or missing), then the C method will add an extra +optional space before the C<:> separating keys from values in JSON objects. + +If C<$enable> is false, then the C method will not add any extra +space at those places. + +This setting has no effect when decoding JSON texts. + +Example, space_before enabled, space_after and indent disabled: + + {"key" :"value"} + +=head2 space_after + + $json = $json->space_after([$enable]) + + $enabled = $json->get_space_after + +If C<$enable> is true (or missing), then the C method will add an extra +optional space after the C<:> separating keys from values in JSON objects +and extra whitespace after the C<,> separating key-value pairs and array +members. + +If C<$enable> is false, then the C method will not add any extra +space at those places. + +This setting has no effect when decoding JSON texts. + +Example, space_before and indent disabled, space_after enabled: + + {"key": "value"} + +=head2 relaxed + + $json = $json->relaxed([$enable]) + + $enabled = $json->get_relaxed + +If C<$enable> is true (or missing), then C will accept some +extensions to normal JSON syntax (see below). C will not be +affected in anyway. I. I suggest only to use this option to +parse application-specific files written by humans (configuration files, +resource files etc.) + +If C<$enable> is false (the default), then C will only accept +valid JSON texts. + +Currently accepted extensions are: + +=over 4 + +=item * list items can have an end-comma + +JSON I array elements and key-value pairs with commas. This +can be annoying if you write JSON texts manually and want to be able to +quickly append elements, so this extension accepts comma at the end of +such items not just between them: + + [ + 1, + 2, <- this comma not normally allowed + ] + { + "k1": "v1", + "k2": "v2", <- this comma not normally allowed + } + +=item * shell-style '#'-comments + +Whenever JSON allows whitespace, shell-style comments are additionally +allowed. They are terminated by the first carriage-return or line-feed +character, after which more white-space and comments are allowed. + + [ + 1, # this comment not allowed in JSON + # neither this one... + ] + +=back + +=head2 canonical + + $json = $json->canonical([$enable]) + + $enabled = $json->get_canonical + +If C<$enable> is true (or missing), then the C method will output JSON objects +by sorting their keys. This is adding a comparatively high overhead. + +If C<$enable> is false, then the C method will output key-value +pairs in the order Perl stores them (which will likely change between runs +of the same script). + +This option is useful if you want the same data structure to be encoded as +the same JSON text (given the same overall settings). If it is disabled, +the same hash might be encoded differently even if contains the same data, +as key-value pairs have no inherent ordering in Perl. + +This setting has no effect when decoding JSON texts. + +If you want your own sorting routine, you can give a code referece +or a subroutine name to C. See to C. + +=head2 allow_nonref + + $json = $json->allow_nonref([$enable]) + + $enabled = $json->get_allow_nonref + +If C<$enable> is true (or missing), then the C method can convert a +non-reference into its corresponding string, number or null JSON value, +which is an extension to RFC4627. Likewise, C will accept those JSON +values instead of croaking. + +If C<$enable> is false, then the C method will croak if it isn't +passed an arrayref or hashref, as JSON texts must either be an object +or array. Likewise, C will croak if given something that is not a +JSON object or array. + + JSON::PP->new->allow_nonref->encode ("Hello, World!") + => "Hello, World!" + +=head2 allow_unknown + + $json = $json->allow_unknown ([$enable]) + + $enabled = $json->get_allow_unknown + +If $enable is true (or missing), then "encode" will *not* throw an +exception when it encounters values it cannot represent in JSON (for +example, filehandles) but instead will encode a JSON "null" value. +Note that blessed objects are not included here and are handled +separately by c. + +If $enable is false (the default), then "encode" will throw an +exception when it encounters anything it cannot encode as JSON. + +This option does not affect "decode" in any way, and it is +recommended to leave it off unless you know your communications +partner. + +=head2 allow_blessed + + $json = $json->allow_blessed([$enable]) + + $enabled = $json->get_allow_blessed + +If C<$enable> is true (or missing), then the C method will not +barf when it encounters a blessed reference. Instead, the value of the +B option will decide whether C (C +disabled or no C method found) or a representation of the +object (C enabled and C method found) is being +encoded. Has no effect on C. + +If C<$enable> is false (the default), then C will throw an +exception when it encounters a blessed object. + +=head2 convert_blessed + + $json = $json->convert_blessed([$enable]) + + $enabled = $json->get_convert_blessed + +If C<$enable> is true (or missing), then C, upon encountering a +blessed object, will check for the availability of the C method +on the object's class. If found, it will be called in scalar context +and the resulting scalar will be encoded instead of the object. If no +C method is found, the value of C will decide what +to do. + +The C method may safely call die if it wants. If C +returns other blessed objects, those will be handled in the same +way. C must take care of not causing an endless recursion cycle +(== crash) in this case. The name of C was chosen because other +methods called by the Perl core (== not by the user of the object) are +usually in upper case letters and to avoid collisions with the C +function or method. + +This setting does not yet influence C in any way. + +If C<$enable> is false, then the C setting will decide what +to do when a blessed object is found. + +=head2 filter_json_object + + $json = $json->filter_json_object([$coderef]) + +When C<$coderef> is specified, it will be called from C each +time it decodes a JSON object. The only argument passed to the coderef +is a reference to the newly-created hash. If the code references returns +a single scalar (which need not be a reference), this value +(i.e. a copy of that scalar to avoid aliasing) is inserted into the +deserialised data structure. If it returns an empty list +(NOTE: I C, which is a valid scalar), the original deserialised +hash will be inserted. This setting can slow down decoding considerably. + +When C<$coderef> is omitted or undefined, any existing callback will +be removed and C will not change the deserialised hash in any +way. + +Example, convert all JSON objects into the integer 5: + + my $js = JSON::PP->new->filter_json_object (sub { 5 }); + # returns [5] + $js->decode ('[{}]'); # the given subroutine takes a hash reference. + # throw an exception because allow_nonref is not enabled + # so a lone 5 is not allowed. + $js->decode ('{"a":1, "b":2}'); + +=head2 filter_json_single_key_object + + $json = $json->filter_json_single_key_object($key [=> $coderef]) + +Works remotely similar to C, but is only called for +JSON objects having a single key named C<$key>. + +This C<$coderef> is called before the one specified via +C, if any. It gets passed the single value in the JSON +object. If it returns a single value, it will be inserted into the data +structure. If it returns nothing (not even C but the empty list), +the callback from C will be called next, as if no +single-key callback were specified. + +If C<$coderef> is omitted or undefined, the corresponding callback will be +disabled. There can only ever be one callback for a given key. + +As this callback gets called less often then the C +one, decoding speed will not usually suffer as much. Therefore, single-key +objects make excellent targets to serialise Perl objects into, especially +as single-key JSON objects are as close to the type-tagged value concept +as JSON gets (it's basically an ID/VALUE tuple). Of course, JSON does not +support this in any way, so you need to make sure your data never looks +like a serialised Perl hash. + +Typical names for the single object key are C<__class_whatever__>, or +C<$__dollars_are_rarely_used__$> or C<}ugly_brace_placement>, or even +things like C<__class_md5sum(classname)__>, to reduce the risk of clashing +with real hashes. + +Example, decode JSON objects of the form C<< { "__widget__" => } >> +into the corresponding C<< $WIDGET{} >> object: + + # return whatever is in $WIDGET{5}: + JSON::PP + ->new + ->filter_json_single_key_object (__widget__ => sub { + $WIDGET{ $_[0] } + }) + ->decode ('{"__widget__": 5') + + # this can be used with a TO_JSON method in some "widget" class + # for serialisation to json: + sub WidgetBase::TO_JSON { + my ($self) = @_; + + unless ($self->{id}) { + $self->{id} = ..get..some..id..; + $WIDGET{$self->{id}} = $self; + } + + { __widget__ => $self->{id} } + } + +=head2 shrink + + $json = $json->shrink([$enable]) + + $enabled = $json->get_shrink + +In JSON::XS, this flag resizes strings generated by either +C or C to their minimum size possible. +It will also try to downgrade any strings to octet-form if possible. + +In JSON::PP, it is noop about resizing strings but tries +C to the returned string by C. +See to L. + +See to L + +=head2 max_depth + + $json = $json->max_depth([$maximum_nesting_depth]) + + $max_depth = $json->get_max_depth + +Sets the maximum nesting level (default C<512>) accepted while encoding +or decoding. If a higher nesting level is detected in JSON text or a Perl +data structure, then the encoder and decoder will stop and croak at that +point. + +Nesting level is defined by number of hash- or arrayrefs that the encoder +needs to traverse to reach a given point or the number of C<{> or C<[> +characters without their matching closing parenthesis crossed to reach a +given character in a string. + +If no argument is given, the highest possible setting will be used, which +is rarely useful. + +See L for more info on why this is useful. + +When a large value (100 or more) was set and it de/encodes a deep nested object/text, +it may raise a warning 'Deep recursion on subroutin' at the perl runtime phase. + +=head2 max_size + + $json = $json->max_size([$maximum_string_size]) + + $max_size = $json->get_max_size + +Set the maximum length a JSON text may have (in bytes) where decoding is +being attempted. The default is C<0>, meaning no limit. When C +is called on a string that is longer then this many bytes, it will not +attempt to decode the string but throw an exception. This setting has no +effect on C (yet). + +If no argument is given, the limit check will be deactivated (same as when +C<0> is specified). + +See L for more info on why this is useful. + +=head2 encode + + $json_text = $json->encode($perl_scalar) + +Converts the given Perl data structure (a simple scalar or a reference +to a hash or array) to its JSON representation. Simple scalars will be +converted into JSON string or number sequences, while references to arrays +become JSON arrays and references to hashes become JSON objects. Undefined +Perl values (e.g. C) become JSON C values. +References to the integers C<0> and C<1> are converted into C and C. + +=head2 decode + + $perl_scalar = $json->decode($json_text) + +The opposite of C: expects a JSON text and tries to parse it, +returning the resulting simple scalar or reference. Croaks on error. + +JSON numbers and strings become simple Perl scalars. JSON arrays become +Perl arrayrefs and JSON objects become Perl hashrefs. C becomes +C<1> (C), C becomes C<0> (C) and +C becomes C. + +=head2 decode_prefix + + ($perl_scalar, $characters) = $json->decode_prefix($json_text) + +This works like the C method, but instead of raising an exception +when there is trailing garbage after the first JSON object, it will +silently stop parsing there and return the number of characters consumed +so far. + + JSON->new->decode_prefix ("[1] the tail") + => ([], 3) + +=head1 INCREMENTAL PARSING + +Most of this section are copied and modified from L. + +In some cases, there is the need for incremental parsing of JSON texts. +This module does allow you to parse a JSON stream incrementally. +It does so by accumulating text until it has a full JSON object, which +it then can decode. This process is similar to using C +to see if a full JSON object is available, but is much more efficient +(and can be implemented with a minimum of method calls). + +This module will only attempt to parse the JSON text once it is sure it +has enough text to get a decisive result, using a very simple but +truly incremental parser. This means that it sometimes won't stop as +early as the full parser, for example, it doesn't detect parenthese +mismatches. The only thing it guarantees is that it starts decoding as +soon as a syntactically valid JSON text has been seen. This means you need +to set resource limits (e.g. C) to ensure the parser will stop +parsing in the presence if syntax errors. + +The following methods implement this incremental parser. + +=head2 incr_parse + + $json->incr_parse( [$string] ) # void context + + $obj_or_undef = $json->incr_parse( [$string] ) # scalar context + + @obj_or_empty = $json->incr_parse( [$string] ) # list context + +This is the central parsing function. It can both append new text and +extract objects from the stream accumulated so far (both of these +functions are optional). + +If C<$string> is given, then this string is appended to the already +existing JSON fragment stored in the C<$json> object. + +After that, if the function is called in void context, it will simply +return without doing anything further. This can be used to add more text +in as many chunks as you want. + +If the method is called in scalar context, then it will try to extract +exactly I JSON object. If that is successful, it will return this +object, otherwise it will return C. If there is a parse error, +this method will croak just as C would do (one can then use +C to skip the errornous part). This is the most common way of +using the method. + +And finally, in list context, it will try to extract as many objects +from the stream as it can find and return them, or the empty list +otherwise. For this to work, there must be no separators between the JSON +objects or arrays, instead they must be concatenated back-to-back. If +an error occurs, an exception will be raised as in the scalar context +case. Note that in this case, any previously-parsed JSON texts will be +lost. + +Example: Parse some JSON arrays/objects in a given string and return them. + + my @objs = JSON->new->incr_parse ("[5][7][1,2]"); + +=head2 incr_text + + $lvalue_string = $json->incr_text + +This method returns the currently stored JSON fragment as an lvalue, that +is, you can manipulate it. This I works when a preceding call to +C in I successfully returned an object. Under +all other circumstances you must not call this function (I mean it. +although in simple tests it might actually work, it I fail under +real world conditions). As a special exception, you can also call this +method before having parsed anything. + +This function is useful in two cases: a) finding the trailing text after a +JSON object or b) parsing multiple JSON objects separated by non-JSON text +(such as commas). + + $json->incr_text =~ s/\s*,\s*//; + +In Perl 5.005, C attribute is not available. +You must write codes like the below: + + $string = $json->incr_text; + $string =~ s/\s*,\s*//; + $json->incr_text( $string ); + +=head2 incr_skip + + $json->incr_skip + +This will reset the state of the incremental parser and will remove the +parsed text from the input buffer. This is useful after C +died, in which case the input buffer and incremental parser state is left +unchanged, to skip the text parsed so far and to reset the parse state. + +=head2 incr_reset + + $json->incr_reset + +This completely resets the incremental parser, that is, after this call, +it will be as if the parser had never parsed anything. + +This is useful if you want ot repeatedly parse JSON objects and want to +ignore any trailing data, which means you have to reset the parser after +each successful decode. + +See to L for examples. + + +=head1 JSON::PP OWN METHODS + +=head2 allow_singlequote + + $json = $json->allow_singlequote([$enable]) + +If C<$enable> is true (or missing), then C will accept +JSON strings quoted by single quotations that are invalid JSON +format. + + $json->allow_singlequote->decode({"foo":'bar'}); + $json->allow_singlequote->decode({'foo':"bar"}); + $json->allow_singlequote->decode({'foo':'bar'}); + +As same as the C option, this option may be used to parse +application-specific files written by humans. + + +=head2 allow_barekey + + $json = $json->allow_barekey([$enable]) + +If C<$enable> is true (or missing), then C will accept +bare keys of JSON object that are invalid JSON format. + +As same as the C option, this option may be used to parse +application-specific files written by humans. + + $json->allow_barekey->decode('{foo:"bar"}'); + +=head2 allow_bignum + + $json = $json->allow_bignum([$enable]) + +If C<$enable> is true (or missing), then C will convert +the big integer Perl cannot handle as integer into a L +object and convert a floating number (any) into a L. + +On the contary, C converts C objects and C +objects into JSON numbers with C enable. + + $json->allow_nonref->allow_blessed->allow_bignum; + $bigfloat = $json->decode('2.000000000000000000000000001'); + print $json->encode($bigfloat); + # => 2.000000000000000000000000001 + +See to L aboout the normal conversion of JSON number. + +=head2 loose + + $json = $json->loose([$enable]) + +The unescaped [\x00-\x1f\x22\x2f\x5c] strings are invalid in JSON strings +and the module doesn't allow to C to these (except for \x2f). +If C<$enable> is true (or missing), then C will accept these +unescaped strings. + + $json->loose->decode(qq|["abc + def"]|); + +See L. + +=head2 escape_slash + + $json = $json->escape_slash([$enable]) + +According to JSON Grammar, I (U+002F) is escaped. But default +JSON::PP (as same as JSON::XS) encodes strings without escaping slash. + +If C<$enable> is true (or missing), then C will escape slashes. + +=head2 indent_length + + $json = $json->indent_length($length) + +JSON::XS indent space length is 3 and cannot be changed. +JSON::PP set the indent space length with the given $length. +The default is 3. The acceptable range is 0 to 15. + +=head2 sort_by + + $json = $json->sort_by($function_name) + $json = $json->sort_by($subroutine_ref) + +If $function_name or $subroutine_ref are set, its sort routine are used +in encoding JSON objects. + + $js = $pc->sort_by(sub { $JSON::PP::a cmp $JSON::PP::b })->encode($obj); + # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|); + + $js = $pc->sort_by('own_sort')->encode($obj); + # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|); + + sub JSON::PP::own_sort { $JSON::PP::a cmp $JSON::PP::b } + +As the sorting routine runs in the JSON::PP scope, the given +subroutine name and the special variables C<$a>, C<$b> will begin +'JSON::PP::'. + +If $integer is set, then the effect is same as C on. + +=head1 INTERNAL + +For developers. + +=over + +=item PP_encode_box + +Returns + + { + depth => $depth, + indent_count => $indent_count, + } + + +=item PP_decode_box + +Returns + + { + text => $text, + at => $at, + ch => $ch, + len => $len, + depth => $depth, + encoding => $encoding, + is_valid_utf8 => $is_valid_utf8, + }; + +=back + +=head1 MAPPING + +This section is copied from JSON::XS and modified to C. +JSON::XS and JSON::PP mapping mechanisms are almost equivalent. + +See to L. + +=head2 JSON -> PERL + +=over 4 + +=item object + +A JSON object becomes a reference to a hash in Perl. No ordering of object +keys is preserved (JSON does not preserver object key ordering itself). + +=item array + +A JSON array becomes a reference to an array in Perl. + +=item string + +A JSON string becomes a string scalar in Perl - Unicode codepoints in JSON +are represented by the same codepoints in the Perl string, so no manual +decoding is necessary. + +=item number + +A JSON number becomes either an integer, numeric (floating point) or +string scalar in perl, depending on its range and any fractional parts. On +the Perl level, there is no difference between those as Perl handles all +the conversion details, but an integer may take slightly less memory and +might represent more values exactly than floating point numbers. + +If the number consists of digits only, C will try to represent +it as an integer value. If that fails, it will try to represent it as +a numeric (floating point) value if that is possible without loss of +precision. Otherwise it will preserve the number as a string value (in +which case you lose roundtripping ability, as the JSON number will be +re-encoded toa JSON string). + +Numbers containing a fractional or exponential part will always be +represented as numeric (floating point) values, possibly at a loss of +precision (in which case you might lose perfect roundtripping ability, but +the JSON number will still be re-encoded as a JSON number). + +Note that precision is not accuracy - binary floating point values cannot +represent most decimal fractions exactly, and when converting from and to +floating point, C only guarantees precision up to but not including +the leats significant bit. + +When C is enable, the big integers +and the numeric can be optionally converted into L and +L objects. + +=item true, false + +These JSON atoms become C and C, +respectively. They are overloaded to act almost exactly like the numbers +C<1> and C<0>. You can check wether a scalar is a JSON boolean by using +the C function. + + print JSON::PP::true . "\n"; + => true + print JSON::PP::true + 1; + => 1 + + ok(JSON::true eq '1'); + ok(JSON::true == 1); + +C will install these missing overloading features to the backend modules. + + +=item null + +A JSON null atom becomes C in Perl. + +C returns C. + +=back + + +=head2 PERL -> JSON + +The mapping from Perl to JSON is slightly more difficult, as Perl is a +truly typeless language, so we can only guess which JSON type is meant by +a Perl value. + +=over 4 + +=item hash references + +Perl hash references become JSON objects. As there is no inherent ordering +in hash keys (or JSON objects), they will usually be encoded in a +pseudo-random order that can change between runs of the same program but +stays generally the same within a single run of a program. C +optionally sort the hash keys (determined by the I flag), so +the same datastructure will serialise to the same JSON text (given same +settings and version of JSON::XS), but this incurs a runtime overhead +and is only rarely useful, e.g. when you want to compare some JSON text +against another for equality. + + +=item array references + +Perl array references become JSON arrays. + +=item other references + +Other unblessed references are generally not allowed and will cause an +exception to be thrown, except for references to the integers C<0> and +C<1>, which get turned into C and C atoms in JSON. You can +also use C and C to improve readability. + + to_json [\0,JSON::PP::true] # yields [false,true] + +=item JSON::PP::true, JSON::PP::false, JSON::PP::null + +These special values become JSON true and JSON false values, +respectively. You can also use C<\1> and C<\0> directly if you want. + +JSON::PP::null returns C. + +=item blessed objects + +Blessed objects are not directly representable in JSON. See the +C and C methods on various options on +how to deal with this: basically, you can choose between throwing an +exception, encoding the reference as if it weren't blessed, or provide +your own serialiser method. + +See to L. + +=item simple scalars + +Simple Perl scalars (any scalar that is not a reference) are the most +difficult objects to encode: JSON::XS and JSON::PP will encode undefined scalars as +JSON C values, scalars that have last been used in a string context +before encoding as JSON strings, and anything else as number value: + + # dump as number + encode_json [2] # yields [2] + encode_json [-3.0e17] # yields [-3e+17] + my $value = 5; encode_json [$value] # yields [5] + + # used as string, so dump as string + print $value; + encode_json [$value] # yields ["5"] + + # undef becomes null + encode_json [undef] # yields [null] + +You can force the type to be a string by stringifying it: + + my $x = 3.1; # some variable containing a number + "$x"; # stringified + $x .= ""; # another, more awkward way to stringify + print $x; # perl does it for you, too, quite often + +You can force the type to be a number by numifying it: + + my $x = "3"; # some variable containing a string + $x += 0; # numify it, ensuring it will be dumped as a number + $x *= 1; # same thing, the choise is yours. + +You can not currently force the type in other, less obscure, ways. + +Note that numerical precision has the same meaning as under Perl (so +binary to decimal conversion follows the same rules as in Perl, which +can differ to other languages). Also, your perl interpreter might expose +extensions to the floating point numbers of your platform, such as +infinities or NaN's - these cannot be represented in JSON, and it is an +error to pass those in. + +=item Big Number + +When C is enable, +C converts C objects and C +objects into JSON numbers. + + +=back + +=head1 UNICODE HANDLING ON PERLS + +If you do not know about Unicode on Perl well, +please check L. + +=head2 Perl 5.8 and later + +Perl can handle Unicode and the JSON::PP de/encode methods also work properly. + + $json->allow_nonref->encode(chr hex 3042); + $json->allow_nonref->encode(chr hex 12345); + +Reuturns C<"\u3042"> and C<"\ud808\udf45"> respectively. + + $json->allow_nonref->decode('"\u3042"'); + $json->allow_nonref->decode('"\ud808\udf45"'); + +Returns UTF-8 encoded strings with UTF8 flag, regarded as C and C. + +Note that the versions from Perl 5.8.0 to 5.8.2, Perl built-in C was broken, +so JSON::PP wraps the C with a subroutine. Thus JSON::PP works slow in the versions. + + +=head2 Perl 5.6 + +Perl can handle Unicode and the JSON::PP de/encode methods also work. + +=head2 Perl 5.005 + +Perl 5.005 is a byte sementics world -- all strings are sequences of bytes. +That means the unicode handling is not available. + +In encoding, + + $json->allow_nonref->encode(chr hex 3042); # hex 3042 is 12354. + $json->allow_nonref->encode(chr hex 12345); # hex 12345 is 74565. + +Returns C and C, as C takes a value more than 255, it treats +as C<$value % 256>, so the above codes are equivalent to : + + $json->allow_nonref->encode(chr 66); + $json->allow_nonref->encode(chr 69); + +In decoding, + + $json->decode('"\u00e3\u0081\u0082"'); + +The returned is a byte sequence C<0xE3 0x81 0x82> for UTF-8 encoded +japanese character (C). +And if it is represented in Unicode code point, C. + +Next, + + $json->decode('"\u3042"'); + +We ordinary expect the returned value is a Unicode character C. +But here is 5.005 world. This is C<0xE3 0x81 0x82>. + + $json->decode('"\ud808\udf45"'); + +This is not a character C but bytes - C<0xf0 0x92 0x8d 0x85>. + + +=head1 TODO + +=over + +=item speed + +=item memory saving + +=back + + +=head1 SEE ALSO + +Most of the document are copied and modified from JSON::XS doc. + +L + +RFC4627 (L) + +=head1 AUTHOR + +Makamaka Hannyaharamitu, Emakamaka[at]cpan.orgE + + +=head1 COPYRIGHT AND LICENSE + +Copyright 2007-2010 by Makamaka Hannyaharamitu + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut diff --git a/jsttyplay/JSON/backportPP/Boolean.pm b/jsttyplay/JSON/backportPP/Boolean.pm new file mode 100644 index 000000000..2646b8e3a --- /dev/null +++ b/jsttyplay/JSON/backportPP/Boolean.pm @@ -0,0 +1,26 @@ +=head1 NAME + +JSON::PP::Boolean - dummy module providing JSON::PP::Boolean + +=head1 SYNOPSIS + + # do not "use" yourself + +=head1 DESCRIPTION + +This module exists only to provide overload resolution for Storable and similar modules. See +L for more info about this class. + +=cut + +use JSON::backportPP (); +use strict; + +1; + +=head1 AUTHOR + +This idea is from L written by Marc Lehmann + +=cut + diff --git a/jsttyplay/JSON/backportPP/Compat5005.pm b/jsttyplay/JSON/backportPP/Compat5005.pm new file mode 100644 index 000000000..f51741c3a --- /dev/null +++ b/jsttyplay/JSON/backportPP/Compat5005.pm @@ -0,0 +1,131 @@ +package # This is JSON::backportPP + JSON::backportPP5005; + +use 5.005; +use strict; + +my @properties; + +$JSON::PP5005::VERSION = '1.10'; + +BEGIN { + + sub utf8::is_utf8 { + 0; # It is considered that UTF8 flag off for Perl 5.005. + } + + sub utf8::upgrade { + } + + sub utf8::downgrade { + 1; # must always return true. + } + + sub utf8::encode { + } + + sub utf8::decode { + } + + *JSON::PP::JSON_PP_encode_ascii = \&_encode_ascii; + *JSON::PP::JSON_PP_encode_latin1 = \&_encode_latin1; + *JSON::PP::JSON_PP_decode_surrogates = \&_decode_surrogates; + *JSON::PP::JSON_PP_decode_unicode = \&_decode_unicode; + + # missing in B module. + sub B::SVp_IOK () { 0x01000000; } + sub B::SVp_NOK () { 0x02000000; } + sub B::SVp_POK () { 0x04000000; } + + $INC{'bytes.pm'} = 1; # dummy +} + + + +sub _encode_ascii { + join('', map { $_ <= 127 ? chr($_) : sprintf('\u%04x', $_) } unpack('C*', $_[0]) ); +} + + +sub _encode_latin1 { + join('', map { chr($_) } unpack('C*', $_[0]) ); +} + + +sub _decode_surrogates { # from http://homepage1.nifty.com/nomenclator/unicode/ucs_utf.htm + my $uni = 0x10000 + (hex($_[0]) - 0xD800) * 0x400 + (hex($_[1]) - 0xDC00); # from perlunicode + my $bit = unpack('B32', pack('N', $uni)); + + if ( $bit =~ /^00000000000(...)(......)(......)(......)$/ ) { + my ($w, $x, $y, $z) = ($1, $2, $3, $4); + return pack('B*', sprintf('11110%s10%s10%s10%s', $w, $x, $y, $z)); + } + else { + Carp::croak("Invalid surrogate pair"); + } +} + + +sub _decode_unicode { + my ($u) = @_; + my ($utf8bit); + + if ( $u =~ /^00([89a-f][0-9a-f])$/i ) { # 0x80-0xff + return pack( 'H2', $1 ); + } + + my $bit = unpack("B*", pack("H*", $u)); + + if ( $bit =~ /^00000(.....)(......)$/ ) { + $utf8bit = sprintf('110%s10%s', $1, $2); + } + elsif ( $bit =~ /^(....)(......)(......)$/ ) { + $utf8bit = sprintf('1110%s10%s10%s', $1, $2, $3); + } + else { + Carp::croak("Invalid escaped unicode"); + } + + return pack('B*', $utf8bit); +} + + +sub JSON::PP::incr_text { + $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new; + + if ( $_[0]->{_incr_parser}->{incr_parsing} ) { + Carp::croak("incr_text can not be called when the incremental parser already started parsing"); + } + + $_[0]->{_incr_parser}->{incr_text} = $_[1] if ( @_ > 1 ); + $_[0]->{_incr_parser}->{incr_text}; +} + + +1; +__END__ + +=pod + +=head1 NAME + +JSON::PP5005 - Helper module in using JSON::PP in Perl 5.005 + +=head1 DESCRIPTION + +JSON::PP calls internally. + +=head1 AUTHOR + +Makamaka Hannyaharamitu, Emakamaka[at]cpan.orgE + + +=head1 COPYRIGHT AND LICENSE + +Copyright 2007-2010 by Makamaka Hannyaharamitu + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut + diff --git a/jsttyplay/JSON/backportPP/Compat5006.pm b/jsttyplay/JSON/backportPP/Compat5006.pm new file mode 100644 index 000000000..820dc938f --- /dev/null +++ b/jsttyplay/JSON/backportPP/Compat5006.pm @@ -0,0 +1,173 @@ +package # This is JSON::backportPP + JSON::backportPP56; + +use 5.006; +use strict; + +my @properties; + +$JSON::PP56::VERSION = '1.08'; + +BEGIN { + + sub utf8::is_utf8 { + my $len = length $_[0]; # char length + { + use bytes; # byte length; + return $len != length $_[0]; # if !=, UTF8-flagged on. + } + } + + + sub utf8::upgrade { + ; # noop; + } + + + sub utf8::downgrade ($;$) { + return 1 unless ( utf8::is_utf8( $_[0] ) ); + + if ( _is_valid_utf8( $_[0] ) ) { + my $downgrade; + for my $c ( unpack( "U*", $_[0] ) ) { + if ( $c < 256 ) { + $downgrade .= pack("C", $c); + } + else { + $downgrade .= pack("U", $c); + } + } + $_[0] = $downgrade; + return 1; + } + else { + Carp::croak("Wide character in subroutine entry") unless ( $_[1] ); + 0; + } + } + + + sub utf8::encode ($) { # UTF8 flag off + if ( utf8::is_utf8( $_[0] ) ) { + $_[0] = pack( "C*", unpack( "C*", $_[0] ) ); + } + else { + $_[0] = pack( "U*", unpack( "C*", $_[0] ) ); + $_[0] = pack( "C*", unpack( "C*", $_[0] ) ); + } + } + + + sub utf8::decode ($) { # UTF8 flag on + if ( _is_valid_utf8( $_[0] ) ) { + utf8::downgrade( $_[0] ); + $_[0] = pack( "U*", unpack( "U*", $_[0] ) ); + } + } + + + *JSON::PP::JSON_PP_encode_ascii = \&_encode_ascii; + *JSON::PP::JSON_PP_encode_latin1 = \&_encode_latin1; + *JSON::PP::JSON_PP_decode_surrogates = \&JSON::PP::_decode_surrogates; + *JSON::PP::JSON_PP_decode_unicode = \&JSON::PP::_decode_unicode; + + unless ( defined &B::SVp_NOK ) { # missing in B module. + eval q{ sub B::SVp_NOK () { 0x02000000; } }; + } + +} + + + +sub _encode_ascii { + join('', + map { + $_ <= 127 ? + chr($_) : + $_ <= 65535 ? + sprintf('\u%04x', $_) : sprintf('\u%x\u%x', JSON::PP::_encode_surrogates($_)); + } _unpack_emu($_[0]) + ); +} + + +sub _encode_latin1 { + join('', + map { + $_ <= 255 ? + chr($_) : + $_ <= 65535 ? + sprintf('\u%04x', $_) : sprintf('\u%x\u%x', JSON::PP::_encode_surrogates($_)); + } _unpack_emu($_[0]) + ); +} + + +sub _unpack_emu { # for Perl 5.6 unpack warnings + return !utf8::is_utf8($_[0]) ? unpack('C*', $_[0]) + : _is_valid_utf8($_[0]) ? unpack('U*', $_[0]) + : unpack('C*', $_[0]); +} + + +sub _is_valid_utf8 { + my $str = $_[0]; + my $is_utf8; + + while ($str =~ /(?: + ( + [\x00-\x7F] + |[\xC2-\xDF][\x80-\xBF] + |[\xE0][\xA0-\xBF][\x80-\xBF] + |[\xE1-\xEC][\x80-\xBF][\x80-\xBF] + |[\xED][\x80-\x9F][\x80-\xBF] + |[\xEE-\xEF][\x80-\xBF][\x80-\xBF] + |[\xF0][\x90-\xBF][\x80-\xBF][\x80-\xBF] + |[\xF1-\xF3][\x80-\xBF][\x80-\xBF][\x80-\xBF] + |[\xF4][\x80-\x8F][\x80-\xBF][\x80-\xBF] + ) + | (.) + )/xg) + { + if (defined $1) { + $is_utf8 = 1 if (!defined $is_utf8); + } + else { + $is_utf8 = 0 if (!defined $is_utf8); + if ($is_utf8) { # eventually, not utf8 + return; + } + } + } + + return $is_utf8; +} + + +1; +__END__ + +=pod + +=head1 NAME + +JSON::PP56 - Helper module in using JSON::PP in Perl 5.6 + +=head1 DESCRIPTION + +JSON::PP calls internally. + +=head1 AUTHOR + +Makamaka Hannyaharamitu, Emakamaka[at]cpan.orgE + + +=head1 COPYRIGHT AND LICENSE + +Copyright 2007-2009 by Makamaka Hannyaharamitu + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut + diff --git a/jsttyplay/LICENSE b/jsttyplay/LICENSE new file mode 100644 index 000000000..223c3858d --- /dev/null +++ b/jsttyplay/LICENSE @@ -0,0 +1,14 @@ +Copyright (c) 2007-2008 Jack Christopher Kastorff + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions, and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * The name Jack Christopher Kastorff may not be used to endorse or + promote products derived from this software without specific prior + written permission. diff --git a/jsttyplay/Term/Emulator.pm b/jsttyplay/Term/Emulator.pm new file mode 100644 index 000000000..69435586e --- /dev/null +++ b/jsttyplay/Term/Emulator.pm @@ -0,0 +1,258 @@ +package Term::Emulator; +use strict; + +use IO::Pty; +use IO::Tty qw/ TIOCSWINSZ TCGETA TCSETA ICANON ISIG IEXTEN ECHO ECHOE ECHOKE ECHOCTL PENDIN ICRNL IXON IXANY IMAXBEL BRKINT OPOST ONLCR TIOCGETP TIOCSETN /; +use Term::Emulator::Parser; + +use IO::Handle; +use Carp; +use Time::HiRes qw/ time sleep /; + +our $STDIN, $STDOUT, $STDERR; +open $STDIN, "<&=", \*STDIN or die; +open $STDOUT, ">&=", \*STDOUT or die; +open $STDERR, ">&=", \*STDERR or die; + +sub new { + my ($class, %args) = @_; + my $self = bless {}, $class; + + my $width = exists $args{'width'} ? delete $args{'width'} : 80; + my $height = exists $args{'height'} ? delete $args{'height'} : 24; + + $self->{'term'} = Term::Emulator::Parser->new(width => $width, height => $height); + $self->{'pty'} = IO::Pty->new; + $self->{'pid'} = undef; + + $self->{'buffers'} = { + ptysend => '', + }; + + $self->set_size($width, $height); + + return $self; +} + +sub set_size { + my ($self, $width, $height) = @_; + + # TODO - kill WINCH the subproccess + # TODO - update the Term::Emulator::Parser size + + ioctl $self->pty->slave, TIOCSWINSZ, pack "S!S!S!S!", $height, $width, $height, $width; + + return $self; +} + +sub spawn { + # based on IO::Pty::Easy v0.03 + my ($self, @program) = @_; + my $slave = $self->pty->slave; + + croak "Can't spawn a process when one is already running!" + if $self->is_active; + + # for returning errors from the child process + my ($readp, $writep); + unless ( pipe($readp, $writep) ) { + croak "Failed to create a pipe"; + } + $writep->autoflush(1); + + # fork the child + my $pid = fork; + croak "Couldn't fork" unless defined $pid; + + unless ( $pid ) { + # child process + close $readp; + + $self->pty->make_slave_controlling_terminal; + close $self->pty; + $slave->set_raw; + + # reopen STD{IN,OUT,ERR} to use the pty + eval { + open($STDIN, "<&", $slave->fileno) or croak "Couldn't reopen STDIN for reading: $!"; + open($STDOUT, ">&", $slave->fileno) or croak "Couldn't reopen STDOUT for writing: $!"; + open($STDERR, ">&", $slave->fileno) or croak "Couldn't reopen STDERR for writing: $!"; + }; + warn "t: $@" if $@; + die "t: $@" if $@; + + close $slave; + + system("stty","sane"); + + exec(@program); + + # exec failed, tell our parent what happened + print $writep $! + 0; + carp "Cannot exec(@program): $!"; + + exit 1; + } + + # parent process continues + close $writep; + $self->{'pid'} = $pid; + + $self->pty->close_slave; + $self->pty->set_raw; + + # this will block until EOF (exec killed the filehandle) or we get the error (exec failed) + my $errno; + my $read_bytes = sysread($readp, $errno, 256); + + unless ( defined $read_bytes ) { + # something went bad wrong with the sysread + my $err = $!; + kill TERM => $pid; + close $readp; + # wait up to 2 seconds for the process to die + my $starttime = time; + sleep 0.01 while time() - $starttime < 2 and $self->is_active; + if ( time() - $starttime >= 2 ) { # harmless race condition + # beat the living crap out of the process + kill KILL => $pid; + } + croak "Cannot sync with child: $err"; + } + + close $readp; + + if ( $read_bytes > 0 ) { + # child couldn't exec + $errno = $errno + 0; + $self->_wait_for_inactive; + croak "Cannot exec(@program): $errno"; + } + + return $self; +} + +sub userinput { + my ($self, $input) = @_; + $self->term->userinput($input); + $self->_move_term_sendbuf; + $self->work_for(0); + return $self; +} + +sub key { + my ($self, $key) = @_; + $self->term->key($key); + $self->_move_term_sendbuf; + $self->work_for(0); + return $self; +} + +sub work_for { + my ($self, $time) = @_; + my $start = time; + my $ptyfn = fileno($self->pty); + my $loops = 0; + while ( 1 ) { + my $readvec = ''; + vec($readvec, $ptyfn, 1) = 1; + + my $writevec = ''; + if ( length $self->{'buffers'}->{'ptysend'} ) { + vec($writevec, $ptyfn, 1) = 1; + } + + my $len = ($start + $time) - time; + if ( $len < 0 ) { + last if $loops; + $len = 0; + } + my $nfound = select($readvec, $writevec, undef, $len); + last unless $nfound; # if no handles have been written to, we've finished our time chunk + + # check for reads + if ( vec($readvec, $ptyfn, 1) ) { + # pty can read + + my $buf = ''; + my $n = sysread $self->pty, $buf, 16384; + if ( $n == 0 ) { + # EOF + $self->kill if $self->is_active; + last; + } + $self->term->parse($buf); # pass data sent from the pty slave to the terminal + $self->_move_term_sendbuf; + } + + # check for writes if we have outstanding buffers + if ( vec($writevec, $ptyfn, 1) ) { + my $nchars = syswrite $self->pty, $self->{'buffers'}->{'ptysend'}; + if ( $nchars ) { + $self->{'buffers'}->{'ptysend'} = substr $self->{'buffers'}->{'ptysend'}, $nchars; + } + } + + # TODO: check for error conditions + $loops++; + } + + return $self; +} + +sub _move_term_sendbuf { + my ($self) = @_; + my $buf = $self->term->output; + if ( length $buf ) { + $self->{'buffers'}->{'ptysend'} .= $buf; + $self->term->output = ''; + } +} + +sub is_active { + my ($self) = @_; + + return 0 unless defined $self->{'pid'}; + if ( kill 0, $self->{'pid'} ) { + return 1; + } else { + undef $self->{'pid'}; + } +} + +sub kill { + my ($self, $signal) = @_; + $signal = "KILL" unless defined $signal; + + return 0 unless $self->is_active; + return kill $signal, $self->{'pid'}; +} + +sub stop_it_in { + my ($self, $maxtime) = @_; + $maxtime = 5 unless defined $maxtime; + return 0 unless $self->is_active; + + kill KILL => $self->{'pid'}; + my $killtime = time; + while ( time() - $killtime < $maxtime ) { + return 1 if not $self->is_active; + sleep 0.05; + } + + kill TERM => $self->{'pid'}; + + sleep 0.01; + return $self->is_active; +} + +sub _wait_for_inactive { + my ($self) = @_; + sleep 0.01 while $self->is_active; +} + +sub pty { $_[0]->{'pty'} } +sub term { $_[0]->{'term'} } + +1; + diff --git a/jsttyplay/Term/Emulator/Parser.pm b/jsttyplay/Term/Emulator/Parser.pm new file mode 100644 index 000000000..9c412bf3d --- /dev/null +++ b/jsttyplay/Term/Emulator/Parser.pm @@ -0,0 +1,766 @@ +package Term::Emulator::Parser; +use strict; +use warnings; + +use Carp; +use Storable qw/ dclone /; + +sub ASSERTIONS_ENABLED { 0 } + +# attribute indexes +sub FCOLOR () { 0 } +sub BCOLOR () { 1 } +sub BOLD () { 2 } +sub ULINE () { 3 } +sub REVERSE () { 4 } + +sub new { + my ($class, %args) = @_; + my $self = bless {}, $class; + + my $width = exists $args{'width'} ? delete $args{'width'} : 80; + my $height = exists $args{'height'} ? delete $args{'height'} : 24; + + $self->{'width'} = $width; + $self->{'height'} = $height; + $self->{'extra_chars'} = ''; # buffer for incomplete escape codes + $self->{'output'} = ''; # buffer for output + $self->{'output_enable'} = exists $args{'output_enable'} ? delete $args{'output_enable'} : 1; + $self->{'strict'} = exists $args{'strict'} ? delete $args{'strict'} : 0; + + $self->reset; + + return $self; +} + +sub reset { + my ($self) = @_; + + my $defattr = []; + $defattr->[BCOLOR] = 0; + $defattr->[FCOLOR] = 7; + $defattr->[BOLD] = 0; + $defattr->[ULINE] = 0; + $defattr->[REVERSE] = 0; + + $self->{'buffers'} = [map +{ + data => [ map [map " ", 1 .. $self->width], 1 .. $self->height], + attr => [ map [map [@$defattr], 1 .. $self->width], 1 .. $self->height], + regionlow => 1, + regionhi => $self->height, + tabs => [ grep { $_ > 5 and $_ % 8 == 1 } 1 .. $self->width ], # 9, 17, ... + }, 0..1]; + $self->{'active'} = 0; + + $self->{'curpos'} = [1,1]; + $self->{'cursorstack'} = []; + $self->{'cursorattr'} = [@$defattr]; + $self->{'defaultattr'} = [@$defattr]; + + $self->{'wrapnext'} = 0; + $self->{'autowrap'} = 1; + $self->{'originmode'} = 0; + $self->{'linefeedback'} = 1; + $self->{'insertmode'} = 0; + $self->{'localecho'} = 0; + $self->{'title'} = 'Term::Emulator'; + + return $self; +} + +sub softreset { + my ($self) = @_; + + my $defattr = []; + $defattr->[BCOLOR] = 0; + $defattr->[FCOLOR] = 7; + $defattr->[BOLD] = 0; + $defattr->[ULINE] = 0; + $defattr->[REVERSE] = 0; + + $self->{'curpos'} = [1,1]; + $self->{'cursorstack'} = []; + $self->{'cursorattr'} = [@$defattr]; + $self->{'defaultattr'} = [@$defattr]; + + $self->{'wrapnext'} = 0; + $self->{'autowrap'} = 1; + $self->{'originmode'} = 0; + $self->{'linefeedback'} = 1; + $self->{'insertmode'} = 0; + $self->{'localecho'} = 0; + + return $self; +} + +sub clear { + my ($self) = @_; + for my $y ( 0 .. $self->height-1 ) { + for my $x ( 0 .. $self->width-1 ) { + $self->data->[$y]->[$x] = ' '; + $self->attr->[$y]->[$x] = $self->defaultattr; + } + } +} + +sub switch_to_screen { + my ($self, $index) = @_; + die if $index < 0 or $index > $#{$self->{'buffers'}}; + $self->{'active'} = $index; + $self->wrapnext = 0; + return $self; +} + +sub dowrap { + my ($self) = @_; + + if ( $self->wrapnext ) { + $self->curposx = 1; + + if ( $self->curposy == $self->regionhi ) { + $self->scroll(1); + } else { + $self->curposy++; + } + + $self->wrapnext = 0; + } +} + +sub key { + my ($self, $key) = @_; + die if length($key) > 1; + if ( $key =~ /^[-0-9a-zA-Z<>,.\/?;:'"\[\]\{\}\\\|_=+~`!\@#\$\%^\&*\(\) \t\n]$/ ) { + # printable ascii + $self->output .= $key; + $self->parse_char($key) if $self->localecho; + } else { + # unprintable ascii + $self->output .= $key; + } +} + +sub userinput { + my ($self, $input) = @_; + for my $ch ( split //, $input ) { + $self->key($ch); + } +} + +sub parse { + my ($self, $string) = @_; + + # take our extra incomplete escape codes first + $string = $self->{'extra_chars'} . $string; + + pos($string) = 0; + while ( pos($string) != length($string) ) { + if ( $string =~ /\G\033([-#()*+.\/].)/gc ) { # character set sequence (SCS) + $self->parse_escape($1); + + } elsif ( $string =~ /\G\033(\].*?\007)/gc ) { + $self->parse_escape($1); + + } elsif ( $string =~ /\G\033(\[.*?[a-zA-Z<>])/gc ) { + $self->parse_escape($1); + + } elsif ( $string =~ /\G\033([^\[\]#()])/gc ) { + $self->parse_escape($1); + + } elsif ( $string =~ /\G([^\033])/gcs ) { + $self->parse_char($1); + + } else { last } + } + + # save the incomplete escape codes for the next parse + $self->{'extra_chars'} = substr $string, pos $string; + + return $self; +} + +sub parse_escape { + my ($self, $escape) = @_; + + if ( $escape =~ /^\[([0-9;]*)m$/ ) { + $self->set_color($1); + + } elsif ( $escape =~ /^\]2;(.*)\007$/ ) { + $self->title = $1; # window title + + } elsif ( $escape =~ /^\]1;(.*)\007$/ ) { + # icon title + + } elsif ( $escape =~ /^\]0;(.*)\007$/ ) { + $self->title = $1; # window and icon title + + } elsif ( $escape =~ /^\[(\??)(.+)h$/ ) { + # set mode + my ($q, $c) = ($1, $2); + my @codes = map "$q$_", split /;/, $c; + local $_; + $self->set_mode($_) for @codes; + + } elsif ( $escape =~ /^\[(\??)(.+)l$/ ) { + # reset mode + my ($q, $c) = ($1, $2); + my @codes = map "$q$_", split /;/, $c; + local $_; + $self->reset_mode($_) for @codes; + + } elsif ( 0 + or $escape eq "=" # keypad mode + or $escape eq ">" # keypad mode + or $escape eq "[>" # ??? + or $escape eq "#5" # single-width single-height line + or $escape =~ /^\[.q$/ # leds + or $escape =~ /^[()*+].$/ # set character sets + ) { + # ignore + + } elsif ( $escape eq "[c" or $escape eq "[0c" ) { + # report device attributes + $self->output .= "\033[?1;2c"; # I am VT100 with advanced video option + + } elsif ( $escape eq "Z" ) { + # identify terminal (report) + $self->output .= "\033[/Z"; # I am VT52 + + } elsif ( $escape eq "[5n" ) { + # status report + $self->output .= "\033[0n"; # OK - we'll never have hardware problems. + + } elsif ( $escape eq "[6n" ) { + # report cursor position (CPR) + $self->output .= "\033[".$self->curposy.";".$self->curposx."R"; + + } elsif ( $escape eq "7" ) { + # save cursor and attribute + push @{$self->cursorstack}, { + posx => $self->curposx, + posy => $self->curposy, + }; + + } elsif ( $escape eq "8" ) { + # restore cursor and attribute + my $state = pop @{$self->cursorstack}; + if ( defined $state ) { + $self->curposx = $state->{'posx'}; + $self->curposy = $state->{'posy'}; + } + $self->wrapnext = 0; + + } elsif ( $escape =~ /^\[(\d+);(\d+)r$/ ) { + # set margins + my ($lo,$hi) = ($1,$2); + $lo = 1 if $lo < 1; + $hi = $self->height if $hi > $self->height; + $self->regionlow = $lo; + $self->regionhi = $hi; + + } elsif ( $escape eq "[r" ) { + # reset margins + $self->regionlow = 1; + $self->regionhi = $self->height; + + } elsif ( $escape eq "[H" or $escape eq "[f" ) { + # cursor home + $self->curposx = 1; + $self->curposy = 1; + $self->wrapnext = 0; + + } elsif ( $escape =~ /^\[(\d+);(\d+)[Hf]$/ ) { + # cursor set position + my ($y,$x) = ($1,$2); + $x = 1 if $x < 1; $x = $self->width if $x > $self->width; + $y = 1 if $y < 1; $y = $self->height if $y > $self->height; + $self->curposx = $x; + $self->curposy = $y; + $self->wrapnext = 0; + + } elsif ( $escape eq "[K" or $escape eq "[0K" ) { + # erase from cursor to end of line + my $row = $self->data->[$self->curposy-1]; + my $arow = $self->attr->[$self->curposy-1]; + for my $x ( $self->curposx .. $self->width ) { + $row->[$x-1] = ' '; + $arow->[$x-1] = $self->defaultattr; + } + + } elsif ( $escape eq "[1K" ) { + # erase from start of line to cursor + my $row = $self->data->[$self->curposy-1]; + my $arow = $self->attr->[$self->curposy-1]; + for my $x ( 1 .. $self->curposx ) { + $row->[$x-1] = ' '; + $arow->[$x-1] = $self->defaultattr; + } + + } elsif ( $escape eq "[2K" ) { + # erase line + my $row = $self->data->[$self->curposy-1]; + @$row = map ' ', @$row; + my $arow = $self->attr->[$self->curposy-1]; + @$arow = map { +$self->defaultattr } @$arow; + + } elsif ( $escape =~ /^\[(\d*)M$/ ) { + # delete lines + my $erase = $1; + $erase = 1 if not length $erase; + if ( $self->curposy >= $self->regionlow and $self->curposy <= $self->regionhi ) { + $erase = $self->regionhi-$self->curposy+1 if $erase > $self->regionhi-$self->curposy+1; + my $aclone = $self->attr->[$self->regionhi-1]; + splice @{$self->attr}, $self->curposy-1, $erase; + splice @{$self->attr}, $self->regionhi-$erase, 0, map {+ dclone $aclone } 1 .. $erase; + splice @{$self->data}, $self->curposy-1, $erase; + splice @{$self->data}, $self->regionhi-$erase, 0, map [ (' ') x $self->width ], 1 .. $erase; + } + + } elsif ( $escape =~ /^\[(\d*)L$/ ) { + # insert lines + my $insert = $1; + $insert = 1 if not length $insert; + if ( $self->curposy >= $self->regionlow and $self->curposy <= $self->regionhi ) { + $insert = $self->regionhi-$self->curposy+1 if $insert > $self->regionhi-$self->curposy+1; + splice @{$self->attr}, $self->curposy-1, 0, map [ map {+ $self->defaultattr } 1 .. $self->width ], 1 .. $insert; + splice @{$self->attr}, $self->regionhi-$insert, $insert; + splice @{$self->data}, $self->curposy-1, 0, map [ (' ') x $self->width ], 1 .. $insert; + splice @{$self->data}, $self->regionhi-$insert, $insert; + } + + } elsif ( $escape =~ /^\[(\d+)P$/ ) { + # delete characters + my $del = $1; + my $row = $self->data->[$self->curposy-1]; + my $arow = $self->attr->[$self->curposy-1]; + splice @$row, $self->curposx-1, $del; + push @$row, (' ') x $del; + splice @$arow, $self->curposx-1, $del; + push @$arow, map {+ dclone($arow->[-1]) } 1 .. $del; + + } elsif ( $escape =~ /^\[.?J$/ ) { + # erase display + $self->clear; + + } elsif ( $escape eq "[g" or $escape eq "[0g" ) { + # tab clear at cursor position + $self->tabs = [ grep { $_ != $self->curposx } $self->tabs ]; + + } elsif ( $escape eq "[3g" ) { + # clear all tabs + $self->tabs = []; + + } elsif ( $escape eq "H" ) { + # set tab stop at cursor position + $self->tabs = [ sort { $a <=> $b } keys %{{ map +($_,1), @{$self->tabs}, $self->curposx }} ]; + + } elsif ( $escape =~ /^\[(\d*)A$/ ) { + # cursor up + my $n = $1; + $n = 1 unless length $n; + $self->curposy -= $n; + $self->curposy = 1 if $self->curposy < 1; + + } elsif ( $escape =~ /^\[(\d*)B$/ ) { + # cursor down + my $n = $1; + $n = 1 unless length $n; + $self->curposy += $n; + $self->curposy = $self->height if $self->curposy > $self->height; + + } elsif ( $escape =~ /^\[(\d*)C$/ ) { + # cursor forward + my $n = $1; + $n = 1 unless length $n; + $self->curposx += $n; + $self->curposx = $self->width if $self->curposx > $self->width; + + } elsif ( $escape =~ /^\[(\d*)D$/ ) { + # cursor backward + my $n = $1; + $n = 1 unless length $n; + $self->curposx -= $n; + $self->curposx = 1 if $self->curposx < 1; + + } elsif ( $escape eq "D" ) { + # index + $self->dowrap; + $self->curposy++; + if ( $self->curposy > $self->height ) { + $self->curposy--; + $self->scroll(1); + } + + } elsif ( $escape eq "M" ) { + # reverse index + $self->dowrap; + $self->curposy--; + if ( $self->curposy < 1 ) { + $self->curposy++; + $self->scroll(-1); + } + + } elsif ( $escape eq "[!p" ) { + # soft terminal reset + $self->softreset; + + } elsif ( $escape eq "c" ) { + # hard terminal reset + $self->reset; + + } else { + die "unknown escape: '$escape' (".unpack("H*",$escape).")"; + } + + $self->assert; +} + +sub set_mode { + my ($self, $mode) = @_; + + if ( $mode eq "8" # auto repeat + or $mode eq "9" # interlacing + or $mode eq "0" # newline mode or error + or $mode eq "5" # reverse video + or $mode eq "?1" # cursor keys + or $mode eq "?4" # smooth scrolling + or $mode eq "?3" # 132-column mode + or $mode eq "?9" # mouse tracking on button press + or $mode eq "?1000" # mouse tracking on button press and release + or $mode eq "7" # ??? + or $mode eq "6" # ??? + or $mode eq "?25" # ??? + ) { + # ignore + + } elsif ( $mode eq "?7" ) { + $self->autowrap = 1; + + } elsif ( $mode eq "?6" ) { + $self->originmode = 1; + die "origin mode not supported"; + + } elsif ( $mode eq "20" ) { + $self->linefeedback = 1; + + } elsif ( $mode eq "4" ) { + $self->insertmode = 1; + + } elsif ( $mode eq "?47" ) { + $self->switch_to_screen(0); # primary + + } elsif ( $mode eq "12" ) { + $self->localecho = 0; + + } else { + die "unknown mode '$mode'"; + } + + $self->assert; +} + +sub reset_mode { + my ($self, $mode) = @_; + + if ( $mode eq "8" # auto repeat + or $mode eq "9" # interlacing + or $mode eq "0" # newline mode or error + or $mode eq "5" # reverse video + or $mode eq "?1" # cursor keys + or $mode eq "?4" # smooth scrolling + or $mode eq "?3" # 80 column mode + or $mode eq "?9" # mouse tracking on button press + or $mode eq "?1000" # mouse tracking on button press and release + or $mode eq "7" # ??? + or $mode eq "6" # ??? + or $mode eq "?25" # ??? + ) { + # ignore + + } elsif ( $mode eq "?7" ) { + $self->autowrap = 0; + + } elsif ( $mode eq "?6" ) { + $self->originmode = 0; + + } elsif ( $mode eq "20" ) { + $self->linefeedback = 0; + + } elsif ( $mode eq "4" ) { + $self->insertmode = 0; + + } elsif ( $mode eq "?47" ) { + $self->switch_to_screen(1); # secondary + + } elsif ( $mode eq "12" ) { + $self->localecho = 1; + + } else { + die "unknown mode '$mode'"; + } + + $self->assert; +} + +sub set_color { + my ($self, $colorstring) = @_; + + my $rev = $self->cursorattr->[REVERSE]; + + for my $m ( length $colorstring ? split /;/, $colorstring : '' ) { + if ( not length $m or $m == 0 ) { + @{$self->cursorattr} = @{$self->defaultattr}; + + } elsif ( $m == 1 ) { + $self->cursorattr->[BOLD] = 1; + + } elsif ( $m == 4 ) { + $self->cursorattr->[ULINE] = 1; + + } elsif ( $m >= 30 and $m <= 37 ) { + $self->cursorattr->[$rev ? BCOLOR : FCOLOR] = $m-30; + + } elsif ( $m >= 40 and $m <= 47 ) { + $self->cursorattr->[$rev ? FCOLOR : BCOLOR] = $m-40; + + } elsif ( $m == 7 ) { + if ( ! $self->cursorattr->[REVERSE] ) { + my $fg = $self->cursorattr->[FCOLOR]; + my $bg = $self->cursorattr->[BCOLOR]; + $self->cursorattr->[BCOLOR] = $fg; + $self->cursorattr->[FCOLOR] = $bg; + } + $rev = $self->cursorattr->[REVERSE] = 1; + + } elsif ( $m == 22 ) { + $self->cursorattr->[BOLD] = 0; + + } elsif ( $m == 24 ) { + $self->cursorattr->[ULINE] = 0; + + } elsif ( $m == 27 ) { + if ( $self->cursorattr->[REVERSE] ) { + my $fg = $self->cursorattr->[FCOLOR]; + my $bg = $self->cursorattr->[BCOLOR]; + $self->cursorattr->[BCOLOR] = $fg; + $self->cursorattr->[FCOLOR] = $bg; + } + $rev = $self->cursorattr->[REVERSE] = 0; + + } elsif ( $m == 5 ) { + # blink, ignore + + } else { + warn "unknown color mode $m"; + } + } +} + +sub parse_char { + my ($self, $char) = @_; + if ( $char eq "\015" ) { # carriage return + $self->curposx = 1; + $self->wrapnext = 0; + + } elsif ( $char eq "\012" or $char eq "\014" ) { # line feed / form feed + $self->curposx = 1 if $self->linefeedback; + $self->curposy++; + $self->wrapnext = 0; + if ( $self->curposy > $self->regionhi ) { + $self->curposy = $self->regionhi; + $self->scroll(1); + } + + } elsif ( $char eq "\011" ) { # tab + my $to = $self->tabpositionfrom($self->curposx); + while ( $self->curposx != $to ) { + $self->data->[$self->curposy-1]->[$self->curposx-1] = ' '; + $self->attr->[$self->curposy-1]->[$self->curposx-1] = dclone $self->cursorattr; + $self->curposx++; + } + + } elsif ( $char eq "\010" ) { # backspace + $self->curposx--; + if ( $self->curposx == 0 ) { + $self->curposx = 1; + } + + } elsif ( $char =~ /[[:print:]]/ or ord $char > 127 ) { + $self->dowrap if $self->wrapnext; + + if ( $self->insertmode ) { + splice @{$self->data->[$self->curposy-1]}, $self->curposx-1, 0, $char; + pop @{$self->data->[$self->curposy-1]}; + splice @{$self->attr->[$self->curposy-1]}, $self->curposx-1, 0, dclone $self->cursorattr; + pop @{$self->attr->[$self->curposy-1]}; + } else { + $self->data->[$self->curposy-1]->[$self->curposx-1] = $char; + $self->attr->[$self->curposy-1]->[$self->curposx-1] = dclone $self->cursorattr; + } + + my $pos = $self->curpos; + $pos->[0]++; + if ( $pos->[0] > $self->width ) { + $pos->[0] = $self->width; + $self->wrapnext = 1 if $self->autowrap; + } + + } elsif ( ord $char == 0 # null + or ord $char == 7 # bell + or ord $char == 016 # shift out + or ord $char == 017 # shift in + ) { + # ignore + + } else { + # die ord $char; + warn "Bad character ". ord $char; + } + + $self->assert; +} + +sub scroll { + my ($self, $amt) = @_; + + my @part = splice @{$self->data}, $self->regionlow-1, $self->regionhi-$self->regionlow+1; + my @apart = splice @{$self->attr}, $self->regionlow-1, $self->regionhi-$self->regionlow+1; + + local $_; + if ( $amt > 0 ) { + shift @part for 1 .. $amt; + shift @apart for 1 .. $amt; + push @part, [ (' ') x $self->width ] for 1 .. $amt; + push @apart, [ map {+ $self->defaultattr } 1 .. $self->width ] for 1 .. $amt; + + } elsif ( $amt < 0 ) { + $amt = -$amt; + pop @part for 1 .. $amt; + pop @apart for 1 .. $amt; + unshift @part, [ (' ') x $self->width ] for 1 .. $amt; + unshift @apart, [ map {+ $self->defaultattr } 1 .. $self->width ] for 1 .. $amt; + + } else { die } + + splice @{$self->data}, $self->regionlow-1, 0, @part; + splice @{$self->attr}, $self->regionlow-1, 0, @apart; + + $self->assert; +} + +sub as_string { join "\n", map { join "", @$_ } @{$_[0]->data} } + +sub fg_as_string { join "\n", map { join "", map $_->[FCOLOR], @$_ } @{$_[0]->attr} } +sub bg_as_string { join "\n", map { join "", map $_->[BCOLOR], @$_ } @{$_[0]->attr} } +sub bold_as_string { join "\n", map { join "", map +($_->[BOLD] ? "1" : "0"), @$_ } @{$_[0]->attr} } +sub underline_as_string { join "\n", map { join "", map +($_->[ULINE] ? "1" : "0"), @$_ } @{$_[0]->attr} } + +sub as_termstring { + my ($self) = @_; + + my $defat = $self->defaultattr; + + my $str = "\033[m"; + for my $y ( 0 .. $self->height-1 ) { + + my $drow = $self->data->[$y]; + my $arow = $self->attr->[$y]; + + my $lastattr = $self->defaultattr; + + for my $x ( 0 .. $self->width-1 ) { + if ( join('/', @$lastattr) ne join('/', @{$arow->[$x]}) ) { + + my $at = $arow->[$x]; + + $str .= "\033[".join(';', '', + ($at->[BOLD] ? "1" : ()), + ($at->[ULINE] ? "4" : ()), + ($at->[BCOLOR] != $defat->[BCOLOR] ? 4 . $at->[BCOLOR] : ()), + ($at->[FCOLOR] != $defat->[FCOLOR] ? 3 . $at->[FCOLOR] : ()), + )."m"; + + $lastattr = $at; + } + + $str .= $drow->[$x]; + } + + $str .= "\n\033[m"; + } + return $str; +} + +sub tabpositionfrom { + my ($self, $pos) = @_; + for my $tab ( @{$self->tabs} ) { + return $tab if $tab > $pos; + } + return $self->width; +} + +sub assert { + my ($self) = @_; + return unless ASSERTIONS_ENABLED; + confess unless @{$self->{'buffers'}}; + confess if $self->{'active'} < 0; + confess if $self->{'active'} > $#{$self->{'buffers'}}; + confess if $self->curposx <= 0; + confess if $self->curposy <= 0; + confess if $self->curposx > $self->width; + confess if $self->curposy > $self->height; + confess if $self->regionlow <= 0; + confess if $self->regionlow > $self->height; + confess if $self->regionhi <= 0; + confess if $self->regionhi > $self->height; + confess if $self->regionhi < $self->regionlow; + + for my $row ( 0 .. $self->height-1 ) { + confess $row if @{$self->data->[$row]} != $self->width; + confess $row if @{$self->attr->[$row]} != $self->width; + + for my $ch ( 0 .. $self->width-1 ) { + confess "$row,$ch" if length $self->data->[$row]->[$ch] != 1; + confess "$row,$ch" if not ref $self->attr->[$row]->[$ch]; + confess "$row,$ch" if $self->attr->[$row]->[$ch]->[FCOLOR] < 0; + confess "$row,$ch" if $self->attr->[$row]->[$ch]->[BCOLOR] < 0; + confess "$row,$ch" if $self->attr->[$row]->[$ch]->[FCOLOR] > 7; + confess "$row,$ch" if $self->attr->[$row]->[$ch]->[BCOLOR] > 7; + } + } +} + +sub active_buf { $_[0]{'buffers'}[$_[0]->{'active'}] } + +sub data { $_[0]->active_buf->{'data'} } +sub attr { $_[0]->active_buf->{'attr'} } + +sub width { $_[0]->{'width'} } +sub height { $_[0]->{'height'} } +sub defaultattr { [@{$_[0]->{'defaultattr'}}] } + +sub curpos { $_[0]->{'curpos'} } +sub curposx :lvalue { $_[0]->{'curpos'}[0] } +sub curposy :lvalue { $_[0]->{'curpos'}[1] } +sub cursorstack { $_[0]->{'cursorstack'} } +sub cursorattr { $_[0]->{'cursorattr'} } + +sub regionlow :lvalue { $_[0]->active_buf->{'regionlow'} } +sub regionhi :lvalue { $_[0]->active_buf->{'regionhi'} } + +sub tabs :lvalue { $_[0]->active_buf->{'tabs'} } + +sub autowrap :lvalue { $_[0]->{'autowrap'} } +sub wrapnext :lvalue { $_[0]->{'wrapnext'} } +sub originmode :lvalue { $_[0]->{'originmode'} } +sub linefeedback :lvalue { $_[0]->{'linefeedback'} } +sub localecho :lvalue { $_[0]->{'localecho'} } + +sub insertmode :lvalue { $_[0]->{'insertmode'} } +sub title :lvalue { $_[0]->{'title'} } + +sub output :lvalue { my $t = ''; $_[0]->{'output_enable'} ? $_[0]->{'output'} : $t } +sub output_enable { $_[0]->{'output_enable'} } + +1; + diff --git a/jsttyplay/Term/TtyRec.pm b/jsttyplay/Term/TtyRec.pm new file mode 100644 index 000000000..5cd11d1ce --- /dev/null +++ b/jsttyplay/Term/TtyRec.pm @@ -0,0 +1,105 @@ +package Term::TtyRec; + +use strict; +use vars qw($VERSION); +$VERSION = '0.03'; + +use IO::Handle; + +sub new { + my($proto, $io) = @_; + my $class = ref $proto || $proto; + unless ($io->can('read')) { + require Carp; + Carp::croak 'Usage: Term::TtyRec->new($io)'; + } + bless { handle => $io }, $class; +} + +sub read_next { + my $self = shift; + my($sec, $text); + eval { + ($sec, my $length) = $self->_read_header; + $self->{handle}->read($text, $length); + }; + if ($@) { + $self->{handle}->clearerr; + return; + } + return $sec, $text; +} + +sub _read_header { + my $self = shift; + $self->{handle}->read(my($data), 12) or die 'EOF'; + my($sec, $usec, $length) = unpack 'VVV', $data; + return $sec + $usec / 1_000_000, $length; +} + +1; +__END__ + +=head1 NAME + +Term::TtyRec - handles ttyrec data + +=head1 SYNOPSIS + + use Term::TtyRec; + use FileHandle; + + # $handle is any IO::* object + my $handle = FileHandle->new('file.tty'); + my $ttyrec = Term::TtyRec->new($handle); + + # iterates through datafile + while (my($sec, $text) = $ttyrec->read_next) { + do_some_stuff(); + } + +=head1 DESCRIPTION + +What is ttyrec? Here is an excerpt. + + ttyrec is a tty recorder. Recorded data can be played back with the + included ttyplay command. ttyrec is just a derivative of script + command for recording timing information with microsecond accuracy + as well. It can record emacs -nw, vi, lynx, or any programs running + on tty. + +See http://www.namazu.org/~satoru/ttyrec/ for details. + +Term::TtyRec is a simple class for ttyrec recorded data. This module +provides a way to itertate through recorded from any IO. See +Term::TtyRec::Player for playing recorded data. + +=head1 METHODS + +=over 4 + +=item read_next + + ($sec, $text) = $ttyrec->read_next; + +iterates data inside and returns number of second, textdata. Returns +empty list when it reaches end of data. + +=back + +=head1 ACKNOWLEDGEMENT + +Almost all of its code are stolen from ruby-ttyplay. + +=head1 AUTHOR + +Tatsuhiko Miyagawa + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 SEE ALSO + +L, http://namazu.org/~satoru/ttyrec/ + +=cut diff --git a/jsttyplay/Term/TtyRec/Player.pm b/jsttyplay/Term/TtyRec/Player.pm new file mode 100644 index 000000000..78f5d483f --- /dev/null +++ b/jsttyplay/Term/TtyRec/Player.pm @@ -0,0 +1,126 @@ +package Term::TtyRec::Player; + +use strict; +use vars qw($VERSION); +$VERSION = '0.03'; + +use Time::HiRes qw(sleep); +use Term::TtyRec; + +sub new { + my($proto, $io, $attr) = @_; + my $class = ref $proto || $proto; + my %attr = ( speed => 1, nowait => undef, %{$attr || {}} ); # default + + unless ($io->can('read')) { + require Carp; + Carp::croak('Usage: Term::TtyRec::Player->new($io)'); + } + + bless { ttyrec => Term::TtyRec->new($io), %attr }, $class; +} + +sub play { + my $self = shift; + local $| = 1; + + my $prev; + while (my($sec, $text) = $self->ttyrec->read_next) { + my $wait = ($sec - $prev) / $self->speed if defined $prev; + unless ($self->nowait or ! $prev) { + sleep $wait; + } + print $text; + $prev = $sec; + } +} + +sub skip_all { + my $self = shift; + 1 while $self->ttyrec->read_next; +} + +sub peek { + my $self = shift; + $self->skip_all; + + while (1) { + $self->play; + sleep 0.25; + } +} + +### accessor +for my $attr (qw(ttyrec speed nowait)) { + no strict 'refs'; + *{__PACKAGE__. "::$attr"} = sub { + my $self = shift; + $self->{$attr} = shift if @_; + $self->{$attr}; + }; +} + + +1; +__END__ + +=head1 NAME + +Term::TtyRec::Player - playbacks ttyrec data + +=head1 SYNOPSIS + + use Term::TtyRec::Player; + use FileHandle; + + # $handle is any IO::* object + my $handle = FileHandle->new('file.tty'); + my $player = Term::TtyRec::Player->new($handle); + + # options can be set as hashref + my $player = Term::TtyRec::Player->new($handle, { + speed => 1, nowait => undef, + }); + +=head1 DESCRIPTION + +Term::TtyRec::Player playbacks ttyrec recorded data. See L +and L for details about ttyrec. + +=head1 METHODS + +=over 4 + +=item new + + $player = Term::TtyRec::Player->new($handle, \%attr); + +constructs new Term::TtyRec::Player instance. + +=item play + + $player->play(); + +Plays recorded data on your terminal. + +=item peek + + $player->peek(); + +Plays live-recoded data to your terminal. This method implements +ttyplay -p option. + +=back + +=head1 AUTHOR + +Tatsuhiko Miyagawa + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +=head1 SEE ALSO + +L, L, http://namazu.org/~satoru/ttyrec/ + +=cut diff --git a/jsttyplay/TermEncoder.pm b/jsttyplay/TermEncoder.pm new file mode 100644 index 000000000..c3da83406 --- /dev/null +++ b/jsttyplay/TermEncoder.pm @@ -0,0 +1,161 @@ +package TermEncoder; +use strict; + +use Time::HiRes qw/ time /; + +sub new { + my ($class, %args) = @_; + my $self = bless {}, $class; + + die unless exists $args{'term'}; + $self->{'term'} = delete $args{'term'}; + + $self->{'frames'} = 0; + $self->{'buffers'} = { + d => ['as_string'], + f => ['fg_as_string'], + b => ['bg_as_string'], + B => ['bold_as_string'], + U => ['underline_as_string'], + }; + + return $self; +} + +sub is_dirty { + my ($self) = @_; + + return 1 if $self->{'frames'} == 0; + + for my $bufk ( keys %{$self->{'buffers'}} ) { + my $buf = $self->{'buffers'}->{$bufk}; + my $fn = $buf->[0]; + return 1 if $buf->[1] ne $self->{'term'}->$fn; + } + + return 0; +} + +sub next_pframe { + my ($self, $time) = @_; + $time = time unless defined $time; + + return $self->next_iframe($time) if $self->{'frames'} == 0; + + my $fs = { t => $time+0, x => $self->{'term'}->curposx+0, y => $self->{'term'}->curposy+0 }; + + for my $bufk ( keys %{$self->{'buffers'}} ) { + my $buf = $self->{'buffers'}->{$bufk}; + my $fn = $buf->[0]; + my $new = $self->{'term'}->$fn; + $fs->{$bufk} = $self->_compress_pframe_block( $buf->[1], $new ) + if $buf->[1] ne $new; + $buf->[1] = $new; + } + + $self->{'frames'}++; + return $fs; +} + +sub next_iframe { + my ($self, $time) = @_; + $time = time unless defined $time; + + my $fs = { t => $time+0, i => 1, x => $self->{'term'}->curposx+0, y => $self->{'term'}->curposy+0 }; + + for my $bufk ( keys %{$self->{'buffers'}} ) { + my $buf = $self->{'buffers'}->{$bufk}; + my $fn = $buf->[0]; + my $info = $self->{'term'}->$fn; + $fs->{$bufk} = $self->_compress_iframe_block( $info ); + $buf->[1] = $info; + } + + $self->{'frames'}++; + return $fs; +} + +sub _compress_iframe_block { + my ($self, $block) = @_; + + my @out = (); + my @rows = split /\n/, $block; + + my $lastrow = undef; + for my $r ( @rows ) { + if ( defined $lastrow and $lastrow eq $r ) { + push @out, 'd'; # duplicate last row + } else { + if ( (substr($r,0,1) x length($r)) eq $r ) { + push @out, ['a', substr($r,0,1)]; # one-char line + } else { + push @out, ['r', $r]; # raw line + } + # TODO: RLE line + } + $lastrow = $r; + } + + return \@out; +} + +sub _compress_pframe_block { + my ($self, $old, $new) = @_; + my @old = split /\n/, $old; + my @new = split /\n/, $new; + die if @old != @new; + my @diff; + MAINROW: for my $row ( 0 .. $#old ) { NEXTER: { + if ( $new[$row] ne $old[$row] ) { + for my $other ( 0 .. $#old ) { + if ( $new[$row] eq $old[$other] ) { + # row copy mode + push @diff, ['cp', $other+0, $row+0]; + last NEXTER; + } + } + + if ( substr($new[$row],0,1) x length($new[$row]) eq $new[$row] ) { + # one char line mode + push @diff, [$row+0, ['a', substr($new[$row],0,1).""]]; + last NEXTER; + } + + my @off = map { substr($old[$row], $_, 1) ne substr($new[$row], $_, 1) } 0 .. length($old[$row])-1; + my @offchunks = (); + for my $i ( 0 .. $#off ) { + if ( $off[$i] ) { + if ( @offchunks and $offchunks[-1][1] >= $i-4 ) { # coalesce if there's less than 3 chars between + $offchunks[-1][1] = $i; + } else { + push @offchunks, [$i,$i]; + } + } + } + + for my $ch ( @offchunks ) { + if ( $ch->[0] == $ch->[1] ) { + # char mode + push @diff, [$row+0, $ch->[0]+0, substr($new[$row], $ch->[0], 1).""]; + } else { + my $chunk = substr($new[$row], $ch->[0], $ch->[1]-$ch->[0]+1); + if ( substr($chunk,0,1) x length($chunk) eq $chunk ) { + # one char chunk mode + push @diff, [$row+0, $ch->[0]+0, $ch->[1]+0, ['a',substr($chunk,0,1).""]]; + } else { + # chunk mode + push @diff, [$row+0, $ch->[0]+0, $ch->[1]+0, $chunk.""]; + } + } + } + } + } # NEXTER + $old[$row] = $new[$row]; + } + return \@diff; +} + +sub frames { $_[0]->{'frames'} } + +1; + diff --git a/jsttyplay/html/showtty.js b/jsttyplay/html/showtty.js new file mode 100644 index 000000000..2b80b09b8 --- /dev/null +++ b/jsttyplay/html/showtty.js @@ -0,0 +1,315 @@ +// showtty.js - a building block for viewing tty animations +// Copyright 2008 Jack Christopher Kastorff +(function(){ + +var repeatString = function (str, rep) { + var outstr = ''; + for (var i = 0; i < rep; i++) { + outstr += str; + } + return outstr; +}; + +var makeTable = function (width, height) { + var table = document.createElement("div"); + var arr = []; + for (var j = 1; j <= height; j++) { + var row = document.createElement("div"); + var arrrow = []; + row.style.fontFamily = '"ProFont", "Luxi Mono", "Monaco", "Courier", "Courier new", monospace'; + row.style.margin = '0'; + row.style.padding = '0'; + row.style.wordSpacing = '0'; + row.style.height = '1.2em'; + for (var i = 1; i <= width; i++) { + var charelem = document.createElement("pre"); + charelem.style.backgroundColor = '#000'; + charelem.style.color = '#FFF'; + charelem.style.display = 'inline'; + charelem.style.fontWeight = 'normal'; + charelem.style.textDecoration = 'none'; + charelem.style.letterSpacing = '0'; + charelem.style.margin = '0'; + charelem.style.padding = '0 0 0.2em 0'; + charelem.appendChild(document.createTextNode(" ")); + row.appendChild(charelem); + arrrow.push(charelem); + } + table.appendChild(row); + arr.push(arrrow); + } + return { "arr": arr, "elem": table }; +}; + +var setTextChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].firstChild.replaceData(0, 1, r.charAt(i)); + } +}; + +var setBoldChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.fontWeight = r.charAt(i) == 0 ? 'normal' : 'bold'; + } +}; + +var setUnderlineChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.textDecoration = r.charAt(i) == 0 ? 'none' : 'underline'; + } +}; + +var clut = { 0: "#000", 1: "#D00", 2: "#0D0", 3: "#DD0", 4: "#00D", 5: "#D0D", 6: "#0DD", 7: "#DDD" }; + +var setFcolorChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.color = clut[r.charAt(i)]; + } +}; + +var t = 0; +var setBcolorChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.backgroundColor = clut[r.charAt(i)]; + } +}; + +var loadIFrame = function (tb, rowcaches, fr, width, height) { + var d = uncompressIFrameBlock(fr.d, width); + for (var i = 0; i < d.length; i++) { + setTextChunk(tb, d[i], i, 0); + rowcaches.d[i] = d[i]; + } + var B = uncompressIFrameBlock(fr.B, width); + for (var i = 0; i < B.length; i++) { + setBoldChunk(tb, B[i], i, 0); + rowcaches.B[i] = B[i]; + } + var U = uncompressIFrameBlock(fr.U, width); + for (var i = 0; i < U.length; i++) { + setUnderlineChunk(tb, U[i], i, 0); + rowcaches.U[i] = U[i]; + } + var f = uncompressIFrameBlock(fr.f, width); + for (var i = 0; i < f.length; i++) { + setFcolorChunk(tb, f[i], i, 0); + rowcaches.f[i] = f[i]; + } + var b = uncompressIFrameBlock(fr.b, width); + for (var i = 0; i < b.length; i++) { + setBcolorChunk(tb, b[i], i, 0); + rowcaches.b[i] = b[i]; + } +}; + +var uncompressIFrameBlock = function (d,width) { + var uncomp = []; + var last = null; + for (var i = 0; i < d.length; i++) { + var uncomprow = null; + if ( typeof d[i] == 'array' || typeof d[i] == 'object' ) { + if ( d[i][0] == "r" ) { + uncomprow = d[i][1]; + } else if ( d[i][0] == "a" ) { + uncomprow = repeatString(d[i][1], width); + } else { + throw new Error ("bad iframe data: subarray is not valid"); + } + } else if ( typeof d[i] == 'string' && d[i] == 'd' ) { + uncomprow = last; + } else { + throw new Error ("bad iframe data: unknown " + (typeof d[i]) + " in array"); + } + uncomp.push(uncomprow); + last = uncomprow; + } + return uncomp; +}; + +var loadPFrame = function (table, rowcaches, fr, width, height) { + if ( fr.d ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.d, width), rowcaches.d, setTextChunk); + } + if ( fr.B ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.B, width), rowcaches.B, setBoldChunk); + } + if ( fr.U ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.U, width), rowcaches.U, setUnderlineChunk); + } + if ( fr.f ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.f, width), rowcaches.f, setFcolorChunk); + } + if ( fr.b ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.b, width), rowcaches.b, setBcolorChunk); + } +}; + +var diffPushGeneric = function (table, d, rowcache, set) { + // convert everything to line operations + for (var i = 0; i < d.length; i++) { + var e = d[i]; + if ( e[0] == "cp" ) { + set(table, rowcache[e[1]], e[2], 0); + rowcache[e[2]] = rowcache[e[1]]; + } else if ( e[0] == 'char' ) { + var r = e[1]; + var v = rowcache[r]; + var da = v.slice(0, e[2]) + e[3] + v.slice(e[2]+1); + set(table, e[3], e[1], e[2]); + rowcache[r] = da; + } else if ( e[0] == 'chunk' ) { + var r = e[1]; + var v = rowcache[r]; + var da = v.slice(0, e[2]) + e[4] + v.slice(e[3]+1); + set(table, e[4], e[1], e[2]); + rowcache[r] = da; + } else if ( e[0] == 'line' ) { + set(table, e[2], e[1], 0); + rowcache[e[1]] = e[2]; + } else { + throw new Error ("unknown p-frame item type " + e[0] + ", len " + e.length); + } + } +}; + +var annotatedPFrameBlock = function (frame, width) { + var ann = []; + for (var i = 0; i < frame.length; i++) { + var e = frame[i]; + if ( e[0] == 'cp' ) { + ann.push(e); + } else if ( e.length == 2 ) { + // raw line + if ( typeof e[1] == 'string' ) { + ann.push(['line', e[0], e[1]]); + } else if ( e[1][0] == "a" ) { + ann.push(['line', e[0], repeatString(e[1][1], width)]); + } else { + throw new Error ("p-frame corrupted: invalid 2-len"); + } + } else if ( e.length == 3 ) { + // char + ann.push(['char', e[0], e[1], e[2]]); + } else if ( e.length == 4 ) { + // chunk + if ( typeof e[3] == 'string' ) { + ann.push(['chunk', e[0], e[1], e[2], e[3]]); + } else if ( e[3][0] == 'a' ) { + ann.push(['chunk', e[0], e[1], e[2], repeatString(e[3][1], e[2]-e[1]+1)]); + } else { + throw new Error ("p-frame corrupted: invalid 4-len"); + } + } else { + throw new Error ("p-frame corrupted: no such thing as a " + e.length + "-len"); + } + } + return ann; +}; + +var handleCursor = function (table, bgcache, curpos, dx, dy) { + if ( typeof dx == 'number' || typeof dy == 'number' ) { + // make sure the old cursor position has been overwritten + setBcolorChunk(table, bgcache[curpos[1]-1].charAt(curpos[0]-1), curpos[1]-1, curpos[0]-1); + if ( typeof dx == 'number' ) { + curpos[0] = dx; + } + if ( typeof dy == 'number' ) { + curpos[1] = dy; + } + } + + // draw the cursor + table.arr[curpos[1]-1][curpos[0]-1].style.backgroundColor = '#FFF'; +}; + +var animateNextFrame = function (holder) { with (holder) { + var fr = timeline[nextframe]; + if ( fr.i ) { + loadIFrame(table, rowcaches, fr, width, height); + } else { + loadPFrame(table, rowcaches, fr, width, height); + } + handleCursor(table, rowcaches.b, curpos, fr.x, fr.y); + nextframe++; + if ( timeline.length > nextframe ) { + var wait = timeadd + timeline[nextframe].t - (new Date).getTime()/1000; + if ( wait < 0 ) { + // we're out of date! try to catch up. + return animateNextFrame(holder); + } else { + setTimeout(function(){animateNextFrame(holder);}, wait*1000); + } + } +}}; + +var makeCache = function (ch, wid, hei) { + var c = []; + for (var y = 0; y < hei; y++) { + c.push( repeatString(ch, wid) ); + } + return c; +}; + +showTTY = function (elem, data) { + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + var width = data.width; + var height = data.height; + var timeline = data.timeline; + + var table = makeTable(width, height); + elem.appendChild(table.elem); + + var holder = { + 'width': width, + 'height': height, + 'timeline': timeline, + 'table': table, + 'nextframe': 0, + 'time': 0, + 'rowcaches': { + 'd': makeCache(" ", width, height), + 'f': makeCache("7", width, height), + 'b': makeCache("0", width, height), + 'B': makeCache("0", width, height), + 'U': makeCache("0", width, height) + }, + 'curpos': [1,1], + 'timeadd': (new Date).getTime()/1000-timeline[0].t + }; + + animateNextFrame(holder); +}; + +showTTYURL = function (elem, url) { + var showText = function (text) { + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + elem.appendChild( document.createTextNode( text ) ); + }; + + showText("Loading " + url); + + var req = new XMLHttpRequest(); + req.open("GET", url, true); + req.onreadystatechange = function () { + if ( req.readyState == 4 && req.status == 200 ) { + var data = eval("(" + req.responseText + ")"); + if ( typeof data == "undefined" ) { + showText("Error: didn't get tty data from " + url); + req = null; + return; + } + showTTY(elem, data); + } else if ( req.readyState == 4 && req.status != 200 ) { + showText("Error: couldn't retrieve " + url + ", got status code " + this.status); + req = null; + } + }; + req.send(null); +}; + +}()); diff --git a/jsttyplay/html/streamtty.js b/jsttyplay/html/streamtty.js new file mode 100644 index 000000000..0f611847d --- /dev/null +++ b/jsttyplay/html/streamtty.js @@ -0,0 +1,347 @@ +// streamtty.js - a pty client for jstty +// Copyright 2008 Jack Christopher Kastorff +(function(){ + +var repeatString = function (str, rep) { + var outstr = ''; + for (var i = 0; i < rep; i++) { + outstr += str; + } + return outstr; +}; + +var makeTable = function (width, height) { + var table = document.createElement("div"); + var arr = []; + for (var j = 1; j <= height; j++) { + var row = document.createElement("div"); + var arrrow = []; + row.style.fontFamily = '"ProFont", "Luxi Mono", "Monaco", "Courier", "Courier new", monospace'; + row.style.margin = '0'; + row.style.padding = '0'; + row.style.wordSpacing = '0'; + row.style.height = '1.2em'; + for (var i = 1; i <= width; i++) { + var charelem = document.createElement("pre"); + charelem.style.backgroundColor = '#000'; + charelem.style.color = '#FFF'; + charelem.style.display = 'inline'; + charelem.style.fontWeight = 'normal'; + charelem.style.textDecoration = 'none'; + charelem.style.letterSpacing = '0'; + charelem.style.margin = '0'; + charelem.style.padding = '0 0 0.2em 0'; + charelem.appendChild(document.createTextNode(" ")); + row.appendChild(charelem); + arrrow.push(charelem); + } + table.appendChild(row); + arr.push(arrrow); + } + return { "arr": arr, "elem": table }; +}; + +var setTextChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].firstChild.replaceData(0, 1, r.charAt(i)); + } +}; + +var setBoldChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.fontWeight = r.charAt(i) == 0 ? 'normal' : 'bold'; + } +}; + +var setUnderlineChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.textDecoration = r.charAt(i) == 0 ? 'none' : 'underline'; + } +}; + +var clut = { 0: "#000", 1: "#D00", 2: "#0D0", 3: "#DD0", 4: "#00D", 5: "#D0D", 6: "#0DD", 7: "#DDD" }; + +var setFcolorChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.color = clut[r.charAt(i)]; + } +}; + +var t = 0; +var setBcolorChunk = function (tb, r, index, stx) { + for (var i = 0; i < r.length; i++) { + tb.arr[index][i+stx].style.backgroundColor = clut[r.charAt(i)]; + } +}; + +var loadIFrame = function (tb, rowcaches, fr, width, height) { + var d = uncompressIFrameBlock(fr.d, width); + for (var i = 0; i < d.length; i++) { + setTextChunk(tb, d[i], i, 0); + rowcaches.d[i] = d[i]; + } + var B = uncompressIFrameBlock(fr.B, width); + for (var i = 0; i < B.length; i++) { + setBoldChunk(tb, B[i], i, 0); + rowcaches.B[i] = B[i]; + } + var U = uncompressIFrameBlock(fr.U, width); + for (var i = 0; i < U.length; i++) { + setUnderlineChunk(tb, U[i], i, 0); + rowcaches.U[i] = U[i]; + } + var f = uncompressIFrameBlock(fr.f, width); + for (var i = 0; i < f.length; i++) { + setFcolorChunk(tb, f[i], i, 0); + rowcaches.f[i] = f[i]; + } + var b = uncompressIFrameBlock(fr.b, width); + for (var i = 0; i < b.length; i++) { + setBcolorChunk(tb, b[i], i, 0); + rowcaches.b[i] = b[i]; + } +}; + +var uncompressIFrameBlock = function (d,width) { + var uncomp = []; + var last = null; + for (var i = 0; i < d.length; i++) { + var uncomprow = null; + if ( typeof d[i] == 'array' || typeof d[i] == 'object' ) { + if ( d[i][0] == "r" ) { + uncomprow = d[i][1]; + } else if ( d[i][0] == "a" ) { + uncomprow = repeatString(d[i][1], width); + } else { + throw new Error ("bad iframe data: subarray is not valid"); + } + } else if ( typeof d[i] == 'string' && d[i] == 'd' ) { + uncomprow = last; + } else { + throw new Error ("bad iframe data: unknown " + (typeof d[i]) + " in array"); + } + uncomp.push(uncomprow); + last = uncomprow; + } + return uncomp; +}; + +var loadPFrame = function (table, rowcaches, fr, width, height) { + if ( fr.d ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.d, width), rowcaches.d, setTextChunk); + } + if ( fr.B ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.B, width), rowcaches.B, setBoldChunk); + } + if ( fr.U ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.U, width), rowcaches.U, setUnderlineChunk); + } + if ( fr.f ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.f, width), rowcaches.f, setFcolorChunk); + } + if ( fr.b ) { + diffPushGeneric(table, annotatedPFrameBlock(fr.b, width), rowcaches.b, setBcolorChunk); + } +}; + +var diffPushGeneric = function (table, d, rowcache, set) { + // convert everything to line operations + for (var i = 0; i < d.length; i++) { + var e = d[i]; + if ( e[0] == "cp" ) { + set(table, rowcache[e[1]], e[2], 0); + rowcache[e[2]] = rowcache[e[1]]; + } else if ( e[0] == 'char' ) { + var r = e[1]; + var v = rowcache[r]; + var da = v.slice(0, e[2]) + e[3] + v.slice(e[2]+1); + set(table, e[3], e[1], e[2]); + rowcache[r] = da; + } else if ( e[0] == 'chunk' ) { + var r = e[1]; + var v = rowcache[r]; + var da = v.slice(0, e[2]) + e[4] + v.slice(e[3]+1); + set(table, e[4], e[1], e[2]); + rowcache[r] = da; + } else if ( e[0] == 'line' ) { + set(table, e[2], e[1], 0); + rowcache[e[1]] = e[2]; + } else { + throw new Error ("unknown p-frame item type " + e[0] + ", len " + e.length); + } + } +}; + +var annotatedPFrameBlock = function (frame, width) { + var ann = []; + for (var i = 0; i < frame.length; i++) { + var e = frame[i]; + if ( e[0] == 'cp' ) { + ann.push(e); + } else if ( e.length == 2 ) { + // raw line + if ( typeof e[1] == 'string' ) { + ann.push(['line', e[0], e[1]]); + } else if ( e[1][0] == "a" ) { + ann.push(['line', e[0], repeatString(e[1][1], width)]); + } else { + throw new Error ("p-frame corrupted: invalid 2-len"); + } + } else if ( e.length == 3 ) { + // char + ann.push(['char', e[0], e[1], e[2]]); + } else if ( e.length == 4 ) { + // chunk + if ( typeof e[3] == 'string' ) { + ann.push(['chunk', e[0], e[1], e[2], e[3]]); + } else if ( e[3][0] == 'a' ) { + ann.push(['chunk', e[0], e[1], e[2], repeatString(e[3][1], e[2]-e[1]+1)]); + } else { + throw new Error ("p-frame corrupted: invalid 4-len"); + } + } else { + throw new Error ("p-frame corrupted: no such thing as a " + e.length + "-len"); + } + } + return ann; +}; + +var handleCursor = function (table, bgcache, curpos, dx, dy) { + if ( typeof dx == 'number' || typeof dy == 'number' ) { + // make sure the old cursor position has been overwritten + setBcolorChunk(table, bgcache[curpos[1]-1].charAt(curpos[0]-1), curpos[1]-1, curpos[0]-1); + if ( typeof dx == 'number' ) { + curpos[0] = dx; + } + if ( typeof dy == 'number' ) { + curpos[1] = dy; + } + } + + // draw the cursor + table.arr[curpos[1]-1][curpos[0]-1].style.backgroundColor = '#FFF'; +}; + +var makeCache = function (ch, wid, hei) { + var c = []; + for (var y = 0; y < hei; y++) { + c.push( repeatString(ch, wid) ); + } + return c; +}; + +var newSendBuffer = function (h) { + if ( ! h.activeRequest && h.sendBuffer.length > 0 ) { + if ( h.timer ) clearTimeout(h.timer); + request(h, "user input", { keys: h.sendBuffer } ); + h.sendBuffer = ''; + } +}; + +var request = function (h, cmd, args) { + if ( h.activeRequest ) return; + var url = '/api?'; + args['type'] = cmd; + if ( h.id ) args['id'] = h.id; + var urlargs = []; + for (var k in args) { + urlargs.push( encodeURIComponent(k) + '=' + encodeURIComponent(args[k]) ); + } + url += urlargs.join("&"); + + h.activeRequest = true; + var req = new XMLHttpRequest(); + req.open("GET", url, true); + req.onreadystatechange = function () { + if ( req.readyState == 4 && req.status == 200 ) { + var data = eval('(' + req.responseText + ')'); + if ( typeof data == "undefined" ) { + alert("err: undefined"); + h.activeRequest = false; + req = null; + return; + } + if ( data.ok ) { + if ( data.id ) h.id = data.id; + if ( data.pframe ) { + loadPFrame(h.table, h.rowcaches, data.pframe, h.width, h.height); + if ( data.pframe.x && data.pframe.y ) { + handleCursor(h.table, h.rowcaches.b, h.curpos, data.pframe.x, data.pframe.y); + } + } + if ( data.iframe ) { + loadIFrame(h.table, h.rowcaches, data.iframe, h.width, h.height); + handleCursor(h.table, h.rowcaches.b, h.curpos, data.iframe.x, data.iframe.y); + } + h.timer = setTimeout( function () { request(h, "pframe", { }); }, h.timerlen.current ); + h.timerlen.current *= h.timerlen.step; + if ( h.timerlen.current > h.timerlen.max ) { + h.timerlen.current = h.timerlen.max; + } + h.activeRequest = false; + newSendBuffer(h); + } else { + h.activeRequest = false; + alert("err: " + data.error); + } + req = null; + return; + } else if ( req.readyState == 4 && req.status != 200 ) { + alert("err: response code " + req.status); + h.activeRequest = false; + req = null; + return; + } + }; + req.send(null); +}; + +var keyPressHandler = function (h, e) { + var str = String.fromCharCode(e.charCode); + h.sendBuffer += str; + h.timerlen.current = h.timerlen.min; + e.stopPropagation(); + e.preventDefault(); + newSendBuffer(h); + return false; +}; + +startStreamTTY = function (elem) { + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + var width = 80; + var height = 24; + + var table = makeTable(width, height); + elem.appendChild(table.elem); + + var holder = { + 'width': width, + 'height': height, + 'table': table, + 'rowcaches': { + 'd': makeCache(" ", width, height), + 'f': makeCache("7", width, height), + 'b': makeCache("0", width, height), + 'B': makeCache("0", width, height), + 'U': makeCache("0", width, height) + }, + 'curpos': [1,1], + 'sendBuffer': '', + 'timerlen': { + 'max': 15000, + 'current': 100, + 'min': 100, + 'step': 1.05 + }, + 'activeRequest': false, + }; + + document.body.addEventListener( "keypress", function (e) { return keyPressHandler(holder, e); }, true ); + + request(holder, "create session", {}); +}; + +}()); diff --git a/jsttyplay/html/test.html b/jsttyplay/html/test.html new file mode 100644 index 000000000..315c62b53 --- /dev/null +++ b/jsttyplay/html/test.html @@ -0,0 +1,11 @@ + + + + + +
A TTY recording is here. Enabling javascript will allow you to view it.
+ + + diff --git a/jsttyplay/interactive_test.pl b/jsttyplay/interactive_test.pl new file mode 100644 index 000000000..ea5971f78 --- /dev/null +++ b/jsttyplay/interactive_test.pl @@ -0,0 +1,36 @@ +#!/usr/bin/perl +use warnings; +use strict; + +$| = 1; + +use Term::Emulator; +use Term::ReadKey; + +sub key { ReadMode(4); my $key = ReadKey(-1); ReadMode(0); return $key; } +my $term = Term::Emulator->new; +$term->spawn("login"); + +my $inttimemin = 0.02; +my $inttimemax = 1.00; +my $inttimemultstep = 0.001; + +my $inttime = $inttimemin; +my $inttimemult = 1.0; + +while ( $term->is_active ) { + $term->work_for($inttime); + $inttime *= ($inttimemult += $inttimemultstep); + $inttime = $inttimemax if $inttime > $inttimemax; + print "\033[H" . $term->term->as_termstring . "--\n"; + my $key = key(); + if ( defined $key ) { + $term->key($key); + $term->key($key) while defined($key = key()); + $inttime = $inttimemin; + $inttimemult = 1.0; + } +} + +print "\nexited\n"; + diff --git a/jsttyplay/lighttpd.conf b/jsttyplay/lighttpd.conf new file mode 100644 index 000000000..5f8c836c2 --- /dev/null +++ b/jsttyplay/lighttpd.conf @@ -0,0 +1,16 @@ +server.modules = ( "mod_fastcgi", "mod_accesslog" ) + +server.document-root = "/var/empty" +server.port = 1080 + +accesslog.filename = "/tmp/shell_server_access.log" +server.errorlog = "/tmp/shell_server_error.log" + +fastcgi.server = ( + "/" => ( "shell_server" => ( + "port" => 1065, + "host" => "0.0.0.0", + "check-local" => "disable", + )) +) + diff --git a/jsttyplay/play.pl b/jsttyplay/play.pl new file mode 100644 index 000000000..45f94eebf --- /dev/null +++ b/jsttyplay/play.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl +use warnings; +use strict; +$| = 1; + +my $readsize = 1; +my $skipto = 0; +my $wait = 0.01; + +use Term::TtyRec; +use Term::Emulator::Parser; +use FileHandle; +use Time::HiRes qw/ time sleep /; +use Carp; + +$SIG{INT} = sub { confess }; + +sub openRec { + my ($fn) = @_; + my $fh = FileHandle->new($fn, "r") or die; + my $rec = Term::TtyRec->new($fh); + return $rec; +} + +my $buf = ''; +my $lasttime; +sub parseFrame { + my ($rec, $term) = @_; + if ( length $buf < $readsize ) { + my ($time, $data) = $rec->read_next; + return () if not defined $time and not length $buf; + if ( defined $time ) { + $buf .= $data; + $lasttime = $time; + } + } + if ( $lasttime < $skipto ) { + $term->parse($buf); + $buf = ''; + goto &parseFrame; + } else { + $term->parse(substr $buf, 0, $readsize); + substr($buf, 0, $readsize) = ''; + return $lasttime; + } +} + +### + +my $width = 80; +my $height = 24; +my $term = Term::Emulator::Parser->new( width => $width, height => $height ); +my $rec = openRec($ARGV[0]); + +system("clear"); +while ( defined(my $time = parseFrame($rec, $term)) ) { + print "\033[H".$term->as_termstring."--"; + sleep $wait if $time >= $skipto and $wait; +} + diff --git a/jsttyplay/preprocess.pl b/jsttyplay/preprocess.pl new file mode 100644 index 000000000..491431bfd --- /dev/null +++ b/jsttyplay/preprocess.pl @@ -0,0 +1,127 @@ +#!/usr/bin/perl +use warnings; +use strict; +$| = 1; + +my $coalesce_time = 0.05; +my $iframe_frequency = 100; + +use Term::TtyRec; +use Term::Emulator::Parser; +use TermEncoder; +use FileHandle; +use Time::HiRes qw/ time sleep /; +use JSON; +use Carp; + +$SIG{INT} = sub { confess }; + +sub openRec { + my ($fn) = @_; + my $fh = FileHandle->new($fn, "r") or die; # wtf. + my $rec = Term::TtyRec->new($fh); + return $rec; +} + +my $readframes = 0; +{ + my $lasttime = undef; + my @data = (); + sub parseFrame { + my ($rec, $term) = @_; + local $_; + while ( not @data or (defined $lasttime and $data[-1]->[0] - $lasttime < $coalesce_time) ) { + my ($time, $data) = $rec->read_next; + last unless defined $time; + push @data, [$time, $data]; + $readframes++; + } + if ( @data > 1 ) { + my $ld = pop @data; + $term->parse($_) for map $_->[1], @data; + $lasttime = $data[-1][0]; + @data = ($ld); + return $lasttime; + } elsif ( @data ) { + $term->parse($_) for map $_->[1], @data; + $lasttime = $data[-1][0]; + @data = (); + return $lasttime; + } else { + return; + } + } +} + +### + +print "setup\n"; + +my $width = 80; +my $height = 24; +my $term = undef; +my $rec = undef; +my $outfile = undef; + +while ( @ARGV ) { + my $ar = shift; + if ( $ar eq "--width" or $ar eq "-w" ) { + $width = shift; + } elsif ( $ar eq "--height" or $ar eq "-h" ) { + $height = shift; + } elsif ( $ar eq "--size" or $ar eq "-s" ) { + my $size = shift; + my ($w,$h) = ($size =~ /^(\d+)x(\d+)$/); + die "size argument is malformed, use WIDxHEI\n" + unless defined $w and defined $h; + $width = $w; + $height = $h; + } elsif ( not defined $rec ) { + $rec = openRec($ar); + } elsif ( not defined $outfile ) { + die "won't overwrite an existing file $ar" + if -e $ar; + $outfile = $ar; + } else { + die "unknown argument or too many arguments: $ar\n"; + } +} + +$term = Term::Emulator::Parser->new( width => $width, height => $height, output_enable => 0 ); +my $encoder = TermEncoder->new( term => $term ); + +my @timeline; + +print "parse... 0 \033[K"; + +my %buffers = ( + d => ['as_string'], + f => ['fg_as_string'], + b => ['bg_as_string'], + B => ['bold_as_string'], + U => ['underline_as_string'], +); + +my $lastx = undef; +my $lasty = undef; + +for my $k ( keys %buffers ) { + my $f = $buffers{$k}->[0]; + push @{$buffers{$k}}, $term->$f; +} + +my $starttime = undef; +while ( defined(my $time = parseFrame($rec, $term)) ) { + push @timeline, $encoder->frames % $iframe_frequency == 0 ? $encoder->next_iframe($time) : $encoder->next_pframe($time); + print "\rparse... ".$encoder->frames." ($readframes) \033[K"; +} + +print "\rparsed ".$encoder->frames." frames ($readframes from ttyrec)\033[K\n"; +print "serialize\n"; + +open my $sf, ">", $outfile or die "Couldn't open $outfile for writing: $!"; +print $sf to_json { timeline => \@timeline, width => $width, height => $height }; +close $sf; + +print "done\n"; + diff --git a/jsttyplay/respawn.sh b/jsttyplay/respawn.sh new file mode 100755 index 000000000..6457de191 --- /dev/null +++ b/jsttyplay/respawn.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +killall lighttpd +lighttpd -f lighttpd.conf || exit 1 +if [ -e fastcgi.pid ]; then + kill `cat fastcgi.pid`; + sleep 1; + kill -9 `cat fastcgi.pid`; + rm -f fastcgi.pid; +fi +spawn-fcgi -f ./shell_server.pl -P fastcgi.pid -p 1065 + diff --git a/jsttyplay/shell_server.pl b/jsttyplay/shell_server.pl new file mode 100755 index 000000000..20d85b3e1 --- /dev/null +++ b/jsttyplay/shell_server.pl @@ -0,0 +1,147 @@ +#!/usr/bin/perl +use warnings; +use strict; + +my $max_session_idle = 60; # more than a minute without a request + +use Term::Emulator; +use TermEncoder; + +use URI; +use URI::QueryParam; +use JSON; +use HTTP::Status; +use POSIX ':sys_wait_h'; +use CGI::Fast; +use CGI; + +while ( my $cgi = CGI::Fast->new ) { + eval { + my $uri = URI->new($ENV{REQUEST_URI}); + print STDERR "$uri\n"; + if ( $uri->path eq "/api" ) { + api($uri); + } else { + static($uri); + } + }; + warn "error in handler: $@" if $@; +} + +sub static { + my ($uri) = @_; + my $path = $uri->path; + if ( $path eq "/" ) { + print "status: 200\015\012Content-type: text/html\015\012\015\012"; + print < + + + + +
Enable javascript, asshole
+ + + +EOF + return; + } elsif ( $path eq "/streamtty.js" ) { + open my $lf, "<", "html/streamtty.js" or die $!; + my $content = do { local $/; <$lf> }; + close $lf; + print "status: 200\015\012content-type: text/javascript\015\012\015\012"; + print $content; + return; + } else { + print "status: 404\015\012content-type: text/plain\015\012\015\012"; + print "Not found."; + return; + } +} + +my %sessions = (); + +sub reap { + for my $id ( keys %sessions ) { + if ( time() - $sessions{$id}{'last_active'} > $max_session_idle ) { + print STDERR "reaped session: $id\n"; + my $s = delete $sessions{$id}; + $s->{'term'}->stop_it_in(1); + } + } + 1 while waitpid(-1, WNOHANG) > 0; +} + +sub req_error { + my ($msg) = @_; + print "status: 500\015\012content-type: text/json\015\012\015\012"; + print to_json( { ok => 0, error => $msg } ); +} + +sub api { + my ($uri) = @_; + + reap(); + + if ( $uri->query_param("type") eq "create session" ) { + my $id = new_session(); + print STDERR "new session: $id\n"; + $sessions{$id}->{'term'}->work_for(0.02); + print "status: 200\015\012content-type: text/json\015\012\015\012"; + print to_json( { ok => 1, id => $id, iframe => $sessions{$id}->{'encoder'}->next_iframe } ); + return; + + } elsif ( $uri->query_param("type") eq "user input" ) { + my $id = $uri->query_param("id"); + return req_error("No such session.") unless exists $sessions{$id}; + $sessions{$id}{'last_active'} = time; + my ($term, $enc) = @{$sessions{$id}}{'term', 'encoder'}; + $term->userinput($uri->query_param("keys")); + $term->work_for(0.02); + print "status: 200\015\012content-type: text/json\015\012\015\012"; + print to_json( { ok => 1, id => $id, pframe => $enc->next_pframe } ); + return; + + } elsif ( $uri->query_param("type") eq "pframe" ) { + my $id = $uri->query_param("id"); + return req_error("No such session.") unless exists $sessions{$id}; + $sessions{$id}{'last_active'} = time; + my ($term, $enc) = @{$sessions{$id}}{'term', 'encoder'}; + $term->work_for(0.02); + print "status: 200\015\012content-type: text/json\015\012\015\012"; + print to_json( { ok => 1, id => $id, pframe => $enc->next_pframe } ); + return; + + } elsif ( $uri->query_param("type") eq "close session" ) { + my $id = $uri->query_param("id"); + return req_error("No such session.") unless exists $sessions{$id}; + my $s = delete $sessions{$id}; + my $term = $s->{'term'}; + $term->stop_it_in(1); + print "status: 200\015\012content-type: text/json\015\012\015\012"; + print to_json( { ok => 1 } ); + return; + + } else { + return req_error("Bad request: unknown request type"); + } +} + +sub new_session { + my $id = ''; + while ( not length $id or exists $sessions{$id} ) { + $id = unpack "H*", join '', map chr rand 255, 1 .. 20; + } + my $term = Term::Emulator->new; + $term->spawn("login"); + my $encoder = TermEncoder->new(term => $term->term); + $sessions{$id} = { + term => $term, + encoder => $encoder, + last_active => time, + }; + return $id; +} + diff --git a/jsttyplay/t/parser/01_use.t b/jsttyplay/t/parser/01_use.t new file mode 100644 index 000000000..c2f03e676 --- /dev/null +++ b/jsttyplay/t/parser/01_use.t @@ -0,0 +1,8 @@ +#!/usr/bin/perl +use strict; +use warnings; + +use Test::More tests => 1; + +use_ok('Term::Emulator::Parser'); + diff --git a/jsttyplay/t/parser/02_constructor.t b/jsttyplay/t/parser/02_constructor.t new file mode 100644 index 000000000..a20fe5983 --- /dev/null +++ b/jsttyplay/t/parser/02_constructor.t @@ -0,0 +1,18 @@ +#!/usr/bin/perl +use strict; +use warnings; + +use Test::More tests => 5; +use Term::Emulator::Parser; + +my $term = Term::Emulator::Parser->new; + +is($term->width, 80); +is($term->height, 24); +my $str = join "\n", map { " " x 80 } 1 .. 24; +is($term->as_string, $str); + +$term = Term::Emulator::Parser->new( width => 20, height => 10 ); +is($term->width, 20); +is($term->height, 10); + diff --git a/jsttyplay/t/parser/03_parse_char.t b/jsttyplay/t/parser/03_parse_char.t new file mode 100644 index 000000000..0df4f8343 --- /dev/null +++ b/jsttyplay/t/parser/03_parse_char.t @@ -0,0 +1,29 @@ +#!/usr/bin/perl +use warnings; +use strict; + +use Test::More tests => 9; + +use Term::Emulator::Parser; + +my $term = Term::Emulator::Parser->new(width => 5, height => 2); + +$term->parse("abc"); +is($term->as_string, "abc \n "); +$term->parse("def"); +is($term->as_string, "abcde\nf "); +$term->parse("gh"); +is($term->as_string, "abcde\nfgh "); +$term->parse("ijklmn"); +is($term->as_string, "fghij\nklmn "); +$term->parse("opq\012rst"); +is($term->as_string, "pq \nrst "); +$term->parse("\015uv"); +is($term->as_string, "pq \nuvt "); +$term->parse("\010w"); +is($term->as_string, "pq \nuwt "); +$term->parse("\010\010x"); +is($term->as_string, "pq \nxwt "); +$term->parse("\010\010y"); +is($term->as_string, "pq \nywt "); + diff --git a/jsttyplay/t/parser/04_parse_escape.t b/jsttyplay/t/parser/04_parse_escape.t new file mode 100644 index 000000000..0fd8e9f03 --- /dev/null +++ b/jsttyplay/t/parser/04_parse_escape.t @@ -0,0 +1,128 @@ +#!/usr/bin/perl +use warnings; +use strict; + +use Test::More tests => 77; + +use Term::Emulator::Parser; + +my $term = Term::Emulator::Parser->new( width => 8, height => 4 ); + +is($term->as_string, " \n \n \n "); +is($term->bold_as_string, "00000000\n00000000\n00000000\n00000000"); +is($term->underline_as_string, "00000000\n00000000\n00000000\n00000000"); +is($term->fg_as_string, "77777777\n77777777\n77777777\n77777777"); +is($term->bg_as_string, "00000000\n00000000\n00000000\n00000000"); + +$term->parse("a"); +is($term->as_string, "a \n \n \n "); +is($term->curposx, 2); +is($term->curposy, 1); +$term->parse("\033[H"); +is($term->as_string, "a \n \n \n "); +is($term->curposx, 1); +is($term->curposy, 1); +$term->parse("b"); +is($term->as_string, "b \n \n \n "); +$term->parse("\010 "); +is($term->as_string, " \n \n \n "); +is($term->bold_as_string, "00000000\n00000000\n00000000\n00000000"); +is($term->underline_as_string, "00000000\n00000000\n00000000\n00000000"); +is($term->fg_as_string, "77777777\n77777777\n77777777\n77777777"); +is($term->bg_as_string, "00000000\n00000000\n00000000\n00000000"); + +$term->parse("\033[2;3H"); +is($term->curposx, 3); +is($term->curposy, 2); +$term->parse("q"); +is($term->as_string, " \n q \n \n "); +$term->parse("\033[A"); +is($term->curposx, 4); +is($term->curposy, 1); +$term->parse("z"); +is($term->as_string, " z \n q \n \n "); +$term->parse("\033[2;3f"); +is($term->curposx, 3); +is($term->curposy, 2); +$term->parse(" "); +is($term->as_string, " z \n \n \n "); +$term->parse("\033[3A"); +is($term->curposx, 4); +is($term->curposy, 1); +$term->parse(" "); +is($term->as_string, " \n \n \n "); +is($term->bold_as_string, "00000000\n00000000\n00000000\n00000000"); +is($term->underline_as_string, "00000000\n00000000\n00000000\n00000000"); +is($term->fg_as_string, "77777777\n77777777\n77777777\n77777777"); +is($term->bg_as_string, "00000000\n00000000\n00000000\n00000000"); + +$term->parse("\033[H"); +is($term->curposx, 1); +is($term->curposy, 1); +$term->parse("\033[B"); +is($term->curposx, 1); +is($term->curposy, 2); +$term->parse("\033[2B"); +is($term->curposx, 1); +is($term->curposy, 4); +$term->parse("\033[A"); +is($term->curposx, 1); +is($term->curposy, 3); +$term->parse("\033[19B"); +is($term->curposx, 1); +is($term->curposy, 4); + +$term->parse("\033[H\033[C"); +is($term->curposx, 2); +is($term->curposy, 1); +$term->parse("\033[5C"); +is($term->curposx, 7); +is($term->curposy, 1); +$term->parse("\033[93C"); +is($term->curposx, 8); +is($term->curposy, 1); + +$term->parse("\033[D"); +is($term->curposx, 7); +is($term->curposy, 1); +$term->parse("\033[D"); +is($term->curposx, 6); +is($term->curposy, 1); +$term->parse(" \033[D\033[D\033[D"); +is($term->curposx, 4); +is($term->curposy, 1); + +$term->parse("\033[Habc"); +is($term->curposx, 4); +is($term->curposy, 1); +is($term->as_string, "abc \n \n \n "); +$term->parse("\n"); +is($term->curposx, 1); +is($term->curposy, 2); + +$term->parse("\033[0;0H "); +is($term->curposx, 2); +is($term->curposy, 1); +is($term->as_string, " bc \n \n \n "); +$term->parse(" "); +is($term->curposx, 4); +is($term->curposy, 1); +is($term->as_string, " \n \n \n "); + +is($term->bold_as_string, "00000000\n00000000\n00000000\n00000000"); +is($term->underline_as_string, "00000000\n00000000\n00000000\n00000000"); +is($term->fg_as_string, "77777777\n77777777\n77777777\n77777777"); +is($term->bg_as_string, "00000000\n00000000\n00000000\n00000000"); + +$term->parse("\r"); +is($term->curposx, 1); +is($term->curposy, 1); + +$term->parse(" \033D"); +is($term->curposx, 3); +is($term->curposy, 2); +$term->parse("\ra"); +is($term->curposx, 2); +is($term->curposy, 2); +is($term->as_string, " \na \n \n "); + diff --git a/jsttyplay/ttydump.pl b/jsttyplay/ttydump.pl new file mode 100644 index 000000000..1549e64a3 --- /dev/null +++ b/jsttyplay/ttydump.pl @@ -0,0 +1,14 @@ +#!/usr/bin/perl +use warnings; +use strict; + +open my $lf, "<", $ARGV[0] or die "Couldn't open $ARGV[0] for reading: $!"; + +while ( read $lf, my($buf), 12 ) { + my ($time, $ftime, $len) = unpack "VVV", $buf; + read $lf, my($contents), $len; + $contents =~ s/((?!\\)[^[:print:] \n])/"\\x{".unpack("H*", $1)."}"/egs; + $time += $ftime / 1_000_000; + printf "%.4f: %s\n", $time, $contents; +} + diff --git a/part1/ch01-01-diff-patch.ttyrec b/part1/ch01-01-diff-patch.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..3f3486b63df45acd455e5b474a634ef9c2d2f041 GIT binary patch literal 5249 zcmeI0e^6A{6~`aHmgV6Ce`nHE_x6>~$MF$#aV5ql#_+ULI8qgbl_PIz?b-1=G zy0L$_ri;AOq-cLv=;)EiPY=_W@V>_*ovm^)8WHNP;z2Ysx^F|Ix+VO}w&*W5z16qD z@LJy!>1?5WMz+>Pnhvt#P+w#C`K=c^8Vomh%Sn%EadEyv*7MJCG>ZWbZ{cV<06X_& zaGc*I$ezy86o9(-lZ_`qz?(ld8Q=p{zG61wT;_F(_lS>7Gs!rECfiKPY)a}xao+X6 zh;wA(D8@2>uCggydw?=A+|)N*w=sI;P`LH!aBCx_F;ZPgxxHs?>4lB`;kN$Bj_Pxj z&1Bcq=)i6yp0e9l8R@N~bcLV%dAM_5sApTKyV7{$u?qMnMQfdzE5HfpE=n_^>;b%e z3+K!Q*x$xEbG=W{`H*4^6Mz|}Bm>-lKdt1Pl>mCkb*vozMLc_mrv(8OS&5ubz?08% zcFO=;ucawTs3NEMfN&9Mf{O^$o<&5-wH4bmwNOlyW3DA#*EMy?go9ZS1z9$$b0M5h zR1<|lQ*Abf&6;J)fq(qvqP?NiEuljG1j)Nf(U>X2?F6iQHHDK0(C$k$zy+vm=Cm4c zI+xQb@Z@}Sk}*ubMqr=9)wdS##vtcM0BXL)uHAr>CpcLp0Ow+LG{+;v4}Vb>E#Pl* znh#L5l!aCXSZUE>IZn9p;<9tLSdKw;OB0kclw(SpaFqmzd6$#yzl_xCtr>IC%_3IOpWujp$BT|DD z!}ty^KBk3ZEA}kAu-LQmjjdqvC-34kOP@%yR0!fadXR;}c@t8$T!)g8>A`yw;tq>s zvUVI~9XbIIN*#Itdm33?F2JI6DRF@R4OW)`G#}=JTn7XdK48|S5ERUp2MoYb$llz5 zq%xC|LR|-X6EOVhb?$gUKt%zc`92fDp=pVu#}ByVbzXZ3!1RnPuT%p6h-|Kav-!L$ z51{wBY_5Q5D|w49GeJukcgbwP165pw0l?~R-fsn<^?t5G<4N9Ns_cyMW6ieA7wTe$Aa0cWns+l@*PdXtye0qs|KMK56K{B*eps9{;Uu}HudaCk*do~FWj zlon~DDC%WFy-dfC5H|5Wk7G?~g=dWrV#Mm1%7{SOa!2L`SBuvbtGGg05DW4MF2Rkm^CP-5mfu72mpPj`GEIMC)i!9 zND+Yk`fDXl1h7v1t)dj%j0oUl4mq(;?BqWP0v_}m@nGj8L{kk9zvI^%6UPkld)mjr z@dKXla6@qbj;-fN1pq^SJ~N8}n+|YB-GJ#N2BcSfj^NNs>>vopO<)H;z>!P*HGx|$ zc;9b0U4=6VUf#=%!3o$ulgrctII(HcsMNrRr)Q4x=ZPnu;Oz@Q_&dCy6QDmN-2is} zFjYyVO>$uxgSDq(pEDS6_OPbhLIeDcK(X7irc}5*-jZ1KX2IQSiE(Y{3uN7KN~#I4 z_>a6|IiS(QF%p2GuX1zO0U5PibY4K$`q(Z&C-?H_##kGIwWUS-%(tOYrD4M(`{Tcw zzC_lJ7S4Dv;0NF40`&`m^oufyfRlwB(jXww&LQ;yUKr#y1PR?vtP(?cZov8)^H|%N zO@@pevDyZ`+8Qr@SdX9L2IK{-y2M*5pF^;-R35E>2L@Q4I$+03TnS!4&0}WSKtQWn z%yA6_)}nUvr<=ZU=Yjo(PLa{{VZ&E@_%+5F#T{gwyoICf2h1H|K|25q%URF?K*0+# z%Yd^Fa!B1@Cb)I83@Kpm+niV(aQAzBD0~y}`%ZZ#%_Zn=U@^D>erh2plyBow1HgbLj~aOi<~4U;I$;)tOsygVcLf~0Zczj&6G(5nWkobOeZjI?wa})8jw$# z9RGhWcain^`(;%F?!3rQ4#?TS5fOmD&)|sY^9YtFv97#;b+07LU4ZnOgPV`DalmCX}8(a79Fz?kvOEezcD64%cH($+J#a^Q`RStmcR zbp)e1?*uwB1KlG%z3yNJHNZP_xgc?1@+l5#0H0W_V9e=xnS*-0((~Z$3=jpj7cqbz zD9qGvyF)_X4hy6Z(a< z%)m2Hdan6^gF0B#OPy)-gw$RM1J~yfu3x%Bxsi9awP@ zbE^S5UBImy2X0b{8o=~lbDS73?FEMR76_iGU=0mm)ls!qfHbureqiB7E{F+u-r=C( z!2(x=@94m$G)`d_Fux1OF@a@`YCb@Hd(J01M9}?lW)K3>)#U1d-ksHD06epX<2dik zy`M83iJnhSGqg2S&@h(K;y|obog^UtF7Ew$AombUQVl$LJ)?Pnj+I=h05EDePplJq zj2b60OnUYVOHmsXdcQm+X@eF@>pT@V1T>FhToV|0HRIZVQOo@GBEiesIL!di;dQ2L z0mf36APV&A#1d2ht-V!fpwZ6~gn+6&97n%e@R|zk0ZuJrGzWKV=K_S#Gk%V`rGTlQ za#LHw1y{D?rY;9A+N~}bpvJ?j!@$UQ8CoBKcb;bG08pFC+$><{^PF~gq+pKD&=#c#;ceVFgqz`qT?69bkn=H#3JYk$MZ8P`b9 zmSZkeQ0UXltfYcoE3H47%|Svy-D=L+1QzMsPd4ybomv3k!pUj@fEg9c#R8^GXD(6T zfh9x*@bpA=nT-}aHd>tzU_lpk_<3JZX;~2o;f3Y4B;PM>KR0lHD+WG;lS=|IckChB<0{dGzAOBdv%78kQz#Eg9 zwYONX;zN}V(ArU@0~lBGj?l*mVx{UJ16O4;9UJJ-ozwOMr~j(z4ji7vY1aT-7pQT7 zsk^gPsiB;s+1eQSbTMKvD^{onteS98k6N}KwgOecXoVTlE6lK=`wTnalP?^$73!0X zSj3Dw-#S4fY8t^DHv%p^p8R1qURuA*cWKwCFC-Pz+5)-BC zl|w1=Rfeg5*M;^Debcl~N$qXV;DIlr=~_nH18AvRpK<q0o*KnVUI&_@JW$SKFRkJZw$O8+ zlm{vT?6`*)L}ZHKxC(6oMJE{A29~C#tKvZq6{jZ^53SSs<^C_l3z$;XNW`>%WOGiH zklnVXoom(5H8hm{z2Z5qtjRflCGfx>PvxFfyq`(Sj#lmbui$}`@-13sV!t z16RF~I1Xw{q4B=Q+|DyDm+J#`HZ2`cyi^Z~jE?E0MZ$BNl z;zizm0ifkFmcA00w1hXA0W|edzZ$^Ytwa^D=#2Ue1q$!yjagGFm^G8**uakCiSH9= zOJQnK>CswoI7_=u_UwwwJp-JPBY?mBE6W6L zm87bZ3k`cLxqLJ5_MdqP1a1~I58&`YV2o^Ugwlci^O%bdIQcAdsRo9OV=jKcTFhK* zAb5nKD`yIpe6GH2fX*kfoz-#4a@`_czmJ>F2TWM6et&`OQdJ~j0W&)@y3a3|Hikdo z5#X-be5U~@+QN5y<$@Bqoe`i8ICPAUS-?lb+*+pe#H!-e{(upXrbW%XSaRIo{d+ z3xU#7ju-`2=W%wXg9TiC8`yj^_m~r)_9+e;3`x(r&J1k;pY&l}Bftl0W)|?ZCovi5 zNTo|FmG!wUYTBlJT+A_ox)G_i8}wrNb&eU;R@}6$Sc7gxbzi9!u8A0N-$Z|4^r#y~ z`KtYPrO&o}kp^F#rB>J%G$NMIE5Gf&95+Tti6k!xq4IC6f=&ofE`H!IwH0CB%qEcQN8Q^jSfJ+84bP!mW$K}#ZLBArFB?x5Q z$1`C7MLpG~1JXBSIO$kEXu}`eDmiHDBkrW}(ONT$qlAG4TeuVAvji&(+Nrmp$b@!D zZ=-d8H?<3ad5vlp0!NN=U+ch#8@Ya-D#2!zy&rhh;$vfh$i76r(5`>DwLyu+^l~MA zy8O>sUGG^fY>*{f>yaP3vQcs4MH zl^6%iep*EXLbtFIVPNC)jOM_oV395KWOQVay)nV8FBnY+TK>)e!-1v~44}saf7!-y z>VWz0F>3>8N@3_QFzJz@*qJg&|jko~y&vjtebfuU_+yjp{L zpzm^Ztbw4M2YjlYeJRyS`+#@(dI)&(IZnU?P8M@LZQz4f7)u8ZtYMmdV5mwnSSP5R zz)3sUe^6ch=owzmalF9d*AiC*^zGr~13Xt+N4&)un?U`CuC}Wlexa4+4FQe!G9Bm1 z%O2<9u+j7NH#{8rt%A+{m|Fm-@2+k}z~@mLADHkb&eQ{R2{Bq^p5T*4Rd`_S#hgzM zz}-V#$G;S4Q)+>7bGW0qxm_&ME2A2@XI zu>Sc4GvqQ(T-M$kH{QD~sA)IIdwRa}_h(!_!~D^Z5zLbYGa5Hyw)``Dym!Aod3t|6 zXoL;g(!BOh`fig+Vb&2)Mxq?*XBw)6;30nGQ1@@<1aZ za(O7iBCNo=zSac_f9IQoOrh(o%hau{ zf)dK#IbWaeeCKQf7OzDu2F!`jMnLCWl}H9=^hz+?LjX7j2S#LOJ7$EYW8*;NyqcX#?=` zN1c=mG83_jstCWhIzve(^teG~Lo<@*U=*Zoj!hV_Cxa&>4rm&1j(qw?q8{DJ4%w8e+#e+&pVg-RnL11`6pkxI7Eg4iiywGP_PLXa$ zLzY>H2Ug6_QF7@4wf_x$)Z*geatQxxagLbSg1`_RJnI2kBQ*1{T1@6jOUZ1%{*i#N zPoBk})2GnvTaR#j@-KN2%)?YQOGvBr=ci)hXaBNn&pC^b?2Xi*&LdusEL6*eMv zH4G;7POJ{tW-+LV{u1ht7LIq&hiy{}hhs*luC`ipjQ9_jvdkzsuWQ0U!eCo}G-4WR zX}?IbdM5uA1O`$d&$P`eQ(&{WZz_yp8J+3T7h`>&aigWFFxoE_M$1xRw0{Sq;)J2I z;48|9XJR|h?i$dcgEM3_6`QL#6}zh>6}zh>CA*8}=@v=_eX6pRE+WC;Tr7gl&#8x-`1Unv zA|+1;Y`)GV@|;JuXm5*T7%mvXIgheqxL_b2xa_ICqyhlaBj=wZY?@;U@>@BXTY!y^ za{hJzEnB&=QUN^=bNgmtjbX?|Dmd*$Z+%`syt-jfoB$u%27I_ z@Cd{Vt=f);8z-w}RD<*{DTmq`+g^fz3np|dL1guzg)NP;J5i$Ih&zvAqd7u5R7S2y#|XoMcFc7IPv0d0%H`F1*>U=zRCdjJOsEl2 z?Q4IZpHyBn&$h-g-r?-6c;vcZa8W5?qSwLYpYP&#li9JXT}Ox9VayL&iWXr$t` zFBL~&aY|mM&R$jgZ*FRE7PQRCQ!b-x;vZ2!(B|rRZSfvceb+u8*thAY#;`>>I$AL1CaF`d+nP>u&t3NI0%^h2KS=@*3II6 zVt|Vre#QtBR9&4eCkk|I9RH*!0}as~6VsDI2Whb;LkD4 z2Yv0-yf(I}eOe#6d;!jKej^D1zC6r+S^(p>?57E6Jk9}D0iEJJP`#Gm{gG_V20ZpY zk2(e@JuYwM0F?)MR(*gVopJbaIs_QpQ^pW*=vg)$o(|1gHf;cAm#}XUz`W~a3;|D% zXWyy;qn?!4hk#E{=E*4rE$i$NZx_6?AaS4XNt$7Yq<4M7-I{=J-;VgxXvmWN;f>Mvqz4&bK z2H3ZTyVn7MyLp&4VEwN+Xi2A_akVH035O^1DcS z-6%e5Ou&>~a)JSmUc?jZ0ICOYP}SK4qv^I>d{Y9*%3v>TK*L`4G76a1RURpT7uT`N z7NFn~d87b73$V+=bosgLju)DltJs6^-30gDlUP-t=9P-llY9_YFuu6sPu!WaK)3vf zTXQL}{q6VWEDFZ_iJNnjRzAEw`%igu7DDmf>_6Qrvu;xX<*T#&e2n0SB;WTWbw8za zp--gsQ=dU%_seV}8YQRpQyaG@cPZ6;L4TaS6>(~;sOfPx_!@mpe%q;`ZxlRk1nSFQ zCvQJU-zwuprvqNQf@fU=ZT%r?eGvzS@%BHV( z9{K+&umT!Y(z!t@xK5diK!aM?SO`TEDH3x6Uz;{3f2s9vBwaC$cZdn-Wy&KFu;oJD zAr4?=Or95jt$*NH>41kGkw+rnbw?hFfZC(-NSsIT$=&iu1T?H0m~}c z11}(L1$!W1>Rj%$4w_D5WIyu>y7Xq#alkL@`7AI1wJx^i0I~+j9S^wpb6z6a0)n*1 z*c~6>#>4DR5RkDik-|Z*9ZUW_bRixvvXt{_4RpA$tc%7CN2Ps&7OyUBFNwfE8`NGB zf%m`B{*BnZ#J&H*V`u=xE?~EPfKQv{>3$!U{RzH_qq@b?1x{{9I zMI;^c0Y}XQjOoEWT7VK60S9pJ0$v{~pl}`U7#+|nT~0h;*MIVki2^?UmLYUM!9uz% z#j$MxS`wWC@&|IKD&RmX55@~9Yvw&GV8BTZKn$A2pRxxAVA(-l5>Y^{bSDBRJfBRHQ%)up7$e~4{s4-gzaAr~&d zStJ)O;N*cUxdK2ZsPepo<{+dwTKFop%2wlbdW{-4bcenvyV&Dy|9W#dHNU3SrSwW( z(J}hIY=+^L&tPez=~u0uwpjj(_~jMtpErWvzc%3qXv3|^@6->HwBhp%rRP8E4h`4$ zb+vW2f;jhQ9KZ%Z*8O}!`2h2}^At9&Bv?8%k;6fUD5H1$VD&MQ-gku8Vg+E|T((;Y z=(3$R)@ZA*uiaBkc7s zK+90JUI`e}ji0G_g5a4IJnR175j=h^8*l*6zQB$ffaL}|5eF0w;zcByy|+$A2bvdp zvNdZp!Le305CyFAax;6I*_sTXkZOt$6#esh$)7SEg*%H^lN zmNXx&Vy|t0YlG|*karF*+z_DtAP>O;9KDi>_9Vf6o2~f(W3Oie zK|sDVAT;}`cnCT)=caS4g{Go~y{=wI8haQUPyz8mZdSOS;P`mnZZ&}M_shTos(SM? zVL%DGxdOy2RpSbZScBZ@Y+(JCOG*Ghpry5`VjYP z1Fn~YjRCrB<&_!+-1KLTRyDx=Av@vQK=6Jy9z`KwQdXjz0XJXC2WYwtam!N~bniH~ z_!Y0l2#4)HYP}r`SNl9}s2-k}d~fywNe4-1!hrd&uru*Z1kGh>(lF@q>(Z1Sbi&X_ zykdyBsPFJ~HyXV;EG_9Agfwc&JpypZT}+4u7%@X`b3l*jazX$zX%uMYyhu=xh&15Z z?%Cq^Q|SgoO^Xv173l59^F*czXlh~5r;EC^n(Ef1kf7<*)yc)zW|F?z#7ip%7)GB* z!I22ynJixOD&V_f_SXRn);V&<7J|IpeDfw<+)AST;l$M(s6Ty_-Z5WnBk2bEmIA*O K8x8nI>VE*&Y(a4V literal 0 HcmV?d00001 diff --git a/part2/ch04-03-who-does-commit.ttyrec b/part2/ch04-03-who-does-commit.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..78d77d492533d6cabb59dd0b374bfcbd8f8a6707 GIT binary patch literal 13327 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 literal 0 HcmV?d00001 diff --git a/part2/ch05-01-commit-modified.ttyrec b/part2/ch05-01-commit-modified.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..e3783eb4560aa16e6085488328c1e8ad8bb116e5 GIT binary patch literal 10625 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 literal 0 HcmV?d00001 diff --git a/part2/ch05-02-index-and-diff.ttyrec b/part2/ch05-02-index-and-diff.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..270e3a368c44a58e412d9a26967d24204a7874da GIT binary patch literal 13293 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 literal 0 HcmV?d00001 diff --git a/part2/ch06-02-sha1-hash.ttyrec b/part2/ch06-02-sha1-hash.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..4a69a990c0a227325b1ebac0b82d0544b6550c6f GIT binary patch literal 8865 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 literal 0 HcmV?d00001 diff --git a/part2/ch07-01-git-reset.ttyrec b/part2/ch07-01-git-reset.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..a9804f2b964d0bab3977d4147ce2d385a5254ff1 GIT binary patch literal 6428 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 literal 0 HcmV?d00001 diff --git a/part2/ch08-01-checkout.ttyrec b/part2/ch08-01-checkout.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..96458bcaff7e6585dff021d0af3f375807cda4ef GIT binary patch literal 12781 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 t0lMZY12F)M&yr0)k@`3Lu&w0*sp7We? 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 literal 0 HcmV?d00001 diff --git a/part2/ch10-02-rm1.ttyrec b/part2/ch10-02-rm1.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..f050d88351c46b6b49b6a793ac86541e800b8596 GIT binary patch literal 6012 zcmcJT3y>7m6^5GyS(s&(D3G93%#}wLl%AcLo!y;51rbPA2|mzDG>d3Y_nq0!&I6}= z*u{Y20~YWB5s8Wd;v=~76w3+$AsQuH6(2E>GD<8&Egyg=t5zw2n4G`Q9d~EkP^MC$ zDD=DM_POW&=bYQO$IAa{+WVs`G@qtval>iSYXaesLel8>XZF_4r%}@q)w2w@soKp} zr{`3+WOL2VEW?!5mP}`>{lgk3o#ZbZxivnmj2!uWpsOOjlEo450JusTc z^4fOZq6;{B*(shS54gFV*Kq(XE&V-<0K74_!UG+!L9%OaTEm=5B@0Ydt17i>l4V$9 zO*lPqSYx`o7=E9i@lbji#*1{oqtn+^mgM6XGP_4F+ZYC(dxEIFTT=w*zSm3ZL*exs);JZMS<$D6@3UCj0E{t_y0rj78p1os_X*98_^`nKqbo86hss zh9Y+IQYEzEX)WXu4 ztSdYpmPllCDu!3(oRS;@(jqtUZha+xIoot@m6HsIxTe9XFl=WbSw30Q1%1*ZU$W^&Iv z4nb%kpLRN6`RnXD0oZyex48}2(8jJ)fKGLqNkISEs?7nn7di#d7UfRSU4nJHc^xND zaNvB7K+Gn1_$)qXbilZ69KmeB+TDFsbAaA_r>{1eioZdGg2B2-M98|BCBw0JJZy!m zx=2kV9*u`%hODozHLR!^mXWAgTN4Y3pqHZ_GVS+$?JQhdUsIc?jnzi#gEA=VqOnM* zHdYsl7?E&I)Toh?{;?84<*cg;y7~Ao11heNZhjJ0jTx+qnITI?5|OwWi&H3(U?LI= z8ZsV7& zX4mD52+B8eQ8xiD8_d%r;NTy)jxE5wpQ!p;Oz`P4uTVY-gXlpTE$Tt zfYcmb#{_)vXWl~dodo+fv1=Xh)Lf1_1i0h__7(uFI70<`7r~%32igi~{)&6d1sr^Z zy@{m+yOrwBG~s&jx7LK9pugs+ zUN5}3K`(t-rcI|8H@)eqdN^mQ{61K^4h=O>d;+M!ZtYAX@cz;9()YkUG#aksohAW~ z-Nie#0V`hQl(>NMXIWkWSavEa>Huy~Rpm`PI+Ux*fMxAdylr;{K{mmu&ja@EVhtR? z0F^oMYl35s7e0bOM>>4k7yscV^MAd)bbnR%kcrawaJc9)P@IpG&+V3`!aKX`>|IF` z{B}PJp9H+3gtr0B7jZkgfYItm6M*HPs>1JJpE)p0#A>n(ig5M1fV&O0#Yn*-Q1lLNH@JFn->WdJk!v4bQab%jdFBLqXXs163yKcPApaP?00VgW4N z#yJ&$3)FscfP**iS(Sd2;D~ZP<}rdr&-0?ge?!oBV1IRw0)5!-*J`OX8~MvZ1ZzW4 zX~nOht1zy`!p+gIB;FT*6Tp`QZqweUM4GPBa4>(pUt3EKM2Kgp>$f$Q?jv@_kvZ4S zW}MOIj2SD!?9^kO9xtqs&RVi?jq9OHd!AU_ojuR#)|DLWS)2VOcj(7y3nQm1s3nmc7nYcTT+0Rk25%c;S0FNbiiM(;POoXmaXR+v!5Wyyv6mB0`#88 z^&$aVFXwQa^#tuR*dhS?e#Cjy0e{<}76r`n7m^C<7}>vMn;U5KMHO-qa3aQ=u>p;` zdN%|1RB`-bBc3^+q6D1s8FzxSiJ)yR2c`pdZRC($z>)DBSPsy>j7wYso_j`h+-8DX zZ5CPpmejLO`WAxfGud?tP_IRx-amlUJGvX#KG8OAP2x#X#)@J*mDz z;;C%>+kcAi*P{19(qrBKuTD#Qq`SXw{aN7!8Lq{Diu$SR{q{T3;nUSDc@nUA8z;~P zJle?#bOG01q>>K!;=5dfCSbphYtR4;9>sa~p3x$zHei`Bitl=f?F4JDWY;OcjVlIx z{VUrJ;^%hgQ4l?yot32u6nWJg4)ux}J F{|zJ}dddI* literal 0 HcmV?d00001 diff --git a/part2/ch10-03-rm2.ttyrec b/part2/ch10-03-rm2.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..2ad02893d8cef57010dc81e8d915c87ab52b9295 GIT binary patch literal 6210 zcmd6sdvH|M9mg-Pglw`@St+>)e%XEqD2YqSIHqX-|hOSx{>JtO} zmIeSUz;7x_BshTM7Z^lef?X?nNlBs~!G;o6kOs_ZWCbz6!UN^9n*f;Od5ot&fqQQk zDUon^es>9JNM4%8^P~Vf)|X0&2{;lelaK&JFS2S2@Yzwfl*lpL7Vtdg0FrD;X;LBp zsbRcO4pB~)fgz|)dcl+ufM?uHqxdolDh4f8PT3j zB+{M2iCeZvnVm{=lhh$sbaQES7|Kh_osH?&1JN+rJL6U~E>@Ts+e)VdEhxH-)?}qv zQEmg?h_}HT%QmMO=EzgLsV=4esP%H#{rz(%|z55V5RV?2WiUTa}*jsuQ0vjQD3`d(g62B0f%HUQJ#U~d+H@2_QT zQvnCJu{Tc|f^M(!wwnP@-{5�YATwyDhn&poCVy*#&fcc~`BDQit>&xB&Tr?g-_& z|HW_JE)2bt?OJsBU#HgUPs+3gBql_JX`7Dlc;b47{d36|WIrglFsVX&h!o@}$wWFv zYSJk)VWmv^70c)y@h{LNNLR;Oxl9V0QQBQAm6~OMqv;SeEuxtJ@-gep#jGz`7_%(+ z>M_g7;D3qPo9V=t{C|j9oO4yr?piq=eO~;cd5yb!kqZr_*5Eo0r5Iq}0Cs*0uyZrV zl>_LyQPnBHo~KomRuRlia{X`s>#lPo=zx_Ua{{mdKX{yrRvfV6vI??lf`6S+V*tZW z@t6*P)`Qn3VRe?rBp?YL<1({qIKgN&sQ~nw*+WGf=);xeT3sC{_p(rbi)uuGj|v|mCepL<&{n=kto;<)^a0TXbwRO{bZldSmAA4@W*?Q+bgaK0vL;AJp{%@X@!}?iS#{ z6)qMIAbm~OGkMdwgM zt@m2IrwqVu<2@w-69;fz5u*vFALTvO0PY#ji>(D5ovET0Fz;Cola+wO^H_m1h9G>Z zm)ZvC#Mxd&Yw=L)!UM`Cfc39%{91tBtCURuj|7xW09&Uhn*b_r@bpeC!3%C>6F{fI zkg*=Y{xL@OWJb-=eY92uCYPZ@9sLv1GT83hp55EY={_O_8&P?EWqO%coGNDwnRk=U{Qv5W&=)shi8=CM1S@-JwTEj zqg9mvT>TqcKMN?i#yhhC`lGxv0k}vP2z+UI0E4!(E68pWKX9qdK(w~BT$@Y%WDrV& z-NoQ6FScmj&;pA>{pGUagf*60kE@l&09${ef&=jTP8A%0_vWbJ2oWUb^ZD9;wj0j0Z7j_n@VDa2s2t!ok^wKWLN_Kmts}{Mka(i_vEC_sw z{8AN-Kh$K#ztgc(d=-_z`~ih_xO?9`!*EBp3mZ?ZD9&ABYF)mTeJ2K3u#HdG0z5xP zB}hO-ovr{3S-{a31)TmFdvAIi!TX=H!zKamZ05j_@UZex3zFX*QI-c>na1;o@dV4# zJjMgquI!rxWZz}`iU$dnx9~hwfTgdqw-|t_E$m??VEbX7Cjofp0?#8QOW#ygZ~{sG zTFu%_K-1eCW&%)^3unMMl|V9$1n1`~M+Ch5D_&a^Q1=L{jyDmMkSBL1Z|g~)h~UJr zk^(+)nbp`3zGv|Y<;b?h?84$9lKi8LvqC%I+_!nT7GTR;yxaufLY7a$1ibXBDiF;C zjSfo$pmYwKY~)0O)L@lX05w+_EI?0h+0C_rN3Aa};7ylUO}2%E!68Zw;K@V0D+|y# zj1MOT_;eBPDh9}WqOy1^!HN|s^8-?@^f_FtWdL1He;z zROScleU^Pf06uz=*X9AtzMoZRClhoV&I=tigVuqwcbUzVse3My?V*Ft2|HuYE$ z(hXlA99&FMUHlZ2{}O{cs3%KzLFm{REZ26C4&miD8+Cs)#)x`)Ua-xKLoXKg$kC(5 z2p{W}?4jYgY4EB-pTzaSK;TaK3MYj{Qy32U>1mH1s zYmiIXkdYqi+OPRsGk~o=9%BN2e2$|+LQQTSNY;IijX8A=!O{(^U=rZT zIjo==5W2|exfO8Hle;N_E=(@IDb1zUoirm}a_|+Husu%3H07J%7d(@ElZNiS)kOVAwEy;Yh@1c#UAdABcn^zOZhN9owKAp{UOcgrW`pu$R8#?i_<(RatSI=Id!U z{L%VgIO;XbKzkq(4b%H&I8fgn2-oXoBoGQU_}cx^fDel*h~-=VGw?9&_l2e9S_$pf JTxroI|33x`PelL# literal 0 HcmV?d00001 diff --git a/part2/ch10-04-undelete.ttyrec b/part2/ch10-04-undelete.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..bcf81d45ddcdc09ffd3a6d0d54a582aedebb17a4 GIT binary patch literal 4466 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 literal 0 HcmV?d00001 diff --git a/part2/ch10-06-hello-world.ttyrec b/part2/ch10-06-hello-world.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..f9097d45555dda75b2418ba21c493cd77b506f6c GIT binary patch literal 7746 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 MvH1BKJ)v6v1Gn=O`Tzg` literal 0 HcmV?d00001 diff --git a/part2/ch10-07-add-i.ttyrec b/part2/ch10-07-add-i.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..ac12f35db3dddef5d3f70ef3519266970d7c58cc GIT binary patch literal 8235 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 TA)`Oa-0~wQmod$>v)%s(4Mr^n literal 0 HcmV?d00001 diff --git a/part2/ch11-01-clone.ttyrec b/part2/ch11-01-clone.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..ccf4f6bafeb97562e55e2331899c43aa8ccf3b29 GIT binary patch literal 9515 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 literal 0 HcmV?d00001 diff --git a/part2/ch11-02-rev-parse.ttyrec b/part2/ch11-02-rev-parse.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..c6598ead384e57e6d72575e824d8b55fcbb584f2 GIT binary patch literal 13968 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 literal 0 HcmV?d00001 diff --git a/part2/ch11-03-rev-list.ttyrec b/part2/ch11-03-rev-list.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..51bbbbbdbc7574db2f364cd69f03988b4a9600c5 GIT binary patch literal 7689 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�mr||Pz!h< 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 literal 0 HcmV?d00001 diff --git a/part3/smart-and-dump-protocol.ttyrec b/part3/smart-and-dump-protocol.ttyrec new file mode 100644 index 0000000000000000000000000000000000000000..5b6091d17e756d8bb1b4469889a2a8f884bf94b8 GIT binary patch literal 36042 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 lZ0}0tlbyY(u2W-Cs`}$? Date: Thu, 19 May 2011 09:15:56 +0800 Subject: [PATCH 02/84] ttyrec files not in part* directory belong to others category. --- Rakefile | 3 ++- html/templates/index.erb | 21 +++++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Rakefile b/Rakefile index 1ae328d87..ce1b6dba5 100644 --- a/Rakefile +++ b/Rakefile @@ -71,7 +71,8 @@ task :html => [:html_chunks] do css_files = [rel_path(index_file, ABS_CSS_COMMON_FILE)] FileList["html/**/*.json"].each do |t| title = File.basename(t).sub(/\.[^.]+$/, '') - part = t.sub(/.*\/(part[0-9]+)\/.*$/, '\1') + part = t.sub(/.*\/part([0-9]+)\/.*$/, '\1') + part = 'others' unless part =~ /^[0-9]+$/ html_file = rel_path(index_file, File.expand_path(t.sub(/\.[^.]+$/, '.html'))) ttyrec_list[part] = [] unless ttyrec_list.member?(part) ttyrec_list[part].push( { 'title' => title, 'html' => html_file } ) diff --git a/html/templates/index.erb b/html/templates/index.erb index 9ea2cf95b..ac029599a 100644 --- a/html/templates/index.erb +++ b/html/templates/index.erb @@ -32,21 +32,22 @@

操作回放

<% -parts = { 'part1' => '第1篇:初识Git', - 'part2' => '第2篇:Git独奏', - 'part3' => '第3篇:Git和声', - 'part4' => '第4篇:Git协同模型', - 'part5' => '第5篇:搭建Git服务器', - 'part6' => '第6篇:迁移到Git', - 'part7' => '第7篇:Git的其他应用', - 'part8' => '第8篇:Git杂谈', - 'part9' => '第9篇:附录', +parts = { '1' => '第1篇:初识Git', + '2' => '第2篇:Git独奏', + '3' => '第3篇:Git和声', + '4' => '第4篇:Git协同模型', + '5' => '第5篇:搭建Git服务器', + '6' => '第6篇:迁移到Git', + '7' => '第7篇:Git的其他应用', + '8' => '第8篇:Git杂谈', + '9' => '第9篇:附录', + 'others'=> '其它', } %> <% parts.keys.sort.each do |key| %> -

<%= parts[key] %>

<% if ttyrec_list.member?(key) %> +

<%= parts[key] %>

    <% ttyrec_list[key].each do |t| %>
  • <%= t['title'] %> From 8b30cbaad3765b9b3d6f9c3ae19985ee9e2090c3 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Thu, 19 May 2011 14:09:15 +0800 Subject: [PATCH 03/84] Add README in markdown, and build index.html from README.mkd. --- .gitignore | 2 + README.mkd | 161 +++++++++++++++++++++++++++++++++++++++ Rakefile | 59 +++++++++++--- errata.mkd | 2 + html/inc/common.css | 14 ++++ html/templates/index.erb | 50 ++---------- html/templates/scast.erb | 80 +++++++++++++++++++ 7 files changed, 316 insertions(+), 52 deletions(-) create mode 100644 README.mkd create mode 100644 errata.mkd create mode 100644 html/templates/scast.erb diff --git a/.gitignore b/.gitignore index e84b0ccdc..a875ea972 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /screencast.html +/index.html +/errata.html *.json diff --git a/README.mkd b/README.mkd new file mode 100644 index 000000000..a5721cf49 --- /dev/null +++ b/README.mkd @@ -0,0 +1,161 @@ +## 关于本书 + +《Gi权威指南》一书由机工华章于 2011年6月出版,作者是 +[北京群英汇信息技术有限公司](http://www.ossxp.com/) +高级顾问 [蒋鑫](http://weibo.com/gotgit/)。 +注意本书是原创,不是翻译的哦。写作本书的动机: +2010年底,公司业务比较清淡,我想:“趁着过年前的无所事事, +写点东西吧”,结果越写越多,最终成了这本有600页的书。 + +网上能够找到很多Git资料和电子书,包括《[Git社区书](http://book.git-scm.com/)》, +以及《[ProGit](http://progit.org/book/)》等,都是非常好、非常系统的教程, +也正是这些教程引领了我的Git学习之路。那么我写的Git书有什么特别之处呢? +以下是我认为这本书的优势: + +* 降低跨越的难度。 + 我曾经因为Git的古怪而放弃Git,改用Mercurial(Hg)。 + 因此一本成功的Git书要兼顾拥有使用其他版本控制工具使用经验的用户, + 照顾到他们的使用习惯和需求。 + +* 独特的讲故事的方式。 + 我有着自己讲故事的方式,这是我多年来为不同公司做 Subversion 和 Git + 培训和技术支持所积累的经验。 + (顺便说一句,书出了可以继续找我做培训哦,活人可比书有意思多了)。8) + +* 介绍了众多实用的Git协同模型。 + 是什么将我由Mercurial拉回Git的呢?是Topgit, + 一个对Git特性分支管理做了封装的上层工具。 + 我对这款工具感触良多,而且也透彻的研究和改造了这一工具, + 相信我们在开源软件定制开发中用到的这一独特的Git协同模式也同样适用于他人。 + +* 子模组不堪大任,我找到了更好的多版本库协同模型 —— 来自于Android的Repo。 + 在给客户培训Git中发现客户在 Android 驱动开发中的独特开发模式: + Repo + Gerrit,于是深入其中发现别有洞天。 + 我对 Repo 的改造让其有更灵活的应用模型。 + +* 改进的 Gitosis 及 Gitolite。 + 基于SSH的Git服务器软件,在使用中我们对其做了很多改造,以适合用户的使用习惯。 + +* 我开发的一款备份工具 Gistore。 + 我为这款工具起的名字来自于这两个单词的组合:Git + Store。 + 是用Python开发的以Git为后端的备份工具。 + 在该工具的开发中,我获得了更多的Git使用经验。 + +## 业界评价(以书评时间的先后为序) + +**Junio C Hamano** + + * “我是Junio C Hamano,Git的主要维护者。我当年写了一本针对日本读者的Git书, + 当我把我签名的书送给Linus时,他对我说:“除了截图和命令行示例外, + 什么也看不懂(Linus不懂日文)”。基于同样的原因,虽然我不能了解这本书的全貌, + 但是我可以看出这本书涵盖了非常广泛的主题,并且看出蒋鑫对这本书的用心。 + 我非常高兴能够看到这本书的出版,感谢向世界传播Git。” + + * 八卦:同时向 Git 社区大佬 Junio 和 Linus 发送本书章节目录的翻译稿, + 其中的翻译错误让人忍俊不住(感谢表妹和男友鹏辉)。 + 本书发行后,会同时给 Junio 和 Linus 邮寄一本签名版, + 并争取“等价”交换一本他们的自传或图书。 + +**范凯**,CSDN平台开发总监/Javaeye创始人 + + * “仔细拜读了本书前三篇共20章的内容,在我看来,这本书非常棒。 + 作者在软件版本管理控制系统方面有超过10年的经验, + 对版本管理系统有非常深入的认识,实践经验也十分丰富。尤为难得的是, + 本书文笔很流畅,虽然是技术书籍,但是作者娓娓道来,阅读体验很好。 + Git的学习门槛较高,包括我们公司在内的很多企业都将版本管理系统转向了Git, + 这本书能给我们带来帮助,强烈推荐。” + + * 八卦:为了能够获得CSDN评价,发动有限的社会资源向CSDN的老大传声,收效甚微。 + 最后我厚着二皮脸直接向CSDN 蒋总发送秋天的菠菜,... + 我给范凯发送了本书前三篇的内容作为样章(300页), + 没想到范凯在百忙中居然全部读完,之后才写撰写书评,让我佩服他的严谨。 + 编辑等待CSDN的书评一直很心急,也许当初我只发前言就好了。 8) + +**许晓斌**,《Maven实战》的作者,Git的重度使用者 + + * “这是我读过的关于Git最好的书。将复杂的Git解释得清晰透彻绝非易事, + 蒋鑫做到了,更让人惊喜的是他还分享了大量的经验总结。 + 我多年来积累的许多疑惑在读罢该书后一一得以解开。 + 如果你正在使用,或者打算使用Git,本书当然是必备的。 + 你也可以抱着Subversion/CVS不放, + 不过哪天有人拿起这本书敲你头的时候可别怪我没提醒过你。” + + * 八卦:许晓斌对本书帮助良多,大概是除了我和编辑之外, + 仅有的在本书上市前完整看过书稿的人。面对《Git权威指南》出版社一排书稿, + 大概又想到了当初自己书稿被编排的惨痛体验了吧... ;) + + +**冯铃**,清华大学计算机科学与技术系“长江学者”特聘教授 + + * Git是当前开源社区最流行的版本控制系统,代表了版本控制的未来。 + 每一个有志于计算机编程的学习者都应该学习和掌握这一工具,它不但 + 用于追踪编程者的思考过程,还是打开开源软件世界的金钥匙,更可以 + 通过版本控制掌握与他人协同工作的技能。本书是一本耐读原创之书, + 因为其涵盖的内容之广足可以让一名程序员在成长的不同阶段都可以从 + 中汲取丰富营养。 + + * 八卦:冯铃老师给清华的学生开课“计算机程序设计基础”。 + 能从软件开发学习的一开始接触版本控制显然是幸运的。 + 本书出版正值清华百年校庆之际,这段书评带有我的一点个人色彩,请见谅。 + +## 本书勘误 + +发现书中的错误了么?想帮助我修正么?在 Github 上利用fork的功能在您的名下建立本版本库的一个分支版本库, +然后把你发现的错误写在 errata.mkd 文件中。当然不要忘了到[新浪微博](http://weibo.com/gotgit/)上 @gotgit 。 + +参见:[本书勘误](errata.html)。 + +## 操作回放 + +本书的部分操作,请访问:[《Git权威指南》——操作回放](screencast.html)。 +读者除了可以看到“活”的操作外,还可以从回放当中复制操作的代码。 + +如果该网页不存在、无法访问,或者您想向其中添加自己的操作回放,有两种方式: + +方式一:你可以从 Github 上克隆本版本库,自行编译。 + +* 克隆版本库。 + + $ git clone git://github.com/ossxp-com/gotgit-refs.git + +* 确认系统中安装了 ruby 和 perl,并通过 rubygems 安装 redcarpet。 + + $ gem install redcarpet + +* 执行编译。 + + $ rake + +* 点击生成的页面:[《Git权威指南》——操作回放](screencast.html)。 + +方式二:版本库中本来就保存了一份已编译文档,只不过缺省没有克隆出来。 + +> 如果您的系统上缺乏相应的工具软件而无法成功编译, + 在版本库中实际上保存了一份已经编译好的文件,可以通过Git下载, + 并检出到工作区。 + +* 克隆版本库。 + + $ git clone git://github.com/ossxp-com/gotgit-refs.git + +* 添加新的配置,以便获取首次克隆未获取到的远程分支。 + + $ git config --add remote.origin.fetch +refs/remotes/*:refs/remotes/* + +* 执行获取操作。 + + $ git fetch + +* 检出分支 refs/remotes/compiled 分支中的内容到工作区。 + + $ git checkout compiled -- . + +* 执行重置,将已编译文档撤出暂存区,当然工作区中仍然保留。 + + $ git reset + +* 点击检出的页面:[《Git权威指南》——操作回放](screencast.html)。 + +## 资源下载 + + diff --git a/Rakefile b/Rakefile index ce1b6dba5..7c3145b77 100644 --- a/Rakefile +++ b/Rakefile @@ -8,8 +8,11 @@ ABS_CSS_FILE = File.expand_path('html/inc/tty.css') ABS_JS_FILE = File.expand_path('html/inc/showtty.js') ABS_CSS_COMMON_FILE = File.expand_path('html/inc/common.css') TTYPLAY_TMPL = File.expand_path('html/templates/ttyplay.erb') +SCAST_TMPL = File.expand_path('html/templates/scast.erb') INDEX_TMPL = File.expand_path('html/templates/index.erb') -INDEX_FILE = File.expand_path('screencast.html') +SCAST_HTML = File.expand_path('screencast.html') +INDEX_HTML = File.expand_path('index.html') +ERRATA_HTML = File.expand_path('errata.html') def strip_common_dir(path1, path2) if path1+"\t"+path2 =~ %r{^(.*/)(.*?)\t\1(.*)$} @@ -47,6 +50,9 @@ end desc 'compile ttyrec files to json files' task :json +desc 'create index.html and other html files for ttyplay.' +task :html => [:html_chunks, :html_screencast, :html_index, :html_errata] + task :html_chunks do FileList["html/**/*.json"].each do |t| title = File.basename(t).sub(/\.[^.]+$/, '') @@ -64,27 +70,58 @@ task :html_chunks do end end -desc 'create index.html and other html files for ttyplay.' -task :html => [:html_chunks] do - index_file = INDEX_FILE +task :html_screencast => [:html_chunks] do + html_file = SCAST_HTML ttyrec_list = {} - css_files = [rel_path(index_file, ABS_CSS_COMMON_FILE)] + css_files = [rel_path(html_file, ABS_CSS_COMMON_FILE)] + compile_time = Time.now.strftime("%Y/%m/%d %H:%M:%S") FileList["html/**/*.json"].each do |t| title = File.basename(t).sub(/\.[^.]+$/, '') part = t.sub(/.*\/part([0-9]+)\/.*$/, '\1') part = 'others' unless part =~ /^[0-9]+$/ - html_file = rel_path(index_file, File.expand_path(t.sub(/\.[^.]+$/, '.html'))) + html_file = rel_path(html_file, File.expand_path(t.sub(/\.[^.]+$/, '.html'))) ttyrec_list[part] = [] unless ttyrec_list.member?(part) ttyrec_list[part].push( { 'title' => title, 'html' => html_file } ) end - unless uptodate?(index_file, INDEX_TMPL) - File.open(index_file, "w") do |file| - template = ERB.new(File.read(INDEX_TMPL)) + unless uptodate?(html_file, SCAST_TMPL) + File.open(html_file, "w") do |file| + template = ERB.new(File.read(SCAST_TMPL)) file.puts template.result(binding) end end end +def mkd2html title, subtitle, mkd_file, tmpl_file, html_file + begin + require 'redcarpet' + rescue Exception + $stderr.puts "" + $stderr.puts "Error: redcarpet not found! Install redcarpet using:" + $stderr.puts " gem install redcarpet" + $stderr.puts "" + exit 1 + end + compile_time = Time.now.strftime("%Y/%m/%d %H:%M:%S") + css_files = [rel_path(html_file, ABS_CSS_COMMON_FILE)] + markdown = Redcarpet.new(File.open(mkd_file).read).to_html + File.open(html_file, "w") do |file| + template = ERB.new(File.read(tmpl_file)) + file.puts template.result(binding) + end +end + +file :html_index => ['README.mkd', INDEX_TMPL] do |t| + title = "《Git权威指南》" + subtitle = "参考资料" + mkd2html title, subtitle, t.prerequisites[0], t.prerequisites[1], INDEX_HTML +end + +file :html_errata => ['errata.mkd', INDEX_TMPL] do |t| + title = "《Git权威指南》" + subtitle = "勘误" + mkd2html title, subtitle, t.prerequisites[0], t.prerequisites[1], ERRATA_HTML +end + desc 'clean *.json and *.html files' task :clean => [:clean_json, :clean_html] @@ -98,7 +135,9 @@ task :clean_html do FileList["html/**/*.html"].each do |t| File.unlink t end - File.unlink INDEX_FILE if File.exists?(INDEX_FILE) + File.unlink SCAST_HTML if File.exists?(SCAST_HTML) + File.unlink INDEX_HTML if File.exists?(INDEX_HTML) + File.unlink ERRATA_HTML if File.exists?(ERRATA_HTML) end task :default => [:json, :html] diff --git a/errata.mkd b/errata.mkd new file mode 100644 index 000000000..533c51971 --- /dev/null +++ b/errata.mkd @@ -0,0 +1,2 @@ +## 勘误 + diff --git a/html/inc/common.css b/html/inc/common.css index 2fac10d20..9b7afc81e 100755 --- a/html/inc/common.css +++ b/html/inc/common.css @@ -126,6 +126,20 @@ pre.programlisting, pre.screen, pre.literal-block { margin: 1em 1em 1em 2em; } +pre code { + display:block; + overflow:auto;white-space:pre;/* <- css3 */ + white-space:0;/* <- ff */ + font-size:12px; + font-family:"Courier New", Courier, "Lucida Console", Monaco, "DejaVu Sans Mono", "Nimbus Mono L", "Bitstream Vera Sans Mono"; + background-color:#E0E0E0; + padding:.4em; + padding-top:0.2em;padding-bottom:0.6em;/* <- one line pre with scroll bar visible */ + margin: 0em 1em 1em 0em; +} + + + pre{width:80%;overflow:auto;padding:.8em;margin:1em 0;} /* Fixed IE bug: one line pre with scrollbar, visible zone is too small */ diff --git a/html/templates/index.erb b/html/templates/index.erb index ac029599a..19a840cb3 100644 --- a/html/templates/index.erb +++ b/html/templates/index.erb @@ -1,7 +1,9 @@ -Git权威指南——参考资料 +<%= title %> +<% if subtitle.empty? then %> —— <% end %> +<%= subtitle %> <% css_files.each do |t| %> <% end %> @@ -9,20 +11,20 @@
    -

    《Git权威指南》

    -

    参考资料

    +

    <%= title %>

    +

    <%= subtitle %>

    - + - + @@ -30,43 +32,7 @@
    作者:@gotgit
    作者:蒋鑫
    网址:http://www.ossxp.com/GotGit/
    版本:0.1
    日期:2011-05
    日期:<%= compile_time %>
    版权信息:Creative Commons
    -

    操作回放

    -<% -parts = { '1' => '第1篇:初识Git', - '2' => '第2篇:Git独奏', - '3' => '第3篇:Git和声', - '4' => '第4篇:Git协同模型', - '5' => '第5篇:搭建Git服务器', - '6' => '第6篇:迁移到Git', - '7' => '第7篇:Git的其他应用', - '8' => '第8篇:Git杂谈', - '9' => '第9篇:附录', - 'others'=> '其它', - } -%> - -<% parts.keys.sort.each do |key| %> - <% if ttyrec_list.member?(key) %> -

    <%= parts[key] %>

    - - <% end %> -<% end %> - -

    资源下载

    - -
    -
    演示版本库1
    -
    https://github.com/ossxp-com/gitdemo-commit-tree/
    -
    演示版本库2 (Hello world)
    -
    https://github.com/ossxp-com/hello-world/
    -
    本资料库
    -
    https://github.com/ossxp-com/gotgit-refs/
    -
    -
+<%= markdown %> diff --git a/html/templates/scast.erb b/html/templates/scast.erb new file mode 100644 index 000000000..eb7c877e1 --- /dev/null +++ b/html/templates/scast.erb @@ -0,0 +1,80 @@ + + + +Git权威指南——操作回放 +<% css_files.each do |t| %> + +<% end %> + + +
+ +

《Git权威指南》

+

操作回放

+ +++ + + + + + + + + + + + + + +
作者:@gotgit
网址:http://www.ossxp.com/GotGit/
版本:0.1
日期:<%= compile_time %>
版权信息:Creative Commons
+ +

点击下面相应的链接通过Web网页观看操作回放。网页回放技术来自于 jsttyplay。 +

如需要更好的控制回复的速度、暂停等,请使用 ttyplay (Linux), termrec (Windows) 等软件回放扩展名为 ".ttyrec" 的文件。 +

您也可以使用 ttyrec 软件录制自己的回放,保存在 html 目录之外的任意目录下,然后执行 "rake" 命令,自动将新增回放放入本页面中。 +

从版本库 git://github.com/ossxp-com/gotgit-refs.git 克隆并创建您自己的分支,与大家分享。 + +<% +parts = { '1' => '第1篇:初识Git', + '2' => '第2篇:Git独奏', + '3' => '第3篇:Git和声', + '4' => '第4篇:Git协同模型', + '5' => '第5篇:搭建Git服务器', + '6' => '第6篇:迁移到Git', + '7' => '第7篇:Git的其他应用', + '8' => '第8篇:Git杂谈', + '9' => '第9篇:附录', + 'others'=> '其它', + } +%> + +<% parts.keys.sort.each do |key| %> + <% if ttyrec_list.member?(key) %> +

<%= parts[key] %>

+ + <% end %> +<% end %> + +
+ +

资源下载

+ +
+
演示版本库1
+
https://github.com/ossxp-com/gitdemo-commit-tree/
+
演示版本库2 (Hello world)
+
https://github.com/ossxp-com/hello-world/
+
本资料库
+
https://github.com/ossxp-com/gotgit-refs/
+
+ + +
+ + + From fbaca6a7a844cff965c9a3ec4c79bcd488d58477 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Thu, 19 May 2011 14:18:18 +0800 Subject: [PATCH 04/84] Add -- between title and subtitle. use unless instead if, which fixed bug in html tiltle generation. --- html/templates/index.erb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/html/templates/index.erb b/html/templates/index.erb index 19a840cb3..c2c6f616e 100644 --- a/html/templates/index.erb +++ b/html/templates/index.erb @@ -1,9 +1,7 @@ -<%= title %> -<% if subtitle.empty? then %> —— <% end %> -<%= subtitle %> +<%= title %><% unless subtitle.empty? then %> —— <% end %><%= subtitle %> <% css_files.each do |t| %> <% end %> From c6ced6961337dcac91ef3af3eaf3051424ea29e0 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Thu, 19 May 2011 14:23:45 +0800 Subject: [PATCH 05/84] add require 'rubygems'. --- Rakefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Rakefile b/Rakefile index 7c3145b77..1095941c1 100644 --- a/Rakefile +++ b/Rakefile @@ -3,6 +3,7 @@ require 'ftools' require 'erb' +require 'rubygems' ABS_CSS_FILE = File.expand_path('html/inc/tty.css') ABS_JS_FILE = File.expand_path('html/inc/showtty.js') From 014ea9568d110502a19e38af26c814fd2ab2cf73 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Thu, 19 May 2011 14:43:55 +0800 Subject: [PATCH 06/84] update reference sites. --- README.mkd | 8 ++++++++ html/templates/index.erb | 2 +- html/templates/scast.erb | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/README.mkd b/README.mkd index a5721cf49..08f7dfe8a 100644 --- a/README.mkd +++ b/README.mkd @@ -98,6 +98,14 @@ 能从软件开发学习的一开始接触版本控制显然是幸运的。 本书出版正值清华百年校庆之际,这段书评带有我的一点个人色彩,请见谅。 +## 相关网址 + +* 新浪微博 + + +* 本书勘误 + + ## 本书勘误 发现书中的错误了么?想帮助我修正么?在 Github 上利用fork的功能在您的名下建立本版本库的一个分支版本库, diff --git a/html/templates/index.erb b/html/templates/index.erb index c2c6f616e..82b150556 100644 --- a/html/templates/index.erb +++ b/html/templates/index.erb @@ -18,7 +18,7 @@ 作者:蒋鑫 -网址:http://www.ossxp.com/GotGit/ +网址:http://www.ossxp.com/doc/gotgit/ 版本:0.1 diff --git a/html/templates/scast.erb b/html/templates/scast.erb index eb7c877e1..5f407ee4e 100644 --- a/html/templates/scast.erb +++ b/html/templates/scast.erb @@ -18,7 +18,7 @@ 作者:@gotgit -网址:http://www.ossxp.com/GotGit/ +网址:http://www.ossxp.com/doc/gotgit/ 版本:0.1 From 25562564561381c64d614acf5a5af51af9de036d Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Thu, 19 May 2011 15:22:51 +0800 Subject: [PATCH 07/84] Not use fixed font-size. --- html/inc/common.css | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/html/inc/common.css b/html/inc/common.css index 9b7afc81e..61b0dde85 100755 --- a/html/inc/common.css +++ b/html/inc/common.css @@ -118,7 +118,7 @@ dd{} pre.programlisting, pre.screen, pre.literal-block { overflow:auto;white-space:pre;/* <- css3 */ white-space:0;/* <- ff */ - font-size:12px; + font-size:90%; font-family:"Courier New", Courier, "Lucida Console", Monaco, "DejaVu Sans Mono", "Nimbus Mono L", "Bitstream Vera Sans Mono"; background-color:#E0E0E0; padding:.4em; @@ -130,7 +130,7 @@ pre code { display:block; overflow:auto;white-space:pre;/* <- css3 */ white-space:0;/* <- ff */ - font-size:12px; + font-size:90%; font-family:"Courier New", Courier, "Lucida Console", Monaco, "DejaVu Sans Mono", "Nimbus Mono L", "Bitstream Vera Sans Mono"; background-color:#E0E0E0; padding:.4em; @@ -148,10 +148,10 @@ pre{word-wrap:normal;padding-top:1.2em;padding-bottom:1.6em;/* <- one line pre w /* Paragraph */ p {margin:.6em 0 .3em;line-height:150%;} /* Chinese style: indent 2 spaces */ -p,dd {font-size:14px;text-indent: 2em } -dt {font-size:16px;text-indent: 2em; margin:1em 0 0.5em 0; } +p,dd {font-size:100%;text-indent: 2em } +dt {font-size:120%;text-indent: 2em; margin:1em 0 0.5em 0; } /* Paragraph do not indent in li */ -li p {font-size:14px;text-indent: 0em } +li p {font-size:100%;text-indent: 0em } /* other */ img{border:0;margin:.6em 0 .3em 2em;} From e6e74534997b6f7298e9792b3e82b89c251ec11d Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Thu, 19 May 2011 16:47:23 +0800 Subject: [PATCH 08/84] bugfix: duplicate html_file variable. --- Rakefile | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Rakefile b/Rakefile index 1095941c1..23cc6110e 100644 --- a/Rakefile +++ b/Rakefile @@ -57,13 +57,13 @@ task :html => [:html_chunks, :html_screencast, :html_index, :html_errata] task :html_chunks do FileList["html/**/*.json"].each do |t| title = File.basename(t).sub(/\.[^.]+$/, '') - html_file = File.expand_path(t.sub(/\.[^.]+$/, '.html')) - json_file = rel_path(html_file, File.expand_path(t)) - css_files = [ rel_path(html_file, ABS_CSS_FILE), - rel_path(html_file, ABS_CSS_COMMON_FILE) ] - js_file = rel_path(html_file, ABS_JS_FILE) - unless uptodate?(html_file, TTYPLAY_TMPL) - File.open(html_file, "w") do |file| + output_file = File.expand_path(t.sub(/\.[^.]+$/, '.html')) + json_file = rel_path(output_file, File.expand_path(t)) + css_files = [ rel_path(output_file, ABS_CSS_FILE), + rel_path(output_file, ABS_CSS_COMMON_FILE) ] + js_file = rel_path(output_file, ABS_JS_FILE) + unless uptodate?(output_file, TTYPLAY_TMPL) + File.open(output_file, "w") do |file| template = ERB.new(File.read(TTYPLAY_TMPL)) file.puts template.result(binding) end @@ -72,27 +72,27 @@ task :html_chunks do end task :html_screencast => [:html_chunks] do - html_file = SCAST_HTML + output_file = SCAST_HTML ttyrec_list = {} - css_files = [rel_path(html_file, ABS_CSS_COMMON_FILE)] + css_files = [rel_path(output_file, ABS_CSS_COMMON_FILE)] compile_time = Time.now.strftime("%Y/%m/%d %H:%M:%S") FileList["html/**/*.json"].each do |t| title = File.basename(t).sub(/\.[^.]+$/, '') part = t.sub(/.*\/part([0-9]+)\/.*$/, '\1') part = 'others' unless part =~ /^[0-9]+$/ - html_file = rel_path(html_file, File.expand_path(t.sub(/\.[^.]+$/, '.html'))) + html_file = rel_path(output_file, File.expand_path(t.sub(/\.[^.]+$/, '.html'))) ttyrec_list[part] = [] unless ttyrec_list.member?(part) ttyrec_list[part].push( { 'title' => title, 'html' => html_file } ) end - unless uptodate?(html_file, SCAST_TMPL) - File.open(html_file, "w") do |file| + unless uptodate?(output_file, SCAST_TMPL) + File.open(output_file, "w") do |file| template = ERB.new(File.read(SCAST_TMPL)) file.puts template.result(binding) end end end -def mkd2html title, subtitle, mkd_file, tmpl_file, html_file +def mkd2html title, subtitle, mkd_file, tmpl_file, output_file begin require 'redcarpet' rescue Exception @@ -103,9 +103,9 @@ def mkd2html title, subtitle, mkd_file, tmpl_file, html_file exit 1 end compile_time = Time.now.strftime("%Y/%m/%d %H:%M:%S") - css_files = [rel_path(html_file, ABS_CSS_COMMON_FILE)] + css_files = [rel_path(output_file, ABS_CSS_COMMON_FILE)] markdown = Redcarpet.new(File.open(mkd_file).read).to_html - File.open(html_file, "w") do |file| + File.open(output_file, "w") do |file| template = ERB.new(File.read(tmpl_file)) file.puts template.result(binding) end From 10367b0ebdb45d91ff798c7078e760767cd9dd4c Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Thu, 19 May 2011 18:14:36 +0800 Subject: [PATCH 09/84] Cross-platform bugfix, use prototype for ajax request. --- Rakefile | 22 +- html/inc/prototype.js | 6081 ++++++++++++++++++++++++++++++++++++ html/inc/showtty.js | 15 +- html/inc/tty.css | 3 +- html/templates/ttyplay.erb | 4 +- 5 files changed, 6102 insertions(+), 23 deletions(-) create mode 100644 html/inc/prototype.js diff --git a/Rakefile b/Rakefile index 23cc6110e..0a6139e1f 100644 --- a/Rakefile +++ b/Rakefile @@ -5,15 +5,16 @@ require 'ftools' require 'erb' require 'rubygems' -ABS_CSS_FILE = File.expand_path('html/inc/tty.css') -ABS_JS_FILE = File.expand_path('html/inc/showtty.js') -ABS_CSS_COMMON_FILE = File.expand_path('html/inc/common.css') -TTYPLAY_TMPL = File.expand_path('html/templates/ttyplay.erb') -SCAST_TMPL = File.expand_path('html/templates/scast.erb') -INDEX_TMPL = File.expand_path('html/templates/index.erb') -SCAST_HTML = File.expand_path('screencast.html') -INDEX_HTML = File.expand_path('index.html') -ERRATA_HTML = File.expand_path('errata.html') +ABS_CSS_FILE = File.expand_path('html/inc/tty.css') +ABS_JS_PROTOTYPE_FILE = File.expand_path('html/inc/prototype.js') +ABS_JS_SHOWTTY_FILE = File.expand_path('html/inc/showtty.js') +ABS_CSS_COMMON_FILE = File.expand_path('html/inc/common.css') +TTYPLAY_TMPL = File.expand_path('html/templates/ttyplay.erb') +SCAST_TMPL = File.expand_path('html/templates/scast.erb') +INDEX_TMPL = File.expand_path('html/templates/index.erb') +SCAST_HTML = File.expand_path('screencast.html') +INDEX_HTML = File.expand_path('index.html') +ERRATA_HTML = File.expand_path('errata.html') def strip_common_dir(path1, path2) if path1+"\t"+path2 =~ %r{^(.*/)(.*?)\t\1(.*)$} @@ -61,7 +62,8 @@ task :html_chunks do json_file = rel_path(output_file, File.expand_path(t)) css_files = [ rel_path(output_file, ABS_CSS_FILE), rel_path(output_file, ABS_CSS_COMMON_FILE) ] - js_file = rel_path(output_file, ABS_JS_FILE) + js_files = [ rel_path(output_file, ABS_JS_PROTOTYPE_FILE), + rel_path(output_file, ABS_JS_SHOWTTY_FILE) ] unless uptodate?(output_file, TTYPLAY_TMPL) File.open(output_file, "w") do |file| template = ERB.new(File.read(TTYPLAY_TMPL)) diff --git a/html/inc/prototype.js b/html/inc/prototype.js new file mode 100644 index 000000000..04a477939 --- /dev/null +++ b/html/inc/prototype.js @@ -0,0 +1,6081 @@ +/* Prototype JavaScript framework, version 1.7 + * (c) 2005-2010 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://www.prototypejs.org/ + * + *--------------------------------------------------------------------------*/ + +var Prototype = { + + Version: '1.7', + + Browser: (function(){ + var ua = navigator.userAgent; + var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; + return { + IE: !!window.attachEvent && !isOpera, + Opera: isOpera, + WebKit: ua.indexOf('AppleWebKit/') > -1, + Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, + MobileSafari: /Apple.*Mobile/.test(ua) + } + })(), + + BrowserFeatures: { + XPath: !!document.evaluate, + + SelectorsAPI: !!document.querySelector, + + ElementExtensions: (function() { + var constructor = window.Element || window.HTMLElement; + return !!(constructor && constructor.prototype); + })(), + SpecificElementExtensions: (function() { + if (typeof window.HTMLDivElement !== 'undefined') + return true; + + var div = document.createElement('div'), + form = document.createElement('form'), + isSupported = false; + + if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { + isSupported = true; + } + + div = form = null; + + return isSupported; + })() + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; +/* Based on Alex Arnell's inheritance implementation. */ + +var Class = (function() { + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function subclass() {}; + function create() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0, length = properties.length; i < length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + return klass; + } + + function addMethods(source) { + var ancestor = this.superclass && this.superclass.prototype, + properties = Object.keys(source); + + if (IS_DONTENUM_BUGGY) { + if (source.toString != Object.prototype.toString) + properties.push("toString"); + if (source.valueOf != Object.prototype.valueOf) + properties.push("valueOf"); + } + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames()[0] == "$super") { + var method = value; + value = (function(m) { + return function() { return ancestor[m].apply(this, arguments); }; + })(property).wrap(method); + + value.valueOf = method.valueOf.bind(method); + value.toString = method.toString.bind(method); + } + this.prototype[property] = value; + } + + return this; + } + + return { + create: create, + Methods: { + addMethods: addMethods + } + }; +})(); +(function() { + + var _toString = Object.prototype.toString, + NULL_TYPE = 'Null', + UNDEFINED_TYPE = 'Undefined', + BOOLEAN_TYPE = 'Boolean', + NUMBER_TYPE = 'Number', + STRING_TYPE = 'String', + OBJECT_TYPE = 'Object', + FUNCTION_CLASS = '[object Function]', + BOOLEAN_CLASS = '[object Boolean]', + NUMBER_CLASS = '[object Number]', + STRING_CLASS = '[object String]', + ARRAY_CLASS = '[object Array]', + DATE_CLASS = '[object Date]', + NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON && + typeof JSON.stringify === 'function' && + JSON.stringify(0) === '0' && + typeof JSON.stringify(Prototype.K) === 'undefined'; + + function Type(o) { + switch(o) { + case null: return NULL_TYPE; + case (void 0): return UNDEFINED_TYPE; + } + var type = typeof o; + switch(type) { + case 'boolean': return BOOLEAN_TYPE; + case 'number': return NUMBER_TYPE; + case 'string': return STRING_TYPE; + } + return OBJECT_TYPE; + } + + function extend(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; + } + + function inspect(object) { + try { + if (isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + } + + function toJSON(value) { + return Str('', { '': value }, []); + } + + function Str(key, holder, stack) { + var value = holder[key], + type = typeof value; + + if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + var _class = _toString.call(value); + + switch (_class) { + case NUMBER_CLASS: + case BOOLEAN_CLASS: + case STRING_CLASS: + value = value.valueOf(); + } + + switch (value) { + case null: return 'null'; + case true: return 'true'; + case false: return 'false'; + } + + type = typeof value; + switch (type) { + case 'string': + return value.inspect(true); + case 'number': + return isFinite(value) ? String(value) : 'null'; + case 'object': + + for (var i = 0, length = stack.length; i < length; i++) { + if (stack[i] === value) { throw new TypeError(); } + } + stack.push(value); + + var partial = []; + if (_class === ARRAY_CLASS) { + for (var i = 0, length = value.length; i < length; i++) { + var str = Str(i, value, stack); + partial.push(typeof str === 'undefined' ? 'null' : str); + } + partial = '[' + partial.join(',') + ']'; + } else { + var keys = Object.keys(value); + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i], str = Str(key, value, stack); + if (typeof str !== "undefined") { + partial.push(key.inspect(true)+ ':' + str); + } + } + partial = '{' + partial.join(',') + '}'; + } + stack.pop(); + return partial; + } + } + + function stringify(object) { + return JSON.stringify(object); + } + + function toQueryString(object) { + return $H(object).toQueryString(); + } + + function toHTML(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + } + + function keys(object) { + if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); } + var results = []; + for (var property in object) { + if (object.hasOwnProperty(property)) { + results.push(property); + } + } + return results; + } + + function values(object) { + var results = []; + for (var property in object) + results.push(object[property]); + return results; + } + + function clone(object) { + return extend({ }, object); + } + + function isElement(object) { + return !!(object && object.nodeType == 1); + } + + function isArray(object) { + return _toString.call(object) === ARRAY_CLASS; + } + + var hasNativeIsArray = (typeof Array.isArray == 'function') + && Array.isArray([]) && !Array.isArray({}); + + if (hasNativeIsArray) { + isArray = Array.isArray; + } + + function isHash(object) { + return object instanceof Hash; + } + + function isFunction(object) { + return _toString.call(object) === FUNCTION_CLASS; + } + + function isString(object) { + return _toString.call(object) === STRING_CLASS; + } + + function isNumber(object) { + return _toString.call(object) === NUMBER_CLASS; + } + + function isDate(object) { + return _toString.call(object) === DATE_CLASS; + } + + function isUndefined(object) { + return typeof object === "undefined"; + } + + extend(Object, { + extend: extend, + inspect: inspect, + toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, + toQueryString: toQueryString, + toHTML: toHTML, + keys: Object.keys || keys, + values: values, + clone: clone, + isElement: isElement, + isArray: isArray, + isHash: isHash, + isFunction: isFunction, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isUndefined: isUndefined + }); +})(); +Object.extend(Function.prototype, (function() { + var slice = Array.prototype.slice; + + function update(array, args) { + var arrayLength = array.length, length = args.length; + while (length--) array[arrayLength + length] = args[length]; + return array; + } + + function merge(array, args) { + array = slice.call(array, 0); + return update(array, args); + } + + function argumentNames() { + var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] + .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') + .replace(/\s+/g, '').split(','); + return names.length == 1 && !names[0] ? [] : names; + } + + function bind(context) { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; + var __method = this, args = slice.call(arguments, 1); + return function() { + var a = merge(args, arguments); + return __method.apply(context, a); + } + } + + function bindAsEventListener(context) { + var __method = this, args = slice.call(arguments, 1); + return function(event) { + var a = update([event || window.event], args); + return __method.apply(context, a); + } + } + + function curry() { + if (!arguments.length) return this; + var __method = this, args = slice.call(arguments, 0); + return function() { + var a = merge(args, arguments); + return __method.apply(this, a); + } + } + + function delay(timeout) { + var __method = this, args = slice.call(arguments, 1); + timeout = timeout * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + } + + function defer() { + var args = update([0.01], arguments); + return this.delay.apply(this, args); + } + + function wrap(wrapper) { + var __method = this; + return function() { + var a = update([__method.bind(this)], arguments); + return wrapper.apply(this, a); + } + } + + function methodize() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + var a = update([this], arguments); + return __method.apply(null, a); + }; + } + + return { + argumentNames: argumentNames, + bind: bind, + bindAsEventListener: bindAsEventListener, + curry: curry, + delay: delay, + defer: defer, + wrap: wrap, + methodize: methodize + } +})()); + + + +(function(proto) { + + + function toISOString() { + return this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z'; + } + + + function toJSON() { + return this.toISOString(); + } + + if (!proto.toISOString) proto.toISOString = toISOString; + if (!proto.toJSON) proto.toJSON = toJSON; + +})(Date.prototype); + + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + this.currentlyExecuting = false; + } catch(e) { + this.currentlyExecuting = false; + throw e; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, (function() { + var NATIVE_JSON_PARSE_SUPPORT = window.JSON && + typeof JSON.parse === 'function' && + JSON.parse('{"test": true}').test; + + function prepareReplacement(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; + } + + function gsub(pattern, replacement) { + var result = '', source = this, match; + replacement = prepareReplacement(replacement); + + if (Object.isString(pattern)) + pattern = RegExp.escape(pattern); + + if (!(pattern.length || pattern.source)) { + replacement = replacement(''); + return replacement + source.split('').join(replacement) + replacement; + } + + while (source.length > 0) { + if (match = source.match(pattern)) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + } + + function sub(pattern, replacement, count) { + replacement = prepareReplacement(replacement); + count = Object.isUndefined(count) ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + } + + function scan(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + } + + function truncate(length, truncation) { + length = length || 30; + truncation = Object.isUndefined(truncation) ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + } + + function strip() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + } + + function stripTags() { + return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); + } + + function stripScripts() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + } + + function extractScripts() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'), + matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + } + + function evalScripts() { + return this.extractScripts().map(function(script) { return eval(script) }); + } + + function escapeHTML() { + return this.replace(/&/g,'&').replace(//g,'>'); + } + + function unescapeHTML() { + return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); + } + + + function toQueryParams(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()), + value = pair.length > 1 ? pair.join('=') : pair[0]; + + if (value != undefined) value = decodeURIComponent(value); + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + } + + function toArray() { + return this.split(''); + } + + function succ() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + } + + function times(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + } + + function camelize() { + return this.replace(/-+(.)?/g, function(match, chr) { + return chr ? chr.toUpperCase() : ''; + }); + } + + function capitalize() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + } + + function underscore() { + return this.replace(/::/g, '/') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/-/g, '_') + .toLowerCase(); + } + + function dasherize() { + return this.replace(/_/g, '-'); + } + + function inspect(useDoubleQuotes) { + var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { + if (character in String.specialChar) { + return String.specialChar[character]; + } + return '\\u00' + character.charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + } + + function unfilterJSON(filter) { + return this.replace(filter || Prototype.JSONFilter, '$1'); + } + + function isJSON() { + var str = this; + if (str.blank()) return false; + str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'); + str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); + str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + return (/^[\],:{}\s]*$/).test(str); + } + + function evalJSON(sanitize) { + var json = this.unfilterJSON(), + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + if (cx.test(json)) { + json = json.replace(cx, function (a) { + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + } + + function parseJSON() { + var json = this.unfilterJSON(); + return JSON.parse(json); + } + + function include(pattern) { + return this.indexOf(pattern) > -1; + } + + function startsWith(pattern) { + return this.lastIndexOf(pattern, 0) === 0; + } + + function endsWith(pattern) { + var d = this.length - pattern.length; + return d >= 0 && this.indexOf(pattern, d) === d; + } + + function empty() { + return this == ''; + } + + function blank() { + return /^\s*$/.test(this); + } + + function interpolate(object, pattern) { + return new Template(this, pattern).evaluate(object); + } + + return { + gsub: gsub, + sub: sub, + scan: scan, + truncate: truncate, + strip: String.prototype.trim || strip, + stripTags: stripTags, + stripScripts: stripScripts, + extractScripts: extractScripts, + evalScripts: evalScripts, + escapeHTML: escapeHTML, + unescapeHTML: unescapeHTML, + toQueryParams: toQueryParams, + parseQuery: toQueryParams, + toArray: toArray, + succ: succ, + times: times, + camelize: camelize, + capitalize: capitalize, + underscore: underscore, + dasherize: dasherize, + inspect: inspect, + unfilterJSON: unfilterJSON, + isJSON: isJSON, + evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON, + include: include, + startsWith: startsWith, + endsWith: endsWith, + empty: empty, + blank: blank, + interpolate: interpolate + }; +})()); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (object && Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return (match[1] + ''); + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3], + pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + + match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = (function() { + function each(iterator, context) { + var index = 0; + try { + this._each(function(value) { + iterator.call(context, value, index++); + }); + } catch (e) { + if (e != $break) throw e; + } + return this; + } + + function eachSlice(number, iterator, context) { + var index = -number, slices = [], array = this.toArray(); + if (number < 1) return array; + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + } + + function all(iterator, context) { + iterator = iterator || Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator.call(context, value, index); + if (!result) throw $break; + }); + return result; + } + + function any(iterator, context) { + iterator = iterator || Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator.call(context, value, index)) + throw $break; + }); + return result; + } + + function collect(iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator.call(context, value, index)); + }); + return results; + } + + function detect(iterator, context) { + var result; + this.each(function(value, index) { + if (iterator.call(context, value, index)) { + result = value; + throw $break; + } + }); + return result; + } + + function findAll(iterator, context) { + var results = []; + this.each(function(value, index) { + if (iterator.call(context, value, index)) + results.push(value); + }); + return results; + } + + function grep(filter, iterator, context) { + iterator = iterator || Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(RegExp.escape(filter)); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator.call(context, value, index)); + }); + return results; + } + + function include(object) { + if (Object.isFunction(this.indexOf)) + if (this.indexOf(object) != -1) return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + } + + function inGroupsOf(number, fillWith) { + fillWith = Object.isUndefined(fillWith) ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + } + + function inject(memo, iterator, context) { + this.each(function(value, index) { + memo = iterator.call(context, memo, value, index); + }); + return memo; + } + + function invoke(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + } + + function max(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index); + if (result == null || value >= result) + result = value; + }); + return result; + } + + function min(iterator, context) { + iterator = iterator || Prototype.K; + var result; + this.each(function(value, index) { + value = iterator.call(context, value, index); + if (result == null || value < result) + result = value; + }); + return result; + } + + function partition(iterator, context) { + iterator = iterator || Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator.call(context, value, index) ? + trues : falses).push(value); + }); + return [trues, falses]; + } + + function pluck(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + } + + function reject(iterator, context) { + var results = []; + this.each(function(value, index) { + if (!iterator.call(context, value, index)) + results.push(value); + }); + return results; + } + + function sortBy(iterator, context) { + return this.map(function(value, index) { + return { + value: value, + criteria: iterator.call(context, value, index) + }; + }).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + } + + function toArray() { + return this.map(); + } + + function zip() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + } + + function size() { + return this.toArray().length; + } + + function inspect() { + return '#'; + } + + + + + + + + + + return { + each: each, + eachSlice: eachSlice, + all: all, + every: all, + any: any, + some: any, + collect: collect, + map: collect, + detect: detect, + findAll: findAll, + select: findAll, + filter: findAll, + grep: grep, + include: include, + member: include, + inGroupsOf: inGroupsOf, + inject: inject, + invoke: invoke, + max: max, + min: min, + partition: partition, + pluck: pluck, + reject: reject, + sortBy: sortBy, + toArray: toArray, + entries: toArray, + zip: zip, + size: size, + inspect: inspect, + find: detect + }; +})(); + +function $A(iterable) { + if (!iterable) return []; + if ('toArray' in Object(iterable)) return iterable.toArray(); + var length = iterable.length || 0, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +Array.from = $A; + + +(function() { + var arrayProto = Array.prototype, + slice = arrayProto.slice, + _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available + + function each(iterator, context) { + for (var i = 0, length = this.length >>> 0; i < length; i++) { + if (i in this) iterator.call(context, this[i], i, this); + } + } + if (!_each) _each = each; + + function clear() { + this.length = 0; + return this; + } + + function first() { + return this[0]; + } + + function last() { + return this[this.length - 1]; + } + + function compact() { + return this.select(function(value) { + return value != null; + }); + } + + function flatten() { + return this.inject([], function(array, value) { + if (Object.isArray(value)) + return array.concat(value.flatten()); + array.push(value); + return array; + }); + } + + function without() { + var values = slice.call(arguments, 0); + return this.select(function(value) { + return !values.include(value); + }); + } + + function reverse(inline) { + return (inline === false ? this.toArray() : this)._reverse(); + } + + function uniq(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + } + + function intersect(array) { + return this.uniq().findAll(function(item) { + return array.detect(function(value) { return item === value }); + }); + } + + + function clone() { + return slice.call(this, 0); + } + + function size() { + return this.length; + } + + function inspect() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } + + function indexOf(item, i) { + i || (i = 0); + var length = this.length; + if (i < 0) i = length + i; + for (; i < length; i++) + if (this[i] === item) return i; + return -1; + } + + function lastIndexOf(item, i) { + i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; + var n = this.slice(0, i).reverse().indexOf(item); + return (n < 0) ? n : i - n - 1; + } + + function concat() { + var array = slice.call(this, 0), item; + for (var i = 0, length = arguments.length; i < length; i++) { + item = arguments[i]; + if (Object.isArray(item) && !('callee' in item)) { + for (var j = 0, arrayLength = item.length; j < arrayLength; j++) + array.push(item[j]); + } else { + array.push(item); + } + } + return array; + } + + Object.extend(arrayProto, Enumerable); + + if (!arrayProto._reverse) + arrayProto._reverse = arrayProto.reverse; + + Object.extend(arrayProto, { + _each: _each, + clear: clear, + first: first, + last: last, + compact: compact, + flatten: flatten, + without: without, + reverse: reverse, + uniq: uniq, + intersect: intersect, + clone: clone, + toArray: clone, + size: size, + inspect: inspect + }); + + var CONCAT_ARGUMENTS_BUGGY = (function() { + return [].concat(arguments)[0][0] !== 1; + })(1,2) + + if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; + + if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; + if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; +})(); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + function initialize(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + } + + + function _each(iterator) { + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator(pair); + } + } + + function set(key, value) { + return this._object[key] = value; + } + + function get(key) { + if (this._object[key] !== Object.prototype[key]) + return this._object[key]; + } + + function unset(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + } + + function toObject() { + return Object.clone(this._object); + } + + + + function keys() { + return this.pluck('key'); + } + + function values() { + return this.pluck('value'); + } + + function index(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + } + + function merge(object) { + return this.clone().update(object); + } + + function update(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + } + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + return key + '=' + encodeURIComponent(String.interpret(value)); + } + + function toQueryString() { + return this.inject([], function(results, pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) { + var queryValues = []; + for (var i = 0, len = values.length, value; i < len; i++) { + value = values[i]; + queryValues.push(toQueryPair(key, value)); + } + return results.concat(queryValues); + } + } else results.push(toQueryPair(key, values)); + return results; + }).join('&'); + } + + function inspect() { + return '#'; + } + + function clone() { + return new Hash(this); + } + + return { + initialize: initialize, + _each: _each, + set: set, + get: get, + unset: unset, + toObject: toObject, + toTemplateReplacements: toObject, + keys: keys, + values: values, + index: index, + merge: merge, + update: update, + toQueryString: toQueryString, + inspect: inspect, + toJSON: toObject, + clone: clone + }; +})()); + +Hash.from = $H; +Object.extend(Number.prototype, (function() { + function toColorPart() { + return this.toPaddedString(2, 16); + } + + function succ() { + return this + 1; + } + + function times(iterator, context) { + $R(0, this, true).each(iterator, context); + return this; + } + + function toPaddedString(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + } + + function abs() { + return Math.abs(this); + } + + function round() { + return Math.round(this); + } + + function ceil() { + return Math.ceil(this); + } + + function floor() { + return Math.floor(this); + } + + return { + toColorPart: toColorPart, + succ: succ, + times: times, + toPaddedString: toPaddedString, + abs: abs, + round: round, + ceil: ceil, + floor: floor + }; +})()); + +function $R(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var ObjectRange = Class.create(Enumerable, (function() { + function initialize(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + } + + function _each(iterator) { + var value = this.start; + while (this.include(value)) { + iterator(value); + value = value.succ(); + } + } + + function include(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } + + return { + initialize: initialize, + _each: _each, + include: include + }; +})()); + + + +var Abstract = { }; + + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator) { + this.responders._each(iterator); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + + if (Object.isHash(this.options.parameters)) + this.options.parameters = this.options.parameters.toObject(); + } +}); +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.isString(this.options.parameters) ? + this.options.parameters : + Object.toQueryString(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + params += (params ? '&' : '') + "_method=" + this.method; + this.method = 'post'; + } + + if (params && this.method === 'get') { + this.url += (this.url.include('?') ? '&' : '?') + params; + } + + this.parameters = params.toQueryParams(); + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300) || status == 304; + }, + + getStatus: function() { + try { + if (this.transport.status === 1223) return 204; + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && this.isSameOrigin() && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + isSameOrigin: function() { + var m = this.url.match(/^\s*https?:\/\/[^\/]*/); + return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ + protocol: location.protocol, + domain: document.domain, + port: location.port ? ':' + location.port : '' + })); + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name) || null; + } catch (e) { return null; } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + + + + + + + + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if (readyState == 4) { + var xml = transport.responseXML; + this.responseXML = Object.isUndefined(xml) ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + json = decodeURIComponent(escape(json)); + try { + return json.evalJSON(this.request.options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json')) || + this.responseText.blank()) + return null; + try { + return this.responseText.evalJSON(options.sanitizeJSON || + !this.request.isSameOrigin()); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = Object.clone(options); + var onComplete = options.onComplete; + options.onComplete = (function(response, json) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, json); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); + + +function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); +} + +if (Prototype.BrowserFeatures.XPath) { + document._getElementsByXPath = function(expression, parentElement) { + var results = []; + var query = document.evaluate(expression, $(parentElement) || document, + null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); + for (var i = 0, length = query.snapshotLength; i < length; i++) + results.push(Element.extend(query.snapshotItem(i))); + return results; + }; +} + +/*--------------------------------------------------------------------------*/ + +if (!Node) var Node = { }; + +if (!Node.ELEMENT_NODE) { + Object.extend(Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); +} + + + +(function(global) { + function shouldUseCache(tagName, attributes) { + if (tagName === 'select') return false; + if ('type' in attributes) return false; + return true; + } + + var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){ + try { + var el = document.createElement(''); + return el.tagName.toLowerCase() === 'input' && el.name === 'x'; + } + catch(err) { + return false; + } + })(); + + var element = global.Element; + + global.Element = function(tagName, attributes) { + attributes = attributes || { }; + tagName = tagName.toLowerCase(); + var cache = Element.cache; + + if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + + if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName)); + + var node = shouldUseCache(tagName, attributes) ? + cache[tagName].cloneNode(false) : document.createElement(tagName); + + return Element.writeAttribute(node, attributes); + }; + + Object.extend(global.Element, element || { }); + if (element) global.Element.prototype = element.prototype; + +})(this); + +Element.idCounter = 1; +Element.cache = { }; + +Element._purgeElement = function(element) { + var uid = element._prototypeUID; + if (uid) { + Element.stopObserving(element); + element._prototypeUID = void 0; + delete Element.Storage[uid]; + } +} + +Element.Methods = { + visible: function(element) { + return $(element).style.display != 'none'; + }, + + toggle: function(element) { + element = $(element); + Element[Element.visible(element) ? 'hide' : 'show'](element); + return element; + }, + + hide: function(element) { + element = $(element); + element.style.display = 'none'; + return element; + }, + + show: function(element) { + element = $(element); + element.style.display = ''; + return element; + }, + + remove: function(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + }, + + update: (function(){ + + var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ + var el = document.createElement("select"), + isBuggy = true; + el.innerHTML = ""; + if (el.options && el.options[0]) { + isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; + } + el = null; + return isBuggy; + })(); + + var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ + try { + var el = document.createElement("table"); + if (el && el.tBodies) { + el.innerHTML = "test"; + var isBuggy = typeof el.tBodies[0] == "undefined"; + el = null; + return isBuggy; + } + } catch (e) { + return true; + } + })(); + + var LINK_ELEMENT_INNERHTML_BUGGY = (function() { + try { + var el = document.createElement('div'); + el.innerHTML = ""; + var isBuggy = (el.childNodes.length === 0); + el = null; + return isBuggy; + } catch(e) { + return true; + } + })(); + + var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY || + TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY; + + var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { + var s = document.createElement("script"), + isBuggy = false; + try { + s.appendChild(document.createTextNode("")); + isBuggy = !s.firstChild || + s.firstChild && s.firstChild.nodeType !== 3; + } catch (e) { + isBuggy = true; + } + s = null; + return isBuggy; + })(); + + + function update(element, content) { + element = $(element); + var purgeElement = Element._purgeElement; + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + while (i--) purgeElement(descendants[i]); + + if (content && content.toElement) + content = content.toElement(); + + if (Object.isElement(content)) + return element.update().insert(content); + + content = Object.toHTML(content); + + var tagName = element.tagName.toUpperCase(); + + if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { + element.text = content; + return element; + } + + if (ANY_INNERHTML_BUGGY) { + if (tagName in Element._insertionTranslations.tags) { + while (element.firstChild) { + element.removeChild(element.firstChild); + } + Element._getContentFromAnonymousElement(tagName, content.stripScripts()) + .each(function(node) { + element.appendChild(node) + }); + } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf(' -1) { + while (element.firstChild) { + element.removeChild(element.firstChild); + } + var nodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts(), true); + nodes.each(function(node) { element.appendChild(node) }); + } + else { + element.innerHTML = content.stripScripts(); + } + } + else { + element.innerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + return update; + })(), + + replace: function(element, content) { + element = $(element); + if (content && content.toElement) content = content.toElement(); + else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + element.parentNode.replaceChild(content, element); + return element; + }, + + insert: function(element, insertions) { + element = $(element); + + if (Object.isString(insertions) || Object.isNumber(insertions) || + Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) + insertions = {bottom:insertions}; + + var content, insert, tagName, childNodes; + + for (var position in insertions) { + content = insertions[position]; + position = position.toLowerCase(); + insert = Element._insertionTranslations[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + insert(element, content); + continue; + } + + content = Object.toHTML(content); + + tagName = ((position == 'before' || position == 'after') + ? element.parentNode : element).tagName.toUpperCase(); + + childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + + if (position == 'top' || position == 'after') childNodes.reverse(); + childNodes.each(insert.curry(element)); + + content.evalScripts.bind(content).defer(); + } + + return element; + }, + + wrap: function(element, wrapper, attributes) { + element = $(element); + if (Object.isElement(wrapper)) + $(wrapper).writeAttribute(attributes || { }); + else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes); + else wrapper = new Element('div', wrapper); + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + wrapper.appendChild(element); + return wrapper; + }, + + inspect: function(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + $H({'id': 'id', 'className': 'class'}).each(function(pair) { + var property = pair.first(), + attribute = pair.last(), + value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + }); + return result + '>'; + }, + + recursivelyCollect: function(element, property, maximumLength) { + element = $(element); + maximumLength = maximumLength || -1; + var elements = []; + + while (element = element[property]) { + if (element.nodeType == 1) + elements.push(Element.extend(element)); + if (elements.length == maximumLength) + break; + } + + return elements; + }, + + ancestors: function(element) { + return Element.recursivelyCollect(element, 'parentNode'); + }, + + descendants: function(element) { + return Element.select(element, "*"); + }, + + firstDescendant: function(element) { + element = $(element).firstChild; + while (element && element.nodeType != 1) element = element.nextSibling; + return $(element); + }, + + immediateDescendants: function(element) { + var results = [], child = $(element).firstChild; + while (child) { + if (child.nodeType === 1) { + results.push(Element.extend(child)); + } + child = child.nextSibling; + } + return results; + }, + + previousSiblings: function(element, maximumLength) { + return Element.recursivelyCollect(element, 'previousSibling'); + }, + + nextSiblings: function(element) { + return Element.recursivelyCollect(element, 'nextSibling'); + }, + + siblings: function(element) { + element = $(element); + return Element.previousSiblings(element).reverse() + .concat(Element.nextSiblings(element)); + }, + + match: function(element, selector) { + element = $(element); + if (Object.isString(selector)) + return Prototype.Selector.match(element, selector); + return selector.match(element); + }, + + up: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(element.parentNode); + var ancestors = Element.ancestors(element); + return Object.isNumber(expression) ? ancestors[expression] : + Prototype.Selector.find(ancestors, expression, index); + }, + + down: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return Element.firstDescendant(element); + return Object.isNumber(expression) ? Element.descendants(element)[expression] : + Element.select(element, expression)[index || 0]; + }, + + previous: function(element, expression, index) { + element = $(element); + if (Object.isNumber(expression)) index = expression, expression = false; + if (!Object.isNumber(index)) index = 0; + + if (expression) { + return Prototype.Selector.find(element.previousSiblings(), expression, index); + } else { + return element.recursivelyCollect("previousSibling", index + 1)[index]; + } + }, + + next: function(element, expression, index) { + element = $(element); + if (Object.isNumber(expression)) index = expression, expression = false; + if (!Object.isNumber(index)) index = 0; + + if (expression) { + return Prototype.Selector.find(element.nextSiblings(), expression, index); + } else { + var maximumLength = Object.isNumber(index) ? index + 1 : 1; + return element.recursivelyCollect("nextSibling", index + 1)[index]; + } + }, + + + select: function(element) { + element = $(element); + var expressions = Array.prototype.slice.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element); + }, + + adjacent: function(element) { + element = $(element); + var expressions = Array.prototype.slice.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element.parentNode).without(element); + }, + + identify: function(element) { + element = $(element); + var id = Element.readAttribute(element, 'id'); + if (id) return id; + do { id = 'anonymous_element_' + Element.idCounter++ } while ($(id)); + Element.writeAttribute(element, 'id', id); + return id; + }, + + readAttribute: function(element, name) { + element = $(element); + if (Prototype.Browser.IE) { + var t = Element._attributeTranslations.read; + if (t.values[name]) return t.values[name](element, name); + if (t.names[name]) name = t.names[name]; + if (name.include(':')) { + return (!element.attributes || !element.attributes[name]) ? null : + element.attributes[name].value; + } + } + return element.getAttribute(name); + }, + + writeAttribute: function(element, name, value) { + element = $(element); + var attributes = { }, t = Element._attributeTranslations.write; + + if (typeof name == 'object') attributes = name; + else attributes[name] = Object.isUndefined(value) ? true : value; + + for (var attr in attributes) { + name = t.names[attr] || attr; + value = attributes[attr]; + if (t.values[attr]) name = t.values[attr](element, value); + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + return element; + }, + + getHeight: function(element) { + return Element.getDimensions(element).height; + }, + + getWidth: function(element) { + return Element.getDimensions(element).width; + }, + + classNames: function(element) { + return new Element.ClassNames(element); + }, + + hasClassName: function(element, className) { + if (!(element = $(element))) return; + var elementClassName = element.className; + return (elementClassName.length > 0 && (elementClassName == className || + new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); + }, + + addClassName: function(element, className) { + if (!(element = $(element))) return; + if (!Element.hasClassName(element, className)) + element.className += (element.className ? ' ' : '') + className; + return element; + }, + + removeClassName: function(element, className) { + if (!(element = $(element))) return; + element.className = element.className.replace( + new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip(); + return element; + }, + + toggleClassName: function(element, className) { + if (!(element = $(element))) return; + return Element[Element.hasClassName(element, className) ? + 'removeClassName' : 'addClassName'](element, className); + }, + + cleanWhitespace: function(element) { + element = $(element); + var node = element.firstChild; + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + }, + + empty: function(element) { + return $(element).innerHTML.blank(); + }, + + descendantOf: function(element, ancestor) { + element = $(element), ancestor = $(ancestor); + + if (element.compareDocumentPosition) + return (element.compareDocumentPosition(ancestor) & 8) === 8; + + if (ancestor.contains) + return ancestor.contains(element) && ancestor !== element; + + while (element = element.parentNode) + if (element == ancestor) return true; + + return false; + }, + + scrollTo: function(element) { + element = $(element); + var pos = Element.cumulativeOffset(element); + window.scrollTo(pos[0], pos[1]); + return element; + }, + + getStyle: function(element, style) { + element = $(element); + style = style == 'float' ? 'cssFloat' : style.camelize(); + var value = element.style[style]; + if (!value || value == 'auto') { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + if (style == 'opacity') return value ? parseFloat(value) : 1.0; + return value == 'auto' ? null : value; + }, + + getOpacity: function(element) { + return $(element).getStyle('opacity'); + }, + + setStyle: function(element, styles) { + element = $(element); + var elementStyle = element.style, match; + if (Object.isString(styles)) { + element.style.cssText += ';' + styles; + return styles.include('opacity') ? + element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element; + } + for (var property in styles) + if (property == 'opacity') element.setOpacity(styles[property]); + else + elementStyle[(property == 'float' || property == 'cssFloat') ? + (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') : + property] = styles[property]; + + return element; + }, + + setOpacity: function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + return element; + }, + + makePositioned: function(element) { + element = $(element); + var pos = Element.getStyle(element, 'position'); + if (pos == 'static' || !pos) { + element._madePositioned = true; + element.style.position = 'relative'; + if (Prototype.Browser.Opera) { + element.style.top = 0; + element.style.left = 0; + } + } + return element; + }, + + undoPositioned: function(element) { + element = $(element); + if (element._madePositioned) { + element._madePositioned = undefined; + element.style.position = + element.style.top = + element.style.left = + element.style.bottom = + element.style.right = ''; + } + return element; + }, + + makeClipping: function(element) { + element = $(element); + if (element._overflow) return element; + element._overflow = Element.getStyle(element, 'overflow') || 'auto'; + if (element._overflow !== 'hidden') + element.style.overflow = 'hidden'; + return element; + }, + + undoClipping: function(element) { + element = $(element); + if (!element._overflow) return element; + element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; + element._overflow = null; + return element; + }, + + clonePosition: function(element, source) { + var options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, arguments[2] || { }); + + source = $(source); + var p = Element.viewportOffset(source), delta = [0, 0], parent = null; + + element = $(element); + + if (Element.getStyle(element, 'position') == 'absolute') { + parent = Element.getOffsetParent(element); + delta = Element.viewportOffset(parent); + } + + if (parent == document.body) { + delta[0] -= document.body.offsetLeft; + delta[1] -= document.body.offsetTop; + } + + if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + if (options.setWidth) element.style.width = source.offsetWidth + 'px'; + if (options.setHeight) element.style.height = source.offsetHeight + 'px'; + return element; + } +}; + +Object.extend(Element.Methods, { + getElementsBySelector: Element.Methods.select, + + childElements: Element.Methods.immediateDescendants +}); + +Element._attributeTranslations = { + write: { + names: { + className: 'class', + htmlFor: 'for' + }, + values: { } + } +}; + +if (Prototype.Browser.Opera) { + Element.Methods.getStyle = Element.Methods.getStyle.wrap( + function(proceed, element, style) { + switch (style) { + case 'height': case 'width': + if (!Element.visible(element)) return null; + + var dim = parseInt(proceed(element, style), 10); + + if (dim !== element['offset' + style.capitalize()]) + return dim + 'px'; + + var properties; + if (style === 'height') { + properties = ['border-top-width', 'padding-top', + 'padding-bottom', 'border-bottom-width']; + } + else { + properties = ['border-left-width', 'padding-left', + 'padding-right', 'border-right-width']; + } + return properties.inject(dim, function(memo, property) { + var val = proceed(element, property); + return val === null ? memo : memo - parseInt(val, 10); + }) + 'px'; + default: return proceed(element, style); + } + } + ); + + Element.Methods.readAttribute = Element.Methods.readAttribute.wrap( + function(proceed, element, attribute) { + if (attribute === 'title') return element.title; + return proceed(element, attribute); + } + ); +} + +else if (Prototype.Browser.IE) { + Element.Methods.getStyle = function(element, style) { + element = $(element); + style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize(); + var value = element.style[style]; + if (!value && element.currentStyle) value = element.currentStyle[style]; + + if (style == 'opacity') { + if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) + if (value[1]) return parseFloat(value[1]) / 100; + return 1.0; + } + + if (value == 'auto') { + if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none')) + return element['offset' + style.capitalize()] + 'px'; + return null; + } + return value; + }; + + Element.Methods.setOpacity = function(element, value) { + function stripAlpha(filter){ + return filter.replace(/alpha\([^\)]*\)/gi,''); + } + element = $(element); + var currentStyle = element.currentStyle; + if ((currentStyle && !currentStyle.hasLayout) || + (!currentStyle && element.style.zoom == 'normal')) + element.style.zoom = 1; + + var filter = element.getStyle('filter'), style = element.style; + if (value == 1 || value === '') { + (filter = stripAlpha(filter)) ? + style.filter = filter : style.removeAttribute('filter'); + return element; + } else if (value < 0.00001) value = 0; + style.filter = stripAlpha(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + return element; + }; + + Element._attributeTranslations = (function(){ + + var classProp = 'className', + forProp = 'for', + el = document.createElement('div'); + + el.setAttribute(classProp, 'x'); + + if (el.className !== 'x') { + el.setAttribute('class', 'x'); + if (el.className === 'x') { + classProp = 'class'; + } + } + el = null; + + el = document.createElement('label'); + el.setAttribute(forProp, 'x'); + if (el.htmlFor !== 'x') { + el.setAttribute('htmlFor', 'x'); + if (el.htmlFor === 'x') { + forProp = 'htmlFor'; + } + } + el = null; + + return { + read: { + names: { + 'class': classProp, + 'className': classProp, + 'for': forProp, + 'htmlFor': forProp + }, + values: { + _getAttr: function(element, attribute) { + return element.getAttribute(attribute); + }, + _getAttr2: function(element, attribute) { + return element.getAttribute(attribute, 2); + }, + _getAttrNode: function(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ""; + }, + _getEv: (function(){ + + var el = document.createElement('div'), f; + el.onclick = Prototype.emptyFunction; + var value = el.getAttribute('onclick'); + + if (String(value).indexOf('{') > -1) { + f = function(element, attribute) { + attribute = element.getAttribute(attribute); + if (!attribute) return null; + attribute = attribute.toString(); + attribute = attribute.split('{')[1]; + attribute = attribute.split('}')[0]; + return attribute.strip(); + }; + } + else if (value === '') { + f = function(element, attribute) { + attribute = element.getAttribute(attribute); + if (!attribute) return null; + return attribute.strip(); + }; + } + el = null; + return f; + })(), + _flag: function(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + }, + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + } + } + })(); + + Element._attributeTranslations.write = { + names: Object.extend({ + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing' + }, Element._attributeTranslations.read.names), + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + Element._attributeTranslations.has = {}; + + $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' + + 'encType maxLength readOnly longDesc frameBorder').each(function(attr) { + Element._attributeTranslations.write.names[attr.toLowerCase()] = attr; + Element._attributeTranslations.has[attr.toLowerCase()] = attr; + }); + + (function(v) { + Object.extend(v, { + href: v._getAttr2, + src: v._getAttr2, + type: v._getAttr, + action: v._getAttrNode, + disabled: v._flag, + checked: v._flag, + readonly: v._flag, + multiple: v._flag, + onload: v._getEv, + onunload: v._getEv, + onclick: v._getEv, + ondblclick: v._getEv, + onmousedown: v._getEv, + onmouseup: v._getEv, + onmouseover: v._getEv, + onmousemove: v._getEv, + onmouseout: v._getEv, + onfocus: v._getEv, + onblur: v._getEv, + onkeypress: v._getEv, + onkeydown: v._getEv, + onkeyup: v._getEv, + onsubmit: v._getEv, + onreset: v._getEv, + onselect: v._getEv, + onchange: v._getEv + }); + })(Element._attributeTranslations.read.values); + + if (Prototype.BrowserFeatures.ElementExtensions) { + (function() { + function _descendants(element) { + var nodes = element.getElementsByTagName('*'), results = []; + for (var i = 0, node; node = nodes[i]; i++) + if (node.tagName !== "!") // Filter out comment nodes. + results.push(node); + return results; + } + + Element.Methods.down = function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return element.firstDescendant(); + return Object.isNumber(expression) ? _descendants(element)[expression] : + Element.select(element, expression)[index || 0]; + } + })(); + } + +} + +else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1) ? 0.999999 : + (value === '') ? '' : (value < 0.00001) ? 0 : value; + return element; + }; +} + +else if (Prototype.Browser.WebKit) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + + if (value == 1) + if (element.tagName.toUpperCase() == 'IMG' && element.width) { + element.width++; element.width--; + } else try { + var n = document.createTextNode(' '); + element.appendChild(n); + element.removeChild(n); + } catch (e) { } + + return element; + }; +} + +if ('outerHTML' in document.documentElement) { + Element.Methods.replace = function(element, content) { + element = $(element); + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (Element._insertionTranslations.tags[tagName]) { + var nextSibling = element.next(), + fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + parent.removeChild(element); + if (nextSibling) + fragments.each(function(node) { parent.insertBefore(node, nextSibling) }); + else + fragments.each(function(node) { parent.appendChild(node) }); + } + else element.outerHTML = content.stripScripts(); + + content.evalScripts.bind(content).defer(); + return element; + }; +} + +Element._returnOffset = function(l, t) { + var result = [l, t]; + result.left = l; + result.top = t; + return result; +}; + +Element._getContentFromAnonymousElement = function(tagName, html, force) { + var div = new Element('div'), + t = Element._insertionTranslations.tags[tagName]; + + var workaround = false; + if (t) workaround = true; + else if (force) { + workaround = true; + t = ['', '', 0]; + } + + if (workaround) { + div.innerHTML = ' ' + t[0] + html + t[1]; + div.removeChild(div.firstChild); + for (var i = t[2]; i--; ) { + div = div.firstChild; + } + } + else { + div.innerHTML = html; + } + return $A(div.childNodes); +}; + +Element._insertionTranslations = { + before: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + top: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + bottom: function(element, node) { + element.appendChild(node); + }, + after: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + tags: { + TABLE: ['', '
', 1], + TBODY: ['', '
', 2], + TR: ['', '
', 3], + TD: ['
', '
', 4], + SELECT: ['', 1] + } +}; + +(function() { + var tags = Element._insertionTranslations.tags; + Object.extend(tags, { + THEAD: tags.TBODY, + TFOOT: tags.TBODY, + TH: tags.TD + }); +})(); + +Element.Methods.Simulated = { + hasAttribute: function(element, attribute) { + attribute = Element._attributeTranslations.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return !!(node && node.specified); + } +}; + +Element.Methods.ByTag = { }; + +Object.extend(Element, Element.Methods); + +(function(div) { + + if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) { + window.HTMLElement = { }; + window.HTMLElement.prototype = div['__proto__']; + Prototype.BrowserFeatures.ElementExtensions = true; + } + + div = null; + +})(document.createElement('div')); + +Element.extend = (function() { + + function checkDeficiency(tagName) { + if (typeof window.Element != 'undefined') { + var proto = window.Element.prototype; + if (proto) { + var id = '_' + (Math.random()+'').slice(2), + el = document.createElement(tagName); + proto[id] = 'x'; + var isBuggy = (el[id] !== 'x'); + delete proto[id]; + el = null; + return isBuggy; + } + } + return false; + } + + function extendElementWith(element, methods) { + for (var property in methods) { + var value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + } + + var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object'); + + if (Prototype.BrowserFeatures.SpecificElementExtensions) { + if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) { + return function(element) { + if (element && typeof element._extendedByPrototype == 'undefined') { + var t = element.tagName; + if (t && (/^(?:object|applet|embed)$/i.test(t))) { + extendElementWith(element, Element.Methods); + extendElementWith(element, Element.Methods.Simulated); + extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); + } + } + return element; + } + } + return Prototype.K; + } + + var Methods = { }, ByTag = Element.Methods.ByTag; + + var extend = Object.extend(function(element) { + if (!element || typeof element._extendedByPrototype != 'undefined' || + element.nodeType != 1 || element == window) return element; + + var methods = Object.clone(Methods), + tagName = element.tagName.toUpperCase(); + + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + extendElementWith(element, methods); + + element._extendedByPrototype = Prototype.emptyFunction; + return element; + + }, { + refresh: function() { + if (!Prototype.BrowserFeatures.ElementExtensions) { + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + } + } + }); + + extend.refresh(); + return extend; +})(); + +if (document.documentElement.hasAttribute) { + Element.hasAttribute = function(element, attribute) { + return element.hasAttribute(attribute); + }; +} +else { + Element.hasAttribute = Element.Methods.Simulated.hasAttribute; +} + +Element.addMethods = function(methods) { + var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag; + + if (!methods) { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods), + "BUTTON": Object.clone(Form.Element.Methods) + }); + } + + if (arguments.length == 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) Object.extend(Element.Methods, methods || { }); + else { + if (Object.isArray(tagName)) tagName.each(extend); + else extend(tagName); + } + + function extend(tagName) { + tagName = tagName.toUpperCase(); + if (!Element.Methods.ByTag[tagName]) + Element.Methods.ByTag[tagName] = { }; + Object.extend(Element.Methods.ByTag[tagName], methods); + } + + function copy(methods, destination, onlyIfAbsent) { + onlyIfAbsent = onlyIfAbsent || false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + var element = document.createElement(tagName), + proto = element['__proto__'] || element.constructor.prototype; + + element = null; + return proto; + } + + var elementPrototype = window.HTMLElement ? HTMLElement.prototype : + Element.prototype; + + if (F.ElementExtensions) { + copy(Element.Methods, elementPrototype); + copy(Element.Methods.Simulated, elementPrototype, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + copy(T[tag], klass.prototype); + } + } + + Object.extend(Element, Element.Methods); + delete Element.ByTag; + + if (Element.extend.refresh) Element.extend.refresh(); + Element.cache = { }; +}; + + +document.viewport = { + + getDimensions: function() { + return { width: this.getWidth(), height: this.getHeight() }; + }, + + getScrollOffsets: function() { + return Element._returnOffset( + window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, + window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop); + } +}; + +(function(viewport) { + var B = Prototype.Browser, doc = document, element, property = {}; + + function getRootElement() { + if (B.WebKit && !doc.evaluate) + return document; + + if (B.Opera && window.parseFloat(window.opera.version()) < 9.5) + return document.body; + + return document.documentElement; + } + + function define(D) { + if (!element) element = getRootElement(); + + property[D] = 'client' + D; + + viewport['get' + D] = function() { return element[property[D]] }; + return viewport['get' + D](); + } + + viewport.getWidth = define.curry('Width'); + + viewport.getHeight = define.curry('Height'); +})(document.viewport); + + +Element.Storage = { + UID: 1 +}; + +Element.addMethods({ + getStorage: function(element) { + if (!(element = $(element))) return; + + var uid; + if (element === window) { + uid = 0; + } else { + if (typeof element._prototypeUID === "undefined") + element._prototypeUID = Element.Storage.UID++; + uid = element._prototypeUID; + } + + if (!Element.Storage[uid]) + Element.Storage[uid] = $H(); + + return Element.Storage[uid]; + }, + + store: function(element, key, value) { + if (!(element = $(element))) return; + + if (arguments.length === 2) { + Element.getStorage(element).update(key); + } else { + Element.getStorage(element).set(key, value); + } + + return element; + }, + + retrieve: function(element, key, defaultValue) { + if (!(element = $(element))) return; + var hash = Element.getStorage(element), value = hash.get(key); + + if (Object.isUndefined(value)) { + hash.set(key, defaultValue); + value = defaultValue; + } + + return value; + }, + + clone: function(element, deep) { + if (!(element = $(element))) return; + var clone = element.cloneNode(deep); + clone._prototypeUID = void 0; + if (deep) { + var descendants = Element.select(clone, '*'), + i = descendants.length; + while (i--) { + descendants[i]._prototypeUID = void 0; + } + } + return Element.extend(clone); + }, + + purge: function(element) { + if (!(element = $(element))) return; + var purgeElement = Element._purgeElement; + + purgeElement(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + + while (i--) purgeElement(descendants[i]); + + return null; + } +}); + +(function() { + + function toDecimal(pctString) { + var match = pctString.match(/^(\d+)%?$/i); + if (!match) return null; + return (Number(match[1]) / 100); + } + + function getPixelValue(value, property, context) { + var element = null; + if (Object.isElement(value)) { + element = value; + value = element.getStyle(property); + } + + if (value === null) { + return null; + } + + if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) { + return window.parseFloat(value); + } + + var isPercentage = value.include('%'), isViewport = (context === document.viewport); + + if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) { + var style = element.style.left, rStyle = element.runtimeStyle.left; + element.runtimeStyle.left = element.currentStyle.left; + element.style.left = value || 0; + value = element.style.pixelLeft; + element.style.left = style; + element.runtimeStyle.left = rStyle; + + return value; + } + + if (element && isPercentage) { + context = context || element.parentNode; + var decimal = toDecimal(value); + var whole = null; + var position = element.getStyle('position'); + + var isHorizontal = property.include('left') || property.include('right') || + property.include('width'); + + var isVertical = property.include('top') || property.include('bottom') || + property.include('height'); + + if (context === document.viewport) { + if (isHorizontal) { + whole = document.viewport.getWidth(); + } else if (isVertical) { + whole = document.viewport.getHeight(); + } + } else { + if (isHorizontal) { + whole = $(context).measure('width'); + } else if (isVertical) { + whole = $(context).measure('height'); + } + } + + return (whole === null) ? 0 : whole * decimal; + } + + return 0; + } + + function toCSSPixels(number) { + if (Object.isString(number) && number.endsWith('px')) { + return number; + } + return number + 'px'; + } + + function isDisplayed(element) { + var originalElement = element; + while (element && element.parentNode) { + var display = element.getStyle('display'); + if (display === 'none') { + return false; + } + element = $(element.parentNode); + } + return true; + } + + var hasLayout = Prototype.K; + if ('currentStyle' in document.documentElement) { + hasLayout = function(element) { + if (!element.currentStyle.hasLayout) { + element.style.zoom = 1; + } + return element; + }; + } + + function cssNameFor(key) { + if (key.include('border')) key = key + '-width'; + return key.camelize(); + } + + Element.Layout = Class.create(Hash, { + initialize: function($super, element, preCompute) { + $super(); + this.element = $(element); + + Element.Layout.PROPERTIES.each( function(property) { + this._set(property, null); + }, this); + + if (preCompute) { + this._preComputing = true; + this._begin(); + Element.Layout.PROPERTIES.each( this._compute, this ); + this._end(); + this._preComputing = false; + } + }, + + _set: function(property, value) { + return Hash.prototype.set.call(this, property, value); + }, + + set: function(property, value) { + throw "Properties of Element.Layout are read-only."; + }, + + get: function($super, property) { + var value = $super(property); + return value === null ? this._compute(property) : value; + }, + + _begin: function() { + if (this._prepared) return; + + var element = this.element; + if (isDisplayed(element)) { + this._prepared = true; + return; + } + + var originalStyles = { + position: element.style.position || '', + width: element.style.width || '', + visibility: element.style.visibility || '', + display: element.style.display || '' + }; + + element.store('prototype_original_styles', originalStyles); + + var position = element.getStyle('position'), + width = element.getStyle('width'); + + if (width === "0px" || width === null) { + element.style.display = 'block'; + width = element.getStyle('width'); + } + + var context = (position === 'fixed') ? document.viewport : + element.parentNode; + + element.setStyle({ + position: 'absolute', + visibility: 'hidden', + display: 'block' + }); + + var positionedWidth = element.getStyle('width'); + + var newWidth; + if (width && (positionedWidth === width)) { + newWidth = getPixelValue(element, 'width', context); + } else if (position === 'absolute' || position === 'fixed') { + newWidth = getPixelValue(element, 'width', context); + } else { + var parent = element.parentNode, pLayout = $(parent).getLayout(); + + newWidth = pLayout.get('width') - + this.get('margin-left') - + this.get('border-left') - + this.get('padding-left') - + this.get('padding-right') - + this.get('border-right') - + this.get('margin-right'); + } + + element.setStyle({ width: newWidth + 'px' }); + + this._prepared = true; + }, + + _end: function() { + var element = this.element; + var originalStyles = element.retrieve('prototype_original_styles'); + element.store('prototype_original_styles', null); + element.setStyle(originalStyles); + this._prepared = false; + }, + + _compute: function(property) { + var COMPUTATIONS = Element.Layout.COMPUTATIONS; + if (!(property in COMPUTATIONS)) { + throw "Property not found."; + } + + return this._set(property, COMPUTATIONS[property].call(this, this.element)); + }, + + toObject: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var obj = {}; + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + var value = this.get(key); + if (value != null) obj[key] = value; + }, this); + return obj; + }, + + toHash: function() { + var obj = this.toObject.apply(this, arguments); + return new Hash(obj); + }, + + toCSS: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var css = {}; + + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return; + + var value = this.get(key); + if (value != null) css[cssNameFor(key)] = value + 'px'; + }, this); + return css; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Element.Layout, { + PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'), + + COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'), + + COMPUTATIONS: { + 'height': function(element) { + if (!this._preComputing) this._begin(); + + var bHeight = this.get('border-box-height'); + if (bHeight <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bTop = this.get('border-top'), + bBottom = this.get('border-bottom'); + + var pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + if (!this._preComputing) this._end(); + + return bHeight - bTop - bBottom - pTop - pBottom; + }, + + 'width': function(element) { + if (!this._preComputing) this._begin(); + + var bWidth = this.get('border-box-width'); + if (bWidth <= 0) { + if (!this._preComputing) this._end(); + return 0; + } + + var bLeft = this.get('border-left'), + bRight = this.get('border-right'); + + var pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + if (!this._preComputing) this._end(); + + return bWidth - bLeft - bRight - pLeft - pRight; + }, + + 'padding-box-height': function(element) { + var height = this.get('height'), + pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + return height + pTop + pBottom; + }, + + 'padding-box-width': function(element) { + var width = this.get('width'), + pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + return width + pLeft + pRight; + }, + + 'border-box-height': function(element) { + if (!this._preComputing) this._begin(); + var height = element.offsetHeight; + if (!this._preComputing) this._end(); + return height; + }, + + 'border-box-width': function(element) { + if (!this._preComputing) this._begin(); + var width = element.offsetWidth; + if (!this._preComputing) this._end(); + return width; + }, + + 'margin-box-height': function(element) { + var bHeight = this.get('border-box-height'), + mTop = this.get('margin-top'), + mBottom = this.get('margin-bottom'); + + if (bHeight <= 0) return 0; + + return bHeight + mTop + mBottom; + }, + + 'margin-box-width': function(element) { + var bWidth = this.get('border-box-width'), + mLeft = this.get('margin-left'), + mRight = this.get('margin-right'); + + if (bWidth <= 0) return 0; + + return bWidth + mLeft + mRight; + }, + + 'top': function(element) { + var offset = element.positionedOffset(); + return offset.top; + }, + + 'bottom': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pHeight = parent.measure('height'); + + var mHeight = this.get('border-box-height'); + + return pHeight - mHeight - offset.top; + }, + + 'left': function(element) { + var offset = element.positionedOffset(); + return offset.left; + }, + + 'right': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pWidth = parent.measure('width'); + + var mWidth = this.get('border-box-width'); + + return pWidth - mWidth - offset.left; + }, + + 'padding-top': function(element) { + return getPixelValue(element, 'paddingTop'); + }, + + 'padding-bottom': function(element) { + return getPixelValue(element, 'paddingBottom'); + }, + + 'padding-left': function(element) { + return getPixelValue(element, 'paddingLeft'); + }, + + 'padding-right': function(element) { + return getPixelValue(element, 'paddingRight'); + }, + + 'border-top': function(element) { + return getPixelValue(element, 'borderTopWidth'); + }, + + 'border-bottom': function(element) { + return getPixelValue(element, 'borderBottomWidth'); + }, + + 'border-left': function(element) { + return getPixelValue(element, 'borderLeftWidth'); + }, + + 'border-right': function(element) { + return getPixelValue(element, 'borderRightWidth'); + }, + + 'margin-top': function(element) { + return getPixelValue(element, 'marginTop'); + }, + + 'margin-bottom': function(element) { + return getPixelValue(element, 'marginBottom'); + }, + + 'margin-left': function(element) { + return getPixelValue(element, 'marginLeft'); + }, + + 'margin-right': function(element) { + return getPixelValue(element, 'marginRight'); + } + } + }); + + if ('getBoundingClientRect' in document.documentElement) { + Object.extend(Element.Layout.COMPUTATIONS, { + 'right': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.right - rect.right).round(); + }, + + 'bottom': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.bottom - rect.bottom).round(); + } + }); + } + + Element.Offset = Class.create({ + initialize: function(left, top) { + this.left = left.round(); + this.top = top.round(); + + this[0] = this.left; + this[1] = this.top; + }, + + relativeTo: function(offset) { + return new Element.Offset( + this.left - offset.left, + this.top - offset.top + ); + }, + + inspect: function() { + return "#".interpolate(this); + }, + + toString: function() { + return "[#{left}, #{top}]".interpolate(this); + }, + + toArray: function() { + return [this.left, this.top]; + } + }); + + function getLayout(element, preCompute) { + return new Element.Layout(element, preCompute); + } + + function measure(element, property) { + return $(element).getLayout().get(property); + } + + function getDimensions(element) { + element = $(element); + var display = Element.getStyle(element, 'display'); + + if (display && display !== 'none') { + return { width: element.offsetWidth, height: element.offsetHeight }; + } + + var style = element.style; + var originalStyles = { + visibility: style.visibility, + position: style.position, + display: style.display + }; + + var newStyles = { + visibility: 'hidden', + display: 'block' + }; + + if (originalStyles.position !== 'fixed') + newStyles.position = 'absolute'; + + Element.setStyle(element, newStyles); + + var dimensions = { + width: element.offsetWidth, + height: element.offsetHeight + }; + + Element.setStyle(element, originalStyles); + + return dimensions; + } + + function getOffsetParent(element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var isInline = (Element.getStyle(element, 'display') === 'inline'); + if (!isInline && element.offsetParent) return $(element.offsetParent); + + while ((element = element.parentNode) && element !== document.body) { + if (Element.getStyle(element, 'position') !== 'static') { + return isHtml(element) ? $(document.body) : $(element); + } + } + + return $(document.body); + } + + + function cumulativeOffset(element) { + element = $(element); + var valueT = 0, valueL = 0; + if (element.parentNode) { + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + } + return new Element.Offset(valueL, valueT); + } + + function positionedOffset(element) { + element = $(element); + + var layout = element.getLayout(); + + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (isBody(element)) break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + + valueL -= layout.get('margin-top'); + valueT -= layout.get('margin-left'); + + return new Element.Offset(valueL, valueT); + } + + function cumulativeScrollOffset(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return new Element.Offset(valueL, valueT); + } + + function viewportOffset(forElement) { + element = $(element); + var valueT = 0, valueL = 0, docBody = document.body; + + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == docBody && + Element.getStyle(element, 'position') == 'absolute') break; + } while (element = element.offsetParent); + + element = forElement; + do { + if (element != docBody) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + return new Element.Offset(valueL, valueT); + } + + function absolutize(element) { + element = $(element); + + if (Element.getStyle(element, 'position') === 'absolute') { + return element; + } + + var offsetParent = getOffsetParent(element); + var eOffset = element.viewportOffset(), + pOffset = offsetParent.viewportOffset(); + + var offset = eOffset.relativeTo(pOffset); + var layout = element.getLayout(); + + element.store('prototype_absolutize_original_styles', { + left: element.getStyle('left'), + top: element.getStyle('top'), + width: element.getStyle('width'), + height: element.getStyle('height') + }); + + element.setStyle({ + position: 'absolute', + top: offset.top + 'px', + left: offset.left + 'px', + width: layout.get('width') + 'px', + height: layout.get('height') + 'px' + }); + + return element; + } + + function relativize(element) { + element = $(element); + if (Element.getStyle(element, 'position') === 'relative') { + return element; + } + + var originalStyles = + element.retrieve('prototype_absolutize_original_styles'); + + if (originalStyles) element.setStyle(originalStyles); + return element; + } + + if (Prototype.Browser.IE) { + getOffsetParent = getOffsetParent.wrap( + function(proceed, element) { + element = $(element); + + if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) + return $(document.body); + + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + + positionedOffset = positionedOffset.wrap(function(proceed, element) { + element = $(element); + if (!element.parentNode) return new Element.Offset(0, 0); + var position = element.getStyle('position'); + if (position !== 'static') return proceed(element); + + var offsetParent = element.getOffsetParent(); + if (offsetParent && offsetParent.getStyle('position') === 'fixed') + hasLayout(offsetParent); + + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + }); + } else if (Prototype.Browser.Webkit) { + cumulativeOffset = function(element) { + element = $(element); + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) + if (Element.getStyle(element, 'position') == 'absolute') break; + + element = element.offsetParent; + } while (element); + + return new Element.Offset(valueL, valueT); + }; + } + + + Element.addMethods({ + getLayout: getLayout, + measure: measure, + getDimensions: getDimensions, + getOffsetParent: getOffsetParent, + cumulativeOffset: cumulativeOffset, + positionedOffset: positionedOffset, + cumulativeScrollOffset: cumulativeScrollOffset, + viewportOffset: viewportOffset, + absolutize: absolutize, + relativize: relativize + }); + + function isBody(element) { + return element.nodeName.toUpperCase() === 'BODY'; + } + + function isHtml(element) { + return element.nodeName.toUpperCase() === 'HTML'; + } + + function isDocument(element) { + return element.nodeType === Node.DOCUMENT_NODE; + } + + function isDetached(element) { + return element !== document.body && + !Element.descendantOf(element, document.body); + } + + if ('getBoundingClientRect' in document.documentElement) { + Element.addMethods({ + viewportOffset: function(element) { + element = $(element); + if (isDetached(element)) return new Element.Offset(0, 0); + + var rect = element.getBoundingClientRect(), + docEl = document.documentElement; + return new Element.Offset(rect.left - docEl.clientLeft, + rect.top - docEl.clientTop); + } + }); + } +})(); +window.$$ = function() { + var expression = $A(arguments).join(', '); + return Prototype.Selector.select(expression, document); +}; + +Prototype.Selector = (function() { + + function select() { + throw new Error('Method "Prototype.Selector.select" must be defined.'); + } + + function match() { + throw new Error('Method "Prototype.Selector.match" must be defined.'); + } + + function find(elements, expression, index) { + index = index || 0; + var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i; + + for (i = 0; i < length; i++) { + if (match(elements[i], expression) && index == matchIndex++) { + return Element.extend(elements[i]); + } + } + } + + function extendElements(elements) { + for (var i = 0, length = elements.length; i < length; i++) { + Element.extend(elements[i]); + } + return elements; + } + + + var K = Prototype.K; + + return { + select: select, + match: match, + find: find, + extendElements: (Element.extend === K) ? K : extendElements, + extendElement: Element.extend + }; +})(); +/*! + * Sizzle CSS Selector Engine - v1.0 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true; + +[0, 0].sort(function(){ + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function(selector, context, results, seed) { + results = results || []; + var origContext = context = context || document; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var parts = [], m, set, checkSet, check, mode, extra, prune = true, contextXML = isXML(context), + soFar = selector; + + while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context ); + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) + selector += parts.shift(); + + set = posProcess( selector, set ); + } + } + } else { + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + var ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; + } + + if ( context ) { + var ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray(set); + } else { + prune = false; + } + + while ( parts.length ) { + var cur = parts.pop(), pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + throw "Syntax error, unrecognized expression: " + (cur || selector); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + } else if ( context && context.nodeType === 1 ) { + for ( var i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + } else { + for ( var i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function(results){ + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort(sortOrder); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[i-1] ) { + results.splice(i--, 1); + } + } + } + } + + return results; +}; + +Sizzle.matches = function(expr, set){ + return Sizzle(expr, null, null, set); +}; + +Sizzle.find = function(expr, context, isXML){ + var set, match; + + if ( !expr ) { + return []; + } + + for ( var i = 0, l = Expr.order.length; i < l; i++ ) { + var type = Expr.order[i], match; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + var left = match[1]; + match.splice(1,1); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace(/\\/g, ""); + set = Expr.find[ type ]( match, context, isXML ); + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = context.getElementsByTagName("*"); + } + + return {set: set, expr: expr}; +}; + +Sizzle.filter = function(expr, set, inplace, not){ + var old = expr, result = [], curLoop = set, match, anyFound, + isXMLFilter = set && set[0] && isXML(set[0]); + + while ( expr && set.length ) { + for ( var type in Expr.filter ) { + if ( (match = Expr.match[ type ].exec( expr )) != null ) { + var filter = Expr.filter[ type ], found, item; + anyFound = false; + + if ( curLoop == result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( var i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + var pass = not ^ !!found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + } else { + curLoop[i] = false; + } + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + if ( expr == old ) { + if ( anyFound == null ) { + throw "Syntax error, unrecognized expression: " + expr; + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + match: { + ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/ + }, + leftMatch: {}, + attrMap: { + "class": "className", + "for": "htmlFor" + }, + attrHandle: { + href: function(elem){ + return elem.getAttribute("href"); + } + }, + relative: { + "+": function(checkSet, part, isXML){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !/\W/.test(part), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag && !isXML ) { + part = part.toUpperCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + ">": function(checkSet, part, isXML){ + var isPartStr = typeof part === "string"; + + if ( isPartStr && !/\W/.test(part) ) { + part = isXML ? part : part.toUpperCase(); + + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName === part ? parent : false; + } + } + } else { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + "": function(checkSet, part, isXML){ + var doneName = done++, checkFn = dirCheck; + + if ( !/\W/.test(part) ) { + var nodeCheck = part = isXML ? part : part.toUpperCase(); + checkFn = dirNodeCheck; + } + + checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); + }, + "~": function(checkSet, part, isXML){ + var doneName = done++, checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test(part) ) { + var nodeCheck = part = isXML ? part : part.toUpperCase(); + checkFn = dirNodeCheck; + } + + checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); + } + }, + find: { + ID: function(match, context, isXML){ + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + return m ? [m] : []; + } + }, + NAME: function(match, context, isXML){ + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], results = context.getElementsByName(match[1]); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + TAG: function(match, context){ + return context.getElementsByTagName(match[1]); + } + }, + preFilter: { + CLASS: function(match, curLoop, inplace, result, not, isXML){ + match = " " + match[1].replace(/\\/g, "") + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) { + if ( !inplace ) + result.push( elem ); + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + ID: function(match){ + return match[1].replace(/\\/g, ""); + }, + TAG: function(match, curLoop){ + for ( var i = 0; curLoop[i] === false; i++ ){} + return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase(); + }, + CHILD: function(match){ + if ( match[1] == "nth" ) { + var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( + match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + + match[0] = done++; + + return match; + }, + ATTR: function(match, curLoop, inplace, result, not, isXML){ + var name = match[1].replace(/\\/g, ""); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + PSEUDO: function(match, curLoop, inplace, result, not){ + if ( match[1] === "not" ) { + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + if ( !inplace ) { + result.push.apply( result, ret ); + } + return false; + } + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + POS: function(match){ + match.unshift( true ); + return match; + } + }, + filters: { + enabled: function(elem){ + return elem.disabled === false && elem.type !== "hidden"; + }, + disabled: function(elem){ + return elem.disabled === true; + }, + checked: function(elem){ + return elem.checked === true; + }, + selected: function(elem){ + elem.parentNode.selectedIndex; + return elem.selected === true; + }, + parent: function(elem){ + return !!elem.firstChild; + }, + empty: function(elem){ + return !elem.firstChild; + }, + has: function(elem, i, match){ + return !!Sizzle( match[3], elem ).length; + }, + header: function(elem){ + return /h\d/i.test( elem.nodeName ); + }, + text: function(elem){ + return "text" === elem.type; + }, + radio: function(elem){ + return "radio" === elem.type; + }, + checkbox: function(elem){ + return "checkbox" === elem.type; + }, + file: function(elem){ + return "file" === elem.type; + }, + password: function(elem){ + return "password" === elem.type; + }, + submit: function(elem){ + return "submit" === elem.type; + }, + image: function(elem){ + return "image" === elem.type; + }, + reset: function(elem){ + return "reset" === elem.type; + }, + button: function(elem){ + return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON"; + }, + input: function(elem){ + return /input|select|textarea|button/i.test(elem.nodeName); + } + }, + setFilters: { + first: function(elem, i){ + return i === 0; + }, + last: function(elem, i, match, array){ + return i === array.length - 1; + }, + even: function(elem, i){ + return i % 2 === 0; + }, + odd: function(elem, i){ + return i % 2 === 1; + }, + lt: function(elem, i, match){ + return i < match[3] - 0; + }, + gt: function(elem, i, match){ + return i > match[3] - 0; + }, + nth: function(elem, i, match){ + return match[3] - 0 == i; + }, + eq: function(elem, i, match){ + return match[3] - 0 == i; + } + }, + filter: { + PSEUDO: function(elem, match, i, array){ + var name = match[1], filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0; + } else if ( name === "not" ) { + var not = match[3]; + + for ( var i = 0, l = not.length; i < l; i++ ) { + if ( not[i] === elem ) { + return false; + } + } + + return true; + } + }, + CHILD: function(elem, match){ + var type = match[1], node = elem; + switch (type) { + case 'only': + case 'first': + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) return false; + } + if ( type == 'first') return true; + node = elem; + case 'last': + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) return false; + } + return true; + case 'nth': + var first = match[2], last = match[3]; + + if ( first == 1 && last == 0 ) { + return true; + } + + var doneName = match[0], + parent = elem.parentNode; + + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { + var count = 0; + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + parent.sizcache = doneName; + } + + var diff = elem.nodeIndex - last; + if ( first == 0 ) { + return diff == 0; + } else { + return ( diff % first == 0 && diff / first >= 0 ); + } + } + }, + ID: function(elem, match){ + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + TAG: function(elem, match){ + return (match === "*" && elem.nodeType === 1) || elem.nodeName === match; + }, + CLASS: function(elem, match){ + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + ATTR: function(elem, match){ + var name = match[1], + result = Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value != check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + POS: function(elem, match, i, array){ + var name = match[2], filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source ); +} + +var makeArray = function(array, results) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 ); + +} catch(e){ + makeArray = function(array, results) { + var ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + } else { + if ( typeof array.length === "number" ) { + for ( var i = 0, l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + } else { + for ( var i = 0; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + if ( a == b ) { + hasDuplicate = true; + } + return 0; + } + + var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} else if ( "sourceIndex" in document.documentElement ) { + sortOrder = function( a, b ) { + if ( !a.sourceIndex || !b.sourceIndex ) { + if ( a == b ) { + hasDuplicate = true; + } + return 0; + } + + var ret = a.sourceIndex - b.sourceIndex; + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} else if ( document.createRange ) { + sortOrder = function( a, b ) { + if ( !a.ownerDocument || !b.ownerDocument ) { + if ( a == b ) { + hasDuplicate = true; + } + return 0; + } + + var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); + aRange.setStart(a, 0); + aRange.setEnd(a, 0); + bRange.setStart(b, 0); + bRange.setEnd(b, 0); + var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} + +(function(){ + var form = document.createElement("div"), + id = "script" + (new Date).getTime(); + form.innerHTML = ""; + + var root = document.documentElement; + root.insertBefore( form, root.firstChild ); + + if ( !!document.getElementById( id ) ) { + Expr.find.ID = function(match, context, isXML){ + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; + } + }; + + Expr.filter.ID = function(elem, match){ + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + root = form = null; // release memory in IE +})(); + +(function(){ + + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function(match, context){ + var results = context.getElementsByTagName(match[1]); + + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + div.innerHTML = ""; + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + Expr.attrHandle.href = function(elem){ + return elem.getAttribute("href", 2); + }; + } + + div = null; // release memory in IE +})(); + +if ( document.querySelectorAll ) (function(){ + var oldSizzle = Sizzle, div = document.createElement("div"); + div.innerHTML = "

"; + + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function(query, context, extra, seed){ + context = context || document; + + if ( !seed && context.nodeType === 9 && !isXML(context) ) { + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(e){} + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + div = null; // release memory in IE +})(); + +if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){ + var div = document.createElement("div"); + div.innerHTML = "
"; + + if ( div.getElementsByClassName("e").length === 0 ) + return; + + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) + return; + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function(match, context, isXML) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + div = null; // release memory in IE +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + var sibDir = dir == "previousSibling" && !isXML; + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + if ( sibDir && elem.nodeType === 1 ){ + elem.sizcache = doneName; + elem.sizset = i; + } + elem = elem[dir]; + var match = false; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( elem.nodeName === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + var sibDir = dir == "previousSibling" && !isXML; + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + if ( sibDir && elem.nodeType === 1 ) { + elem.sizcache = doneName; + elem.sizset = i; + } + elem = elem[dir]; + var match = false; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem.sizcache = doneName; + elem.sizset = i; + } + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +var contains = document.compareDocumentPosition ? function(a, b){ + return a.compareDocumentPosition(b) & 16; +} : function(a, b){ + return a !== b && (a.contains ? a.contains(b) : true); +}; + +var isXML = function(elem){ + return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || + !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML"; +}; + +var posProcess = function(selector, context){ + var tmpSet = [], later = "", match, + root = context.nodeType ? [context] : context; + + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet ); + } + + return Sizzle.filter( later, tmpSet ); +}; + + +window.Sizzle = Sizzle; + +})(); + +Prototype._original_property = window.Sizzle; + +;(function(engine) { + var extendElements = Prototype.Selector.extendElements; + + function select(selector, scope) { + return extendElements(engine(selector, scope || document)); + } + + function match(element, selector) { + return engine.matches(selector, [element]).length == 1; + } + + Prototype.Selector.engine = engine; + Prototype.Selector.select = select; + Prototype.Selector.match = match; +})(Sizzle); + +window.Sizzle = Prototype._original_property; +delete Prototype._original_property; + +var Form = { + reset: function(form) { + form = $(form); + form.reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (Object.isUndefined(options.hash)) options.hash = true; + var key, value, submitted = false, submit = options.submit, accumulator, initial; + + if (options.hash) { + initial = {}; + accumulator = function(result, key, value) { + if (key in result) { + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key].push(value); + } else result[key] = value; + return result; + }; + } else { + initial = ''; + accumulator = function(result, key, value) { + return result + (result ? '&' : '') + encodeURIComponent(key) + '=' + encodeURIComponent(value); + } + } + + return elements.inject(initial, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + result = accumulator(result, key, value); + } + } + return result; + }); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + getElements: function(form) { + var elements = $(form).getElementsByTagName('*'), + element, + arr = [ ], + serializers = Form.Element.Serializers; + for (var i = 0; element = elements[i]; i++) { + arr.push(element); + } + return arr.inject([], function(elements, child) { + if (serializers[child.tagName.toLowerCase()]) + elements.push(Element.extend(child)); + return elements; + }) + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return /^(?:input|select|textarea)$/i.test(element.tagName); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + var element = form.findFirstElement(); + if (element) element.activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !(/^(?:button|reset|submit)$/i.test(element.type)))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; + +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = (function() { + function input(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return inputSelector(element, value); + default: + return valueSelector(element, value); + } + } + + function inputSelector(element, value) { + if (Object.isUndefined(value)) + return element.checked ? element.value : null; + else element.checked = !!value; + } + + function valueSelector(element, value) { + if (Object.isUndefined(value)) return element.value; + else element.value = value; + } + + function select(element, value) { + if (Object.isUndefined(value)) + return (element.type === 'select-one' ? selectOne : selectMany)(element); + + var opt, currentValue, single = !Object.isArray(value); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + currentValue = this.optionValue(opt); + if (single) { + if (currentValue == value) { + opt.selected = true; + return; + } + } + else opt.selected = value.include(currentValue); + } + } + + function selectOne(element) { + var index = element.selectedIndex; + return index >= 0 ? optionValue(element.options[index]) : null; + } + + function selectMany(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(optionValue(opt)); + } + return values; + } + + function optionValue(opt) { + return Element.hasAttribute(opt, 'value') ? opt.value : opt.text; + } + + return { + input: input, + inputSelector: inputSelector, + textarea: valueSelector, + select: select, + selectOne: selectOne, + selectMany: selectMany, + optionValue: optionValue, + button: valueSelector + }; +})(); + +/*--------------------------------------------------------------------------*/ + + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +(function() { + + var Event = { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45, + + cache: {} + }; + + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + + + + var isIELegacyEvent = function(event) { return false; }; + + if (window.attachEvent) { + if (window.addEventListener) { + isIELegacyEvent = function(event) { + return !(event instanceof window.Event); + }; + } else { + isIELegacyEvent = function(event) { return true; }; + } + } + + var _isButton; + + function _isButtonForDOMEvents(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + } + + var legacyButtonMap = { 0: 1, 1: 4, 2: 2 }; + function _isButtonForLegacyEvents(event, code) { + return event.button === legacyButtonMap[code]; + } + + function _isButtonForWebKit(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 2 || (event.which == 1 && event.metaKey); + case 2: return event.which == 3; + default: return false; + } + } + + if (window.attachEvent) { + if (!window.addEventListener) { + _isButton = _isButtonForLegacyEvents; + } else { + _isButton = function(event, code) { + return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) : + _isButtonForDOMEvents(event, code); + } + } + } else if (Prototype.Browser.WebKit) { + _isButton = _isButtonForWebKit; + } else { + _isButton = _isButtonForDOMEvents; + } + + function isLeftClick(event) { return _isButton(event, 0) } + + function isMiddleClick(event) { return _isButton(event, 1) } + + function isRightClick(event) { return _isButton(event, 2) } + + function element(event) { + event = Event.extend(event); + + var node = event.target, type = event.type, + currentTarget = event.currentTarget; + + if (currentTarget && currentTarget.tagName) { + if (type === 'load' || type === 'error' || + (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' + && currentTarget.type === 'radio')) + node = currentTarget; + } + + if (node.nodeType == Node.TEXT_NODE) + node = node.parentNode; + + return Element.extend(node); + } + + function findElement(event, expression) { + var element = Event.element(event); + + if (!expression) return element; + while (element) { + if (Object.isElement(element) && Prototype.Selector.match(element, expression)) { + return Element.extend(element); + } + element = element.parentNode; + } + } + + function pointer(event) { + return { x: pointerX(event), y: pointerY(event) }; + } + + function pointerX(event) { + var docElement = document.documentElement, + body = document.body || { scrollLeft: 0 }; + + return event.pageX || (event.clientX + + (docElement.scrollLeft || body.scrollLeft) - + (docElement.clientLeft || 0)); + } + + function pointerY(event) { + var docElement = document.documentElement, + body = document.body || { scrollTop: 0 }; + + return event.pageY || (event.clientY + + (docElement.scrollTop || body.scrollTop) - + (docElement.clientTop || 0)); + } + + + function stop(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + + event.stopped = true; + } + + + Event.Methods = { + isLeftClick: isLeftClick, + isMiddleClick: isMiddleClick, + isRightClick: isRightClick, + + element: element, + findElement: findElement, + + pointer: pointer, + pointerX: pointerX, + pointerY: pointerY, + + stop: stop + }; + + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (window.attachEvent) { + function _relatedTarget(event) { + var element; + switch (event.type) { + case 'mouseover': + case 'mouseenter': + element = event.fromElement; + break; + case 'mouseout': + case 'mouseleave': + element = event.toElement; + break; + default: + return null; + } + return Element.extend(element); + } + + var additionalMethods = { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return '[object Event]' } + }; + + Event.extend = function(event, element) { + if (!event) return false; + + if (!isIELegacyEvent(event)) return event; + + if (event._extendedByPrototype) return event; + event._extendedByPrototype = Prototype.emptyFunction; + + var pointer = Event.pointer(event); + + Object.extend(event, { + target: event.srcElement || element, + relatedTarget: _relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + + Object.extend(event, methods); + Object.extend(event, additionalMethods); + + return event; + }; + } else { + Event.extend = Prototype.K; + } + + if (window.addEventListener) { + Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; + Object.extend(Event.prototype, methods); + } + + function _createResponder(element, eventName, handler) { + var registry = Element.retrieve(element, 'prototype_event_registry'); + + if (Object.isUndefined(registry)) { + CACHE.push(element); + registry = Element.retrieve(element, 'prototype_event_registry', $H()); + } + + var respondersForEvent = registry.get(eventName); + if (Object.isUndefined(respondersForEvent)) { + respondersForEvent = []; + registry.set(eventName, respondersForEvent); + } + + if (respondersForEvent.pluck('handler').include(handler)) return false; + + var responder; + if (eventName.include(":")) { + responder = function(event) { + if (Object.isUndefined(event.eventName)) + return false; + + if (event.eventName !== eventName) + return false; + + Event.extend(event, element); + handler.call(element, event); + }; + } else { + if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && + (eventName === "mouseenter" || eventName === "mouseleave")) { + if (eventName === "mouseenter" || eventName === "mouseleave") { + responder = function(event) { + Event.extend(event, element); + + var parent = event.relatedTarget; + while (parent && parent !== element) { + try { parent = parent.parentNode; } + catch(e) { parent = element; } + } + + if (parent === element) return; + + handler.call(element, event); + }; + } + } else { + responder = function(event) { + Event.extend(event, element); + handler.call(element, event); + }; + } + } + + responder.handler = handler; + respondersForEvent.push(responder); + return responder; + } + + function _destroyCache() { + for (var i = 0, length = CACHE.length; i < length; i++) { + Event.stopObserving(CACHE[i]); + CACHE[i] = null; + } + } + + var CACHE = []; + + if (Prototype.Browser.IE) + window.attachEvent('onunload', _destroyCache); + + if (Prototype.Browser.WebKit) + window.addEventListener('unload', Prototype.emptyFunction, false); + + + var _getDOMEventName = Prototype.K, + translations = { mouseenter: "mouseover", mouseleave: "mouseout" }; + + if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) { + _getDOMEventName = function(eventName) { + return (translations[eventName] || eventName); + }; + } + + function observe(element, eventName, handler) { + element = $(element); + + var responder = _createResponder(element, eventName, handler); + + if (!responder) return element; + + if (eventName.include(':')) { + if (element.addEventListener) + element.addEventListener("dataavailable", responder, false); + else { + element.attachEvent("ondataavailable", responder); + element.attachEvent("onlosecapture", responder); + } + } else { + var actualEventName = _getDOMEventName(eventName); + + if (element.addEventListener) + element.addEventListener(actualEventName, responder, false); + else + element.attachEvent("on" + actualEventName, responder); + } + + return element; + } + + function stopObserving(element, eventName, handler) { + element = $(element); + + var registry = Element.retrieve(element, 'prototype_event_registry'); + if (!registry) return element; + + if (!eventName) { + registry.each( function(pair) { + var eventName = pair.key; + stopObserving(element, eventName); + }); + return element; + } + + var responders = registry.get(eventName); + if (!responders) return element; + + if (!handler) { + responders.each(function(r) { + stopObserving(element, eventName, r.handler); + }); + return element; + } + + var i = responders.length, responder; + while (i--) { + if (responders[i].handler === handler) { + responder = responders[i]; + break; + } + } + if (!responder) return element; + + if (eventName.include(':')) { + if (element.removeEventListener) + element.removeEventListener("dataavailable", responder, false); + else { + element.detachEvent("ondataavailable", responder); + element.detachEvent("onlosecapture", responder); + } + } else { + var actualEventName = _getDOMEventName(eventName); + if (element.removeEventListener) + element.removeEventListener(actualEventName, responder, false); + else + element.detachEvent('on' + actualEventName, responder); + } + + registry.set(eventName, responders.without(responder)); + + return element; + } + + function fire(element, eventName, memo, bubble) { + element = $(element); + + if (Object.isUndefined(bubble)) + bubble = true; + + if (element == document && document.createEvent && !element.dispatchEvent) + element = document.documentElement; + + var event; + if (document.createEvent) { + event = document.createEvent('HTMLEvents'); + event.initEvent('dataavailable', bubble, true); + } else { + event = document.createEventObject(); + event.eventType = bubble ? 'ondataavailable' : 'onlosecapture'; + } + + event.eventName = eventName; + event.memo = memo || { }; + + if (document.createEvent) + element.dispatchEvent(event); + else + element.fireEvent(event.eventType, event); + + return Event.extend(event); + } + + Event.Handler = Class.create({ + initialize: function(element, eventName, selector, callback) { + this.element = $(element); + this.eventName = eventName; + this.selector = selector; + this.callback = callback; + this.handler = this.handleEvent.bind(this); + }, + + start: function() { + Event.observe(this.element, this.eventName, this.handler); + return this; + }, + + stop: function() { + Event.stopObserving(this.element, this.eventName, this.handler); + return this; + }, + + handleEvent: function(event) { + var element = Event.findElement(event, this.selector); + if (element) this.callback.call(this.element, event, element); + } + }); + + function on(element, eventName, selector, callback) { + element = $(element); + if (Object.isFunction(selector) && Object.isUndefined(callback)) { + callback = selector, selector = null; + } + + return new Event.Handler(element, eventName, selector, callback).start(); + } + + Object.extend(Event, Event.Methods); + + Object.extend(Event, { + fire: fire, + observe: observe, + stopObserving: stopObserving, + on: on + }); + + Element.addMethods({ + fire: fire, + + observe: observe, + + stopObserving: stopObserving, + + on: on + }); + + Object.extend(document, { + fire: fire.methodize(), + + observe: observe.methodize(), + + stopObserving: stopObserving.methodize(), + + on: on.methodize(), + + loaded: false + }); + + if (window.Event) Object.extend(window.Event, Event); + else window.Event = Event; +})(); + +(function() { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ + + var timer; + + function fireContentLoadedEvent() { + if (document.loaded) return; + if (timer) window.clearTimeout(timer); + document.loaded = true; + document.fire('dom:loaded'); + } + + function checkReadyState() { + if (document.readyState === 'complete') { + document.stopObserving('readystatechange', checkReadyState); + fireContentLoadedEvent(); + } + } + + function pollDoScroll() { + try { document.documentElement.doScroll('left'); } + catch(e) { + timer = pollDoScroll.defer(); + return; + } + fireContentLoadedEvent(); + } + + if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); + } else { + document.observe('readystatechange', checkReadyState); + if (window == top) + timer = pollDoScroll.defer(); + } + + Event.observe(window, 'load', fireContentLoadedEvent); +})(); + + +Element.addMethods(); +/*------------------------------- DEPRECATED -------------------------------*/ + +Hash.toQueryString = Object.toQueryString; + +var Toggle = { display: Element.toggle }; + +Element.Methods.childOf = Element.Methods.descendantOf; + +var Insertion = { + Before: function(element, content) { + return Element.insert(element, {before:content}); + }, + + Top: function(element, content) { + return Element.insert(element, {top:content}); + }, + + Bottom: function(element, content) { + return Element.insert(element, {bottom:content}); + }, + + After: function(element, content) { + return Element.insert(element, {after:content}); + } +}; + +var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); + +var Position = { + includeScrollOffsets: false, + + prepare: function() { + this.deltaX = window.pageXOffset + || document.documentElement.scrollLeft + || document.body.scrollLeft + || 0; + this.deltaY = window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop + || 0; + }, + + within: function(element, x, y) { + if (this.includeScrollOffsets) + return this.withinIncludingScrolloffsets(element, x, y); + this.xcomp = x; + this.ycomp = y; + this.offset = Element.cumulativeOffset(element); + + return (y >= this.offset[1] && + y < this.offset[1] + element.offsetHeight && + x >= this.offset[0] && + x < this.offset[0] + element.offsetWidth); + }, + + withinIncludingScrolloffsets: function(element, x, y) { + var offsetcache = Element.cumulativeScrollOffset(element); + + this.xcomp = x + offsetcache[0] - this.deltaX; + this.ycomp = y + offsetcache[1] - this.deltaY; + this.offset = Element.cumulativeOffset(element); + + return (this.ycomp >= this.offset[1] && + this.ycomp < this.offset[1] + element.offsetHeight && + this.xcomp >= this.offset[0] && + this.xcomp < this.offset[0] + element.offsetWidth); + }, + + overlap: function(mode, element) { + if (!mode) return 0; + if (mode == 'vertical') + return ((this.offset[1] + element.offsetHeight) - this.ycomp) / + element.offsetHeight; + if (mode == 'horizontal') + return ((this.offset[0] + element.offsetWidth) - this.xcomp) / + element.offsetWidth; + }, + + + cumulativeOffset: Element.Methods.cumulativeOffset, + + positionedOffset: Element.Methods.positionedOffset, + + absolutize: function(element) { + Position.prepare(); + return Element.absolutize(element); + }, + + relativize: function(element) { + Position.prepare(); + return Element.relativize(element); + }, + + realOffset: Element.Methods.cumulativeScrollOffset, + + offsetParent: Element.Methods.getOffsetParent, + + page: Element.Methods.viewportOffset, + + clone: function(source, target, options) { + options = options || { }; + return Element.clonePosition(target, source, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ + function iter(name) { + return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; + } + + instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? + function(element, className) { + className = className.toString().strip(); + var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); + return cond ? document._getElementsByXPath('.//*' + cond, element) : []; + } : function(element, className) { + className = className.toString().strip(); + var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); + if (!classNames && !className) return elements; + + var nodes = $(element).getElementsByTagName('*'); + className = ' ' + className + ' '; + + for (var i = 0, child, cn; child = nodes[i]; i++) { + if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || + (classNames && classNames.all(function(name) { + return !name.toString().blank() && cn.include(' ' + name + ' '); + })))) + elements.push(Element.extend(child)); + } + return elements; + }; + + return function(className, parentElement) { + return $(parentElement || document.body).getElementsByClassName(className); + }; +}(Element.Methods); + +/*--------------------------------------------------------------------------*/ + +Element.ClassNames = Class.create(); +Element.ClassNames.prototype = { + initialize: function(element) { + this.element = $(element); + }, + + _each: function(iterator) { + this.element.className.split(/\s+/).select(function(name) { + return name.length > 0; + })._each(iterator); + }, + + set: function(className) { + this.element.className = className; + }, + + add: function(classNameToAdd) { + if (this.include(classNameToAdd)) return; + this.set($A(this).concat(classNameToAdd).join(' ')); + }, + + remove: function(classNameToRemove) { + if (!this.include(classNameToRemove)) return; + this.set($A(this).without(classNameToRemove).join(' ')); + }, + + toString: function() { + return $A(this).join(' '); + } +}; + +Object.extend(Element.ClassNames.prototype, Enumerable); + +/*--------------------------------------------------------------------------*/ + +(function() { + window.Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + }, + + findElements: function(rootElement) { + return Prototype.Selector.select(this.expression, rootElement); + }, + + match: function(element) { + return Prototype.Selector.match(element, this.expression); + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } + }); + + Object.extend(Selector, { + matchElements: function(elements, expression) { + var match = Prototype.Selector.match, + results = []; + + for (var i = 0, length = elements.length; i < length; i++) { + var element = elements[i]; + if (match(element, expression)) { + results.push(Element.extend(element)); + } + } + return results; + }, + + findElement: function(elements, expression, index) { + index = index || 0; + var matchIndex = 0, element; + for (var i = 0, length = elements.length; i < length; i++) { + element = elements[i]; + if (Prototype.Selector.match(element, expression) && index === matchIndex++) { + return Element.extend(element); + } + } + }, + + findChildElements: function(element, expressions) { + var selector = expressions.toArray().join(', '); + return Prototype.Selector.select(selector, element || document); + } + }); +})(); diff --git a/html/inc/showtty.js b/html/inc/showtty.js index 0b2789e27..096af2ccc 100644 --- a/html/inc/showtty.js +++ b/html/inc/showtty.js @@ -292,11 +292,9 @@ showTTYURL = function (elem, url) { }; showText("Loading " + url); - - var req = new XMLHttpRequest(); - req.open("GET", url, true); - req.onreadystatechange = function () { - if ( req.readyState == 4 && ( req.status = 200 || req.status == 0 ) ) { + + new Ajax.Request(url, { method: 'get', + onSuccess: function(req) { var data = eval("(" + req.responseText + ")"); if ( typeof data == "undefined" ) { showText("Error: didn't get tty data from " + url); @@ -304,12 +302,7 @@ showTTYURL = function (elem, url) { return; } showTTY(elem, data); - } else if ( req.readyState == 4 && req.status != 200 ) { - showText("Error: couldn't retrieve " + url + ", got status code " + this.status); - req = null; - } - }; - req.send(null); + }}); }; }()); diff --git a/html/inc/tty.css b/html/inc/tty.css index c65e717ee..518414b88 100644 --- a/html/inc/tty.css +++ b/html/inc/tty.css @@ -1,5 +1,6 @@ div#tty { background: #000; - width: 80%; + margin: 1em 0.2em 1em 0.2em; + padding: 0.5em 0.2em 0.5em 0.2em; } diff --git a/html/templates/ttyplay.erb b/html/templates/ttyplay.erb index 53e176100..5848e6aa2 100644 --- a/html/templates/ttyplay.erb +++ b/html/templates/ttyplay.erb @@ -4,11 +4,13 @@ <% css_files.each do |t| %> <% end %> +<% js_files.each do |t| %> + +<% end %>
Enable JavaScript to see the animation.
- From feae2dfa530f635a558ed7cfb8f99d5370e3775c Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Thu, 19 May 2011 18:36:36 +0800 Subject: [PATCH 10/84] build script for scast changed. --- html/templates/scast.erb | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/html/templates/scast.erb b/html/templates/scast.erb index 5f407ee4e..6c4c235c2 100644 --- a/html/templates/scast.erb +++ b/html/templates/scast.erb @@ -49,16 +49,18 @@ parts = { '1' => '第1篇:初识Git', } %> -<% parts.keys.sort.each do |key| %> - <% if ttyrec_list.member?(key) %> -

<%= parts[key] %>

- - <% end %> -<% end %> +<% ttyrec_list.keys.sort.each do |key| %> +<% if parts.member?(key) %> +

<%= parts[key] %>

+<% else %> +

<%= key %>

+<% end %> + +<% end %>
From 9760022e281fcecd7d75fd494a1b55f4842c8a92 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Thu, 19 May 2011 21:17:25 +0800 Subject: [PATCH 11/84] Fixed IE6 charelem inline style error. Pre element can not set to inline but inline-table in IE, change to span element resolve this problem. Also use prototype for element create and add class to element. --- html/inc/showtty.js | 18 ++++-------------- html/inc/tty.css | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/html/inc/showtty.js b/html/inc/showtty.js index 096af2ccc..dd7076333 100644 --- a/html/inc/showtty.js +++ b/html/inc/showtty.js @@ -14,23 +14,13 @@ var makeTable = function (width, height) { var table = document.createElement("div"); var arr = []; for (var j = 1; j <= height; j++) { - var row = document.createElement("div"); + var row = Element('div'); var arrrow = []; - row.style.fontFamily = '"ProFont", "Luxi Mono", "Monaco", "Courier", "Courier new", monospace'; - row.style.margin = '0'; - row.style.padding = '0'; - row.style.wordSpacing = '0'; - row.style.height = '1.2em'; + row.addClassName('row'); for (var i = 1; i <= width; i++) { - var charelem = document.createElement("pre"); - charelem.style.backgroundColor = '#000'; - charelem.style.color = '#FFF'; + var charelem = Element('span'); + charelem.addClassName('charelem'); charelem.style.display = 'inline'; - charelem.style.fontWeight = 'normal'; - charelem.style.textDecoration = 'none'; - charelem.style.letterSpacing = '0'; - charelem.style.margin = '0'; - charelem.style.padding = '0 0 0.2em 0'; charelem.appendChild(document.createTextNode(" ")); row.appendChild(charelem); arrrow.push(charelem); diff --git a/html/inc/tty.css b/html/inc/tty.css index 518414b88..e99b2613a 100644 --- a/html/inc/tty.css +++ b/html/inc/tty.css @@ -4,3 +4,26 @@ div#tty margin: 1em 0.2em 1em 0.2em; padding: 0.5em 0.2em 0.5em 0.2em; } + +div.row +{ + font-family: "Lucida Console", "DejaVu Sans Mono", "Nimbus Mono L", "Bitstream Vera Sans Mono", "ProFont", "Luxi Mono", "Monaco", "Courier", "Courier new", monospace; + margin: 0; + padding: 0; + word-spacing: 0; + height: 1.2em; +} + +span.charelem +{ + background: #000; + color: #FFF; + margin: 0; + padding: 0 0 0.2em 0; + font-weight: normal; + font-size: 1em; + text-decoration: none; + letter-spacing: 0; + display: inline; + overflow:auto;white-space:pre;/* <- css3 */ +} From 69b45974ea12229a9e06ce8f527444e0d6c3ed9a Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Fri, 20 May 2011 11:13:35 +0800 Subject: [PATCH 12/84] Patches against jsttyplay, prepared for encryptio. --- ...ss-platform-issue-using-prototype.js.patch | 6163 +++++++++++++++++ ...ixed-Windows-IE6-compatibility-issue.patch | 27 + .../0003-Add-css-stylesheet-support.patch | 94 + ...04-Warn-for-unknow-character-not-die.patch | 26 + 4 files changed, 6310 insertions(+) create mode 100644 jsttyplay/patches/0001-Resolve-cross-platform-issue-using-prototype.js.patch create mode 100644 jsttyplay/patches/0002-Fixed-Windows-IE6-compatibility-issue.patch create mode 100644 jsttyplay/patches/0003-Add-css-stylesheet-support.patch create mode 100644 jsttyplay/patches/0004-Warn-for-unknow-character-not-die.patch diff --git a/jsttyplay/patches/0001-Resolve-cross-platform-issue-using-prototype.js.patch b/jsttyplay/patches/0001-Resolve-cross-platform-issue-using-prototype.js.patch new file mode 100644 index 000000000..48b21702a --- /dev/null +++ b/jsttyplay/patches/0001-Resolve-cross-platform-issue-using-prototype.js.patch @@ -0,0 +1,6163 @@ +From e9712b505540e35aa15f1cba0643203e91add809 Mon Sep 17 00:00:00 2001 +From: Jiang Xin +Date: Fri, 20 May 2011 10:59:33 +0800 +Subject: [PATCH 1/4] Resolve cross-platform issue using prototype.js. + +--- + html/prototype.js | 6081 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + html/showtty.js | 15 +- + html/test.html | 3 +- + html/ttydata.js | 1 + + 4 files changed, 6088 insertions(+), 12 deletions(-) + create mode 100644 html/prototype.js + create mode 100644 html/ttydata.js + +diff --git a/html/prototype.js b/html/prototype.js +new file mode 100644 +index 0000000..04a4779 +--- /dev/null ++++ b/html/prototype.js +@@ -0,0 +1,6081 @@ ++/* Prototype JavaScript framework, version 1.7 ++ * (c) 2005-2010 Sam Stephenson ++ * ++ * Prototype is freely distributable under the terms of an MIT-style license. ++ * For details, see the Prototype web site: http://www.prototypejs.org/ ++ * ++ *--------------------------------------------------------------------------*/ ++ ++var Prototype = { ++ ++ Version: '1.7', ++ ++ Browser: (function(){ ++ var ua = navigator.userAgent; ++ var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; ++ return { ++ IE: !!window.attachEvent && !isOpera, ++ Opera: isOpera, ++ WebKit: ua.indexOf('AppleWebKit/') > -1, ++ Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, ++ MobileSafari: /Apple.*Mobile/.test(ua) ++ } ++ })(), ++ ++ BrowserFeatures: { ++ XPath: !!document.evaluate, ++ ++ SelectorsAPI: !!document.querySelector, ++ ++ ElementExtensions: (function() { ++ var constructor = window.Element || window.HTMLElement; ++ return !!(constructor && constructor.prototype); ++ })(), ++ SpecificElementExtensions: (function() { ++ if (typeof window.HTMLDivElement !== 'undefined') ++ return true; ++ ++ var div = document.createElement('div'), ++ form = document.createElement('form'), ++ isSupported = false; ++ ++ if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { ++ isSupported = true; ++ } ++ ++ div = form = null; ++ ++ return isSupported; ++ })() ++ }, ++ ++ ScriptFragment: ']*>([\\S\\s]*?)<\/script>', ++ JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, ++ ++ emptyFunction: function() { }, ++ ++ K: function(x) { return x } ++}; ++ ++if (Prototype.Browser.MobileSafari) ++ Prototype.BrowserFeatures.SpecificElementExtensions = false; ++/* Based on Alex Arnell's inheritance implementation. */ ++ ++var Class = (function() { ++ ++ var IS_DONTENUM_BUGGY = (function(){ ++ for (var p in { toString: 1 }) { ++ if (p === 'toString') return false; ++ } ++ return true; ++ })(); ++ ++ function subclass() {}; ++ function create() { ++ var parent = null, properties = $A(arguments); ++ if (Object.isFunction(properties[0])) ++ parent = properties.shift(); ++ ++ function klass() { ++ this.initialize.apply(this, arguments); ++ } ++ ++ Object.extend(klass, Class.Methods); ++ klass.superclass = parent; ++ klass.subclasses = []; ++ ++ if (parent) { ++ subclass.prototype = parent.prototype; ++ klass.prototype = new subclass; ++ parent.subclasses.push(klass); ++ } ++ ++ for (var i = 0, length = properties.length; i < length; i++) ++ klass.addMethods(properties[i]); ++ ++ if (!klass.prototype.initialize) ++ klass.prototype.initialize = Prototype.emptyFunction; ++ ++ klass.prototype.constructor = klass; ++ return klass; ++ } ++ ++ function addMethods(source) { ++ var ancestor = this.superclass && this.superclass.prototype, ++ properties = Object.keys(source); ++ ++ if (IS_DONTENUM_BUGGY) { ++ if (source.toString != Object.prototype.toString) ++ properties.push("toString"); ++ if (source.valueOf != Object.prototype.valueOf) ++ properties.push("valueOf"); ++ } ++ ++ for (var i = 0, length = properties.length; i < length; i++) { ++ var property = properties[i], value = source[property]; ++ if (ancestor && Object.isFunction(value) && ++ value.argumentNames()[0] == "$super") { ++ var method = value; ++ value = (function(m) { ++ return function() { return ancestor[m].apply(this, arguments); }; ++ })(property).wrap(method); ++ ++ value.valueOf = method.valueOf.bind(method); ++ value.toString = method.toString.bind(method); ++ } ++ this.prototype[property] = value; ++ } ++ ++ return this; ++ } ++ ++ return { ++ create: create, ++ Methods: { ++ addMethods: addMethods ++ } ++ }; ++})(); ++(function() { ++ ++ var _toString = Object.prototype.toString, ++ NULL_TYPE = 'Null', ++ UNDEFINED_TYPE = 'Undefined', ++ BOOLEAN_TYPE = 'Boolean', ++ NUMBER_TYPE = 'Number', ++ STRING_TYPE = 'String', ++ OBJECT_TYPE = 'Object', ++ FUNCTION_CLASS = '[object Function]', ++ BOOLEAN_CLASS = '[object Boolean]', ++ NUMBER_CLASS = '[object Number]', ++ STRING_CLASS = '[object String]', ++ ARRAY_CLASS = '[object Array]', ++ DATE_CLASS = '[object Date]', ++ NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON && ++ typeof JSON.stringify === 'function' && ++ JSON.stringify(0) === '0' && ++ typeof JSON.stringify(Prototype.K) === 'undefined'; ++ ++ function Type(o) { ++ switch(o) { ++ case null: return NULL_TYPE; ++ case (void 0): return UNDEFINED_TYPE; ++ } ++ var type = typeof o; ++ switch(type) { ++ case 'boolean': return BOOLEAN_TYPE; ++ case 'number': return NUMBER_TYPE; ++ case 'string': return STRING_TYPE; ++ } ++ return OBJECT_TYPE; ++ } ++ ++ function extend(destination, source) { ++ for (var property in source) ++ destination[property] = source[property]; ++ return destination; ++ } ++ ++ function inspect(object) { ++ try { ++ if (isUndefined(object)) return 'undefined'; ++ if (object === null) return 'null'; ++ return object.inspect ? object.inspect() : String(object); ++ } catch (e) { ++ if (e instanceof RangeError) return '...'; ++ throw e; ++ } ++ } ++ ++ function toJSON(value) { ++ return Str('', { '': value }, []); ++ } ++ ++ function Str(key, holder, stack) { ++ var value = holder[key], ++ type = typeof value; ++ ++ if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') { ++ value = value.toJSON(key); ++ } ++ ++ var _class = _toString.call(value); ++ ++ switch (_class) { ++ case NUMBER_CLASS: ++ case BOOLEAN_CLASS: ++ case STRING_CLASS: ++ value = value.valueOf(); ++ } ++ ++ switch (value) { ++ case null: return 'null'; ++ case true: return 'true'; ++ case false: return 'false'; ++ } ++ ++ type = typeof value; ++ switch (type) { ++ case 'string': ++ return value.inspect(true); ++ case 'number': ++ return isFinite(value) ? String(value) : 'null'; ++ case 'object': ++ ++ for (var i = 0, length = stack.length; i < length; i++) { ++ if (stack[i] === value) { throw new TypeError(); } ++ } ++ stack.push(value); ++ ++ var partial = []; ++ if (_class === ARRAY_CLASS) { ++ for (var i = 0, length = value.length; i < length; i++) { ++ var str = Str(i, value, stack); ++ partial.push(typeof str === 'undefined' ? 'null' : str); ++ } ++ partial = '[' + partial.join(',') + ']'; ++ } else { ++ var keys = Object.keys(value); ++ for (var i = 0, length = keys.length; i < length; i++) { ++ var key = keys[i], str = Str(key, value, stack); ++ if (typeof str !== "undefined") { ++ partial.push(key.inspect(true)+ ':' + str); ++ } ++ } ++ partial = '{' + partial.join(',') + '}'; ++ } ++ stack.pop(); ++ return partial; ++ } ++ } ++ ++ function stringify(object) { ++ return JSON.stringify(object); ++ } ++ ++ function toQueryString(object) { ++ return $H(object).toQueryString(); ++ } ++ ++ function toHTML(object) { ++ return object && object.toHTML ? object.toHTML() : String.interpret(object); ++ } ++ ++ function keys(object) { ++ if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); } ++ var results = []; ++ for (var property in object) { ++ if (object.hasOwnProperty(property)) { ++ results.push(property); ++ } ++ } ++ return results; ++ } ++ ++ function values(object) { ++ var results = []; ++ for (var property in object) ++ results.push(object[property]); ++ return results; ++ } ++ ++ function clone(object) { ++ return extend({ }, object); ++ } ++ ++ function isElement(object) { ++ return !!(object && object.nodeType == 1); ++ } ++ ++ function isArray(object) { ++ return _toString.call(object) === ARRAY_CLASS; ++ } ++ ++ var hasNativeIsArray = (typeof Array.isArray == 'function') ++ && Array.isArray([]) && !Array.isArray({}); ++ ++ if (hasNativeIsArray) { ++ isArray = Array.isArray; ++ } ++ ++ function isHash(object) { ++ return object instanceof Hash; ++ } ++ ++ function isFunction(object) { ++ return _toString.call(object) === FUNCTION_CLASS; ++ } ++ ++ function isString(object) { ++ return _toString.call(object) === STRING_CLASS; ++ } ++ ++ function isNumber(object) { ++ return _toString.call(object) === NUMBER_CLASS; ++ } ++ ++ function isDate(object) { ++ return _toString.call(object) === DATE_CLASS; ++ } ++ ++ function isUndefined(object) { ++ return typeof object === "undefined"; ++ } ++ ++ extend(Object, { ++ extend: extend, ++ inspect: inspect, ++ toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, ++ toQueryString: toQueryString, ++ toHTML: toHTML, ++ keys: Object.keys || keys, ++ values: values, ++ clone: clone, ++ isElement: isElement, ++ isArray: isArray, ++ isHash: isHash, ++ isFunction: isFunction, ++ isString: isString, ++ isNumber: isNumber, ++ isDate: isDate, ++ isUndefined: isUndefined ++ }); ++})(); ++Object.extend(Function.prototype, (function() { ++ var slice = Array.prototype.slice; ++ ++ function update(array, args) { ++ var arrayLength = array.length, length = args.length; ++ while (length--) array[arrayLength + length] = args[length]; ++ return array; ++ } ++ ++ function merge(array, args) { ++ array = slice.call(array, 0); ++ return update(array, args); ++ } ++ ++ function argumentNames() { ++ var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] ++ .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') ++ .replace(/\s+/g, '').split(','); ++ return names.length == 1 && !names[0] ? [] : names; ++ } ++ ++ function bind(context) { ++ if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; ++ var __method = this, args = slice.call(arguments, 1); ++ return function() { ++ var a = merge(args, arguments); ++ return __method.apply(context, a); ++ } ++ } ++ ++ function bindAsEventListener(context) { ++ var __method = this, args = slice.call(arguments, 1); ++ return function(event) { ++ var a = update([event || window.event], args); ++ return __method.apply(context, a); ++ } ++ } ++ ++ function curry() { ++ if (!arguments.length) return this; ++ var __method = this, args = slice.call(arguments, 0); ++ return function() { ++ var a = merge(args, arguments); ++ return __method.apply(this, a); ++ } ++ } ++ ++ function delay(timeout) { ++ var __method = this, args = slice.call(arguments, 1); ++ timeout = timeout * 1000; ++ return window.setTimeout(function() { ++ return __method.apply(__method, args); ++ }, timeout); ++ } ++ ++ function defer() { ++ var args = update([0.01], arguments); ++ return this.delay.apply(this, args); ++ } ++ ++ function wrap(wrapper) { ++ var __method = this; ++ return function() { ++ var a = update([__method.bind(this)], arguments); ++ return wrapper.apply(this, a); ++ } ++ } ++ ++ function methodize() { ++ if (this._methodized) return this._methodized; ++ var __method = this; ++ return this._methodized = function() { ++ var a = update([this], arguments); ++ return __method.apply(null, a); ++ }; ++ } ++ ++ return { ++ argumentNames: argumentNames, ++ bind: bind, ++ bindAsEventListener: bindAsEventListener, ++ curry: curry, ++ delay: delay, ++ defer: defer, ++ wrap: wrap, ++ methodize: methodize ++ } ++})()); ++ ++ ++ ++(function(proto) { ++ ++ ++ function toISOString() { ++ return this.getUTCFullYear() + '-' + ++ (this.getUTCMonth() + 1).toPaddedString(2) + '-' + ++ this.getUTCDate().toPaddedString(2) + 'T' + ++ this.getUTCHours().toPaddedString(2) + ':' + ++ this.getUTCMinutes().toPaddedString(2) + ':' + ++ this.getUTCSeconds().toPaddedString(2) + 'Z'; ++ } ++ ++ ++ function toJSON() { ++ return this.toISOString(); ++ } ++ ++ if (!proto.toISOString) proto.toISOString = toISOString; ++ if (!proto.toJSON) proto.toJSON = toJSON; ++ ++})(Date.prototype); ++ ++ ++RegExp.prototype.match = RegExp.prototype.test; ++ ++RegExp.escape = function(str) { ++ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); ++}; ++var PeriodicalExecuter = Class.create({ ++ initialize: function(callback, frequency) { ++ this.callback = callback; ++ this.frequency = frequency; ++ this.currentlyExecuting = false; ++ ++ this.registerCallback(); ++ }, ++ ++ registerCallback: function() { ++ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); ++ }, ++ ++ execute: function() { ++ this.callback(this); ++ }, ++ ++ stop: function() { ++ if (!this.timer) return; ++ clearInterval(this.timer); ++ this.timer = null; ++ }, ++ ++ onTimerEvent: function() { ++ if (!this.currentlyExecuting) { ++ try { ++ this.currentlyExecuting = true; ++ this.execute(); ++ this.currentlyExecuting = false; ++ } catch(e) { ++ this.currentlyExecuting = false; ++ throw e; ++ } ++ } ++ } ++}); ++Object.extend(String, { ++ interpret: function(value) { ++ return value == null ? '' : String(value); ++ }, ++ specialChar: { ++ '\b': '\\b', ++ '\t': '\\t', ++ '\n': '\\n', ++ '\f': '\\f', ++ '\r': '\\r', ++ '\\': '\\\\' ++ } ++}); ++ ++Object.extend(String.prototype, (function() { ++ var NATIVE_JSON_PARSE_SUPPORT = window.JSON && ++ typeof JSON.parse === 'function' && ++ JSON.parse('{"test": true}').test; ++ ++ function prepareReplacement(replacement) { ++ if (Object.isFunction(replacement)) return replacement; ++ var template = new Template(replacement); ++ return function(match) { return template.evaluate(match) }; ++ } ++ ++ function gsub(pattern, replacement) { ++ var result = '', source = this, match; ++ replacement = prepareReplacement(replacement); ++ ++ if (Object.isString(pattern)) ++ pattern = RegExp.escape(pattern); ++ ++ if (!(pattern.length || pattern.source)) { ++ replacement = replacement(''); ++ return replacement + source.split('').join(replacement) + replacement; ++ } ++ ++ while (source.length > 0) { ++ if (match = source.match(pattern)) { ++ result += source.slice(0, match.index); ++ result += String.interpret(replacement(match)); ++ source = source.slice(match.index + match[0].length); ++ } else { ++ result += source, source = ''; ++ } ++ } ++ return result; ++ } ++ ++ function sub(pattern, replacement, count) { ++ replacement = prepareReplacement(replacement); ++ count = Object.isUndefined(count) ? 1 : count; ++ ++ return this.gsub(pattern, function(match) { ++ if (--count < 0) return match[0]; ++ return replacement(match); ++ }); ++ } ++ ++ function scan(pattern, iterator) { ++ this.gsub(pattern, iterator); ++ return String(this); ++ } ++ ++ function truncate(length, truncation) { ++ length = length || 30; ++ truncation = Object.isUndefined(truncation) ? '...' : truncation; ++ return this.length > length ? ++ this.slice(0, length - truncation.length) + truncation : String(this); ++ } ++ ++ function strip() { ++ return this.replace(/^\s+/, '').replace(/\s+$/, ''); ++ } ++ ++ function stripTags() { ++ return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); ++ } ++ ++ function stripScripts() { ++ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); ++ } ++ ++ function extractScripts() { ++ var matchAll = new RegExp(Prototype.ScriptFragment, 'img'), ++ matchOne = new RegExp(Prototype.ScriptFragment, 'im'); ++ return (this.match(matchAll) || []).map(function(scriptTag) { ++ return (scriptTag.match(matchOne) || ['', ''])[1]; ++ }); ++ } ++ ++ function evalScripts() { ++ return this.extractScripts().map(function(script) { return eval(script) }); ++ } ++ ++ function escapeHTML() { ++ return this.replace(/&/g,'&').replace(//g,'>'); ++ } ++ ++ function unescapeHTML() { ++ return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); ++ } ++ ++ ++ function toQueryParams(separator) { ++ var match = this.strip().match(/([^?#]*)(#.*)?$/); ++ if (!match) return { }; ++ ++ return match[1].split(separator || '&').inject({ }, function(hash, pair) { ++ if ((pair = pair.split('='))[0]) { ++ var key = decodeURIComponent(pair.shift()), ++ value = pair.length > 1 ? pair.join('=') : pair[0]; ++ ++ if (value != undefined) value = decodeURIComponent(value); ++ ++ if (key in hash) { ++ if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; ++ hash[key].push(value); ++ } ++ else hash[key] = value; ++ } ++ return hash; ++ }); ++ } ++ ++ function toArray() { ++ return this.split(''); ++ } ++ ++ function succ() { ++ return this.slice(0, this.length - 1) + ++ String.fromCharCode(this.charCodeAt(this.length - 1) + 1); ++ } ++ ++ function times(count) { ++ return count < 1 ? '' : new Array(count + 1).join(this); ++ } ++ ++ function camelize() { ++ return this.replace(/-+(.)?/g, function(match, chr) { ++ return chr ? chr.toUpperCase() : ''; ++ }); ++ } ++ ++ function capitalize() { ++ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); ++ } ++ ++ function underscore() { ++ return this.replace(/::/g, '/') ++ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') ++ .replace(/([a-z\d])([A-Z])/g, '$1_$2') ++ .replace(/-/g, '_') ++ .toLowerCase(); ++ } ++ ++ function dasherize() { ++ return this.replace(/_/g, '-'); ++ } ++ ++ function inspect(useDoubleQuotes) { ++ var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { ++ if (character in String.specialChar) { ++ return String.specialChar[character]; ++ } ++ return '\\u00' + character.charCodeAt().toPaddedString(2, 16); ++ }); ++ if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; ++ return "'" + escapedString.replace(/'/g, '\\\'') + "'"; ++ } ++ ++ function unfilterJSON(filter) { ++ return this.replace(filter || Prototype.JSONFilter, '$1'); ++ } ++ ++ function isJSON() { ++ var str = this; ++ if (str.blank()) return false; ++ str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'); ++ str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); ++ str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); ++ return (/^[\],:{}\s]*$/).test(str); ++ } ++ ++ function evalJSON(sanitize) { ++ var json = this.unfilterJSON(), ++ cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; ++ if (cx.test(json)) { ++ json = json.replace(cx, function (a) { ++ return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); ++ }); ++ } ++ try { ++ if (!sanitize || json.isJSON()) return eval('(' + json + ')'); ++ } catch (e) { } ++ throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); ++ } ++ ++ function parseJSON() { ++ var json = this.unfilterJSON(); ++ return JSON.parse(json); ++ } ++ ++ function include(pattern) { ++ return this.indexOf(pattern) > -1; ++ } ++ ++ function startsWith(pattern) { ++ return this.lastIndexOf(pattern, 0) === 0; ++ } ++ ++ function endsWith(pattern) { ++ var d = this.length - pattern.length; ++ return d >= 0 && this.indexOf(pattern, d) === d; ++ } ++ ++ function empty() { ++ return this == ''; ++ } ++ ++ function blank() { ++ return /^\s*$/.test(this); ++ } ++ ++ function interpolate(object, pattern) { ++ return new Template(this, pattern).evaluate(object); ++ } ++ ++ return { ++ gsub: gsub, ++ sub: sub, ++ scan: scan, ++ truncate: truncate, ++ strip: String.prototype.trim || strip, ++ stripTags: stripTags, ++ stripScripts: stripScripts, ++ extractScripts: extractScripts, ++ evalScripts: evalScripts, ++ escapeHTML: escapeHTML, ++ unescapeHTML: unescapeHTML, ++ toQueryParams: toQueryParams, ++ parseQuery: toQueryParams, ++ toArray: toArray, ++ succ: succ, ++ times: times, ++ camelize: camelize, ++ capitalize: capitalize, ++ underscore: underscore, ++ dasherize: dasherize, ++ inspect: inspect, ++ unfilterJSON: unfilterJSON, ++ isJSON: isJSON, ++ evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON, ++ include: include, ++ startsWith: startsWith, ++ endsWith: endsWith, ++ empty: empty, ++ blank: blank, ++ interpolate: interpolate ++ }; ++})()); ++ ++var Template = Class.create({ ++ initialize: function(template, pattern) { ++ this.template = template.toString(); ++ this.pattern = pattern || Template.Pattern; ++ }, ++ ++ evaluate: function(object) { ++ if (object && Object.isFunction(object.toTemplateReplacements)) ++ object = object.toTemplateReplacements(); ++ ++ return this.template.gsub(this.pattern, function(match) { ++ if (object == null) return (match[1] + ''); ++ ++ var before = match[1] || ''; ++ if (before == '\\') return match[2]; ++ ++ var ctx = object, expr = match[3], ++ pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; ++ ++ match = pattern.exec(expr); ++ if (match == null) return before; ++ ++ while (match != null) { ++ var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; ++ ctx = ctx[comp]; ++ if (null == ctx || '' == match[3]) break; ++ expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); ++ match = pattern.exec(expr); ++ } ++ ++ return before + String.interpret(ctx); ++ }); ++ } ++}); ++Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; ++ ++var $break = { }; ++ ++var Enumerable = (function() { ++ function each(iterator, context) { ++ var index = 0; ++ try { ++ this._each(function(value) { ++ iterator.call(context, value, index++); ++ }); ++ } catch (e) { ++ if (e != $break) throw e; ++ } ++ return this; ++ } ++ ++ function eachSlice(number, iterator, context) { ++ var index = -number, slices = [], array = this.toArray(); ++ if (number < 1) return array; ++ while ((index += number) < array.length) ++ slices.push(array.slice(index, index+number)); ++ return slices.collect(iterator, context); ++ } ++ ++ function all(iterator, context) { ++ iterator = iterator || Prototype.K; ++ var result = true; ++ this.each(function(value, index) { ++ result = result && !!iterator.call(context, value, index); ++ if (!result) throw $break; ++ }); ++ return result; ++ } ++ ++ function any(iterator, context) { ++ iterator = iterator || Prototype.K; ++ var result = false; ++ this.each(function(value, index) { ++ if (result = !!iterator.call(context, value, index)) ++ throw $break; ++ }); ++ return result; ++ } ++ ++ function collect(iterator, context) { ++ iterator = iterator || Prototype.K; ++ var results = []; ++ this.each(function(value, index) { ++ results.push(iterator.call(context, value, index)); ++ }); ++ return results; ++ } ++ ++ function detect(iterator, context) { ++ var result; ++ this.each(function(value, index) { ++ if (iterator.call(context, value, index)) { ++ result = value; ++ throw $break; ++ } ++ }); ++ return result; ++ } ++ ++ function findAll(iterator, context) { ++ var results = []; ++ this.each(function(value, index) { ++ if (iterator.call(context, value, index)) ++ results.push(value); ++ }); ++ return results; ++ } ++ ++ function grep(filter, iterator, context) { ++ iterator = iterator || Prototype.K; ++ var results = []; ++ ++ if (Object.isString(filter)) ++ filter = new RegExp(RegExp.escape(filter)); ++ ++ this.each(function(value, index) { ++ if (filter.match(value)) ++ results.push(iterator.call(context, value, index)); ++ }); ++ return results; ++ } ++ ++ function include(object) { ++ if (Object.isFunction(this.indexOf)) ++ if (this.indexOf(object) != -1) return true; ++ ++ var found = false; ++ this.each(function(value) { ++ if (value == object) { ++ found = true; ++ throw $break; ++ } ++ }); ++ return found; ++ } ++ ++ function inGroupsOf(number, fillWith) { ++ fillWith = Object.isUndefined(fillWith) ? null : fillWith; ++ return this.eachSlice(number, function(slice) { ++ while(slice.length < number) slice.push(fillWith); ++ return slice; ++ }); ++ } ++ ++ function inject(memo, iterator, context) { ++ this.each(function(value, index) { ++ memo = iterator.call(context, memo, value, index); ++ }); ++ return memo; ++ } ++ ++ function invoke(method) { ++ var args = $A(arguments).slice(1); ++ return this.map(function(value) { ++ return value[method].apply(value, args); ++ }); ++ } ++ ++ function max(iterator, context) { ++ iterator = iterator || Prototype.K; ++ var result; ++ this.each(function(value, index) { ++ value = iterator.call(context, value, index); ++ if (result == null || value >= result) ++ result = value; ++ }); ++ return result; ++ } ++ ++ function min(iterator, context) { ++ iterator = iterator || Prototype.K; ++ var result; ++ this.each(function(value, index) { ++ value = iterator.call(context, value, index); ++ if (result == null || value < result) ++ result = value; ++ }); ++ return result; ++ } ++ ++ function partition(iterator, context) { ++ iterator = iterator || Prototype.K; ++ var trues = [], falses = []; ++ this.each(function(value, index) { ++ (iterator.call(context, value, index) ? ++ trues : falses).push(value); ++ }); ++ return [trues, falses]; ++ } ++ ++ function pluck(property) { ++ var results = []; ++ this.each(function(value) { ++ results.push(value[property]); ++ }); ++ return results; ++ } ++ ++ function reject(iterator, context) { ++ var results = []; ++ this.each(function(value, index) { ++ if (!iterator.call(context, value, index)) ++ results.push(value); ++ }); ++ return results; ++ } ++ ++ function sortBy(iterator, context) { ++ return this.map(function(value, index) { ++ return { ++ value: value, ++ criteria: iterator.call(context, value, index) ++ }; ++ }).sort(function(left, right) { ++ var a = left.criteria, b = right.criteria; ++ return a < b ? -1 : a > b ? 1 : 0; ++ }).pluck('value'); ++ } ++ ++ function toArray() { ++ return this.map(); ++ } ++ ++ function zip() { ++ var iterator = Prototype.K, args = $A(arguments); ++ if (Object.isFunction(args.last())) ++ iterator = args.pop(); ++ ++ var collections = [this].concat(args).map($A); ++ return this.map(function(value, index) { ++ return iterator(collections.pluck(index)); ++ }); ++ } ++ ++ function size() { ++ return this.toArray().length; ++ } ++ ++ function inspect() { ++ return '#'; ++ } ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ return { ++ each: each, ++ eachSlice: eachSlice, ++ all: all, ++ every: all, ++ any: any, ++ some: any, ++ collect: collect, ++ map: collect, ++ detect: detect, ++ findAll: findAll, ++ select: findAll, ++ filter: findAll, ++ grep: grep, ++ include: include, ++ member: include, ++ inGroupsOf: inGroupsOf, ++ inject: inject, ++ invoke: invoke, ++ max: max, ++ min: min, ++ partition: partition, ++ pluck: pluck, ++ reject: reject, ++ sortBy: sortBy, ++ toArray: toArray, ++ entries: toArray, ++ zip: zip, ++ size: size, ++ inspect: inspect, ++ find: detect ++ }; ++})(); ++ ++function $A(iterable) { ++ if (!iterable) return []; ++ if ('toArray' in Object(iterable)) return iterable.toArray(); ++ var length = iterable.length || 0, results = new Array(length); ++ while (length--) results[length] = iterable[length]; ++ return results; ++} ++ ++ ++function $w(string) { ++ if (!Object.isString(string)) return []; ++ string = string.strip(); ++ return string ? string.split(/\s+/) : []; ++} ++ ++Array.from = $A; ++ ++ ++(function() { ++ var arrayProto = Array.prototype, ++ slice = arrayProto.slice, ++ _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available ++ ++ function each(iterator, context) { ++ for (var i = 0, length = this.length >>> 0; i < length; i++) { ++ if (i in this) iterator.call(context, this[i], i, this); ++ } ++ } ++ if (!_each) _each = each; ++ ++ function clear() { ++ this.length = 0; ++ return this; ++ } ++ ++ function first() { ++ return this[0]; ++ } ++ ++ function last() { ++ return this[this.length - 1]; ++ } ++ ++ function compact() { ++ return this.select(function(value) { ++ return value != null; ++ }); ++ } ++ ++ function flatten() { ++ return this.inject([], function(array, value) { ++ if (Object.isArray(value)) ++ return array.concat(value.flatten()); ++ array.push(value); ++ return array; ++ }); ++ } ++ ++ function without() { ++ var values = slice.call(arguments, 0); ++ return this.select(function(value) { ++ return !values.include(value); ++ }); ++ } ++ ++ function reverse(inline) { ++ return (inline === false ? this.toArray() : this)._reverse(); ++ } ++ ++ function uniq(sorted) { ++ return this.inject([], function(array, value, index) { ++ if (0 == index || (sorted ? array.last() != value : !array.include(value))) ++ array.push(value); ++ return array; ++ }); ++ } ++ ++ function intersect(array) { ++ return this.uniq().findAll(function(item) { ++ return array.detect(function(value) { return item === value }); ++ }); ++ } ++ ++ ++ function clone() { ++ return slice.call(this, 0); ++ } ++ ++ function size() { ++ return this.length; ++ } ++ ++ function inspect() { ++ return '[' + this.map(Object.inspect).join(', ') + ']'; ++ } ++ ++ function indexOf(item, i) { ++ i || (i = 0); ++ var length = this.length; ++ if (i < 0) i = length + i; ++ for (; i < length; i++) ++ if (this[i] === item) return i; ++ return -1; ++ } ++ ++ function lastIndexOf(item, i) { ++ i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; ++ var n = this.slice(0, i).reverse().indexOf(item); ++ return (n < 0) ? n : i - n - 1; ++ } ++ ++ function concat() { ++ var array = slice.call(this, 0), item; ++ for (var i = 0, length = arguments.length; i < length; i++) { ++ item = arguments[i]; ++ if (Object.isArray(item) && !('callee' in item)) { ++ for (var j = 0, arrayLength = item.length; j < arrayLength; j++) ++ array.push(item[j]); ++ } else { ++ array.push(item); ++ } ++ } ++ return array; ++ } ++ ++ Object.extend(arrayProto, Enumerable); ++ ++ if (!arrayProto._reverse) ++ arrayProto._reverse = arrayProto.reverse; ++ ++ Object.extend(arrayProto, { ++ _each: _each, ++ clear: clear, ++ first: first, ++ last: last, ++ compact: compact, ++ flatten: flatten, ++ without: without, ++ reverse: reverse, ++ uniq: uniq, ++ intersect: intersect, ++ clone: clone, ++ toArray: clone, ++ size: size, ++ inspect: inspect ++ }); ++ ++ var CONCAT_ARGUMENTS_BUGGY = (function() { ++ return [].concat(arguments)[0][0] !== 1; ++ })(1,2) ++ ++ if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; ++ ++ if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; ++ if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; ++})(); ++function $H(object) { ++ return new Hash(object); ++}; ++ ++var Hash = Class.create(Enumerable, (function() { ++ function initialize(object) { ++ this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); ++ } ++ ++ ++ function _each(iterator) { ++ for (var key in this._object) { ++ var value = this._object[key], pair = [key, value]; ++ pair.key = key; ++ pair.value = value; ++ iterator(pair); ++ } ++ } ++ ++ function set(key, value) { ++ return this._object[key] = value; ++ } ++ ++ function get(key) { ++ if (this._object[key] !== Object.prototype[key]) ++ return this._object[key]; ++ } ++ ++ function unset(key) { ++ var value = this._object[key]; ++ delete this._object[key]; ++ return value; ++ } ++ ++ function toObject() { ++ return Object.clone(this._object); ++ } ++ ++ ++ ++ function keys() { ++ return this.pluck('key'); ++ } ++ ++ function values() { ++ return this.pluck('value'); ++ } ++ ++ function index(value) { ++ var match = this.detect(function(pair) { ++ return pair.value === value; ++ }); ++ return match && match.key; ++ } ++ ++ function merge(object) { ++ return this.clone().update(object); ++ } ++ ++ function update(object) { ++ return new Hash(object).inject(this, function(result, pair) { ++ result.set(pair.key, pair.value); ++ return result; ++ }); ++ } ++ ++ function toQueryPair(key, value) { ++ if (Object.isUndefined(value)) return key; ++ return key + '=' + encodeURIComponent(String.interpret(value)); ++ } ++ ++ function toQueryString() { ++ return this.inject([], function(results, pair) { ++ var key = encodeURIComponent(pair.key), values = pair.value; ++ ++ if (values && typeof values == 'object') { ++ if (Object.isArray(values)) { ++ var queryValues = []; ++ for (var i = 0, len = values.length, value; i < len; i++) { ++ value = values[i]; ++ queryValues.push(toQueryPair(key, value)); ++ } ++ return results.concat(queryValues); ++ } ++ } else results.push(toQueryPair(key, values)); ++ return results; ++ }).join('&'); ++ } ++ ++ function inspect() { ++ return '#'; ++ } ++ ++ function clone() { ++ return new Hash(this); ++ } ++ ++ return { ++ initialize: initialize, ++ _each: _each, ++ set: set, ++ get: get, ++ unset: unset, ++ toObject: toObject, ++ toTemplateReplacements: toObject, ++ keys: keys, ++ values: values, ++ index: index, ++ merge: merge, ++ update: update, ++ toQueryString: toQueryString, ++ inspect: inspect, ++ toJSON: toObject, ++ clone: clone ++ }; ++})()); ++ ++Hash.from = $H; ++Object.extend(Number.prototype, (function() { ++ function toColorPart() { ++ return this.toPaddedString(2, 16); ++ } ++ ++ function succ() { ++ return this + 1; ++ } ++ ++ function times(iterator, context) { ++ $R(0, this, true).each(iterator, context); ++ return this; ++ } ++ ++ function toPaddedString(length, radix) { ++ var string = this.toString(radix || 10); ++ return '0'.times(length - string.length) + string; ++ } ++ ++ function abs() { ++ return Math.abs(this); ++ } ++ ++ function round() { ++ return Math.round(this); ++ } ++ ++ function ceil() { ++ return Math.ceil(this); ++ } ++ ++ function floor() { ++ return Math.floor(this); ++ } ++ ++ return { ++ toColorPart: toColorPart, ++ succ: succ, ++ times: times, ++ toPaddedString: toPaddedString, ++ abs: abs, ++ round: round, ++ ceil: ceil, ++ floor: floor ++ }; ++})()); ++ ++function $R(start, end, exclusive) { ++ return new ObjectRange(start, end, exclusive); ++} ++ ++var ObjectRange = Class.create(Enumerable, (function() { ++ function initialize(start, end, exclusive) { ++ this.start = start; ++ this.end = end; ++ this.exclusive = exclusive; ++ } ++ ++ function _each(iterator) { ++ var value = this.start; ++ while (this.include(value)) { ++ iterator(value); ++ value = value.succ(); ++ } ++ } ++ ++ function include(value) { ++ if (value < this.start) ++ return false; ++ if (this.exclusive) ++ return value < this.end; ++ return value <= this.end; ++ } ++ ++ return { ++ initialize: initialize, ++ _each: _each, ++ include: include ++ }; ++})()); ++ ++ ++ ++var Abstract = { }; ++ ++ ++var Try = { ++ these: function() { ++ var returnValue; ++ ++ for (var i = 0, length = arguments.length; i < length; i++) { ++ var lambda = arguments[i]; ++ try { ++ returnValue = lambda(); ++ break; ++ } catch (e) { } ++ } ++ ++ return returnValue; ++ } ++}; ++ ++var Ajax = { ++ getTransport: function() { ++ return Try.these( ++ function() {return new XMLHttpRequest()}, ++ function() {return new ActiveXObject('Msxml2.XMLHTTP')}, ++ function() {return new ActiveXObject('Microsoft.XMLHTTP')} ++ ) || false; ++ }, ++ ++ activeRequestCount: 0 ++}; ++ ++Ajax.Responders = { ++ responders: [], ++ ++ _each: function(iterator) { ++ this.responders._each(iterator); ++ }, ++ ++ register: function(responder) { ++ if (!this.include(responder)) ++ this.responders.push(responder); ++ }, ++ ++ unregister: function(responder) { ++ this.responders = this.responders.without(responder); ++ }, ++ ++ dispatch: function(callback, request, transport, json) { ++ this.each(function(responder) { ++ if (Object.isFunction(responder[callback])) { ++ try { ++ responder[callback].apply(responder, [request, transport, json]); ++ } catch (e) { } ++ } ++ }); ++ } ++}; ++ ++Object.extend(Ajax.Responders, Enumerable); ++ ++Ajax.Responders.register({ ++ onCreate: function() { Ajax.activeRequestCount++ }, ++ onComplete: function() { Ajax.activeRequestCount-- } ++}); ++Ajax.Base = Class.create({ ++ initialize: function(options) { ++ this.options = { ++ method: 'post', ++ asynchronous: true, ++ contentType: 'application/x-www-form-urlencoded', ++ encoding: 'UTF-8', ++ parameters: '', ++ evalJSON: true, ++ evalJS: true ++ }; ++ Object.extend(this.options, options || { }); ++ ++ this.options.method = this.options.method.toLowerCase(); ++ ++ if (Object.isHash(this.options.parameters)) ++ this.options.parameters = this.options.parameters.toObject(); ++ } ++}); ++Ajax.Request = Class.create(Ajax.Base, { ++ _complete: false, ++ ++ initialize: function($super, url, options) { ++ $super(options); ++ this.transport = Ajax.getTransport(); ++ this.request(url); ++ }, ++ ++ request: function(url) { ++ this.url = url; ++ this.method = this.options.method; ++ var params = Object.isString(this.options.parameters) ? ++ this.options.parameters : ++ Object.toQueryString(this.options.parameters); ++ ++ if (!['get', 'post'].include(this.method)) { ++ params += (params ? '&' : '') + "_method=" + this.method; ++ this.method = 'post'; ++ } ++ ++ if (params && this.method === 'get') { ++ this.url += (this.url.include('?') ? '&' : '?') + params; ++ } ++ ++ this.parameters = params.toQueryParams(); ++ ++ try { ++ var response = new Ajax.Response(this); ++ if (this.options.onCreate) this.options.onCreate(response); ++ Ajax.Responders.dispatch('onCreate', this, response); ++ ++ this.transport.open(this.method.toUpperCase(), this.url, ++ this.options.asynchronous); ++ ++ if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); ++ ++ this.transport.onreadystatechange = this.onStateChange.bind(this); ++ this.setRequestHeaders(); ++ ++ this.body = this.method == 'post' ? (this.options.postBody || params) : null; ++ this.transport.send(this.body); ++ ++ /* Force Firefox to handle ready state 4 for synchronous requests */ ++ if (!this.options.asynchronous && this.transport.overrideMimeType) ++ this.onStateChange(); ++ ++ } ++ catch (e) { ++ this.dispatchException(e); ++ } ++ }, ++ ++ onStateChange: function() { ++ var readyState = this.transport.readyState; ++ if (readyState > 1 && !((readyState == 4) && this._complete)) ++ this.respondToReadyState(this.transport.readyState); ++ }, ++ ++ setRequestHeaders: function() { ++ var headers = { ++ 'X-Requested-With': 'XMLHttpRequest', ++ 'X-Prototype-Version': Prototype.Version, ++ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' ++ }; ++ ++ if (this.method == 'post') { ++ headers['Content-type'] = this.options.contentType + ++ (this.options.encoding ? '; charset=' + this.options.encoding : ''); ++ ++ /* Force "Connection: close" for older Mozilla browsers to work ++ * around a bug where XMLHttpRequest sends an incorrect ++ * Content-length header. See Mozilla Bugzilla #246651. ++ */ ++ if (this.transport.overrideMimeType && ++ (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) ++ headers['Connection'] = 'close'; ++ } ++ ++ if (typeof this.options.requestHeaders == 'object') { ++ var extras = this.options.requestHeaders; ++ ++ if (Object.isFunction(extras.push)) ++ for (var i = 0, length = extras.length; i < length; i += 2) ++ headers[extras[i]] = extras[i+1]; ++ else ++ $H(extras).each(function(pair) { headers[pair.key] = pair.value }); ++ } ++ ++ for (var name in headers) ++ this.transport.setRequestHeader(name, headers[name]); ++ }, ++ ++ success: function() { ++ var status = this.getStatus(); ++ return !status || (status >= 200 && status < 300) || status == 304; ++ }, ++ ++ getStatus: function() { ++ try { ++ if (this.transport.status === 1223) return 204; ++ return this.transport.status || 0; ++ } catch (e) { return 0 } ++ }, ++ ++ respondToReadyState: function(readyState) { ++ var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); ++ ++ if (state == 'Complete') { ++ try { ++ this._complete = true; ++ (this.options['on' + response.status] ++ || this.options['on' + (this.success() ? 'Success' : 'Failure')] ++ || Prototype.emptyFunction)(response, response.headerJSON); ++ } catch (e) { ++ this.dispatchException(e); ++ } ++ ++ var contentType = response.getHeader('Content-type'); ++ if (this.options.evalJS == 'force' ++ || (this.options.evalJS && this.isSameOrigin() && contentType ++ && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) ++ this.evalResponse(); ++ } ++ ++ try { ++ (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); ++ Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); ++ } catch (e) { ++ this.dispatchException(e); ++ } ++ ++ if (state == 'Complete') { ++ this.transport.onreadystatechange = Prototype.emptyFunction; ++ } ++ }, ++ ++ isSameOrigin: function() { ++ var m = this.url.match(/^\s*https?:\/\/[^\/]*/); ++ return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ ++ protocol: location.protocol, ++ domain: document.domain, ++ port: location.port ? ':' + location.port : '' ++ })); ++ }, ++ ++ getHeader: function(name) { ++ try { ++ return this.transport.getResponseHeader(name) || null; ++ } catch (e) { return null; } ++ }, ++ ++ evalResponse: function() { ++ try { ++ return eval((this.transport.responseText || '').unfilterJSON()); ++ } catch (e) { ++ this.dispatchException(e); ++ } ++ }, ++ ++ dispatchException: function(exception) { ++ (this.options.onException || Prototype.emptyFunction)(this, exception); ++ Ajax.Responders.dispatch('onException', this, exception); ++ } ++}); ++ ++Ajax.Request.Events = ++ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; ++ ++ ++ ++ ++ ++ ++ ++ ++Ajax.Response = Class.create({ ++ initialize: function(request){ ++ this.request = request; ++ var transport = this.transport = request.transport, ++ readyState = this.readyState = transport.readyState; ++ ++ if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { ++ this.status = this.getStatus(); ++ this.statusText = this.getStatusText(); ++ this.responseText = String.interpret(transport.responseText); ++ this.headerJSON = this._getHeaderJSON(); ++ } ++ ++ if (readyState == 4) { ++ var xml = transport.responseXML; ++ this.responseXML = Object.isUndefined(xml) ? null : xml; ++ this.responseJSON = this._getResponseJSON(); ++ } ++ }, ++ ++ status: 0, ++ ++ statusText: '', ++ ++ getStatus: Ajax.Request.prototype.getStatus, ++ ++ getStatusText: function() { ++ try { ++ return this.transport.statusText || ''; ++ } catch (e) { return '' } ++ }, ++ ++ getHeader: Ajax.Request.prototype.getHeader, ++ ++ getAllHeaders: function() { ++ try { ++ return this.getAllResponseHeaders(); ++ } catch (e) { return null } ++ }, ++ ++ getResponseHeader: function(name) { ++ return this.transport.getResponseHeader(name); ++ }, ++ ++ getAllResponseHeaders: function() { ++ return this.transport.getAllResponseHeaders(); ++ }, ++ ++ _getHeaderJSON: function() { ++ var json = this.getHeader('X-JSON'); ++ if (!json) return null; ++ json = decodeURIComponent(escape(json)); ++ try { ++ return json.evalJSON(this.request.options.sanitizeJSON || ++ !this.request.isSameOrigin()); ++ } catch (e) { ++ this.request.dispatchException(e); ++ } ++ }, ++ ++ _getResponseJSON: function() { ++ var options = this.request.options; ++ if (!options.evalJSON || (options.evalJSON != 'force' && ++ !(this.getHeader('Content-type') || '').include('application/json')) || ++ this.responseText.blank()) ++ return null; ++ try { ++ return this.responseText.evalJSON(options.sanitizeJSON || ++ !this.request.isSameOrigin()); ++ } catch (e) { ++ this.request.dispatchException(e); ++ } ++ } ++}); ++ ++Ajax.Updater = Class.create(Ajax.Request, { ++ initialize: function($super, container, url, options) { ++ this.container = { ++ success: (container.success || container), ++ failure: (container.failure || (container.success ? null : container)) ++ }; ++ ++ options = Object.clone(options); ++ var onComplete = options.onComplete; ++ options.onComplete = (function(response, json) { ++ this.updateContent(response.responseText); ++ if (Object.isFunction(onComplete)) onComplete(response, json); ++ }).bind(this); ++ ++ $super(url, options); ++ }, ++ ++ updateContent: function(responseText) { ++ var receiver = this.container[this.success() ? 'success' : 'failure'], ++ options = this.options; ++ ++ if (!options.evalScripts) responseText = responseText.stripScripts(); ++ ++ if (receiver = $(receiver)) { ++ if (options.insertion) { ++ if (Object.isString(options.insertion)) { ++ var insertion = { }; insertion[options.insertion] = responseText; ++ receiver.insert(insertion); ++ } ++ else options.insertion(receiver, responseText); ++ } ++ else receiver.update(responseText); ++ } ++ } ++}); ++ ++Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { ++ initialize: function($super, container, url, options) { ++ $super(options); ++ this.onComplete = this.options.onComplete; ++ ++ this.frequency = (this.options.frequency || 2); ++ this.decay = (this.options.decay || 1); ++ ++ this.updater = { }; ++ this.container = container; ++ this.url = url; ++ ++ this.start(); ++ }, ++ ++ start: function() { ++ this.options.onComplete = this.updateComplete.bind(this); ++ this.onTimerEvent(); ++ }, ++ ++ stop: function() { ++ this.updater.options.onComplete = undefined; ++ clearTimeout(this.timer); ++ (this.onComplete || Prototype.emptyFunction).apply(this, arguments); ++ }, ++ ++ updateComplete: function(response) { ++ if (this.options.decay) { ++ this.decay = (response.responseText == this.lastText ? ++ this.decay * this.options.decay : 1); ++ ++ this.lastText = response.responseText; ++ } ++ this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); ++ }, ++ ++ onTimerEvent: function() { ++ this.updater = new Ajax.Updater(this.container, this.url, this.options); ++ } ++}); ++ ++ ++function $(element) { ++ if (arguments.length > 1) { ++ for (var i = 0, elements = [], length = arguments.length; i < length; i++) ++ elements.push($(arguments[i])); ++ return elements; ++ } ++ if (Object.isString(element)) ++ element = document.getElementById(element); ++ return Element.extend(element); ++} ++ ++if (Prototype.BrowserFeatures.XPath) { ++ document._getElementsByXPath = function(expression, parentElement) { ++ var results = []; ++ var query = document.evaluate(expression, $(parentElement) || document, ++ null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); ++ for (var i = 0, length = query.snapshotLength; i < length; i++) ++ results.push(Element.extend(query.snapshotItem(i))); ++ return results; ++ }; ++} ++ ++/*--------------------------------------------------------------------------*/ ++ ++if (!Node) var Node = { }; ++ ++if (!Node.ELEMENT_NODE) { ++ Object.extend(Node, { ++ ELEMENT_NODE: 1, ++ ATTRIBUTE_NODE: 2, ++ TEXT_NODE: 3, ++ CDATA_SECTION_NODE: 4, ++ ENTITY_REFERENCE_NODE: 5, ++ ENTITY_NODE: 6, ++ PROCESSING_INSTRUCTION_NODE: 7, ++ COMMENT_NODE: 8, ++ DOCUMENT_NODE: 9, ++ DOCUMENT_TYPE_NODE: 10, ++ DOCUMENT_FRAGMENT_NODE: 11, ++ NOTATION_NODE: 12 ++ }); ++} ++ ++ ++ ++(function(global) { ++ function shouldUseCache(tagName, attributes) { ++ if (tagName === 'select') return false; ++ if ('type' in attributes) return false; ++ return true; ++ } ++ ++ var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){ ++ try { ++ var el = document.createElement(''); ++ return el.tagName.toLowerCase() === 'input' && el.name === 'x'; ++ } ++ catch(err) { ++ return false; ++ } ++ })(); ++ ++ var element = global.Element; ++ ++ global.Element = function(tagName, attributes) { ++ attributes = attributes || { }; ++ tagName = tagName.toLowerCase(); ++ var cache = Element.cache; ++ ++ if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) { ++ tagName = '<' + tagName + ' name="' + attributes.name + '">'; ++ delete attributes.name; ++ return Element.writeAttribute(document.createElement(tagName), attributes); ++ } ++ ++ if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName)); ++ ++ var node = shouldUseCache(tagName, attributes) ? ++ cache[tagName].cloneNode(false) : document.createElement(tagName); ++ ++ return Element.writeAttribute(node, attributes); ++ }; ++ ++ Object.extend(global.Element, element || { }); ++ if (element) global.Element.prototype = element.prototype; ++ ++})(this); ++ ++Element.idCounter = 1; ++Element.cache = { }; ++ ++Element._purgeElement = function(element) { ++ var uid = element._prototypeUID; ++ if (uid) { ++ Element.stopObserving(element); ++ element._prototypeUID = void 0; ++ delete Element.Storage[uid]; ++ } ++} ++ ++Element.Methods = { ++ visible: function(element) { ++ return $(element).style.display != 'none'; ++ }, ++ ++ toggle: function(element) { ++ element = $(element); ++ Element[Element.visible(element) ? 'hide' : 'show'](element); ++ return element; ++ }, ++ ++ hide: function(element) { ++ element = $(element); ++ element.style.display = 'none'; ++ return element; ++ }, ++ ++ show: function(element) { ++ element = $(element); ++ element.style.display = ''; ++ return element; ++ }, ++ ++ remove: function(element) { ++ element = $(element); ++ element.parentNode.removeChild(element); ++ return element; ++ }, ++ ++ update: (function(){ ++ ++ var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ ++ var el = document.createElement("select"), ++ isBuggy = true; ++ el.innerHTML = ""; ++ if (el.options && el.options[0]) { ++ isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; ++ } ++ el = null; ++ return isBuggy; ++ })(); ++ ++ var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ ++ try { ++ var el = document.createElement("table"); ++ if (el && el.tBodies) { ++ el.innerHTML = "test"; ++ var isBuggy = typeof el.tBodies[0] == "undefined"; ++ el = null; ++ return isBuggy; ++ } ++ } catch (e) { ++ return true; ++ } ++ })(); ++ ++ var LINK_ELEMENT_INNERHTML_BUGGY = (function() { ++ try { ++ var el = document.createElement('div'); ++ el.innerHTML = ""; ++ var isBuggy = (el.childNodes.length === 0); ++ el = null; ++ return isBuggy; ++ } catch(e) { ++ return true; ++ } ++ })(); ++ ++ var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY || ++ TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY; ++ ++ var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { ++ var s = document.createElement("script"), ++ isBuggy = false; ++ try { ++ s.appendChild(document.createTextNode("")); ++ isBuggy = !s.firstChild || ++ s.firstChild && s.firstChild.nodeType !== 3; ++ } catch (e) { ++ isBuggy = true; ++ } ++ s = null; ++ return isBuggy; ++ })(); ++ ++ ++ function update(element, content) { ++ element = $(element); ++ var purgeElement = Element._purgeElement; ++ ++ var descendants = element.getElementsByTagName('*'), ++ i = descendants.length; ++ while (i--) purgeElement(descendants[i]); ++ ++ if (content && content.toElement) ++ content = content.toElement(); ++ ++ if (Object.isElement(content)) ++ return element.update().insert(content); ++ ++ content = Object.toHTML(content); ++ ++ var tagName = element.tagName.toUpperCase(); ++ ++ if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { ++ element.text = content; ++ return element; ++ } ++ ++ if (ANY_INNERHTML_BUGGY) { ++ if (tagName in Element._insertionTranslations.tags) { ++ while (element.firstChild) { ++ element.removeChild(element.firstChild); ++ } ++ Element._getContentFromAnonymousElement(tagName, content.stripScripts()) ++ .each(function(node) { ++ element.appendChild(node) ++ }); ++ } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf(' -1) { ++ while (element.firstChild) { ++ element.removeChild(element.firstChild); ++ } ++ var nodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts(), true); ++ nodes.each(function(node) { element.appendChild(node) }); ++ } ++ else { ++ element.innerHTML = content.stripScripts(); ++ } ++ } ++ else { ++ element.innerHTML = content.stripScripts(); ++ } ++ ++ content.evalScripts.bind(content).defer(); ++ return element; ++ } ++ ++ return update; ++ })(), ++ ++ replace: function(element, content) { ++ element = $(element); ++ if (content && content.toElement) content = content.toElement(); ++ else if (!Object.isElement(content)) { ++ content = Object.toHTML(content); ++ var range = element.ownerDocument.createRange(); ++ range.selectNode(element); ++ content.evalScripts.bind(content).defer(); ++ content = range.createContextualFragment(content.stripScripts()); ++ } ++ element.parentNode.replaceChild(content, element); ++ return element; ++ }, ++ ++ insert: function(element, insertions) { ++ element = $(element); ++ ++ if (Object.isString(insertions) || Object.isNumber(insertions) || ++ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) ++ insertions = {bottom:insertions}; ++ ++ var content, insert, tagName, childNodes; ++ ++ for (var position in insertions) { ++ content = insertions[position]; ++ position = position.toLowerCase(); ++ insert = Element._insertionTranslations[position]; ++ ++ if (content && content.toElement) content = content.toElement(); ++ if (Object.isElement(content)) { ++ insert(element, content); ++ continue; ++ } ++ ++ content = Object.toHTML(content); ++ ++ tagName = ((position == 'before' || position == 'after') ++ ? element.parentNode : element).tagName.toUpperCase(); ++ ++ childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); ++ ++ if (position == 'top' || position == 'after') childNodes.reverse(); ++ childNodes.each(insert.curry(element)); ++ ++ content.evalScripts.bind(content).defer(); ++ } ++ ++ return element; ++ }, ++ ++ wrap: function(element, wrapper, attributes) { ++ element = $(element); ++ if (Object.isElement(wrapper)) ++ $(wrapper).writeAttribute(attributes || { }); ++ else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes); ++ else wrapper = new Element('div', wrapper); ++ if (element.parentNode) ++ element.parentNode.replaceChild(wrapper, element); ++ wrapper.appendChild(element); ++ return wrapper; ++ }, ++ ++ inspect: function(element) { ++ element = $(element); ++ var result = '<' + element.tagName.toLowerCase(); ++ $H({'id': 'id', 'className': 'class'}).each(function(pair) { ++ var property = pair.first(), ++ attribute = pair.last(), ++ value = (element[property] || '').toString(); ++ if (value) result += ' ' + attribute + '=' + value.inspect(true); ++ }); ++ return result + '>'; ++ }, ++ ++ recursivelyCollect: function(element, property, maximumLength) { ++ element = $(element); ++ maximumLength = maximumLength || -1; ++ var elements = []; ++ ++ while (element = element[property]) { ++ if (element.nodeType == 1) ++ elements.push(Element.extend(element)); ++ if (elements.length == maximumLength) ++ break; ++ } ++ ++ return elements; ++ }, ++ ++ ancestors: function(element) { ++ return Element.recursivelyCollect(element, 'parentNode'); ++ }, ++ ++ descendants: function(element) { ++ return Element.select(element, "*"); ++ }, ++ ++ firstDescendant: function(element) { ++ element = $(element).firstChild; ++ while (element && element.nodeType != 1) element = element.nextSibling; ++ return $(element); ++ }, ++ ++ immediateDescendants: function(element) { ++ var results = [], child = $(element).firstChild; ++ while (child) { ++ if (child.nodeType === 1) { ++ results.push(Element.extend(child)); ++ } ++ child = child.nextSibling; ++ } ++ return results; ++ }, ++ ++ previousSiblings: function(element, maximumLength) { ++ return Element.recursivelyCollect(element, 'previousSibling'); ++ }, ++ ++ nextSiblings: function(element) { ++ return Element.recursivelyCollect(element, 'nextSibling'); ++ }, ++ ++ siblings: function(element) { ++ element = $(element); ++ return Element.previousSiblings(element).reverse() ++ .concat(Element.nextSiblings(element)); ++ }, ++ ++ match: function(element, selector) { ++ element = $(element); ++ if (Object.isString(selector)) ++ return Prototype.Selector.match(element, selector); ++ return selector.match(element); ++ }, ++ ++ up: function(element, expression, index) { ++ element = $(element); ++ if (arguments.length == 1) return $(element.parentNode); ++ var ancestors = Element.ancestors(element); ++ return Object.isNumber(expression) ? ancestors[expression] : ++ Prototype.Selector.find(ancestors, expression, index); ++ }, ++ ++ down: function(element, expression, index) { ++ element = $(element); ++ if (arguments.length == 1) return Element.firstDescendant(element); ++ return Object.isNumber(expression) ? Element.descendants(element)[expression] : ++ Element.select(element, expression)[index || 0]; ++ }, ++ ++ previous: function(element, expression, index) { ++ element = $(element); ++ if (Object.isNumber(expression)) index = expression, expression = false; ++ if (!Object.isNumber(index)) index = 0; ++ ++ if (expression) { ++ return Prototype.Selector.find(element.previousSiblings(), expression, index); ++ } else { ++ return element.recursivelyCollect("previousSibling", index + 1)[index]; ++ } ++ }, ++ ++ next: function(element, expression, index) { ++ element = $(element); ++ if (Object.isNumber(expression)) index = expression, expression = false; ++ if (!Object.isNumber(index)) index = 0; ++ ++ if (expression) { ++ return Prototype.Selector.find(element.nextSiblings(), expression, index); ++ } else { ++ var maximumLength = Object.isNumber(index) ? index + 1 : 1; ++ return element.recursivelyCollect("nextSibling", index + 1)[index]; ++ } ++ }, ++ ++ ++ select: function(element) { ++ element = $(element); ++ var expressions = Array.prototype.slice.call(arguments, 1).join(', '); ++ return Prototype.Selector.select(expressions, element); ++ }, ++ ++ adjacent: function(element) { ++ element = $(element); ++ var expressions = Array.prototype.slice.call(arguments, 1).join(', '); ++ return Prototype.Selector.select(expressions, element.parentNode).without(element); ++ }, ++ ++ identify: function(element) { ++ element = $(element); ++ var id = Element.readAttribute(element, 'id'); ++ if (id) return id; ++ do { id = 'anonymous_element_' + Element.idCounter++ } while ($(id)); ++ Element.writeAttribute(element, 'id', id); ++ return id; ++ }, ++ ++ readAttribute: function(element, name) { ++ element = $(element); ++ if (Prototype.Browser.IE) { ++ var t = Element._attributeTranslations.read; ++ if (t.values[name]) return t.values[name](element, name); ++ if (t.names[name]) name = t.names[name]; ++ if (name.include(':')) { ++ return (!element.attributes || !element.attributes[name]) ? null : ++ element.attributes[name].value; ++ } ++ } ++ return element.getAttribute(name); ++ }, ++ ++ writeAttribute: function(element, name, value) { ++ element = $(element); ++ var attributes = { }, t = Element._attributeTranslations.write; ++ ++ if (typeof name == 'object') attributes = name; ++ else attributes[name] = Object.isUndefined(value) ? true : value; ++ ++ for (var attr in attributes) { ++ name = t.names[attr] || attr; ++ value = attributes[attr]; ++ if (t.values[attr]) name = t.values[attr](element, value); ++ if (value === false || value === null) ++ element.removeAttribute(name); ++ else if (value === true) ++ element.setAttribute(name, name); ++ else element.setAttribute(name, value); ++ } ++ return element; ++ }, ++ ++ getHeight: function(element) { ++ return Element.getDimensions(element).height; ++ }, ++ ++ getWidth: function(element) { ++ return Element.getDimensions(element).width; ++ }, ++ ++ classNames: function(element) { ++ return new Element.ClassNames(element); ++ }, ++ ++ hasClassName: function(element, className) { ++ if (!(element = $(element))) return; ++ var elementClassName = element.className; ++ return (elementClassName.length > 0 && (elementClassName == className || ++ new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); ++ }, ++ ++ addClassName: function(element, className) { ++ if (!(element = $(element))) return; ++ if (!Element.hasClassName(element, className)) ++ element.className += (element.className ? ' ' : '') + className; ++ return element; ++ }, ++ ++ removeClassName: function(element, className) { ++ if (!(element = $(element))) return; ++ element.className = element.className.replace( ++ new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip(); ++ return element; ++ }, ++ ++ toggleClassName: function(element, className) { ++ if (!(element = $(element))) return; ++ return Element[Element.hasClassName(element, className) ? ++ 'removeClassName' : 'addClassName'](element, className); ++ }, ++ ++ cleanWhitespace: function(element) { ++ element = $(element); ++ var node = element.firstChild; ++ while (node) { ++ var nextNode = node.nextSibling; ++ if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) ++ element.removeChild(node); ++ node = nextNode; ++ } ++ return element; ++ }, ++ ++ empty: function(element) { ++ return $(element).innerHTML.blank(); ++ }, ++ ++ descendantOf: function(element, ancestor) { ++ element = $(element), ancestor = $(ancestor); ++ ++ if (element.compareDocumentPosition) ++ return (element.compareDocumentPosition(ancestor) & 8) === 8; ++ ++ if (ancestor.contains) ++ return ancestor.contains(element) && ancestor !== element; ++ ++ while (element = element.parentNode) ++ if (element == ancestor) return true; ++ ++ return false; ++ }, ++ ++ scrollTo: function(element) { ++ element = $(element); ++ var pos = Element.cumulativeOffset(element); ++ window.scrollTo(pos[0], pos[1]); ++ return element; ++ }, ++ ++ getStyle: function(element, style) { ++ element = $(element); ++ style = style == 'float' ? 'cssFloat' : style.camelize(); ++ var value = element.style[style]; ++ if (!value || value == 'auto') { ++ var css = document.defaultView.getComputedStyle(element, null); ++ value = css ? css[style] : null; ++ } ++ if (style == 'opacity') return value ? parseFloat(value) : 1.0; ++ return value == 'auto' ? null : value; ++ }, ++ ++ getOpacity: function(element) { ++ return $(element).getStyle('opacity'); ++ }, ++ ++ setStyle: function(element, styles) { ++ element = $(element); ++ var elementStyle = element.style, match; ++ if (Object.isString(styles)) { ++ element.style.cssText += ';' + styles; ++ return styles.include('opacity') ? ++ element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element; ++ } ++ for (var property in styles) ++ if (property == 'opacity') element.setOpacity(styles[property]); ++ else ++ elementStyle[(property == 'float' || property == 'cssFloat') ? ++ (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') : ++ property] = styles[property]; ++ ++ return element; ++ }, ++ ++ setOpacity: function(element, value) { ++ element = $(element); ++ element.style.opacity = (value == 1 || value === '') ? '' : ++ (value < 0.00001) ? 0 : value; ++ return element; ++ }, ++ ++ makePositioned: function(element) { ++ element = $(element); ++ var pos = Element.getStyle(element, 'position'); ++ if (pos == 'static' || !pos) { ++ element._madePositioned = true; ++ element.style.position = 'relative'; ++ if (Prototype.Browser.Opera) { ++ element.style.top = 0; ++ element.style.left = 0; ++ } ++ } ++ return element; ++ }, ++ ++ undoPositioned: function(element) { ++ element = $(element); ++ if (element._madePositioned) { ++ element._madePositioned = undefined; ++ element.style.position = ++ element.style.top = ++ element.style.left = ++ element.style.bottom = ++ element.style.right = ''; ++ } ++ return element; ++ }, ++ ++ makeClipping: function(element) { ++ element = $(element); ++ if (element._overflow) return element; ++ element._overflow = Element.getStyle(element, 'overflow') || 'auto'; ++ if (element._overflow !== 'hidden') ++ element.style.overflow = 'hidden'; ++ return element; ++ }, ++ ++ undoClipping: function(element) { ++ element = $(element); ++ if (!element._overflow) return element; ++ element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; ++ element._overflow = null; ++ return element; ++ }, ++ ++ clonePosition: function(element, source) { ++ var options = Object.extend({ ++ setLeft: true, ++ setTop: true, ++ setWidth: true, ++ setHeight: true, ++ offsetTop: 0, ++ offsetLeft: 0 ++ }, arguments[2] || { }); ++ ++ source = $(source); ++ var p = Element.viewportOffset(source), delta = [0, 0], parent = null; ++ ++ element = $(element); ++ ++ if (Element.getStyle(element, 'position') == 'absolute') { ++ parent = Element.getOffsetParent(element); ++ delta = Element.viewportOffset(parent); ++ } ++ ++ if (parent == document.body) { ++ delta[0] -= document.body.offsetLeft; ++ delta[1] -= document.body.offsetTop; ++ } ++ ++ if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; ++ if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; ++ if (options.setWidth) element.style.width = source.offsetWidth + 'px'; ++ if (options.setHeight) element.style.height = source.offsetHeight + 'px'; ++ return element; ++ } ++}; ++ ++Object.extend(Element.Methods, { ++ getElementsBySelector: Element.Methods.select, ++ ++ childElements: Element.Methods.immediateDescendants ++}); ++ ++Element._attributeTranslations = { ++ write: { ++ names: { ++ className: 'class', ++ htmlFor: 'for' ++ }, ++ values: { } ++ } ++}; ++ ++if (Prototype.Browser.Opera) { ++ Element.Methods.getStyle = Element.Methods.getStyle.wrap( ++ function(proceed, element, style) { ++ switch (style) { ++ case 'height': case 'width': ++ if (!Element.visible(element)) return null; ++ ++ var dim = parseInt(proceed(element, style), 10); ++ ++ if (dim !== element['offset' + style.capitalize()]) ++ return dim + 'px'; ++ ++ var properties; ++ if (style === 'height') { ++ properties = ['border-top-width', 'padding-top', ++ 'padding-bottom', 'border-bottom-width']; ++ } ++ else { ++ properties = ['border-left-width', 'padding-left', ++ 'padding-right', 'border-right-width']; ++ } ++ return properties.inject(dim, function(memo, property) { ++ var val = proceed(element, property); ++ return val === null ? memo : memo - parseInt(val, 10); ++ }) + 'px'; ++ default: return proceed(element, style); ++ } ++ } ++ ); ++ ++ Element.Methods.readAttribute = Element.Methods.readAttribute.wrap( ++ function(proceed, element, attribute) { ++ if (attribute === 'title') return element.title; ++ return proceed(element, attribute); ++ } ++ ); ++} ++ ++else if (Prototype.Browser.IE) { ++ Element.Methods.getStyle = function(element, style) { ++ element = $(element); ++ style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize(); ++ var value = element.style[style]; ++ if (!value && element.currentStyle) value = element.currentStyle[style]; ++ ++ if (style == 'opacity') { ++ if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) ++ if (value[1]) return parseFloat(value[1]) / 100; ++ return 1.0; ++ } ++ ++ if (value == 'auto') { ++ if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none')) ++ return element['offset' + style.capitalize()] + 'px'; ++ return null; ++ } ++ return value; ++ }; ++ ++ Element.Methods.setOpacity = function(element, value) { ++ function stripAlpha(filter){ ++ return filter.replace(/alpha\([^\)]*\)/gi,''); ++ } ++ element = $(element); ++ var currentStyle = element.currentStyle; ++ if ((currentStyle && !currentStyle.hasLayout) || ++ (!currentStyle && element.style.zoom == 'normal')) ++ element.style.zoom = 1; ++ ++ var filter = element.getStyle('filter'), style = element.style; ++ if (value == 1 || value === '') { ++ (filter = stripAlpha(filter)) ? ++ style.filter = filter : style.removeAttribute('filter'); ++ return element; ++ } else if (value < 0.00001) value = 0; ++ style.filter = stripAlpha(filter) + ++ 'alpha(opacity=' + (value * 100) + ')'; ++ return element; ++ }; ++ ++ Element._attributeTranslations = (function(){ ++ ++ var classProp = 'className', ++ forProp = 'for', ++ el = document.createElement('div'); ++ ++ el.setAttribute(classProp, 'x'); ++ ++ if (el.className !== 'x') { ++ el.setAttribute('class', 'x'); ++ if (el.className === 'x') { ++ classProp = 'class'; ++ } ++ } ++ el = null; ++ ++ el = document.createElement('label'); ++ el.setAttribute(forProp, 'x'); ++ if (el.htmlFor !== 'x') { ++ el.setAttribute('htmlFor', 'x'); ++ if (el.htmlFor === 'x') { ++ forProp = 'htmlFor'; ++ } ++ } ++ el = null; ++ ++ return { ++ read: { ++ names: { ++ 'class': classProp, ++ 'className': classProp, ++ 'for': forProp, ++ 'htmlFor': forProp ++ }, ++ values: { ++ _getAttr: function(element, attribute) { ++ return element.getAttribute(attribute); ++ }, ++ _getAttr2: function(element, attribute) { ++ return element.getAttribute(attribute, 2); ++ }, ++ _getAttrNode: function(element, attribute) { ++ var node = element.getAttributeNode(attribute); ++ return node ? node.value : ""; ++ }, ++ _getEv: (function(){ ++ ++ var el = document.createElement('div'), f; ++ el.onclick = Prototype.emptyFunction; ++ var value = el.getAttribute('onclick'); ++ ++ if (String(value).indexOf('{') > -1) { ++ f = function(element, attribute) { ++ attribute = element.getAttribute(attribute); ++ if (!attribute) return null; ++ attribute = attribute.toString(); ++ attribute = attribute.split('{')[1]; ++ attribute = attribute.split('}')[0]; ++ return attribute.strip(); ++ }; ++ } ++ else if (value === '') { ++ f = function(element, attribute) { ++ attribute = element.getAttribute(attribute); ++ if (!attribute) return null; ++ return attribute.strip(); ++ }; ++ } ++ el = null; ++ return f; ++ })(), ++ _flag: function(element, attribute) { ++ return $(element).hasAttribute(attribute) ? attribute : null; ++ }, ++ style: function(element) { ++ return element.style.cssText.toLowerCase(); ++ }, ++ title: function(element) { ++ return element.title; ++ } ++ } ++ } ++ } ++ })(); ++ ++ Element._attributeTranslations.write = { ++ names: Object.extend({ ++ cellpadding: 'cellPadding', ++ cellspacing: 'cellSpacing' ++ }, Element._attributeTranslations.read.names), ++ values: { ++ checked: function(element, value) { ++ element.checked = !!value; ++ }, ++ ++ style: function(element, value) { ++ element.style.cssText = value ? value : ''; ++ } ++ } ++ }; ++ ++ Element._attributeTranslations.has = {}; ++ ++ $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' + ++ 'encType maxLength readOnly longDesc frameBorder').each(function(attr) { ++ Element._attributeTranslations.write.names[attr.toLowerCase()] = attr; ++ Element._attributeTranslations.has[attr.toLowerCase()] = attr; ++ }); ++ ++ (function(v) { ++ Object.extend(v, { ++ href: v._getAttr2, ++ src: v._getAttr2, ++ type: v._getAttr, ++ action: v._getAttrNode, ++ disabled: v._flag, ++ checked: v._flag, ++ readonly: v._flag, ++ multiple: v._flag, ++ onload: v._getEv, ++ onunload: v._getEv, ++ onclick: v._getEv, ++ ondblclick: v._getEv, ++ onmousedown: v._getEv, ++ onmouseup: v._getEv, ++ onmouseover: v._getEv, ++ onmousemove: v._getEv, ++ onmouseout: v._getEv, ++ onfocus: v._getEv, ++ onblur: v._getEv, ++ onkeypress: v._getEv, ++ onkeydown: v._getEv, ++ onkeyup: v._getEv, ++ onsubmit: v._getEv, ++ onreset: v._getEv, ++ onselect: v._getEv, ++ onchange: v._getEv ++ }); ++ })(Element._attributeTranslations.read.values); ++ ++ if (Prototype.BrowserFeatures.ElementExtensions) { ++ (function() { ++ function _descendants(element) { ++ var nodes = element.getElementsByTagName('*'), results = []; ++ for (var i = 0, node; node = nodes[i]; i++) ++ if (node.tagName !== "!") // Filter out comment nodes. ++ results.push(node); ++ return results; ++ } ++ ++ Element.Methods.down = function(element, expression, index) { ++ element = $(element); ++ if (arguments.length == 1) return element.firstDescendant(); ++ return Object.isNumber(expression) ? _descendants(element)[expression] : ++ Element.select(element, expression)[index || 0]; ++ } ++ })(); ++ } ++ ++} ++ ++else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) { ++ Element.Methods.setOpacity = function(element, value) { ++ element = $(element); ++ element.style.opacity = (value == 1) ? 0.999999 : ++ (value === '') ? '' : (value < 0.00001) ? 0 : value; ++ return element; ++ }; ++} ++ ++else if (Prototype.Browser.WebKit) { ++ Element.Methods.setOpacity = function(element, value) { ++ element = $(element); ++ element.style.opacity = (value == 1 || value === '') ? '' : ++ (value < 0.00001) ? 0 : value; ++ ++ if (value == 1) ++ if (element.tagName.toUpperCase() == 'IMG' && element.width) { ++ element.width++; element.width--; ++ } else try { ++ var n = document.createTextNode(' '); ++ element.appendChild(n); ++ element.removeChild(n); ++ } catch (e) { } ++ ++ return element; ++ }; ++} ++ ++if ('outerHTML' in document.documentElement) { ++ Element.Methods.replace = function(element, content) { ++ element = $(element); ++ ++ if (content && content.toElement) content = content.toElement(); ++ if (Object.isElement(content)) { ++ element.parentNode.replaceChild(content, element); ++ return element; ++ } ++ ++ content = Object.toHTML(content); ++ var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); ++ ++ if (Element._insertionTranslations.tags[tagName]) { ++ var nextSibling = element.next(), ++ fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); ++ parent.removeChild(element); ++ if (nextSibling) ++ fragments.each(function(node) { parent.insertBefore(node, nextSibling) }); ++ else ++ fragments.each(function(node) { parent.appendChild(node) }); ++ } ++ else element.outerHTML = content.stripScripts(); ++ ++ content.evalScripts.bind(content).defer(); ++ return element; ++ }; ++} ++ ++Element._returnOffset = function(l, t) { ++ var result = [l, t]; ++ result.left = l; ++ result.top = t; ++ return result; ++}; ++ ++Element._getContentFromAnonymousElement = function(tagName, html, force) { ++ var div = new Element('div'), ++ t = Element._insertionTranslations.tags[tagName]; ++ ++ var workaround = false; ++ if (t) workaround = true; ++ else if (force) { ++ workaround = true; ++ t = ['', '', 0]; ++ } ++ ++ if (workaround) { ++ div.innerHTML = ' ' + t[0] + html + t[1]; ++ div.removeChild(div.firstChild); ++ for (var i = t[2]; i--; ) { ++ div = div.firstChild; ++ } ++ } ++ else { ++ div.innerHTML = html; ++ } ++ return $A(div.childNodes); ++}; ++ ++Element._insertionTranslations = { ++ before: function(element, node) { ++ element.parentNode.insertBefore(node, element); ++ }, ++ top: function(element, node) { ++ element.insertBefore(node, element.firstChild); ++ }, ++ bottom: function(element, node) { ++ element.appendChild(node); ++ }, ++ after: function(element, node) { ++ element.parentNode.insertBefore(node, element.nextSibling); ++ }, ++ tags: { ++ TABLE: ['', '
', 1], ++ TBODY: ['', '
', 2], ++ TR: ['', '
', 3], ++ TD: ['
', '
', 4], ++ SELECT: ['', 1] ++ } ++}; ++ ++(function() { ++ var tags = Element._insertionTranslations.tags; ++ Object.extend(tags, { ++ THEAD: tags.TBODY, ++ TFOOT: tags.TBODY, ++ TH: tags.TD ++ }); ++})(); ++ ++Element.Methods.Simulated = { ++ hasAttribute: function(element, attribute) { ++ attribute = Element._attributeTranslations.has[attribute] || attribute; ++ var node = $(element).getAttributeNode(attribute); ++ return !!(node && node.specified); ++ } ++}; ++ ++Element.Methods.ByTag = { }; ++ ++Object.extend(Element, Element.Methods); ++ ++(function(div) { ++ ++ if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) { ++ window.HTMLElement = { }; ++ window.HTMLElement.prototype = div['__proto__']; ++ Prototype.BrowserFeatures.ElementExtensions = true; ++ } ++ ++ div = null; ++ ++})(document.createElement('div')); ++ ++Element.extend = (function() { ++ ++ function checkDeficiency(tagName) { ++ if (typeof window.Element != 'undefined') { ++ var proto = window.Element.prototype; ++ if (proto) { ++ var id = '_' + (Math.random()+'').slice(2), ++ el = document.createElement(tagName); ++ proto[id] = 'x'; ++ var isBuggy = (el[id] !== 'x'); ++ delete proto[id]; ++ el = null; ++ return isBuggy; ++ } ++ } ++ return false; ++ } ++ ++ function extendElementWith(element, methods) { ++ for (var property in methods) { ++ var value = methods[property]; ++ if (Object.isFunction(value) && !(property in element)) ++ element[property] = value.methodize(); ++ } ++ } ++ ++ var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object'); ++ ++ if (Prototype.BrowserFeatures.SpecificElementExtensions) { ++ if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) { ++ return function(element) { ++ if (element && typeof element._extendedByPrototype == 'undefined') { ++ var t = element.tagName; ++ if (t && (/^(?:object|applet|embed)$/i.test(t))) { ++ extendElementWith(element, Element.Methods); ++ extendElementWith(element, Element.Methods.Simulated); ++ extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); ++ } ++ } ++ return element; ++ } ++ } ++ return Prototype.K; ++ } ++ ++ var Methods = { }, ByTag = Element.Methods.ByTag; ++ ++ var extend = Object.extend(function(element) { ++ if (!element || typeof element._extendedByPrototype != 'undefined' || ++ element.nodeType != 1 || element == window) return element; ++ ++ var methods = Object.clone(Methods), ++ tagName = element.tagName.toUpperCase(); ++ ++ if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); ++ ++ extendElementWith(element, methods); ++ ++ element._extendedByPrototype = Prototype.emptyFunction; ++ return element; ++ ++ }, { ++ refresh: function() { ++ if (!Prototype.BrowserFeatures.ElementExtensions) { ++ Object.extend(Methods, Element.Methods); ++ Object.extend(Methods, Element.Methods.Simulated); ++ } ++ } ++ }); ++ ++ extend.refresh(); ++ return extend; ++})(); ++ ++if (document.documentElement.hasAttribute) { ++ Element.hasAttribute = function(element, attribute) { ++ return element.hasAttribute(attribute); ++ }; ++} ++else { ++ Element.hasAttribute = Element.Methods.Simulated.hasAttribute; ++} ++ ++Element.addMethods = function(methods) { ++ var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag; ++ ++ if (!methods) { ++ Object.extend(Form, Form.Methods); ++ Object.extend(Form.Element, Form.Element.Methods); ++ Object.extend(Element.Methods.ByTag, { ++ "FORM": Object.clone(Form.Methods), ++ "INPUT": Object.clone(Form.Element.Methods), ++ "SELECT": Object.clone(Form.Element.Methods), ++ "TEXTAREA": Object.clone(Form.Element.Methods), ++ "BUTTON": Object.clone(Form.Element.Methods) ++ }); ++ } ++ ++ if (arguments.length == 2) { ++ var tagName = methods; ++ methods = arguments[1]; ++ } ++ ++ if (!tagName) Object.extend(Element.Methods, methods || { }); ++ else { ++ if (Object.isArray(tagName)) tagName.each(extend); ++ else extend(tagName); ++ } ++ ++ function extend(tagName) { ++ tagName = tagName.toUpperCase(); ++ if (!Element.Methods.ByTag[tagName]) ++ Element.Methods.ByTag[tagName] = { }; ++ Object.extend(Element.Methods.ByTag[tagName], methods); ++ } ++ ++ function copy(methods, destination, onlyIfAbsent) { ++ onlyIfAbsent = onlyIfAbsent || false; ++ for (var property in methods) { ++ var value = methods[property]; ++ if (!Object.isFunction(value)) continue; ++ if (!onlyIfAbsent || !(property in destination)) ++ destination[property] = value.methodize(); ++ } ++ } ++ ++ function findDOMClass(tagName) { ++ var klass; ++ var trans = { ++ "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", ++ "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", ++ "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", ++ "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", ++ "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": ++ "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": ++ "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": ++ "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": ++ "FrameSet", "IFRAME": "IFrame" ++ }; ++ if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; ++ if (window[klass]) return window[klass]; ++ klass = 'HTML' + tagName + 'Element'; ++ if (window[klass]) return window[klass]; ++ klass = 'HTML' + tagName.capitalize() + 'Element'; ++ if (window[klass]) return window[klass]; ++ ++ var element = document.createElement(tagName), ++ proto = element['__proto__'] || element.constructor.prototype; ++ ++ element = null; ++ return proto; ++ } ++ ++ var elementPrototype = window.HTMLElement ? HTMLElement.prototype : ++ Element.prototype; ++ ++ if (F.ElementExtensions) { ++ copy(Element.Methods, elementPrototype); ++ copy(Element.Methods.Simulated, elementPrototype, true); ++ } ++ ++ if (F.SpecificElementExtensions) { ++ for (var tag in Element.Methods.ByTag) { ++ var klass = findDOMClass(tag); ++ if (Object.isUndefined(klass)) continue; ++ copy(T[tag], klass.prototype); ++ } ++ } ++ ++ Object.extend(Element, Element.Methods); ++ delete Element.ByTag; ++ ++ if (Element.extend.refresh) Element.extend.refresh(); ++ Element.cache = { }; ++}; ++ ++ ++document.viewport = { ++ ++ getDimensions: function() { ++ return { width: this.getWidth(), height: this.getHeight() }; ++ }, ++ ++ getScrollOffsets: function() { ++ return Element._returnOffset( ++ window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, ++ window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop); ++ } ++}; ++ ++(function(viewport) { ++ var B = Prototype.Browser, doc = document, element, property = {}; ++ ++ function getRootElement() { ++ if (B.WebKit && !doc.evaluate) ++ return document; ++ ++ if (B.Opera && window.parseFloat(window.opera.version()) < 9.5) ++ return document.body; ++ ++ return document.documentElement; ++ } ++ ++ function define(D) { ++ if (!element) element = getRootElement(); ++ ++ property[D] = 'client' + D; ++ ++ viewport['get' + D] = function() { return element[property[D]] }; ++ return viewport['get' + D](); ++ } ++ ++ viewport.getWidth = define.curry('Width'); ++ ++ viewport.getHeight = define.curry('Height'); ++})(document.viewport); ++ ++ ++Element.Storage = { ++ UID: 1 ++}; ++ ++Element.addMethods({ ++ getStorage: function(element) { ++ if (!(element = $(element))) return; ++ ++ var uid; ++ if (element === window) { ++ uid = 0; ++ } else { ++ if (typeof element._prototypeUID === "undefined") ++ element._prototypeUID = Element.Storage.UID++; ++ uid = element._prototypeUID; ++ } ++ ++ if (!Element.Storage[uid]) ++ Element.Storage[uid] = $H(); ++ ++ return Element.Storage[uid]; ++ }, ++ ++ store: function(element, key, value) { ++ if (!(element = $(element))) return; ++ ++ if (arguments.length === 2) { ++ Element.getStorage(element).update(key); ++ } else { ++ Element.getStorage(element).set(key, value); ++ } ++ ++ return element; ++ }, ++ ++ retrieve: function(element, key, defaultValue) { ++ if (!(element = $(element))) return; ++ var hash = Element.getStorage(element), value = hash.get(key); ++ ++ if (Object.isUndefined(value)) { ++ hash.set(key, defaultValue); ++ value = defaultValue; ++ } ++ ++ return value; ++ }, ++ ++ clone: function(element, deep) { ++ if (!(element = $(element))) return; ++ var clone = element.cloneNode(deep); ++ clone._prototypeUID = void 0; ++ if (deep) { ++ var descendants = Element.select(clone, '*'), ++ i = descendants.length; ++ while (i--) { ++ descendants[i]._prototypeUID = void 0; ++ } ++ } ++ return Element.extend(clone); ++ }, ++ ++ purge: function(element) { ++ if (!(element = $(element))) return; ++ var purgeElement = Element._purgeElement; ++ ++ purgeElement(element); ++ ++ var descendants = element.getElementsByTagName('*'), ++ i = descendants.length; ++ ++ while (i--) purgeElement(descendants[i]); ++ ++ return null; ++ } ++}); ++ ++(function() { ++ ++ function toDecimal(pctString) { ++ var match = pctString.match(/^(\d+)%?$/i); ++ if (!match) return null; ++ return (Number(match[1]) / 100); ++ } ++ ++ function getPixelValue(value, property, context) { ++ var element = null; ++ if (Object.isElement(value)) { ++ element = value; ++ value = element.getStyle(property); ++ } ++ ++ if (value === null) { ++ return null; ++ } ++ ++ if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) { ++ return window.parseFloat(value); ++ } ++ ++ var isPercentage = value.include('%'), isViewport = (context === document.viewport); ++ ++ if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) { ++ var style = element.style.left, rStyle = element.runtimeStyle.left; ++ element.runtimeStyle.left = element.currentStyle.left; ++ element.style.left = value || 0; ++ value = element.style.pixelLeft; ++ element.style.left = style; ++ element.runtimeStyle.left = rStyle; ++ ++ return value; ++ } ++ ++ if (element && isPercentage) { ++ context = context || element.parentNode; ++ var decimal = toDecimal(value); ++ var whole = null; ++ var position = element.getStyle('position'); ++ ++ var isHorizontal = property.include('left') || property.include('right') || ++ property.include('width'); ++ ++ var isVertical = property.include('top') || property.include('bottom') || ++ property.include('height'); ++ ++ if (context === document.viewport) { ++ if (isHorizontal) { ++ whole = document.viewport.getWidth(); ++ } else if (isVertical) { ++ whole = document.viewport.getHeight(); ++ } ++ } else { ++ if (isHorizontal) { ++ whole = $(context).measure('width'); ++ } else if (isVertical) { ++ whole = $(context).measure('height'); ++ } ++ } ++ ++ return (whole === null) ? 0 : whole * decimal; ++ } ++ ++ return 0; ++ } ++ ++ function toCSSPixels(number) { ++ if (Object.isString(number) && number.endsWith('px')) { ++ return number; ++ } ++ return number + 'px'; ++ } ++ ++ function isDisplayed(element) { ++ var originalElement = element; ++ while (element && element.parentNode) { ++ var display = element.getStyle('display'); ++ if (display === 'none') { ++ return false; ++ } ++ element = $(element.parentNode); ++ } ++ return true; ++ } ++ ++ var hasLayout = Prototype.K; ++ if ('currentStyle' in document.documentElement) { ++ hasLayout = function(element) { ++ if (!element.currentStyle.hasLayout) { ++ element.style.zoom = 1; ++ } ++ return element; ++ }; ++ } ++ ++ function cssNameFor(key) { ++ if (key.include('border')) key = key + '-width'; ++ return key.camelize(); ++ } ++ ++ Element.Layout = Class.create(Hash, { ++ initialize: function($super, element, preCompute) { ++ $super(); ++ this.element = $(element); ++ ++ Element.Layout.PROPERTIES.each( function(property) { ++ this._set(property, null); ++ }, this); ++ ++ if (preCompute) { ++ this._preComputing = true; ++ this._begin(); ++ Element.Layout.PROPERTIES.each( this._compute, this ); ++ this._end(); ++ this._preComputing = false; ++ } ++ }, ++ ++ _set: function(property, value) { ++ return Hash.prototype.set.call(this, property, value); ++ }, ++ ++ set: function(property, value) { ++ throw "Properties of Element.Layout are read-only."; ++ }, ++ ++ get: function($super, property) { ++ var value = $super(property); ++ return value === null ? this._compute(property) : value; ++ }, ++ ++ _begin: function() { ++ if (this._prepared) return; ++ ++ var element = this.element; ++ if (isDisplayed(element)) { ++ this._prepared = true; ++ return; ++ } ++ ++ var originalStyles = { ++ position: element.style.position || '', ++ width: element.style.width || '', ++ visibility: element.style.visibility || '', ++ display: element.style.display || '' ++ }; ++ ++ element.store('prototype_original_styles', originalStyles); ++ ++ var position = element.getStyle('position'), ++ width = element.getStyle('width'); ++ ++ if (width === "0px" || width === null) { ++ element.style.display = 'block'; ++ width = element.getStyle('width'); ++ } ++ ++ var context = (position === 'fixed') ? document.viewport : ++ element.parentNode; ++ ++ element.setStyle({ ++ position: 'absolute', ++ visibility: 'hidden', ++ display: 'block' ++ }); ++ ++ var positionedWidth = element.getStyle('width'); ++ ++ var newWidth; ++ if (width && (positionedWidth === width)) { ++ newWidth = getPixelValue(element, 'width', context); ++ } else if (position === 'absolute' || position === 'fixed') { ++ newWidth = getPixelValue(element, 'width', context); ++ } else { ++ var parent = element.parentNode, pLayout = $(parent).getLayout(); ++ ++ newWidth = pLayout.get('width') - ++ this.get('margin-left') - ++ this.get('border-left') - ++ this.get('padding-left') - ++ this.get('padding-right') - ++ this.get('border-right') - ++ this.get('margin-right'); ++ } ++ ++ element.setStyle({ width: newWidth + 'px' }); ++ ++ this._prepared = true; ++ }, ++ ++ _end: function() { ++ var element = this.element; ++ var originalStyles = element.retrieve('prototype_original_styles'); ++ element.store('prototype_original_styles', null); ++ element.setStyle(originalStyles); ++ this._prepared = false; ++ }, ++ ++ _compute: function(property) { ++ var COMPUTATIONS = Element.Layout.COMPUTATIONS; ++ if (!(property in COMPUTATIONS)) { ++ throw "Property not found."; ++ } ++ ++ return this._set(property, COMPUTATIONS[property].call(this, this.element)); ++ }, ++ ++ toObject: function() { ++ var args = $A(arguments); ++ var keys = (args.length === 0) ? Element.Layout.PROPERTIES : ++ args.join(' ').split(' '); ++ var obj = {}; ++ keys.each( function(key) { ++ if (!Element.Layout.PROPERTIES.include(key)) return; ++ var value = this.get(key); ++ if (value != null) obj[key] = value; ++ }, this); ++ return obj; ++ }, ++ ++ toHash: function() { ++ var obj = this.toObject.apply(this, arguments); ++ return new Hash(obj); ++ }, ++ ++ toCSS: function() { ++ var args = $A(arguments); ++ var keys = (args.length === 0) ? Element.Layout.PROPERTIES : ++ args.join(' ').split(' '); ++ var css = {}; ++ ++ keys.each( function(key) { ++ if (!Element.Layout.PROPERTIES.include(key)) return; ++ if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return; ++ ++ var value = this.get(key); ++ if (value != null) css[cssNameFor(key)] = value + 'px'; ++ }, this); ++ return css; ++ }, ++ ++ inspect: function() { ++ return "#"; ++ } ++ }); ++ ++ Object.extend(Element.Layout, { ++ PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'), ++ ++ COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'), ++ ++ COMPUTATIONS: { ++ 'height': function(element) { ++ if (!this._preComputing) this._begin(); ++ ++ var bHeight = this.get('border-box-height'); ++ if (bHeight <= 0) { ++ if (!this._preComputing) this._end(); ++ return 0; ++ } ++ ++ var bTop = this.get('border-top'), ++ bBottom = this.get('border-bottom'); ++ ++ var pTop = this.get('padding-top'), ++ pBottom = this.get('padding-bottom'); ++ ++ if (!this._preComputing) this._end(); ++ ++ return bHeight - bTop - bBottom - pTop - pBottom; ++ }, ++ ++ 'width': function(element) { ++ if (!this._preComputing) this._begin(); ++ ++ var bWidth = this.get('border-box-width'); ++ if (bWidth <= 0) { ++ if (!this._preComputing) this._end(); ++ return 0; ++ } ++ ++ var bLeft = this.get('border-left'), ++ bRight = this.get('border-right'); ++ ++ var pLeft = this.get('padding-left'), ++ pRight = this.get('padding-right'); ++ ++ if (!this._preComputing) this._end(); ++ ++ return bWidth - bLeft - bRight - pLeft - pRight; ++ }, ++ ++ 'padding-box-height': function(element) { ++ var height = this.get('height'), ++ pTop = this.get('padding-top'), ++ pBottom = this.get('padding-bottom'); ++ ++ return height + pTop + pBottom; ++ }, ++ ++ 'padding-box-width': function(element) { ++ var width = this.get('width'), ++ pLeft = this.get('padding-left'), ++ pRight = this.get('padding-right'); ++ ++ return width + pLeft + pRight; ++ }, ++ ++ 'border-box-height': function(element) { ++ if (!this._preComputing) this._begin(); ++ var height = element.offsetHeight; ++ if (!this._preComputing) this._end(); ++ return height; ++ }, ++ ++ 'border-box-width': function(element) { ++ if (!this._preComputing) this._begin(); ++ var width = element.offsetWidth; ++ if (!this._preComputing) this._end(); ++ return width; ++ }, ++ ++ 'margin-box-height': function(element) { ++ var bHeight = this.get('border-box-height'), ++ mTop = this.get('margin-top'), ++ mBottom = this.get('margin-bottom'); ++ ++ if (bHeight <= 0) return 0; ++ ++ return bHeight + mTop + mBottom; ++ }, ++ ++ 'margin-box-width': function(element) { ++ var bWidth = this.get('border-box-width'), ++ mLeft = this.get('margin-left'), ++ mRight = this.get('margin-right'); ++ ++ if (bWidth <= 0) return 0; ++ ++ return bWidth + mLeft + mRight; ++ }, ++ ++ 'top': function(element) { ++ var offset = element.positionedOffset(); ++ return offset.top; ++ }, ++ ++ 'bottom': function(element) { ++ var offset = element.positionedOffset(), ++ parent = element.getOffsetParent(), ++ pHeight = parent.measure('height'); ++ ++ var mHeight = this.get('border-box-height'); ++ ++ return pHeight - mHeight - offset.top; ++ }, ++ ++ 'left': function(element) { ++ var offset = element.positionedOffset(); ++ return offset.left; ++ }, ++ ++ 'right': function(element) { ++ var offset = element.positionedOffset(), ++ parent = element.getOffsetParent(), ++ pWidth = parent.measure('width'); ++ ++ var mWidth = this.get('border-box-width'); ++ ++ return pWidth - mWidth - offset.left; ++ }, ++ ++ 'padding-top': function(element) { ++ return getPixelValue(element, 'paddingTop'); ++ }, ++ ++ 'padding-bottom': function(element) { ++ return getPixelValue(element, 'paddingBottom'); ++ }, ++ ++ 'padding-left': function(element) { ++ return getPixelValue(element, 'paddingLeft'); ++ }, ++ ++ 'padding-right': function(element) { ++ return getPixelValue(element, 'paddingRight'); ++ }, ++ ++ 'border-top': function(element) { ++ return getPixelValue(element, 'borderTopWidth'); ++ }, ++ ++ 'border-bottom': function(element) { ++ return getPixelValue(element, 'borderBottomWidth'); ++ }, ++ ++ 'border-left': function(element) { ++ return getPixelValue(element, 'borderLeftWidth'); ++ }, ++ ++ 'border-right': function(element) { ++ return getPixelValue(element, 'borderRightWidth'); ++ }, ++ ++ 'margin-top': function(element) { ++ return getPixelValue(element, 'marginTop'); ++ }, ++ ++ 'margin-bottom': function(element) { ++ return getPixelValue(element, 'marginBottom'); ++ }, ++ ++ 'margin-left': function(element) { ++ return getPixelValue(element, 'marginLeft'); ++ }, ++ ++ 'margin-right': function(element) { ++ return getPixelValue(element, 'marginRight'); ++ } ++ } ++ }); ++ ++ if ('getBoundingClientRect' in document.documentElement) { ++ Object.extend(Element.Layout.COMPUTATIONS, { ++ 'right': function(element) { ++ var parent = hasLayout(element.getOffsetParent()); ++ var rect = element.getBoundingClientRect(), ++ pRect = parent.getBoundingClientRect(); ++ ++ return (pRect.right - rect.right).round(); ++ }, ++ ++ 'bottom': function(element) { ++ var parent = hasLayout(element.getOffsetParent()); ++ var rect = element.getBoundingClientRect(), ++ pRect = parent.getBoundingClientRect(); ++ ++ return (pRect.bottom - rect.bottom).round(); ++ } ++ }); ++ } ++ ++ Element.Offset = Class.create({ ++ initialize: function(left, top) { ++ this.left = left.round(); ++ this.top = top.round(); ++ ++ this[0] = this.left; ++ this[1] = this.top; ++ }, ++ ++ relativeTo: function(offset) { ++ return new Element.Offset( ++ this.left - offset.left, ++ this.top - offset.top ++ ); ++ }, ++ ++ inspect: function() { ++ return "#".interpolate(this); ++ }, ++ ++ toString: function() { ++ return "[#{left}, #{top}]".interpolate(this); ++ }, ++ ++ toArray: function() { ++ return [this.left, this.top]; ++ } ++ }); ++ ++ function getLayout(element, preCompute) { ++ return new Element.Layout(element, preCompute); ++ } ++ ++ function measure(element, property) { ++ return $(element).getLayout().get(property); ++ } ++ ++ function getDimensions(element) { ++ element = $(element); ++ var display = Element.getStyle(element, 'display'); ++ ++ if (display && display !== 'none') { ++ return { width: element.offsetWidth, height: element.offsetHeight }; ++ } ++ ++ var style = element.style; ++ var originalStyles = { ++ visibility: style.visibility, ++ position: style.position, ++ display: style.display ++ }; ++ ++ var newStyles = { ++ visibility: 'hidden', ++ display: 'block' ++ }; ++ ++ if (originalStyles.position !== 'fixed') ++ newStyles.position = 'absolute'; ++ ++ Element.setStyle(element, newStyles); ++ ++ var dimensions = { ++ width: element.offsetWidth, ++ height: element.offsetHeight ++ }; ++ ++ Element.setStyle(element, originalStyles); ++ ++ return dimensions; ++ } ++ ++ function getOffsetParent(element) { ++ element = $(element); ++ ++ if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) ++ return $(document.body); ++ ++ var isInline = (Element.getStyle(element, 'display') === 'inline'); ++ if (!isInline && element.offsetParent) return $(element.offsetParent); ++ ++ while ((element = element.parentNode) && element !== document.body) { ++ if (Element.getStyle(element, 'position') !== 'static') { ++ return isHtml(element) ? $(document.body) : $(element); ++ } ++ } ++ ++ return $(document.body); ++ } ++ ++ ++ function cumulativeOffset(element) { ++ element = $(element); ++ var valueT = 0, valueL = 0; ++ if (element.parentNode) { ++ do { ++ valueT += element.offsetTop || 0; ++ valueL += element.offsetLeft || 0; ++ element = element.offsetParent; ++ } while (element); ++ } ++ return new Element.Offset(valueL, valueT); ++ } ++ ++ function positionedOffset(element) { ++ element = $(element); ++ ++ var layout = element.getLayout(); ++ ++ var valueT = 0, valueL = 0; ++ do { ++ valueT += element.offsetTop || 0; ++ valueL += element.offsetLeft || 0; ++ element = element.offsetParent; ++ if (element) { ++ if (isBody(element)) break; ++ var p = Element.getStyle(element, 'position'); ++ if (p !== 'static') break; ++ } ++ } while (element); ++ ++ valueL -= layout.get('margin-top'); ++ valueT -= layout.get('margin-left'); ++ ++ return new Element.Offset(valueL, valueT); ++ } ++ ++ function cumulativeScrollOffset(element) { ++ var valueT = 0, valueL = 0; ++ do { ++ valueT += element.scrollTop || 0; ++ valueL += element.scrollLeft || 0; ++ element = element.parentNode; ++ } while (element); ++ return new Element.Offset(valueL, valueT); ++ } ++ ++ function viewportOffset(forElement) { ++ element = $(element); ++ var valueT = 0, valueL = 0, docBody = document.body; ++ ++ var element = forElement; ++ do { ++ valueT += element.offsetTop || 0; ++ valueL += element.offsetLeft || 0; ++ if (element.offsetParent == docBody && ++ Element.getStyle(element, 'position') == 'absolute') break; ++ } while (element = element.offsetParent); ++ ++ element = forElement; ++ do { ++ if (element != docBody) { ++ valueT -= element.scrollTop || 0; ++ valueL -= element.scrollLeft || 0; ++ } ++ } while (element = element.parentNode); ++ return new Element.Offset(valueL, valueT); ++ } ++ ++ function absolutize(element) { ++ element = $(element); ++ ++ if (Element.getStyle(element, 'position') === 'absolute') { ++ return element; ++ } ++ ++ var offsetParent = getOffsetParent(element); ++ var eOffset = element.viewportOffset(), ++ pOffset = offsetParent.viewportOffset(); ++ ++ var offset = eOffset.relativeTo(pOffset); ++ var layout = element.getLayout(); ++ ++ element.store('prototype_absolutize_original_styles', { ++ left: element.getStyle('left'), ++ top: element.getStyle('top'), ++ width: element.getStyle('width'), ++ height: element.getStyle('height') ++ }); ++ ++ element.setStyle({ ++ position: 'absolute', ++ top: offset.top + 'px', ++ left: offset.left + 'px', ++ width: layout.get('width') + 'px', ++ height: layout.get('height') + 'px' ++ }); ++ ++ return element; ++ } ++ ++ function relativize(element) { ++ element = $(element); ++ if (Element.getStyle(element, 'position') === 'relative') { ++ return element; ++ } ++ ++ var originalStyles = ++ element.retrieve('prototype_absolutize_original_styles'); ++ ++ if (originalStyles) element.setStyle(originalStyles); ++ return element; ++ } ++ ++ if (Prototype.Browser.IE) { ++ getOffsetParent = getOffsetParent.wrap( ++ function(proceed, element) { ++ element = $(element); ++ ++ if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element)) ++ return $(document.body); ++ ++ var position = element.getStyle('position'); ++ if (position !== 'static') return proceed(element); ++ ++ element.setStyle({ position: 'relative' }); ++ var value = proceed(element); ++ element.setStyle({ position: position }); ++ return value; ++ } ++ ); ++ ++ positionedOffset = positionedOffset.wrap(function(proceed, element) { ++ element = $(element); ++ if (!element.parentNode) return new Element.Offset(0, 0); ++ var position = element.getStyle('position'); ++ if (position !== 'static') return proceed(element); ++ ++ var offsetParent = element.getOffsetParent(); ++ if (offsetParent && offsetParent.getStyle('position') === 'fixed') ++ hasLayout(offsetParent); ++ ++ element.setStyle({ position: 'relative' }); ++ var value = proceed(element); ++ element.setStyle({ position: position }); ++ return value; ++ }); ++ } else if (Prototype.Browser.Webkit) { ++ cumulativeOffset = function(element) { ++ element = $(element); ++ var valueT = 0, valueL = 0; ++ do { ++ valueT += element.offsetTop || 0; ++ valueL += element.offsetLeft || 0; ++ if (element.offsetParent == document.body) ++ if (Element.getStyle(element, 'position') == 'absolute') break; ++ ++ element = element.offsetParent; ++ } while (element); ++ ++ return new Element.Offset(valueL, valueT); ++ }; ++ } ++ ++ ++ Element.addMethods({ ++ getLayout: getLayout, ++ measure: measure, ++ getDimensions: getDimensions, ++ getOffsetParent: getOffsetParent, ++ cumulativeOffset: cumulativeOffset, ++ positionedOffset: positionedOffset, ++ cumulativeScrollOffset: cumulativeScrollOffset, ++ viewportOffset: viewportOffset, ++ absolutize: absolutize, ++ relativize: relativize ++ }); ++ ++ function isBody(element) { ++ return element.nodeName.toUpperCase() === 'BODY'; ++ } ++ ++ function isHtml(element) { ++ return element.nodeName.toUpperCase() === 'HTML'; ++ } ++ ++ function isDocument(element) { ++ return element.nodeType === Node.DOCUMENT_NODE; ++ } ++ ++ function isDetached(element) { ++ return element !== document.body && ++ !Element.descendantOf(element, document.body); ++ } ++ ++ if ('getBoundingClientRect' in document.documentElement) { ++ Element.addMethods({ ++ viewportOffset: function(element) { ++ element = $(element); ++ if (isDetached(element)) return new Element.Offset(0, 0); ++ ++ var rect = element.getBoundingClientRect(), ++ docEl = document.documentElement; ++ return new Element.Offset(rect.left - docEl.clientLeft, ++ rect.top - docEl.clientTop); ++ } ++ }); ++ } ++})(); ++window.$$ = function() { ++ var expression = $A(arguments).join(', '); ++ return Prototype.Selector.select(expression, document); ++}; ++ ++Prototype.Selector = (function() { ++ ++ function select() { ++ throw new Error('Method "Prototype.Selector.select" must be defined.'); ++ } ++ ++ function match() { ++ throw new Error('Method "Prototype.Selector.match" must be defined.'); ++ } ++ ++ function find(elements, expression, index) { ++ index = index || 0; ++ var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i; ++ ++ for (i = 0; i < length; i++) { ++ if (match(elements[i], expression) && index == matchIndex++) { ++ return Element.extend(elements[i]); ++ } ++ } ++ } ++ ++ function extendElements(elements) { ++ for (var i = 0, length = elements.length; i < length; i++) { ++ Element.extend(elements[i]); ++ } ++ return elements; ++ } ++ ++ ++ var K = Prototype.K; ++ ++ return { ++ select: select, ++ match: match, ++ find: find, ++ extendElements: (Element.extend === K) ? K : extendElements, ++ extendElement: Element.extend ++ }; ++})(); ++/*! ++ * Sizzle CSS Selector Engine - v1.0 ++ * Copyright 2009, The Dojo Foundation ++ * Released under the MIT, BSD, and GPL Licenses. ++ * More information: http://sizzlejs.com/ ++ */ ++(function(){ ++ ++var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, ++ done = 0, ++ toString = Object.prototype.toString, ++ hasDuplicate = false, ++ baseHasDuplicate = true; ++ ++[0, 0].sort(function(){ ++ baseHasDuplicate = false; ++ return 0; ++}); ++ ++var Sizzle = function(selector, context, results, seed) { ++ results = results || []; ++ var origContext = context = context || document; ++ ++ if ( context.nodeType !== 1 && context.nodeType !== 9 ) { ++ return []; ++ } ++ ++ if ( !selector || typeof selector !== "string" ) { ++ return results; ++ } ++ ++ var parts = [], m, set, checkSet, check, mode, extra, prune = true, contextXML = isXML(context), ++ soFar = selector; ++ ++ while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { ++ soFar = m[3]; ++ ++ parts.push( m[1] ); ++ ++ if ( m[2] ) { ++ extra = m[3]; ++ break; ++ } ++ } ++ ++ if ( parts.length > 1 && origPOS.exec( selector ) ) { ++ if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { ++ set = posProcess( parts[0] + parts[1], context ); ++ } else { ++ set = Expr.relative[ parts[0] ] ? ++ [ context ] : ++ Sizzle( parts.shift(), context ); ++ ++ while ( parts.length ) { ++ selector = parts.shift(); ++ ++ if ( Expr.relative[ selector ] ) ++ selector += parts.shift(); ++ ++ set = posProcess( selector, set ); ++ } ++ } ++ } else { ++ if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && ++ Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { ++ var ret = Sizzle.find( parts.shift(), context, contextXML ); ++ context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; ++ } ++ ++ if ( context ) { ++ var ret = seed ? ++ { expr: parts.pop(), set: makeArray(seed) } : ++ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); ++ set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; ++ ++ if ( parts.length > 0 ) { ++ checkSet = makeArray(set); ++ } else { ++ prune = false; ++ } ++ ++ while ( parts.length ) { ++ var cur = parts.pop(), pop = cur; ++ ++ if ( !Expr.relative[ cur ] ) { ++ cur = ""; ++ } else { ++ pop = parts.pop(); ++ } ++ ++ if ( pop == null ) { ++ pop = context; ++ } ++ ++ Expr.relative[ cur ]( checkSet, pop, contextXML ); ++ } ++ } else { ++ checkSet = parts = []; ++ } ++ } ++ ++ if ( !checkSet ) { ++ checkSet = set; ++ } ++ ++ if ( !checkSet ) { ++ throw "Syntax error, unrecognized expression: " + (cur || selector); ++ } ++ ++ if ( toString.call(checkSet) === "[object Array]" ) { ++ if ( !prune ) { ++ results.push.apply( results, checkSet ); ++ } else if ( context && context.nodeType === 1 ) { ++ for ( var i = 0; checkSet[i] != null; i++ ) { ++ if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { ++ results.push( set[i] ); ++ } ++ } ++ } else { ++ for ( var i = 0; checkSet[i] != null; i++ ) { ++ if ( checkSet[i] && checkSet[i].nodeType === 1 ) { ++ results.push( set[i] ); ++ } ++ } ++ } ++ } else { ++ makeArray( checkSet, results ); ++ } ++ ++ if ( extra ) { ++ Sizzle( extra, origContext, results, seed ); ++ Sizzle.uniqueSort( results ); ++ } ++ ++ return results; ++}; ++ ++Sizzle.uniqueSort = function(results){ ++ if ( sortOrder ) { ++ hasDuplicate = baseHasDuplicate; ++ results.sort(sortOrder); ++ ++ if ( hasDuplicate ) { ++ for ( var i = 1; i < results.length; i++ ) { ++ if ( results[i] === results[i-1] ) { ++ results.splice(i--, 1); ++ } ++ } ++ } ++ } ++ ++ return results; ++}; ++ ++Sizzle.matches = function(expr, set){ ++ return Sizzle(expr, null, null, set); ++}; ++ ++Sizzle.find = function(expr, context, isXML){ ++ var set, match; ++ ++ if ( !expr ) { ++ return []; ++ } ++ ++ for ( var i = 0, l = Expr.order.length; i < l; i++ ) { ++ var type = Expr.order[i], match; ++ ++ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { ++ var left = match[1]; ++ match.splice(1,1); ++ ++ if ( left.substr( left.length - 1 ) !== "\\" ) { ++ match[1] = (match[1] || "").replace(/\\/g, ""); ++ set = Expr.find[ type ]( match, context, isXML ); ++ if ( set != null ) { ++ expr = expr.replace( Expr.match[ type ], "" ); ++ break; ++ } ++ } ++ } ++ } ++ ++ if ( !set ) { ++ set = context.getElementsByTagName("*"); ++ } ++ ++ return {set: set, expr: expr}; ++}; ++ ++Sizzle.filter = function(expr, set, inplace, not){ ++ var old = expr, result = [], curLoop = set, match, anyFound, ++ isXMLFilter = set && set[0] && isXML(set[0]); ++ ++ while ( expr && set.length ) { ++ for ( var type in Expr.filter ) { ++ if ( (match = Expr.match[ type ].exec( expr )) != null ) { ++ var filter = Expr.filter[ type ], found, item; ++ anyFound = false; ++ ++ if ( curLoop == result ) { ++ result = []; ++ } ++ ++ if ( Expr.preFilter[ type ] ) { ++ match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); ++ ++ if ( !match ) { ++ anyFound = found = true; ++ } else if ( match === true ) { ++ continue; ++ } ++ } ++ ++ if ( match ) { ++ for ( var i = 0; (item = curLoop[i]) != null; i++ ) { ++ if ( item ) { ++ found = filter( item, match, i, curLoop ); ++ var pass = not ^ !!found; ++ ++ if ( inplace && found != null ) { ++ if ( pass ) { ++ anyFound = true; ++ } else { ++ curLoop[i] = false; ++ } ++ } else if ( pass ) { ++ result.push( item ); ++ anyFound = true; ++ } ++ } ++ } ++ } ++ ++ if ( found !== undefined ) { ++ if ( !inplace ) { ++ curLoop = result; ++ } ++ ++ expr = expr.replace( Expr.match[ type ], "" ); ++ ++ if ( !anyFound ) { ++ return []; ++ } ++ ++ break; ++ } ++ } ++ } ++ ++ if ( expr == old ) { ++ if ( anyFound == null ) { ++ throw "Syntax error, unrecognized expression: " + expr; ++ } else { ++ break; ++ } ++ } ++ ++ old = expr; ++ } ++ ++ return curLoop; ++}; ++ ++var Expr = Sizzle.selectors = { ++ order: [ "ID", "NAME", "TAG" ], ++ match: { ++ ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, ++ CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, ++ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, ++ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, ++ TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, ++ CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, ++ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, ++ PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/ ++ }, ++ leftMatch: {}, ++ attrMap: { ++ "class": "className", ++ "for": "htmlFor" ++ }, ++ attrHandle: { ++ href: function(elem){ ++ return elem.getAttribute("href"); ++ } ++ }, ++ relative: { ++ "+": function(checkSet, part, isXML){ ++ var isPartStr = typeof part === "string", ++ isTag = isPartStr && !/\W/.test(part), ++ isPartStrNotTag = isPartStr && !isTag; ++ ++ if ( isTag && !isXML ) { ++ part = part.toUpperCase(); ++ } ++ ++ for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { ++ if ( (elem = checkSet[i]) ) { ++ while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} ++ ++ checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ? ++ elem || false : ++ elem === part; ++ } ++ } ++ ++ if ( isPartStrNotTag ) { ++ Sizzle.filter( part, checkSet, true ); ++ } ++ }, ++ ">": function(checkSet, part, isXML){ ++ var isPartStr = typeof part === "string"; ++ ++ if ( isPartStr && !/\W/.test(part) ) { ++ part = isXML ? part : part.toUpperCase(); ++ ++ for ( var i = 0, l = checkSet.length; i < l; i++ ) { ++ var elem = checkSet[i]; ++ if ( elem ) { ++ var parent = elem.parentNode; ++ checkSet[i] = parent.nodeName === part ? parent : false; ++ } ++ } ++ } else { ++ for ( var i = 0, l = checkSet.length; i < l; i++ ) { ++ var elem = checkSet[i]; ++ if ( elem ) { ++ checkSet[i] = isPartStr ? ++ elem.parentNode : ++ elem.parentNode === part; ++ } ++ } ++ ++ if ( isPartStr ) { ++ Sizzle.filter( part, checkSet, true ); ++ } ++ } ++ }, ++ "": function(checkSet, part, isXML){ ++ var doneName = done++, checkFn = dirCheck; ++ ++ if ( !/\W/.test(part) ) { ++ var nodeCheck = part = isXML ? part : part.toUpperCase(); ++ checkFn = dirNodeCheck; ++ } ++ ++ checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); ++ }, ++ "~": function(checkSet, part, isXML){ ++ var doneName = done++, checkFn = dirCheck; ++ ++ if ( typeof part === "string" && !/\W/.test(part) ) { ++ var nodeCheck = part = isXML ? part : part.toUpperCase(); ++ checkFn = dirNodeCheck; ++ } ++ ++ checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); ++ } ++ }, ++ find: { ++ ID: function(match, context, isXML){ ++ if ( typeof context.getElementById !== "undefined" && !isXML ) { ++ var m = context.getElementById(match[1]); ++ return m ? [m] : []; ++ } ++ }, ++ NAME: function(match, context, isXML){ ++ if ( typeof context.getElementsByName !== "undefined" ) { ++ var ret = [], results = context.getElementsByName(match[1]); ++ ++ for ( var i = 0, l = results.length; i < l; i++ ) { ++ if ( results[i].getAttribute("name") === match[1] ) { ++ ret.push( results[i] ); ++ } ++ } ++ ++ return ret.length === 0 ? null : ret; ++ } ++ }, ++ TAG: function(match, context){ ++ return context.getElementsByTagName(match[1]); ++ } ++ }, ++ preFilter: { ++ CLASS: function(match, curLoop, inplace, result, not, isXML){ ++ match = " " + match[1].replace(/\\/g, "") + " "; ++ ++ if ( isXML ) { ++ return match; ++ } ++ ++ for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { ++ if ( elem ) { ++ if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) { ++ if ( !inplace ) ++ result.push( elem ); ++ } else if ( inplace ) { ++ curLoop[i] = false; ++ } ++ } ++ } ++ ++ return false; ++ }, ++ ID: function(match){ ++ return match[1].replace(/\\/g, ""); ++ }, ++ TAG: function(match, curLoop){ ++ for ( var i = 0; curLoop[i] === false; i++ ){} ++ return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase(); ++ }, ++ CHILD: function(match){ ++ if ( match[1] == "nth" ) { ++ var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( ++ match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" || ++ !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); ++ ++ match[2] = (test[1] + (test[2] || 1)) - 0; ++ match[3] = test[3] - 0; ++ } ++ ++ match[0] = done++; ++ ++ return match; ++ }, ++ ATTR: function(match, curLoop, inplace, result, not, isXML){ ++ var name = match[1].replace(/\\/g, ""); ++ ++ if ( !isXML && Expr.attrMap[name] ) { ++ match[1] = Expr.attrMap[name]; ++ } ++ ++ if ( match[2] === "~=" ) { ++ match[4] = " " + match[4] + " "; ++ } ++ ++ return match; ++ }, ++ PSEUDO: function(match, curLoop, inplace, result, not){ ++ if ( match[1] === "not" ) { ++ if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { ++ match[3] = Sizzle(match[3], null, null, curLoop); ++ } else { ++ var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); ++ if ( !inplace ) { ++ result.push.apply( result, ret ); ++ } ++ return false; ++ } ++ } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { ++ return true; ++ } ++ ++ return match; ++ }, ++ POS: function(match){ ++ match.unshift( true ); ++ return match; ++ } ++ }, ++ filters: { ++ enabled: function(elem){ ++ return elem.disabled === false && elem.type !== "hidden"; ++ }, ++ disabled: function(elem){ ++ return elem.disabled === true; ++ }, ++ checked: function(elem){ ++ return elem.checked === true; ++ }, ++ selected: function(elem){ ++ elem.parentNode.selectedIndex; ++ return elem.selected === true; ++ }, ++ parent: function(elem){ ++ return !!elem.firstChild; ++ }, ++ empty: function(elem){ ++ return !elem.firstChild; ++ }, ++ has: function(elem, i, match){ ++ return !!Sizzle( match[3], elem ).length; ++ }, ++ header: function(elem){ ++ return /h\d/i.test( elem.nodeName ); ++ }, ++ text: function(elem){ ++ return "text" === elem.type; ++ }, ++ radio: function(elem){ ++ return "radio" === elem.type; ++ }, ++ checkbox: function(elem){ ++ return "checkbox" === elem.type; ++ }, ++ file: function(elem){ ++ return "file" === elem.type; ++ }, ++ password: function(elem){ ++ return "password" === elem.type; ++ }, ++ submit: function(elem){ ++ return "submit" === elem.type; ++ }, ++ image: function(elem){ ++ return "image" === elem.type; ++ }, ++ reset: function(elem){ ++ return "reset" === elem.type; ++ }, ++ button: function(elem){ ++ return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON"; ++ }, ++ input: function(elem){ ++ return /input|select|textarea|button/i.test(elem.nodeName); ++ } ++ }, ++ setFilters: { ++ first: function(elem, i){ ++ return i === 0; ++ }, ++ last: function(elem, i, match, array){ ++ return i === array.length - 1; ++ }, ++ even: function(elem, i){ ++ return i % 2 === 0; ++ }, ++ odd: function(elem, i){ ++ return i % 2 === 1; ++ }, ++ lt: function(elem, i, match){ ++ return i < match[3] - 0; ++ }, ++ gt: function(elem, i, match){ ++ return i > match[3] - 0; ++ }, ++ nth: function(elem, i, match){ ++ return match[3] - 0 == i; ++ }, ++ eq: function(elem, i, match){ ++ return match[3] - 0 == i; ++ } ++ }, ++ filter: { ++ PSEUDO: function(elem, match, i, array){ ++ var name = match[1], filter = Expr.filters[ name ]; ++ ++ if ( filter ) { ++ return filter( elem, i, match, array ); ++ } else if ( name === "contains" ) { ++ return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0; ++ } else if ( name === "not" ) { ++ var not = match[3]; ++ ++ for ( var i = 0, l = not.length; i < l; i++ ) { ++ if ( not[i] === elem ) { ++ return false; ++ } ++ } ++ ++ return true; ++ } ++ }, ++ CHILD: function(elem, match){ ++ var type = match[1], node = elem; ++ switch (type) { ++ case 'only': ++ case 'first': ++ while ( (node = node.previousSibling) ) { ++ if ( node.nodeType === 1 ) return false; ++ } ++ if ( type == 'first') return true; ++ node = elem; ++ case 'last': ++ while ( (node = node.nextSibling) ) { ++ if ( node.nodeType === 1 ) return false; ++ } ++ return true; ++ case 'nth': ++ var first = match[2], last = match[3]; ++ ++ if ( first == 1 && last == 0 ) { ++ return true; ++ } ++ ++ var doneName = match[0], ++ parent = elem.parentNode; ++ ++ if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { ++ var count = 0; ++ for ( node = parent.firstChild; node; node = node.nextSibling ) { ++ if ( node.nodeType === 1 ) { ++ node.nodeIndex = ++count; ++ } ++ } ++ parent.sizcache = doneName; ++ } ++ ++ var diff = elem.nodeIndex - last; ++ if ( first == 0 ) { ++ return diff == 0; ++ } else { ++ return ( diff % first == 0 && diff / first >= 0 ); ++ } ++ } ++ }, ++ ID: function(elem, match){ ++ return elem.nodeType === 1 && elem.getAttribute("id") === match; ++ }, ++ TAG: function(elem, match){ ++ return (match === "*" && elem.nodeType === 1) || elem.nodeName === match; ++ }, ++ CLASS: function(elem, match){ ++ return (" " + (elem.className || elem.getAttribute("class")) + " ") ++ .indexOf( match ) > -1; ++ }, ++ ATTR: function(elem, match){ ++ var name = match[1], ++ result = Expr.attrHandle[ name ] ? ++ Expr.attrHandle[ name ]( elem ) : ++ elem[ name ] != null ? ++ elem[ name ] : ++ elem.getAttribute( name ), ++ value = result + "", ++ type = match[2], ++ check = match[4]; ++ ++ return result == null ? ++ type === "!=" : ++ type === "=" ? ++ value === check : ++ type === "*=" ? ++ value.indexOf(check) >= 0 : ++ type === "~=" ? ++ (" " + value + " ").indexOf(check) >= 0 : ++ !check ? ++ value && result !== false : ++ type === "!=" ? ++ value != check : ++ type === "^=" ? ++ value.indexOf(check) === 0 : ++ type === "$=" ? ++ value.substr(value.length - check.length) === check : ++ type === "|=" ? ++ value === check || value.substr(0, check.length + 1) === check + "-" : ++ false; ++ }, ++ POS: function(elem, match, i, array){ ++ var name = match[2], filter = Expr.setFilters[ name ]; ++ ++ if ( filter ) { ++ return filter( elem, i, match, array ); ++ } ++ } ++ } ++}; ++ ++var origPOS = Expr.match.POS; ++ ++for ( var type in Expr.match ) { ++ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); ++ Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source ); ++} ++ ++var makeArray = function(array, results) { ++ array = Array.prototype.slice.call( array, 0 ); ++ ++ if ( results ) { ++ results.push.apply( results, array ); ++ return results; ++ } ++ ++ return array; ++}; ++ ++try { ++ Array.prototype.slice.call( document.documentElement.childNodes, 0 ); ++ ++} catch(e){ ++ makeArray = function(array, results) { ++ var ret = results || []; ++ ++ if ( toString.call(array) === "[object Array]" ) { ++ Array.prototype.push.apply( ret, array ); ++ } else { ++ if ( typeof array.length === "number" ) { ++ for ( var i = 0, l = array.length; i < l; i++ ) { ++ ret.push( array[i] ); ++ } ++ } else { ++ for ( var i = 0; array[i]; i++ ) { ++ ret.push( array[i] ); ++ } ++ } ++ } ++ ++ return ret; ++ }; ++} ++ ++var sortOrder; ++ ++if ( document.documentElement.compareDocumentPosition ) { ++ sortOrder = function( a, b ) { ++ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { ++ if ( a == b ) { ++ hasDuplicate = true; ++ } ++ return 0; ++ } ++ ++ var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; ++ if ( ret === 0 ) { ++ hasDuplicate = true; ++ } ++ return ret; ++ }; ++} else if ( "sourceIndex" in document.documentElement ) { ++ sortOrder = function( a, b ) { ++ if ( !a.sourceIndex || !b.sourceIndex ) { ++ if ( a == b ) { ++ hasDuplicate = true; ++ } ++ return 0; ++ } ++ ++ var ret = a.sourceIndex - b.sourceIndex; ++ if ( ret === 0 ) { ++ hasDuplicate = true; ++ } ++ return ret; ++ }; ++} else if ( document.createRange ) { ++ sortOrder = function( a, b ) { ++ if ( !a.ownerDocument || !b.ownerDocument ) { ++ if ( a == b ) { ++ hasDuplicate = true; ++ } ++ return 0; ++ } ++ ++ var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); ++ aRange.setStart(a, 0); ++ aRange.setEnd(a, 0); ++ bRange.setStart(b, 0); ++ bRange.setEnd(b, 0); ++ var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); ++ if ( ret === 0 ) { ++ hasDuplicate = true; ++ } ++ return ret; ++ }; ++} ++ ++(function(){ ++ var form = document.createElement("div"), ++ id = "script" + (new Date).getTime(); ++ form.innerHTML = ""; ++ ++ var root = document.documentElement; ++ root.insertBefore( form, root.firstChild ); ++ ++ if ( !!document.getElementById( id ) ) { ++ Expr.find.ID = function(match, context, isXML){ ++ if ( typeof context.getElementById !== "undefined" && !isXML ) { ++ var m = context.getElementById(match[1]); ++ return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; ++ } ++ }; ++ ++ Expr.filter.ID = function(elem, match){ ++ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); ++ return elem.nodeType === 1 && node && node.nodeValue === match; ++ }; ++ } ++ ++ root.removeChild( form ); ++ root = form = null; // release memory in IE ++})(); ++ ++(function(){ ++ ++ var div = document.createElement("div"); ++ div.appendChild( document.createComment("") ); ++ ++ if ( div.getElementsByTagName("*").length > 0 ) { ++ Expr.find.TAG = function(match, context){ ++ var results = context.getElementsByTagName(match[1]); ++ ++ if ( match[1] === "*" ) { ++ var tmp = []; ++ ++ for ( var i = 0; results[i]; i++ ) { ++ if ( results[i].nodeType === 1 ) { ++ tmp.push( results[i] ); ++ } ++ } ++ ++ results = tmp; ++ } ++ ++ return results; ++ }; ++ } ++ ++ div.innerHTML = ""; ++ if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && ++ div.firstChild.getAttribute("href") !== "#" ) { ++ Expr.attrHandle.href = function(elem){ ++ return elem.getAttribute("href", 2); ++ }; ++ } ++ ++ div = null; // release memory in IE ++})(); ++ ++if ( document.querySelectorAll ) (function(){ ++ var oldSizzle = Sizzle, div = document.createElement("div"); ++ div.innerHTML = "

"; ++ ++ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { ++ return; ++ } ++ ++ Sizzle = function(query, context, extra, seed){ ++ context = context || document; ++ ++ if ( !seed && context.nodeType === 9 && !isXML(context) ) { ++ try { ++ return makeArray( context.querySelectorAll(query), extra ); ++ } catch(e){} ++ } ++ ++ return oldSizzle(query, context, extra, seed); ++ }; ++ ++ for ( var prop in oldSizzle ) { ++ Sizzle[ prop ] = oldSizzle[ prop ]; ++ } ++ ++ div = null; // release memory in IE ++})(); ++ ++if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){ ++ var div = document.createElement("div"); ++ div.innerHTML = "
"; ++ ++ if ( div.getElementsByClassName("e").length === 0 ) ++ return; ++ ++ div.lastChild.className = "e"; ++ ++ if ( div.getElementsByClassName("e").length === 1 ) ++ return; ++ ++ Expr.order.splice(1, 0, "CLASS"); ++ Expr.find.CLASS = function(match, context, isXML) { ++ if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { ++ return context.getElementsByClassName(match[1]); ++ } ++ }; ++ ++ div = null; // release memory in IE ++})(); ++ ++function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { ++ var sibDir = dir == "previousSibling" && !isXML; ++ for ( var i = 0, l = checkSet.length; i < l; i++ ) { ++ var elem = checkSet[i]; ++ if ( elem ) { ++ if ( sibDir && elem.nodeType === 1 ){ ++ elem.sizcache = doneName; ++ elem.sizset = i; ++ } ++ elem = elem[dir]; ++ var match = false; ++ ++ while ( elem ) { ++ if ( elem.sizcache === doneName ) { ++ match = checkSet[elem.sizset]; ++ break; ++ } ++ ++ if ( elem.nodeType === 1 && !isXML ){ ++ elem.sizcache = doneName; ++ elem.sizset = i; ++ } ++ ++ if ( elem.nodeName === cur ) { ++ match = elem; ++ break; ++ } ++ ++ elem = elem[dir]; ++ } ++ ++ checkSet[i] = match; ++ } ++ } ++} ++ ++function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { ++ var sibDir = dir == "previousSibling" && !isXML; ++ for ( var i = 0, l = checkSet.length; i < l; i++ ) { ++ var elem = checkSet[i]; ++ if ( elem ) { ++ if ( sibDir && elem.nodeType === 1 ) { ++ elem.sizcache = doneName; ++ elem.sizset = i; ++ } ++ elem = elem[dir]; ++ var match = false; ++ ++ while ( elem ) { ++ if ( elem.sizcache === doneName ) { ++ match = checkSet[elem.sizset]; ++ break; ++ } ++ ++ if ( elem.nodeType === 1 ) { ++ if ( !isXML ) { ++ elem.sizcache = doneName; ++ elem.sizset = i; ++ } ++ if ( typeof cur !== "string" ) { ++ if ( elem === cur ) { ++ match = true; ++ break; ++ } ++ ++ } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { ++ match = elem; ++ break; ++ } ++ } ++ ++ elem = elem[dir]; ++ } ++ ++ checkSet[i] = match; ++ } ++ } ++} ++ ++var contains = document.compareDocumentPosition ? function(a, b){ ++ return a.compareDocumentPosition(b) & 16; ++} : function(a, b){ ++ return a !== b && (a.contains ? a.contains(b) : true); ++}; ++ ++var isXML = function(elem){ ++ return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || ++ !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML"; ++}; ++ ++var posProcess = function(selector, context){ ++ var tmpSet = [], later = "", match, ++ root = context.nodeType ? [context] : context; ++ ++ while ( (match = Expr.match.PSEUDO.exec( selector )) ) { ++ later += match[0]; ++ selector = selector.replace( Expr.match.PSEUDO, "" ); ++ } ++ ++ selector = Expr.relative[selector] ? selector + "*" : selector; ++ ++ for ( var i = 0, l = root.length; i < l; i++ ) { ++ Sizzle( selector, root[i], tmpSet ); ++ } ++ ++ return Sizzle.filter( later, tmpSet ); ++}; ++ ++ ++window.Sizzle = Sizzle; ++ ++})(); ++ ++Prototype._original_property = window.Sizzle; ++ ++;(function(engine) { ++ var extendElements = Prototype.Selector.extendElements; ++ ++ function select(selector, scope) { ++ return extendElements(engine(selector, scope || document)); ++ } ++ ++ function match(element, selector) { ++ return engine.matches(selector, [element]).length == 1; ++ } ++ ++ Prototype.Selector.engine = engine; ++ Prototype.Selector.select = select; ++ Prototype.Selector.match = match; ++})(Sizzle); ++ ++window.Sizzle = Prototype._original_property; ++delete Prototype._original_property; ++ ++var Form = { ++ reset: function(form) { ++ form = $(form); ++ form.reset(); ++ return form; ++ }, ++ ++ serializeElements: function(elements, options) { ++ if (typeof options != 'object') options = { hash: !!options }; ++ else if (Object.isUndefined(options.hash)) options.hash = true; ++ var key, value, submitted = false, submit = options.submit, accumulator, initial; ++ ++ if (options.hash) { ++ initial = {}; ++ accumulator = function(result, key, value) { ++ if (key in result) { ++ if (!Object.isArray(result[key])) result[key] = [result[key]]; ++ result[key].push(value); ++ } else result[key] = value; ++ return result; ++ }; ++ } else { ++ initial = ''; ++ accumulator = function(result, key, value) { ++ return result + (result ? '&' : '') + encodeURIComponent(key) + '=' + encodeURIComponent(value); ++ } ++ } ++ ++ return elements.inject(initial, function(result, element) { ++ if (!element.disabled && element.name) { ++ key = element.name; value = $(element).getValue(); ++ if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && ++ submit !== false && (!submit || key == submit) && (submitted = true)))) { ++ result = accumulator(result, key, value); ++ } ++ } ++ return result; ++ }); ++ } ++}; ++ ++Form.Methods = { ++ serialize: function(form, options) { ++ return Form.serializeElements(Form.getElements(form), options); ++ }, ++ ++ getElements: function(form) { ++ var elements = $(form).getElementsByTagName('*'), ++ element, ++ arr = [ ], ++ serializers = Form.Element.Serializers; ++ for (var i = 0; element = elements[i]; i++) { ++ arr.push(element); ++ } ++ return arr.inject([], function(elements, child) { ++ if (serializers[child.tagName.toLowerCase()]) ++ elements.push(Element.extend(child)); ++ return elements; ++ }) ++ }, ++ ++ getInputs: function(form, typeName, name) { ++ form = $(form); ++ var inputs = form.getElementsByTagName('input'); ++ ++ if (!typeName && !name) return $A(inputs).map(Element.extend); ++ ++ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { ++ var input = inputs[i]; ++ if ((typeName && input.type != typeName) || (name && input.name != name)) ++ continue; ++ matchingInputs.push(Element.extend(input)); ++ } ++ ++ return matchingInputs; ++ }, ++ ++ disable: function(form) { ++ form = $(form); ++ Form.getElements(form).invoke('disable'); ++ return form; ++ }, ++ ++ enable: function(form) { ++ form = $(form); ++ Form.getElements(form).invoke('enable'); ++ return form; ++ }, ++ ++ findFirstElement: function(form) { ++ var elements = $(form).getElements().findAll(function(element) { ++ return 'hidden' != element.type && !element.disabled; ++ }); ++ var firstByIndex = elements.findAll(function(element) { ++ return element.hasAttribute('tabIndex') && element.tabIndex >= 0; ++ }).sortBy(function(element) { return element.tabIndex }).first(); ++ ++ return firstByIndex ? firstByIndex : elements.find(function(element) { ++ return /^(?:input|select|textarea)$/i.test(element.tagName); ++ }); ++ }, ++ ++ focusFirstElement: function(form) { ++ form = $(form); ++ var element = form.findFirstElement(); ++ if (element) element.activate(); ++ return form; ++ }, ++ ++ request: function(form, options) { ++ form = $(form), options = Object.clone(options || { }); ++ ++ var params = options.parameters, action = form.readAttribute('action') || ''; ++ if (action.blank()) action = window.location.href; ++ options.parameters = form.serialize(true); ++ ++ if (params) { ++ if (Object.isString(params)) params = params.toQueryParams(); ++ Object.extend(options.parameters, params); ++ } ++ ++ if (form.hasAttribute('method') && !options.method) ++ options.method = form.method; ++ ++ return new Ajax.Request(action, options); ++ } ++}; ++ ++/*--------------------------------------------------------------------------*/ ++ ++ ++Form.Element = { ++ focus: function(element) { ++ $(element).focus(); ++ return element; ++ }, ++ ++ select: function(element) { ++ $(element).select(); ++ return element; ++ } ++}; ++ ++Form.Element.Methods = { ++ ++ serialize: function(element) { ++ element = $(element); ++ if (!element.disabled && element.name) { ++ var value = element.getValue(); ++ if (value != undefined) { ++ var pair = { }; ++ pair[element.name] = value; ++ return Object.toQueryString(pair); ++ } ++ } ++ return ''; ++ }, ++ ++ getValue: function(element) { ++ element = $(element); ++ var method = element.tagName.toLowerCase(); ++ return Form.Element.Serializers[method](element); ++ }, ++ ++ setValue: function(element, value) { ++ element = $(element); ++ var method = element.tagName.toLowerCase(); ++ Form.Element.Serializers[method](element, value); ++ return element; ++ }, ++ ++ clear: function(element) { ++ $(element).value = ''; ++ return element; ++ }, ++ ++ present: function(element) { ++ return $(element).value != ''; ++ }, ++ ++ activate: function(element) { ++ element = $(element); ++ try { ++ element.focus(); ++ if (element.select && (element.tagName.toLowerCase() != 'input' || ++ !(/^(?:button|reset|submit)$/i.test(element.type)))) ++ element.select(); ++ } catch (e) { } ++ return element; ++ }, ++ ++ disable: function(element) { ++ element = $(element); ++ element.disabled = true; ++ return element; ++ }, ++ ++ enable: function(element) { ++ element = $(element); ++ element.disabled = false; ++ return element; ++ } ++}; ++ ++/*--------------------------------------------------------------------------*/ ++ ++var Field = Form.Element; ++ ++var $F = Form.Element.Methods.getValue; ++ ++/*--------------------------------------------------------------------------*/ ++ ++Form.Element.Serializers = (function() { ++ function input(element, value) { ++ switch (element.type.toLowerCase()) { ++ case 'checkbox': ++ case 'radio': ++ return inputSelector(element, value); ++ default: ++ return valueSelector(element, value); ++ } ++ } ++ ++ function inputSelector(element, value) { ++ if (Object.isUndefined(value)) ++ return element.checked ? element.value : null; ++ else element.checked = !!value; ++ } ++ ++ function valueSelector(element, value) { ++ if (Object.isUndefined(value)) return element.value; ++ else element.value = value; ++ } ++ ++ function select(element, value) { ++ if (Object.isUndefined(value)) ++ return (element.type === 'select-one' ? selectOne : selectMany)(element); ++ ++ var opt, currentValue, single = !Object.isArray(value); ++ for (var i = 0, length = element.length; i < length; i++) { ++ opt = element.options[i]; ++ currentValue = this.optionValue(opt); ++ if (single) { ++ if (currentValue == value) { ++ opt.selected = true; ++ return; ++ } ++ } ++ else opt.selected = value.include(currentValue); ++ } ++ } ++ ++ function selectOne(element) { ++ var index = element.selectedIndex; ++ return index >= 0 ? optionValue(element.options[index]) : null; ++ } ++ ++ function selectMany(element) { ++ var values, length = element.length; ++ if (!length) return null; ++ ++ for (var i = 0, values = []; i < length; i++) { ++ var opt = element.options[i]; ++ if (opt.selected) values.push(optionValue(opt)); ++ } ++ return values; ++ } ++ ++ function optionValue(opt) { ++ return Element.hasAttribute(opt, 'value') ? opt.value : opt.text; ++ } ++ ++ return { ++ input: input, ++ inputSelector: inputSelector, ++ textarea: valueSelector, ++ select: select, ++ selectOne: selectOne, ++ selectMany: selectMany, ++ optionValue: optionValue, ++ button: valueSelector ++ }; ++})(); ++ ++/*--------------------------------------------------------------------------*/ ++ ++ ++Abstract.TimedObserver = Class.create(PeriodicalExecuter, { ++ initialize: function($super, element, frequency, callback) { ++ $super(callback, frequency); ++ this.element = $(element); ++ this.lastValue = this.getValue(); ++ }, ++ ++ execute: function() { ++ var value = this.getValue(); ++ if (Object.isString(this.lastValue) && Object.isString(value) ? ++ this.lastValue != value : String(this.lastValue) != String(value)) { ++ this.callback(this.element, value); ++ this.lastValue = value; ++ } ++ } ++}); ++ ++Form.Element.Observer = Class.create(Abstract.TimedObserver, { ++ getValue: function() { ++ return Form.Element.getValue(this.element); ++ } ++}); ++ ++Form.Observer = Class.create(Abstract.TimedObserver, { ++ getValue: function() { ++ return Form.serialize(this.element); ++ } ++}); ++ ++/*--------------------------------------------------------------------------*/ ++ ++Abstract.EventObserver = Class.create({ ++ initialize: function(element, callback) { ++ this.element = $(element); ++ this.callback = callback; ++ ++ this.lastValue = this.getValue(); ++ if (this.element.tagName.toLowerCase() == 'form') ++ this.registerFormCallbacks(); ++ else ++ this.registerCallback(this.element); ++ }, ++ ++ onElementEvent: function() { ++ var value = this.getValue(); ++ if (this.lastValue != value) { ++ this.callback(this.element, value); ++ this.lastValue = value; ++ } ++ }, ++ ++ registerFormCallbacks: function() { ++ Form.getElements(this.element).each(this.registerCallback, this); ++ }, ++ ++ registerCallback: function(element) { ++ if (element.type) { ++ switch (element.type.toLowerCase()) { ++ case 'checkbox': ++ case 'radio': ++ Event.observe(element, 'click', this.onElementEvent.bind(this)); ++ break; ++ default: ++ Event.observe(element, 'change', this.onElementEvent.bind(this)); ++ break; ++ } ++ } ++ } ++}); ++ ++Form.Element.EventObserver = Class.create(Abstract.EventObserver, { ++ getValue: function() { ++ return Form.Element.getValue(this.element); ++ } ++}); ++ ++Form.EventObserver = Class.create(Abstract.EventObserver, { ++ getValue: function() { ++ return Form.serialize(this.element); ++ } ++}); ++(function() { ++ ++ var Event = { ++ KEY_BACKSPACE: 8, ++ KEY_TAB: 9, ++ KEY_RETURN: 13, ++ KEY_ESC: 27, ++ KEY_LEFT: 37, ++ KEY_UP: 38, ++ KEY_RIGHT: 39, ++ KEY_DOWN: 40, ++ KEY_DELETE: 46, ++ KEY_HOME: 36, ++ KEY_END: 35, ++ KEY_PAGEUP: 33, ++ KEY_PAGEDOWN: 34, ++ KEY_INSERT: 45, ++ ++ cache: {} ++ }; ++ ++ var docEl = document.documentElement; ++ var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl ++ && 'onmouseleave' in docEl; ++ ++ ++ ++ var isIELegacyEvent = function(event) { return false; }; ++ ++ if (window.attachEvent) { ++ if (window.addEventListener) { ++ isIELegacyEvent = function(event) { ++ return !(event instanceof window.Event); ++ }; ++ } else { ++ isIELegacyEvent = function(event) { return true; }; ++ } ++ } ++ ++ var _isButton; ++ ++ function _isButtonForDOMEvents(event, code) { ++ return event.which ? (event.which === code + 1) : (event.button === code); ++ } ++ ++ var legacyButtonMap = { 0: 1, 1: 4, 2: 2 }; ++ function _isButtonForLegacyEvents(event, code) { ++ return event.button === legacyButtonMap[code]; ++ } ++ ++ function _isButtonForWebKit(event, code) { ++ switch (code) { ++ case 0: return event.which == 1 && !event.metaKey; ++ case 1: return event.which == 2 || (event.which == 1 && event.metaKey); ++ case 2: return event.which == 3; ++ default: return false; ++ } ++ } ++ ++ if (window.attachEvent) { ++ if (!window.addEventListener) { ++ _isButton = _isButtonForLegacyEvents; ++ } else { ++ _isButton = function(event, code) { ++ return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) : ++ _isButtonForDOMEvents(event, code); ++ } ++ } ++ } else if (Prototype.Browser.WebKit) { ++ _isButton = _isButtonForWebKit; ++ } else { ++ _isButton = _isButtonForDOMEvents; ++ } ++ ++ function isLeftClick(event) { return _isButton(event, 0) } ++ ++ function isMiddleClick(event) { return _isButton(event, 1) } ++ ++ function isRightClick(event) { return _isButton(event, 2) } ++ ++ function element(event) { ++ event = Event.extend(event); ++ ++ var node = event.target, type = event.type, ++ currentTarget = event.currentTarget; ++ ++ if (currentTarget && currentTarget.tagName) { ++ if (type === 'load' || type === 'error' || ++ (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' ++ && currentTarget.type === 'radio')) ++ node = currentTarget; ++ } ++ ++ if (node.nodeType == Node.TEXT_NODE) ++ node = node.parentNode; ++ ++ return Element.extend(node); ++ } ++ ++ function findElement(event, expression) { ++ var element = Event.element(event); ++ ++ if (!expression) return element; ++ while (element) { ++ if (Object.isElement(element) && Prototype.Selector.match(element, expression)) { ++ return Element.extend(element); ++ } ++ element = element.parentNode; ++ } ++ } ++ ++ function pointer(event) { ++ return { x: pointerX(event), y: pointerY(event) }; ++ } ++ ++ function pointerX(event) { ++ var docElement = document.documentElement, ++ body = document.body || { scrollLeft: 0 }; ++ ++ return event.pageX || (event.clientX + ++ (docElement.scrollLeft || body.scrollLeft) - ++ (docElement.clientLeft || 0)); ++ } ++ ++ function pointerY(event) { ++ var docElement = document.documentElement, ++ body = document.body || { scrollTop: 0 }; ++ ++ return event.pageY || (event.clientY + ++ (docElement.scrollTop || body.scrollTop) - ++ (docElement.clientTop || 0)); ++ } ++ ++ ++ function stop(event) { ++ Event.extend(event); ++ event.preventDefault(); ++ event.stopPropagation(); ++ ++ event.stopped = true; ++ } ++ ++ ++ Event.Methods = { ++ isLeftClick: isLeftClick, ++ isMiddleClick: isMiddleClick, ++ isRightClick: isRightClick, ++ ++ element: element, ++ findElement: findElement, ++ ++ pointer: pointer, ++ pointerX: pointerX, ++ pointerY: pointerY, ++ ++ stop: stop ++ }; ++ ++ var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { ++ m[name] = Event.Methods[name].methodize(); ++ return m; ++ }); ++ ++ if (window.attachEvent) { ++ function _relatedTarget(event) { ++ var element; ++ switch (event.type) { ++ case 'mouseover': ++ case 'mouseenter': ++ element = event.fromElement; ++ break; ++ case 'mouseout': ++ case 'mouseleave': ++ element = event.toElement; ++ break; ++ default: ++ return null; ++ } ++ return Element.extend(element); ++ } ++ ++ var additionalMethods = { ++ stopPropagation: function() { this.cancelBubble = true }, ++ preventDefault: function() { this.returnValue = false }, ++ inspect: function() { return '[object Event]' } ++ }; ++ ++ Event.extend = function(event, element) { ++ if (!event) return false; ++ ++ if (!isIELegacyEvent(event)) return event; ++ ++ if (event._extendedByPrototype) return event; ++ event._extendedByPrototype = Prototype.emptyFunction; ++ ++ var pointer = Event.pointer(event); ++ ++ Object.extend(event, { ++ target: event.srcElement || element, ++ relatedTarget: _relatedTarget(event), ++ pageX: pointer.x, ++ pageY: pointer.y ++ }); ++ ++ Object.extend(event, methods); ++ Object.extend(event, additionalMethods); ++ ++ return event; ++ }; ++ } else { ++ Event.extend = Prototype.K; ++ } ++ ++ if (window.addEventListener) { ++ Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; ++ Object.extend(Event.prototype, methods); ++ } ++ ++ function _createResponder(element, eventName, handler) { ++ var registry = Element.retrieve(element, 'prototype_event_registry'); ++ ++ if (Object.isUndefined(registry)) { ++ CACHE.push(element); ++ registry = Element.retrieve(element, 'prototype_event_registry', $H()); ++ } ++ ++ var respondersForEvent = registry.get(eventName); ++ if (Object.isUndefined(respondersForEvent)) { ++ respondersForEvent = []; ++ registry.set(eventName, respondersForEvent); ++ } ++ ++ if (respondersForEvent.pluck('handler').include(handler)) return false; ++ ++ var responder; ++ if (eventName.include(":")) { ++ responder = function(event) { ++ if (Object.isUndefined(event.eventName)) ++ return false; ++ ++ if (event.eventName !== eventName) ++ return false; ++ ++ Event.extend(event, element); ++ handler.call(element, event); ++ }; ++ } else { ++ if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && ++ (eventName === "mouseenter" || eventName === "mouseleave")) { ++ if (eventName === "mouseenter" || eventName === "mouseleave") { ++ responder = function(event) { ++ Event.extend(event, element); ++ ++ var parent = event.relatedTarget; ++ while (parent && parent !== element) { ++ try { parent = parent.parentNode; } ++ catch(e) { parent = element; } ++ } ++ ++ if (parent === element) return; ++ ++ handler.call(element, event); ++ }; ++ } ++ } else { ++ responder = function(event) { ++ Event.extend(event, element); ++ handler.call(element, event); ++ }; ++ } ++ } ++ ++ responder.handler = handler; ++ respondersForEvent.push(responder); ++ return responder; ++ } ++ ++ function _destroyCache() { ++ for (var i = 0, length = CACHE.length; i < length; i++) { ++ Event.stopObserving(CACHE[i]); ++ CACHE[i] = null; ++ } ++ } ++ ++ var CACHE = []; ++ ++ if (Prototype.Browser.IE) ++ window.attachEvent('onunload', _destroyCache); ++ ++ if (Prototype.Browser.WebKit) ++ window.addEventListener('unload', Prototype.emptyFunction, false); ++ ++ ++ var _getDOMEventName = Prototype.K, ++ translations = { mouseenter: "mouseover", mouseleave: "mouseout" }; ++ ++ if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) { ++ _getDOMEventName = function(eventName) { ++ return (translations[eventName] || eventName); ++ }; ++ } ++ ++ function observe(element, eventName, handler) { ++ element = $(element); ++ ++ var responder = _createResponder(element, eventName, handler); ++ ++ if (!responder) return element; ++ ++ if (eventName.include(':')) { ++ if (element.addEventListener) ++ element.addEventListener("dataavailable", responder, false); ++ else { ++ element.attachEvent("ondataavailable", responder); ++ element.attachEvent("onlosecapture", responder); ++ } ++ } else { ++ var actualEventName = _getDOMEventName(eventName); ++ ++ if (element.addEventListener) ++ element.addEventListener(actualEventName, responder, false); ++ else ++ element.attachEvent("on" + actualEventName, responder); ++ } ++ ++ return element; ++ } ++ ++ function stopObserving(element, eventName, handler) { ++ element = $(element); ++ ++ var registry = Element.retrieve(element, 'prototype_event_registry'); ++ if (!registry) return element; ++ ++ if (!eventName) { ++ registry.each( function(pair) { ++ var eventName = pair.key; ++ stopObserving(element, eventName); ++ }); ++ return element; ++ } ++ ++ var responders = registry.get(eventName); ++ if (!responders) return element; ++ ++ if (!handler) { ++ responders.each(function(r) { ++ stopObserving(element, eventName, r.handler); ++ }); ++ return element; ++ } ++ ++ var i = responders.length, responder; ++ while (i--) { ++ if (responders[i].handler === handler) { ++ responder = responders[i]; ++ break; ++ } ++ } ++ if (!responder) return element; ++ ++ if (eventName.include(':')) { ++ if (element.removeEventListener) ++ element.removeEventListener("dataavailable", responder, false); ++ else { ++ element.detachEvent("ondataavailable", responder); ++ element.detachEvent("onlosecapture", responder); ++ } ++ } else { ++ var actualEventName = _getDOMEventName(eventName); ++ if (element.removeEventListener) ++ element.removeEventListener(actualEventName, responder, false); ++ else ++ element.detachEvent('on' + actualEventName, responder); ++ } ++ ++ registry.set(eventName, responders.without(responder)); ++ ++ return element; ++ } ++ ++ function fire(element, eventName, memo, bubble) { ++ element = $(element); ++ ++ if (Object.isUndefined(bubble)) ++ bubble = true; ++ ++ if (element == document && document.createEvent && !element.dispatchEvent) ++ element = document.documentElement; ++ ++ var event; ++ if (document.createEvent) { ++ event = document.createEvent('HTMLEvents'); ++ event.initEvent('dataavailable', bubble, true); ++ } else { ++ event = document.createEventObject(); ++ event.eventType = bubble ? 'ondataavailable' : 'onlosecapture'; ++ } ++ ++ event.eventName = eventName; ++ event.memo = memo || { }; ++ ++ if (document.createEvent) ++ element.dispatchEvent(event); ++ else ++ element.fireEvent(event.eventType, event); ++ ++ return Event.extend(event); ++ } ++ ++ Event.Handler = Class.create({ ++ initialize: function(element, eventName, selector, callback) { ++ this.element = $(element); ++ this.eventName = eventName; ++ this.selector = selector; ++ this.callback = callback; ++ this.handler = this.handleEvent.bind(this); ++ }, ++ ++ start: function() { ++ Event.observe(this.element, this.eventName, this.handler); ++ return this; ++ }, ++ ++ stop: function() { ++ Event.stopObserving(this.element, this.eventName, this.handler); ++ return this; ++ }, ++ ++ handleEvent: function(event) { ++ var element = Event.findElement(event, this.selector); ++ if (element) this.callback.call(this.element, event, element); ++ } ++ }); ++ ++ function on(element, eventName, selector, callback) { ++ element = $(element); ++ if (Object.isFunction(selector) && Object.isUndefined(callback)) { ++ callback = selector, selector = null; ++ } ++ ++ return new Event.Handler(element, eventName, selector, callback).start(); ++ } ++ ++ Object.extend(Event, Event.Methods); ++ ++ Object.extend(Event, { ++ fire: fire, ++ observe: observe, ++ stopObserving: stopObserving, ++ on: on ++ }); ++ ++ Element.addMethods({ ++ fire: fire, ++ ++ observe: observe, ++ ++ stopObserving: stopObserving, ++ ++ on: on ++ }); ++ ++ Object.extend(document, { ++ fire: fire.methodize(), ++ ++ observe: observe.methodize(), ++ ++ stopObserving: stopObserving.methodize(), ++ ++ on: on.methodize(), ++ ++ loaded: false ++ }); ++ ++ if (window.Event) Object.extend(window.Event, Event); ++ else window.Event = Event; ++})(); ++ ++(function() { ++ /* Support for the DOMContentLoaded event is based on work by Dan Webb, ++ Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ ++ ++ var timer; ++ ++ function fireContentLoadedEvent() { ++ if (document.loaded) return; ++ if (timer) window.clearTimeout(timer); ++ document.loaded = true; ++ document.fire('dom:loaded'); ++ } ++ ++ function checkReadyState() { ++ if (document.readyState === 'complete') { ++ document.stopObserving('readystatechange', checkReadyState); ++ fireContentLoadedEvent(); ++ } ++ } ++ ++ function pollDoScroll() { ++ try { document.documentElement.doScroll('left'); } ++ catch(e) { ++ timer = pollDoScroll.defer(); ++ return; ++ } ++ fireContentLoadedEvent(); ++ } ++ ++ if (document.addEventListener) { ++ document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); ++ } else { ++ document.observe('readystatechange', checkReadyState); ++ if (window == top) ++ timer = pollDoScroll.defer(); ++ } ++ ++ Event.observe(window, 'load', fireContentLoadedEvent); ++})(); ++ ++ ++Element.addMethods(); ++/*------------------------------- DEPRECATED -------------------------------*/ ++ ++Hash.toQueryString = Object.toQueryString; ++ ++var Toggle = { display: Element.toggle }; ++ ++Element.Methods.childOf = Element.Methods.descendantOf; ++ ++var Insertion = { ++ Before: function(element, content) { ++ return Element.insert(element, {before:content}); ++ }, ++ ++ Top: function(element, content) { ++ return Element.insert(element, {top:content}); ++ }, ++ ++ Bottom: function(element, content) { ++ return Element.insert(element, {bottom:content}); ++ }, ++ ++ After: function(element, content) { ++ return Element.insert(element, {after:content}); ++ } ++}; ++ ++var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); ++ ++var Position = { ++ includeScrollOffsets: false, ++ ++ prepare: function() { ++ this.deltaX = window.pageXOffset ++ || document.documentElement.scrollLeft ++ || document.body.scrollLeft ++ || 0; ++ this.deltaY = window.pageYOffset ++ || document.documentElement.scrollTop ++ || document.body.scrollTop ++ || 0; ++ }, ++ ++ within: function(element, x, y) { ++ if (this.includeScrollOffsets) ++ return this.withinIncludingScrolloffsets(element, x, y); ++ this.xcomp = x; ++ this.ycomp = y; ++ this.offset = Element.cumulativeOffset(element); ++ ++ return (y >= this.offset[1] && ++ y < this.offset[1] + element.offsetHeight && ++ x >= this.offset[0] && ++ x < this.offset[0] + element.offsetWidth); ++ }, ++ ++ withinIncludingScrolloffsets: function(element, x, y) { ++ var offsetcache = Element.cumulativeScrollOffset(element); ++ ++ this.xcomp = x + offsetcache[0] - this.deltaX; ++ this.ycomp = y + offsetcache[1] - this.deltaY; ++ this.offset = Element.cumulativeOffset(element); ++ ++ return (this.ycomp >= this.offset[1] && ++ this.ycomp < this.offset[1] + element.offsetHeight && ++ this.xcomp >= this.offset[0] && ++ this.xcomp < this.offset[0] + element.offsetWidth); ++ }, ++ ++ overlap: function(mode, element) { ++ if (!mode) return 0; ++ if (mode == 'vertical') ++ return ((this.offset[1] + element.offsetHeight) - this.ycomp) / ++ element.offsetHeight; ++ if (mode == 'horizontal') ++ return ((this.offset[0] + element.offsetWidth) - this.xcomp) / ++ element.offsetWidth; ++ }, ++ ++ ++ cumulativeOffset: Element.Methods.cumulativeOffset, ++ ++ positionedOffset: Element.Methods.positionedOffset, ++ ++ absolutize: function(element) { ++ Position.prepare(); ++ return Element.absolutize(element); ++ }, ++ ++ relativize: function(element) { ++ Position.prepare(); ++ return Element.relativize(element); ++ }, ++ ++ realOffset: Element.Methods.cumulativeScrollOffset, ++ ++ offsetParent: Element.Methods.getOffsetParent, ++ ++ page: Element.Methods.viewportOffset, ++ ++ clone: function(source, target, options) { ++ options = options || { }; ++ return Element.clonePosition(target, source, options); ++ } ++}; ++ ++/*--------------------------------------------------------------------------*/ ++ ++if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ ++ function iter(name) { ++ return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; ++ } ++ ++ instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? ++ function(element, className) { ++ className = className.toString().strip(); ++ var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); ++ return cond ? document._getElementsByXPath('.//*' + cond, element) : []; ++ } : function(element, className) { ++ className = className.toString().strip(); ++ var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); ++ if (!classNames && !className) return elements; ++ ++ var nodes = $(element).getElementsByTagName('*'); ++ className = ' ' + className + ' '; ++ ++ for (var i = 0, child, cn; child = nodes[i]; i++) { ++ if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || ++ (classNames && classNames.all(function(name) { ++ return !name.toString().blank() && cn.include(' ' + name + ' '); ++ })))) ++ elements.push(Element.extend(child)); ++ } ++ return elements; ++ }; ++ ++ return function(className, parentElement) { ++ return $(parentElement || document.body).getElementsByClassName(className); ++ }; ++}(Element.Methods); ++ ++/*--------------------------------------------------------------------------*/ ++ ++Element.ClassNames = Class.create(); ++Element.ClassNames.prototype = { ++ initialize: function(element) { ++ this.element = $(element); ++ }, ++ ++ _each: function(iterator) { ++ this.element.className.split(/\s+/).select(function(name) { ++ return name.length > 0; ++ })._each(iterator); ++ }, ++ ++ set: function(className) { ++ this.element.className = className; ++ }, ++ ++ add: function(classNameToAdd) { ++ if (this.include(classNameToAdd)) return; ++ this.set($A(this).concat(classNameToAdd).join(' ')); ++ }, ++ ++ remove: function(classNameToRemove) { ++ if (!this.include(classNameToRemove)) return; ++ this.set($A(this).without(classNameToRemove).join(' ')); ++ }, ++ ++ toString: function() { ++ return $A(this).join(' '); ++ } ++}; ++ ++Object.extend(Element.ClassNames.prototype, Enumerable); ++ ++/*--------------------------------------------------------------------------*/ ++ ++(function() { ++ window.Selector = Class.create({ ++ initialize: function(expression) { ++ this.expression = expression.strip(); ++ }, ++ ++ findElements: function(rootElement) { ++ return Prototype.Selector.select(this.expression, rootElement); ++ }, ++ ++ match: function(element) { ++ return Prototype.Selector.match(element, this.expression); ++ }, ++ ++ toString: function() { ++ return this.expression; ++ }, ++ ++ inspect: function() { ++ return "#"; ++ } ++ }); ++ ++ Object.extend(Selector, { ++ matchElements: function(elements, expression) { ++ var match = Prototype.Selector.match, ++ results = []; ++ ++ for (var i = 0, length = elements.length; i < length; i++) { ++ var element = elements[i]; ++ if (match(element, expression)) { ++ results.push(Element.extend(element)); ++ } ++ } ++ return results; ++ }, ++ ++ findElement: function(elements, expression, index) { ++ index = index || 0; ++ var matchIndex = 0, element; ++ for (var i = 0, length = elements.length; i < length; i++) { ++ element = elements[i]; ++ if (Prototype.Selector.match(element, expression) && index === matchIndex++) { ++ return Element.extend(element); ++ } ++ } ++ }, ++ ++ findChildElements: function(element, expressions) { ++ var selector = expressions.toArray().join(', '); ++ return Prototype.Selector.select(selector, element || document); ++ } ++ }); ++})(); +diff --git a/html/showtty.js b/html/showtty.js +index 2b80b09..096af2c 100644 +--- a/html/showtty.js ++++ b/html/showtty.js +@@ -292,11 +292,9 @@ showTTYURL = function (elem, url) { + }; + + showText("Loading " + url); +- +- var req = new XMLHttpRequest(); +- req.open("GET", url, true); +- req.onreadystatechange = function () { +- if ( req.readyState == 4 && req.status == 200 ) { ++ ++ new Ajax.Request(url, { method: 'get', ++ onSuccess: function(req) { + var data = eval("(" + req.responseText + ")"); + if ( typeof data == "undefined" ) { + showText("Error: didn't get tty data from " + url); +@@ -304,12 +302,7 @@ showTTYURL = function (elem, url) { + return; + } + showTTY(elem, data); +- } else if ( req.readyState == 4 && req.status != 200 ) { +- showText("Error: couldn't retrieve " + url + ", got status code " + this.status); +- req = null; +- } +- }; +- req.send(null); ++ }}); + }; + + }()); +diff --git a/html/test.html b/html/test.html +index 315c62b..51eb105 100644 +--- a/html/test.html ++++ b/html/test.html +@@ -1,11 +1,12 @@ + + ++ + + + +
A TTY recording is here. Enabling javascript will allow you to view it.
+ + + +diff --git a/html/ttydata.js b/html/ttydata.js +new file mode 100644 +index 0000000..a07f0bd +--- /dev/null ++++ b/html/ttydata.js +@@ -0,0 +1 @@ ++{"width":80,"height":24,"timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305860197.22013,"i":1},{"y":1,"d":[[0,10,"u"]],"x":12,"t":1305860198.28542},{"y":1,"d":[[0,11,"n"]],"x":13,"t":1305860198.50144},{"y":1,"d":[[0,12,"a"]],"x":14,"t":1305860198.60549},{"y":1,"d":[[0,13,"m"]],"x":15,"t":1305860198.66975},{"y":1,"d":[[0,14,"e"]],"x":16,"t":1305860198.78168},{"y":2,"x":1,"t":1305860198.90932},{"y":3,"d":[[1,0,5,"Darwin"],[2,0,8,"bash-3.2$"]],"x":11,"t":1305860198.91333},{"y":3,"d":[[2,10,"g"]],"x":12,"t":1305860200.76546},{"y":3,"d":[[2,11,"d"]],"x":13,"t":1305860201.0298},{"y":3,"d":[[2,12,"a"]],"x":14,"t":1305860201.17329},{"y":3,"d":[[2,13,"t"]],"x":15,"t":1305860201.26947},{"y":3,"d":[[2,14,"e"]],"x":16,"t":1305860201.38131},{"y":3,"x":17,"t":1305860201.4938},{"y":3,"d":[[2,16,"-"]],"x":18,"t":1305860201.61323},{"y":3,"d":[[2,17,"R"]],"x":19,"t":1305860201.86156},{"y":4,"x":1,"t":1305860202.06118},{"y":5,"d":[[3,0,30,"Fri, 20 May 2011 10:56:42 +0800"]],"x":1,"t":1305860202.39309},{"y":5,"d":[[4,0,8,"bash-3.2$"]],"x":11,"t":1305860202.39393},{"y":6,"d":[[4,10,13,"exit"]],"x":1,"t":1305860203.07778}]} +\ No newline at end of file +-- +1.7.5.dirty + diff --git a/jsttyplay/patches/0002-Fixed-Windows-IE6-compatibility-issue.patch b/jsttyplay/patches/0002-Fixed-Windows-IE6-compatibility-issue.patch new file mode 100644 index 000000000..95f067087 --- /dev/null +++ b/jsttyplay/patches/0002-Fixed-Windows-IE6-compatibility-issue.patch @@ -0,0 +1,27 @@ +From ec9b0159d6b09fd283b6bf603aa9a4677b041bc6 Mon Sep 17 00:00:00 2001 +From: Jiang Xin +Date: Fri, 20 May 2011 11:03:02 +0800 +Subject: [PATCH 2/4] Fixed Windows IE6 compatibility issue. + +Use span instead of pre, because on IE6 pre element can not set +display = inline, but is set to inline-table instead. +--- + html/showtty.js | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/html/showtty.js b/html/showtty.js +index 096af2c..2431603 100644 +--- a/html/showtty.js ++++ b/html/showtty.js +@@ -22,7 +22,7 @@ var makeTable = function (width, height) { + row.style.wordSpacing = '0'; + row.style.height = '1.2em'; + for (var i = 1; i <= width; i++) { +- var charelem = document.createElement("pre"); ++ var charelem = document.createElement("span"); + charelem.style.backgroundColor = '#000'; + charelem.style.color = '#FFF'; + charelem.style.display = 'inline'; +-- +1.7.5.dirty + diff --git a/jsttyplay/patches/0003-Add-css-stylesheet-support.patch b/jsttyplay/patches/0003-Add-css-stylesheet-support.patch new file mode 100644 index 000000000..11375e775 --- /dev/null +++ b/jsttyplay/patches/0003-Add-css-stylesheet-support.patch @@ -0,0 +1,94 @@ +From 75d315499ce67ad4eff72d1645266179ab5252fc Mon Sep 17 00:00:00 2001 +From: Jiang Xin +Date: Fri, 20 May 2011 11:07:40 +0800 +Subject: [PATCH 3/4] Add css stylesheet support. + +--- + html/showtty.js | 18 ++++-------------- + html/test.html | 1 + + html/tty.css | 29 +++++++++++++++++++++++++++++ + 3 files changed, 34 insertions(+), 14 deletions(-) + create mode 100644 html/tty.css + +diff --git a/html/showtty.js b/html/showtty.js +index 2431603..dd70763 100644 +--- a/html/showtty.js ++++ b/html/showtty.js +@@ -14,23 +14,13 @@ var makeTable = function (width, height) { + var table = document.createElement("div"); + var arr = []; + for (var j = 1; j <= height; j++) { +- var row = document.createElement("div"); ++ var row = Element('div'); + var arrrow = []; +- row.style.fontFamily = '"ProFont", "Luxi Mono", "Monaco", "Courier", "Courier new", monospace'; +- row.style.margin = '0'; +- row.style.padding = '0'; +- row.style.wordSpacing = '0'; +- row.style.height = '1.2em'; ++ row.addClassName('row'); + for (var i = 1; i <= width; i++) { +- var charelem = document.createElement("span"); +- charelem.style.backgroundColor = '#000'; +- charelem.style.color = '#FFF'; ++ var charelem = Element('span'); ++ charelem.addClassName('charelem'); + charelem.style.display = 'inline'; +- charelem.style.fontWeight = 'normal'; +- charelem.style.textDecoration = 'none'; +- charelem.style.letterSpacing = '0'; +- charelem.style.margin = '0'; +- charelem.style.padding = '0 0 0.2em 0'; + charelem.appendChild(document.createTextNode(" ")); + row.appendChild(charelem); + arrrow.push(charelem); +diff --git a/html/test.html b/html/test.html +index 51eb105..6958ba3 100644 +--- a/html/test.html ++++ b/html/test.html +@@ -2,6 +2,7 @@ + + + ++ + + +
A TTY recording is here. Enabling javascript will allow you to view it.
+diff --git a/html/tty.css b/html/tty.css +new file mode 100644 +index 0000000..e99b261 +--- /dev/null ++++ b/html/tty.css +@@ -0,0 +1,29 @@ ++div#tty ++{ ++ background: #000; ++ margin: 1em 0.2em 1em 0.2em; ++ padding: 0.5em 0.2em 0.5em 0.2em; ++} ++ ++div.row ++{ ++ font-family: "Lucida Console", "DejaVu Sans Mono", "Nimbus Mono L", "Bitstream Vera Sans Mono", "ProFont", "Luxi Mono", "Monaco", "Courier", "Courier new", monospace; ++ margin: 0; ++ padding: 0; ++ word-spacing: 0; ++ height: 1.2em; ++} ++ ++span.charelem ++{ ++ background: #000; ++ color: #FFF; ++ margin: 0; ++ padding: 0 0 0.2em 0; ++ font-weight: normal; ++ font-size: 1em; ++ text-decoration: none; ++ letter-spacing: 0; ++ display: inline; ++ overflow:auto;white-space:pre;/* <- css3 */ ++} +-- +1.7.5.dirty + diff --git a/jsttyplay/patches/0004-Warn-for-unknow-character-not-die.patch b/jsttyplay/patches/0004-Warn-for-unknow-character-not-die.patch new file mode 100644 index 000000000..67d1ebb90 --- /dev/null +++ b/jsttyplay/patches/0004-Warn-for-unknow-character-not-die.patch @@ -0,0 +1,26 @@ +From e6315ea6ff9d45082cbefd750a3bae83dc53c1d1 Mon Sep 17 00:00:00 2001 +From: Jiang Xin +Date: Fri, 20 May 2011 11:11:25 +0800 +Subject: [PATCH 4/4] Warn for unknow character, not die. + +--- + Term/Emulator/Parser.pm | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/Term/Emulator/Parser.pm b/Term/Emulator/Parser.pm +index 834cf2b..9c412bf 100644 +--- a/Term/Emulator/Parser.pm ++++ b/Term/Emulator/Parser.pm +@@ -613,7 +613,8 @@ sub parse_char { + # ignore + + } else { +- die ord $char; ++ # die ord $char; ++ warn "Bad character ". ord $char; + } + + $self->assert; +-- +1.7.5.dirty + From 04641dfda5c1487a602667fa002399eece059a22 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Fri, 20 May 2011 12:38:03 +0800 Subject: [PATCH 13/84] Move *.ttyrec into ttyrec directory. --- README.mkd | 64 +++++++++++------- Rakefile | 6 +- html/templates/scast.erb | 18 +---- html/templates/ttyplay.erb | 2 + .../part1}/ch01-01-diff-patch.ttyrec | Bin .../part2}/ch04-01-first-commit.ttyrec | Bin .../part2}/ch04-02-git-config.ttyrec | Bin .../part2}/ch04-03-who-does-commit.ttyrec | Bin .../part2}/ch05-01-commit-modified.ttyrec | Bin .../part2}/ch05-02-index-and-diff.ttyrec | Bin .../part2}/ch05-03-git-stash.ttyrec | Bin .../part2}/ch06-01-git-objects.ttyrec | Bin .../part2}/ch06-02-sha1-hash.ttyrec | Bin .../part2}/ch07-01-git-reset.ttyrec | Bin {part2 => ttyrec/part2}/ch07-02-reflog.ttyrec | Bin .../part2}/ch08-01-checkout.ttyrec | Bin .../part2}/ch09-01-i-am-back.ttyrec | Bin .../part2}/ch09-02-inside-stash.ttyrec | Bin {part2 => ttyrec/part2}/ch10-01-tag.ttyrec | Bin {part2 => ttyrec/part2}/ch10-02-rm1.ttyrec | Bin {part2 => ttyrec/part2}/ch10-03-rm2.ttyrec | Bin .../part2}/ch10-04-undelete.ttyrec | Bin {part2 => ttyrec/part2}/ch10-05-mv.ttyrec | Bin .../part2}/ch10-06-hello-world.ttyrec | Bin {part2 => ttyrec/part2}/ch10-07-add-i.ttyrec | Bin {part2 => ttyrec/part2}/ch10-08-ignore.ttyrec | Bin {part2 => ttyrec/part2}/ch11-01-clone.ttyrec | Bin .../part2}/ch11-02-rev-parse.ttyrec | Bin .../part2}/ch11-03-rev-list.ttyrec | Bin .../part2}/ch12-01-back2future-1.ttyrec | Bin .../part2}/ch12-02-back2future-2.ttyrec | Bin .../part2}/ch12-03-back2future-3.ttyrec | Bin .../part3}/smart-and-dump-protocol.ttyrec | Bin 33 files changed, 48 insertions(+), 42 deletions(-) rename {part1 => ttyrec/part1}/ch01-01-diff-patch.ttyrec (100%) rename {part2 => ttyrec/part2}/ch04-01-first-commit.ttyrec (100%) rename {part2 => ttyrec/part2}/ch04-02-git-config.ttyrec (100%) rename {part2 => ttyrec/part2}/ch04-03-who-does-commit.ttyrec (100%) rename {part2 => ttyrec/part2}/ch05-01-commit-modified.ttyrec (100%) rename {part2 => ttyrec/part2}/ch05-02-index-and-diff.ttyrec (100%) rename {part2 => ttyrec/part2}/ch05-03-git-stash.ttyrec (100%) rename {part2 => ttyrec/part2}/ch06-01-git-objects.ttyrec (100%) rename {part2 => ttyrec/part2}/ch06-02-sha1-hash.ttyrec (100%) rename {part2 => ttyrec/part2}/ch07-01-git-reset.ttyrec (100%) rename {part2 => ttyrec/part2}/ch07-02-reflog.ttyrec (100%) rename {part2 => ttyrec/part2}/ch08-01-checkout.ttyrec (100%) rename {part2 => ttyrec/part2}/ch09-01-i-am-back.ttyrec (100%) rename {part2 => ttyrec/part2}/ch09-02-inside-stash.ttyrec (100%) rename {part2 => ttyrec/part2}/ch10-01-tag.ttyrec (100%) rename {part2 => ttyrec/part2}/ch10-02-rm1.ttyrec (100%) rename {part2 => ttyrec/part2}/ch10-03-rm2.ttyrec (100%) rename {part2 => ttyrec/part2}/ch10-04-undelete.ttyrec (100%) rename {part2 => ttyrec/part2}/ch10-05-mv.ttyrec (100%) rename {part2 => ttyrec/part2}/ch10-06-hello-world.ttyrec (100%) rename {part2 => ttyrec/part2}/ch10-07-add-i.ttyrec (100%) rename {part2 => ttyrec/part2}/ch10-08-ignore.ttyrec (100%) rename {part2 => ttyrec/part2}/ch11-01-clone.ttyrec (100%) rename {part2 => ttyrec/part2}/ch11-02-rev-parse.ttyrec (100%) rename {part2 => ttyrec/part2}/ch11-03-rev-list.ttyrec (100%) rename {part2 => ttyrec/part2}/ch12-01-back2future-1.ttyrec (100%) rename {part2 => ttyrec/part2}/ch12-02-back2future-2.ttyrec (100%) rename {part2 => ttyrec/part2}/ch12-03-back2future-3.ttyrec (100%) rename {part3 => ttyrec/part3}/smart-and-dump-protocol.ttyrec (100%) diff --git a/README.mkd b/README.mkd index 08f7dfe8a..b3d87edcc 100644 --- a/README.mkd +++ b/README.mkd @@ -4,8 +4,8 @@ [北京群英汇信息技术有限公司](http://www.ossxp.com/) 高级顾问 [蒋鑫](http://weibo.com/gotgit/)。 注意本书是原创,不是翻译的哦。写作本书的动机: -2010年底,公司业务比较清淡,我想:“趁着过年前的无所事事, -写点东西吧”,结果越写越多,最终成了这本有600页的书。 +2010年底,公司业务比较清淡,于是想:“趁着过年前的无所事事, +写点东西吧”,结果越写越多,最终成了这本600页的“大砖头”。 网上能够找到很多Git资料和电子书,包括《[Git社区书](http://book.git-scm.com/)》, 以及《[ProGit](http://progit.org/book/)》等,都是非常好、非常系统的教程, @@ -14,13 +14,13 @@ * 降低跨越的难度。 我曾经因为Git的古怪而放弃Git,改用Mercurial(Hg)。 - 因此一本成功的Git书要兼顾拥有使用其他版本控制工具使用经验的用户, - 照顾到他们的使用习惯和需求。 + 因此一本成功的Git书要兼顾版本控制老用户的体验, + 即要照顾到那些拥有其他版本控制工具使用经验的用户的使用习惯和需求。 * 独特的讲故事的方式。 我有着自己讲故事的方式,这是我多年来为不同公司做 Subversion 和 Git 培训和技术支持所积累的经验。 - (顺便说一句,书出了可以继续找我做培训哦,活人可比书有意思多了)。8) + (顺便说一句,书出了可以继续找我做培训哦,面对面的交流可比读书有意思多了)。8) * 介绍了众多实用的Git协同模型。 是什么将我由Mercurial拉回Git的呢?是Topgit, @@ -29,12 +29,12 @@ 相信我们在开源软件定制开发中用到的这一独特的Git协同模式也同样适用于他人。 * 子模组不堪大任,我找到了更好的多版本库协同模型 —— 来自于Android的Repo。 - 在给客户培训Git中发现客户在 Android 驱动开发中的独特开发模式: + 在给客户培训Git过程中,我发现客户在Android驱动开发中采用的独特的开发模式: Repo + Gerrit,于是深入其中发现别有洞天。 - 我对 Repo 的改造让其有更灵活的应用模型。 + 我还对 Repo 进行了扩展,以便让其有更广阔的适用范围。 * 改进的 Gitosis 及 Gitolite。 - 基于SSH的Git服务器软件,在使用中我们对其做了很多改造,以适合用户的使用习惯。 + 基于SSH的Git服务器软件,在使用中我们对其做了很多改造,更加符合用户的使用习惯。 * 我开发的一款备份工具 Gistore。 我为这款工具起的名字来自于这两个单词的组合:Git + Store。 @@ -87,40 +87,48 @@ **冯铃**,清华大学计算机科学与技术系“长江学者”特聘教授 - * Git是当前开源社区最流行的版本控制系统,代表了版本控制的未来。 + * “Git是当前开源社区最流行的版本控制系统,代表了版本控制的未来。 每一个有志于计算机编程的学习者都应该学习和掌握这一工具,它不但 用于追踪编程者的思考过程,还是打开开源软件世界的金钥匙,更可以 通过版本控制掌握与他人协同工作的技能。本书是一本耐读原创之书, 因为其涵盖的内容之广足可以让一名程序员在成长的不同阶段都可以从 - 中汲取丰富营养。 + 中汲取丰富营养。” - * 八卦:冯铃老师给清华的学生开课“计算机程序设计基础”。 - 能从软件开发学习的一开始接触版本控制显然是幸运的。 - 本书出版正值清华百年校庆之际,这段书评带有我的一点个人色彩,请见谅。 + * 八卦:冯铃老师给清华大学计算机系的学生开基础课“计算机程序设计基础”, + 非常希望这本书能让未来软件行业从业者从一开始就接触到最佳版本控制实践。 + 本书出版正值清华百年校庆之际,诸事繁忙,若见此书评带有本人个人色彩, + 还请诸位见谅。 -## 相关网址 +## 在线资源 + +* 官方网站 + + + > 采用Git方式维护的官方网站,欢迎大家一起参与其中。 * 新浪微博 - + -* 本书勘误 - + > 欢迎大家通过新浪微博与我交流,有什么意见和建议@我。 ## 本书勘误 -发现书中的错误了么?想帮助我修正么?在 Github 上利用fork的功能在您的名下建立本版本库的一个分支版本库, -然后把你发现的错误写在 errata.mkd 文件中。当然不要忘了到[新浪微博](http://weibo.com/gotgit/)上 @gotgit 。 +发现书中的错误了么?想在修正历史上留下你的名字么? +通过 Github 上利用Fork功能在您的名下建立本版本库的一个分支版本库, +然后把你发现的错误写在 errata.mkd 文件中。 +最后不要忘了到[新浪微博](http://weibo.com/gotgit/)上@我。 -参见:[本书勘误](errata.html)。 +访问:[本书勘误](errata.html)。 ## 操作回放 -本书的部分操作,请访问:[《Git权威指南》——操作回放](screencast.html)。 +本书的部分操作用 ttyrec 录制,查看请访问:[《Git权威指南》——操作回放](screencast.html)。 读者除了可以看到“活”的操作外,还可以从回放当中复制操作的代码。 -如果该网页不存在、无法访问,或者您想向其中添加自己的操作回放,有两种方式: +如果该网页不存在、无法访问,或是您想在本地回放,或者想在其中添加您自己的操作回放, +有两种方式: -方式一:你可以从 Github 上克隆本版本库,自行编译。 +方式一:你可以从 Github 上克隆本版本库,编译相关网页。 * 克隆版本库。 @@ -164,6 +172,16 @@ * 点击检出的页面:[《Git权威指南》——操作回放](screencast.html)。 +如果您自己想把自己录制的操作与他人共享,可以将录制的文件以 ".ttyrec" 扩展名保存到 ttyrec 目录下。 +执行 rake 命令,可以自动生成新的播放页面。 + ## 资源下载 +* 演示版本库1 + + +* 演示版本库2 (Hello world) + +* 本资料库 + diff --git a/Rakefile b/Rakefile index 0a6139e1f..40c85597a 100644 --- a/Rakefile +++ b/Rakefile @@ -35,7 +35,7 @@ def rel_path_dir(dir1, dir2) end rule( /\.json$/ => [ - proc {|tn| tn.sub(/\.[^.]+$/, '.ttyrec').sub(/^html\//, '') } + proc {|tn| tn.sub(/\.[^.]+$/, '.ttyrec').sub(/^html\//, 'ttyrec/') } ]) do |t| abs_source = File.expand_path(t.source) abs_name = File.expand_path(t.name) @@ -44,8 +44,8 @@ rule( /\.json$/ => [ sh "(cd jsttyplay; perl preprocess.pl --size 80x25 #{abs_source} #{abs_name})" end -FileList["**/*.ttyrec"].exclude(/^html\//).each do |t| - json = 'html/' + t.sub(/\.[^.]+$/, '.json') +FileList["ttyrec/**/*.ttyrec"].each do |t| + json = 'html/' + t.sub(/^ttyrec\//, '').sub(/\.[^.]+$/, '.json') task :json => json end diff --git a/html/templates/scast.erb b/html/templates/scast.erb index 6c4c235c2..e1cd1b9c4 100644 --- a/html/templates/scast.erb +++ b/html/templates/scast.erb @@ -15,7 +15,7 @@ -作者:@gotgit +作者:蒋鑫 网址:http://www.ossxp.com/doc/gotgit/ @@ -32,7 +32,7 @@

点击下面相应的链接通过Web网页观看操作回放。网页回放技术来自于 jsttyplay

如需要更好的控制回复的速度、暂停等,请使用 ttyplay (Linux), termrec (Windows) 等软件回放扩展名为 ".ttyrec" 的文件。 -

您也可以使用 ttyrec 软件录制自己的回放,保存在 html 目录之外的任意目录下,然后执行 "rake" 命令,自动将新增回放放入本页面中。 +

您也可以使用 ttyrec 软件录制自己的回放,将文件以 ".ttyrec" 为扩展名保存在 ttyrec 目录下,然后执行 "rake" 命令,自动将新增回放放入本页面中。

从版本库 git://github.com/ossxp-com/gotgit-refs.git 克隆并创建您自己的分支,与大家分享。 <% @@ -62,20 +62,6 @@ parts = { '1' => '第1篇:初识Git', <% end %> -


- -

资源下载

- -
-
演示版本库1
-
https://github.com/ossxp-com/gitdemo-commit-tree/
-
演示版本库2 (Hello world)
-
https://github.com/ossxp-com/hello-world/
-
本资料库
-
https://github.com/ossxp-com/gotgit-refs/
-
- -
diff --git a/html/templates/ttyplay.erb b/html/templates/ttyplay.erb index 5848e6aa2..8e2f77848 100644 --- a/html/templates/ttyplay.erb +++ b/html/templates/ttyplay.erb @@ -1,5 +1,6 @@ + <%=title %> <% css_files.each do |t| %> @@ -10,6 +11,7 @@
+

<%=title %>

Enable JavaScript to see the animation.
+<% end %> <% @css_files.each do |t| %> <% end %> From 6fbf11870e70b786a70f00ed28a572e363adafa0 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Fri, 15 Jul 2011 20:10:54 +0800 Subject: [PATCH 50/84] more zgcbb.com to the recommend bookstore list. --- README.mkd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.mkd b/README.mkd index 5a8f923d9..63955891b 100644 --- a/README.mkd +++ b/README.mkd @@ -65,11 +65,11 @@ * 卓越网 - - * 中关村图书大厦网上书店 + + * 广购书城:广州购书中心网上书店 From 5ffd2db04de5a336e83ce96fc0276b25482604b8 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Fri, 15 Jul 2011 20:29:48 +0800 Subject: [PATCH 51/84] build demo_index.html for Greasemonkey userscript test. --- .gitignore | 1 + Rakefile | 4 ++++ html/inc/click_more.js | 14 ++++++++++---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index a875ea972..cdb3d3f6c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /screencast.html /index.html +/demo*.html /errata.html *.json diff --git a/Rakefile b/Rakefile index defcfffd1..8875cd617 100644 --- a/Rakefile +++ b/Rakefile @@ -14,6 +14,7 @@ SCAST_TMPL = File.expand_path('html/templates/scast.erb') INDEX_TMPL = File.expand_path('html/templates/index.erb') SCAST_HTML = File.expand_path('screencast.html') INDEX_HTML = File.expand_path('index.html') +DEMO_INDEX_HTML = File.expand_path('demo_index.html') ERRATA_HTML = File.expand_path('errata.html') class ArgsBinding @@ -154,6 +155,9 @@ file :html_index => ['README.mkd', INDEX_TMPL] do |t| mkd2html :title => "《Git权威指南》", :subtitle => "参考资料", :source => t.prerequisites[0], :template => t.prerequisites[1], :output => INDEX_HTML, :extra_js => ['html/inc/jquery-1.6.2.min.js', 'html/inc/click_more.js'] + + mkd2html :title => "《Git权威指南》", :subtitle => "参考资料", + :source => t.prerequisites[0], :template => t.prerequisites[1], :output => DEMO_INDEX_HTML end file :html_errata => ['errata.mkd', INDEX_TMPL] do |t| diff --git a/html/inc/click_more.js b/html/inc/click_more.js index 68f1ac3de..8c668fe8f 100644 --- a/html/inc/click_more.js +++ b/html/inc/click_more.js @@ -1,7 +1,13 @@ -/* - * click_more.js - * Copyright 2011, Jiang Xin - */ +// ==UserScript== +// @name Click more for toggle +// @namespace gotgit +// @description Add a toogle effect at the location where anchor with a click-more css. +// @include http://www.ossxp.com/doc/gotgit/demo* +// @require http://code.jquery.com/jquery-1.6.2.min.js +// ==/UserScript== + +// Host on https://gist.github.com/1084591 +// Copyright 2011, Jiang Xin $(function(){ From 2e02597e7371ff0ad9553c5525a37af370dfab59 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Sat, 16 Jul 2011 12:48:50 +0800 Subject: [PATCH 52/84] bugfix: only build index.html when necessary. --- Rakefile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Rakefile b/Rakefile index 8875cd617..70d78fcfa 100644 --- a/Rakefile +++ b/Rakefile @@ -65,7 +65,7 @@ desc 'compile ttyrec files to json files' task :json desc 'create index.html and other html files for ttyplay.' -task :html => [:html_chunks, :html_screencast, :html_index, :html_errata] +task :html => [:html_chunks, :html_screencast, INDEX_HTML, ERRATA_HTML] task :html_chunks do FileList["html/**/*.json"].each do |t| @@ -148,10 +148,11 @@ def mkd2html args template = ERB.new(File.read(args[:template])) file.puts template.result(ArgsBinding.new(args).get_binding) end + puts "built %s from %s" % [args[:output], args[:source]] end -file :html_index => ['README.mkd', INDEX_TMPL] do |t| +file INDEX_HTML => ['README.mkd', INDEX_TMPL] do |t| mkd2html :title => "《Git权威指南》", :subtitle => "参考资料", :source => t.prerequisites[0], :template => t.prerequisites[1], :output => INDEX_HTML, :extra_js => ['html/inc/jquery-1.6.2.min.js', 'html/inc/click_more.js'] @@ -160,7 +161,7 @@ file :html_index => ['README.mkd', INDEX_TMPL] do |t| :source => t.prerequisites[0], :template => t.prerequisites[1], :output => DEMO_INDEX_HTML end -file :html_errata => ['errata.mkd', INDEX_TMPL] do |t| +file ERRATA_HTML => ['errata.mkd', INDEX_TMPL] do |t| mkd2html :title => "《Git权威指南》", :subtitle => "勘误", :source => t.prerequisites[0], :template => t.prerequisites[1], :output => ERRATA_HTML, :extra_css => ['html/inc/errata.css'], From db60b10ff86e091e81a299605baf0fb87da749e5 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Thu, 21 Jul 2011 11:31:45 +0800 Subject: [PATCH 53/84] Add google groups --- README.mkd | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.mkd b/README.mkd index 63955891b..a784486c2 100644 --- a/README.mkd +++ b/README.mkd @@ -102,6 +102,12 @@ > 欢迎大家通过新浪微博与我交流,有什么意见和建议@我。 +* 邮件列表 + + + > 社交网站140字的限制让复杂的交流显得吃力,这个邮件列表可以弥补不足。 + + * 资源下载 From 64fee9073b46841a3ca56b88af92f8fd62ead03c Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Fri, 22 Jul 2011 08:12:40 +0800 Subject: [PATCH 54/84] =?UTF-8?q?Closes=20#2=20in=20github:=20Author?= =?UTF-8?q?=EF=BC=88=E6=8F=90=E4=BA=A4=E8=80=85=EF=BC=89=E5=BA=94=E4=B8=BA?= =?UTF-8?q?Author=EF=BC=88=E4=BD=9C=E8=80=85=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- errata-others.mkd | 4 +--- errata.mkd | 5 ++--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/errata-others.mkd b/errata-others.mkd index f4b3169e4..3240261eb 100644 --- a/errata-others.mkd +++ b/errata-others.mkd @@ -1,9 +1,7 @@ ## 缺陷跟踪 -访问 [缺陷追踪系统](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) ,报告本书中的错误,会在下次印刷时纠正。地址: - -* +访问 [缺陷追踪系统(Github)](https://github.com/ossxp-com/gotgit/issues/new) 或 [缺陷追踪系统(Redmine)](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) ,报告本书中的错误,会在下次印刷时纠正。 ## 勘误表 diff --git a/errata.mkd b/errata.mkd index 41b43c8e5..65b505ffd 100644 --- a/errata.mkd +++ b/errata.mkd @@ -1,9 +1,7 @@ ## 缺陷跟踪 -访问 [缺陷追踪系统](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) ,报告本书中的错误,会在下次印刷时纠正。地址: - -* +访问 [缺陷追踪系统(Github)](https://github.com/ossxp-com/gotgit/issues/new) 或 [缺陷追踪系统(Redmine)](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) ,报告本书中的错误,会在下次印刷时纠正。 ## 勘误表 @@ -13,6 +11,7 @@ | ------:| ------------------------- | ---------------------------- | ---------------------------- | ---------------------------------------------------- | | 30 | 倒数第5,7,11,12行等6处 | 'brew --prefix' | \`brew --prefix\` | [#146](http://redmine.ossxp.com/redmine/issues/146) | | 30 | 倒数第5行 | 'brew --prefix'/etc/bash\_completion | $ **. \`brew --prefix\`/etc/bash\_completion** | [#152](http://redmine.ossxp.com/redmine/issues/152) | +| 66 | 倒数第11行 | Author(提交者) | Author(作者) | [Github#2](http://github.com/ossxp-com/gotgit/issues/2) | | 144 | 第1行 | \`$ git rev-parse A^{tree} A: | $ git rev-parse A^{tree} A: | [#153](http://redmine.ossxp.com/redmine/issues/153) | | 516 | 倒数第15行 | oldtag="cat" | oldtag=\`cat\` | [#151](http://redmine.ossxp.com/redmine/issues/151) | From 493ce45b01c37038d9d5b6cfc9492881a4033448 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Sat, 23 Jul 2011 12:38:11 +0800 Subject: [PATCH 55/84] =?UTF-8?q?=E5=BD=93=E5=BD=93=E5=BC=80=E5=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.mkd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.mkd b/README.mkd index a784486c2..b941d89e6 100644 --- a/README.mkd +++ b/README.mkd @@ -65,6 +65,9 @@ * 卓越网 +* 当当网 + + * 中关村图书大厦网上书店 @@ -76,9 +79,6 @@ * 北京图书大厦网络书店 -* 当当网(暂未上架) - - * 京东商城(暂未上架) From ec6ce83bb47d45e4979f9af533bb7ed38ce477a3 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Wed, 27 Jul 2011 12:17:59 +0800 Subject: [PATCH 56/84] Add ebook samples download link. --- README.mkd | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.mkd b/README.mkd index b941d89e6..fef4965c5 100644 --- a/README.mkd +++ b/README.mkd @@ -3,6 +3,7 @@ 目录 * 本书介绍 + * 样章试读 * 如何购买 * 在线资源 * 业界评价 @@ -55,6 +56,22 @@ 是用Python开发的以Git为后端的备份工具。 在该工具的开发中,我获得了更多的Git使用经验。 + + +## 样章试读 + +您可以从下面的网址获取本书部分章节的电子版: + +* China-pub 样章试读 + + +* 从新浪微群中的微盘下载 + + +* 作者博客 + + + ## 如何购买 From 29440ebfaac154b29080a4a8a7ee3f9885d28255 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Fri, 29 Jul 2011 19:02:33 +0800 Subject: [PATCH 57/84] Update link of sina vdisk. --- README.mkd | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/README.mkd b/README.mkd index fef4965c5..3533490d8 100644 --- a/README.mkd +++ b/README.mkd @@ -62,14 +62,11 @@ 您可以从下面的网址获取本书部分章节的电子版: -* China-pub 样章试读 - - -* 从新浪微群中的微盘下载 - +* 新浪微盘 + -* 作者博客 - +* 或 China-pub 样章试读 + From 7546d46580f2b7c19857803a69d3b047bbd30f80 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Fri, 29 Jul 2011 19:20:54 +0800 Subject: [PATCH 58/84] Update info related to CmbChina. --- README.mkd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.mkd b/README.mkd index 3533490d8..5eaddc7d7 100644 --- a/README.mkd +++ b/README.mkd @@ -209,8 +209,9 @@ 也许在今后相当长的一段时间内也不会有。如果你是一位软件开发者, 强烈建议你学习并使用Git;如果你要学习Git,本书无疑是你最佳的选择。” - * 八卦:我也一样地[痛恨招商银行](http://www.zeuux.org/event/content/1/), - 招行一卡通专业版不能工作在Linux或者Windows虚拟机中,不思进取,侮辱国人智慧。 + * 八卦:现在可能要为 [招商银行](http://www.zeuux.org/event/content/1/) 正一下名了, + 招行一卡通专业版已经可以在Linux或Mac下的Windows虚拟机中通过UKey证书(非文件证书)运行啦, + 见[招行官方在微博中的回复](http://weibo.com/1687508662/eBU5pDV6bWK)。 From 493c8ab41c7365f218b8b40e8c91a5a0d85cd23c Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Fri, 29 Jul 2011 19:27:39 +0800 Subject: [PATCH 59/84] on sale in 360buy bookstore. --- README.mkd | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.mkd b/README.mkd index 5eaddc7d7..f0da04042 100644 --- a/README.mkd +++ b/README.mkd @@ -82,20 +82,20 @@ * 当当网 -* 中关村图书大厦网上书店 - +* 京东商城 + +* 中关村图书大厦网上书店 + + * 广购书城:广州购书中心网上书店 * 北京图书大厦网络书店 -* 京东商城(暂未上架) - - From 39c587b608ce1b6cc84f5153f890c265745ca69a Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Fri, 29 Jul 2011 19:35:52 +0800 Subject: [PATCH 60/84] Add github issue tracker. --- README.mkd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.mkd b/README.mkd index f0da04042..5bc87fe29 100644 --- a/README.mkd +++ b/README.mkd @@ -222,7 +222,7 @@ 您发现了新的错误么?贡献出来吧,这厢有礼了。Orz 1. 记录您发现的问题。 - 访问: 。 + 访问 [缺陷追踪系统(Github)](https://github.com/ossxp-com/gotgit/issues/new) 或 [缺陷追踪系统(Redmine)](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) 。 1. 修改本Git版本库中的勘误表。 版本库地址: 。 您的贡献可以使用 Github 的 pull request 方式通知我,或者上[新浪微博](http://weibo.com/gotgit/)@我。 From cb8157eec0539644fbe5b69c1a3c4ae5e5e3ece7 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Wed, 3 Aug 2011 11:39:48 +0800 Subject: [PATCH 61/84] Fixed #159: P218, Gits => Git --- errata.mkd | 1 + 1 file changed, 1 insertion(+) diff --git a/errata.mkd b/errata.mkd index 65b505ffd..5d94517fd 100644 --- a/errata.mkd +++ b/errata.mkd @@ -13,5 +13,6 @@ | 30 | 倒数第5行 | 'brew --prefix'/etc/bash\_completion | $ **. \`brew --prefix\`/etc/bash\_completion** | [#152](http://redmine.ossxp.com/redmine/issues/152) | | 66 | 倒数第11行 | Author(提交者) | Author(作者) | [Github#2](http://github.com/ossxp-com/gotgit/issues/2) | | 144 | 第1行 | \`$ git rev-parse A^{tree} A: | $ git rev-parse A^{tree} A: | [#153](http://redmine.ossxp.com/redmine/issues/153) | +| 218 | 第8行 | 况下,Gits标识出合并冲突, | 况下,Git标识出合并冲突, | [#159](http://redmine.ossxp.com/redmine/issues/159) | | 516 | 倒数第15行 | oldtag="cat" | oldtag=\`cat\` | [#151](http://redmine.ossxp.com/redmine/issues/151) | From 00c6c4bfab9824bd967440902ce87440f9e87852 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Wed, 3 Aug 2011 11:50:31 +0800 Subject: [PATCH 62/84] Change font color for stronger text from red to brown. --- errata-others.mkd | 2 +- errata.mkd | 6 +++--- html/inc/errata.css | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/errata-others.mkd b/errata-others.mkd index 3240261eb..b902aa35d 100644 --- a/errata-others.mkd +++ b/errata-others.mkd @@ -5,7 +5,7 @@ ## 勘误表 -说明:为突出字体加粗,用红色字体显示加粗字体。 +说明:为突出字体加粗,用棕色字体显示加粗字体。 ### 文字错误 diff --git a/errata.mkd b/errata.mkd index 5d94517fd..b0b68fb04 100644 --- a/errata.mkd +++ b/errata.mkd @@ -5,14 +5,14 @@ ## 勘误表 -说明:为突出字体加粗,用红色字体显示加粗字体。 +说明:为突出字体加粗,用棕色字体显示加粗字体。 | 页码 | 位置 | 原文 | 修正为 | 缺陷追踪 | | ------:| ------------------------- | ---------------------------- | ---------------------------- | ---------------------------------------------------- | | 30 | 倒数第5,7,11,12行等6处 | 'brew --prefix' | \`brew --prefix\` | [#146](http://redmine.ossxp.com/redmine/issues/146) | | 30 | 倒数第5行 | 'brew --prefix'/etc/bash\_completion | $ **. \`brew --prefix\`/etc/bash\_completion** | [#152](http://redmine.ossxp.com/redmine/issues/152) | | 66 | 倒数第11行 | Author(提交者) | Author(作者) | [Github#2](http://github.com/ossxp-com/gotgit/issues/2) | -| 144 | 第1行 | \`$ git rev-parse A^{tree} A: | $ git rev-parse A^{tree} A: | [#153](http://redmine.ossxp.com/redmine/issues/153) | +| 144 | 第1行 | \`$ **git rev-parse A^{tree} A:** | $ **git rev-parse A^{tree} A:** | [#153](http://redmine.ossxp.com/redmine/issues/153) | | 218 | 第8行 | 况下,Gits标识出合并冲突, | 况下,Git标识出合并冲突, | [#159](http://redmine.ossxp.com/redmine/issues/159) | -| 516 | 倒数第15行 | oldtag="cat" | oldtag=\`cat\` | [#151](http://redmine.ossxp.com/redmine/issues/151) | +| 516 | 倒数第15行 | **oldtag="cat"** | **oldtag=\`cat\`** | [#151](http://redmine.ossxp.com/redmine/issues/151) | diff --git a/html/inc/errata.css b/html/inc/errata.css index 918521d16..e0ea5f0a7 100755 --- a/html/inc/errata.css +++ b/html/inc/errata.css @@ -1 +1 @@ -strong{color:red;font-weight:bolder;} +strong{color:#A52A2A;font-weight:bolder;} From 7ecdfe7451412cfb2e65bb47c12cf2162e21c841 Mon Sep 17 00:00:00 2001 From: Wang Sheng Date: Tue, 16 Aug 2011 10:17:53 +0800 Subject: [PATCH 63/84] =?UTF-8?q?Fixed=20#3:=20should=20be=20=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE,=20not=20=E9=A1=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- errata.mkd | 1 + 1 file changed, 1 insertion(+) diff --git a/errata.mkd b/errata.mkd index b0b68fb04..29e40cfd0 100644 --- a/errata.mkd +++ b/errata.mkd @@ -14,5 +14,6 @@ | 66 | 倒数第11行 | Author(提交者) | Author(作者) | [Github#2](http://github.com/ossxp-com/gotgit/issues/2) | | 144 | 第1行 | \`$ **git rev-parse A^{tree} A:** | $ **git rev-parse A^{tree} A:** | [#153](http://redmine.ossxp.com/redmine/issues/153) | | 218 | 第8行 | 况下,Gits标识出合并冲突, | 况下,Git标识出合并冲突, | [#159](http://redmine.ossxp.com/redmine/issues/159) | +| 369 | 第21行 | 但 `-i` 参数仅当对一个项执行时才有效。 | 但 `-i` 参数仅当对一个项目执行时才有效。 | [Github#3](http://github.com/ossxp-com/gotgit/issues/3) | | 516 | 倒数第15行 | **oldtag="cat"** | **oldtag=\`cat\`** | [#151](http://redmine.ossxp.com/redmine/issues/151) | From 0d52d7b10c968ab0e0931cba3f77038ba5164a7b Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Wed, 14 Sep 2011 21:48:32 +0800 Subject: [PATCH 64/84] Transfer gotgit repo from ossxp-com to organization account: gotgit. --- README.mkd | 12 ++++++------ errata-others.mkd | 2 +- errata.mkd | 6 +++--- html/templates/index.erb | 2 +- html/templates/scast.erb | 4 ++-- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/README.mkd b/README.mkd index 5bc87fe29..517c724bb 100644 --- a/README.mkd +++ b/README.mkd @@ -102,7 +102,7 @@ ## 在线资源 * 官方网站 - + > 采用Git方式维护的官方网站,欢迎大家一起参与其中。 @@ -136,7 +136,7 @@ * 本资料库 - + @@ -222,9 +222,9 @@ 您发现了新的错误么?贡献出来吧,这厢有礼了。Orz 1. 记录您发现的问题。 - 访问 [缺陷追踪系统(Github)](https://github.com/ossxp-com/gotgit/issues/new) 或 [缺陷追踪系统(Redmine)](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) 。 + 访问 [缺陷追踪系统(Github)](https://github.com/gotgit/gotgit/issues/new) 或 [缺陷追踪系统(Redmine)](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) 。 1. 修改本Git版本库中的勘误表。 - 版本库地址: 。 + 版本库地址: 。 您的贡献可以使用 Github 的 pull request 方式通知我,或者上[新浪微博](http://weibo.com/gotgit/)@我。 @@ -244,7 +244,7 @@ * 克隆版本库。 - $ git clone git://github.com/ossxp-com/gotgit.git + $ git clone git://github.com/gotgit/gotgit.git * 确认系统中安装了 ruby 和 perl,并通过 rubygems 安装 redcarpet。 @@ -266,7 +266,7 @@ * 克隆版本库。 - $ git clone git://github.com/ossxp-com/gotgit.git + $ git clone git://github.com/gotgit/gotgit.git * 添加新的配置,以便获取首次克隆未获取到的远程分支。 diff --git a/errata-others.mkd b/errata-others.mkd index b902aa35d..e2109b5f2 100644 --- a/errata-others.mkd +++ b/errata-others.mkd @@ -1,7 +1,7 @@ ## 缺陷跟踪 -访问 [缺陷追踪系统(Github)](https://github.com/ossxp-com/gotgit/issues/new) 或 [缺陷追踪系统(Redmine)](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) ,报告本书中的错误,会在下次印刷时纠正。 +访问 [缺陷追踪系统(Github)](https://github.com/gotgit/gotgit/issues/new) 或 [缺陷追踪系统(Redmine)](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) ,报告本书中的错误,会在下次印刷时纠正。 ## 勘误表 diff --git a/errata.mkd b/errata.mkd index 29e40cfd0..a63d16268 100644 --- a/errata.mkd +++ b/errata.mkd @@ -1,7 +1,7 @@ ## 缺陷跟踪 -访问 [缺陷追踪系统(Github)](https://github.com/ossxp-com/gotgit/issues/new) 或 [缺陷追踪系统(Redmine)](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) ,报告本书中的错误,会在下次印刷时纠正。 +访问 [缺陷追踪系统(Github)](https://github.com/gotgit/gotgit/issues/new) 或 [缺陷追踪系统(Redmine)](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) ,报告本书中的错误,会在下次印刷时纠正。 ## 勘误表 @@ -11,9 +11,9 @@ | ------:| ------------------------- | ---------------------------- | ---------------------------- | ---------------------------------------------------- | | 30 | 倒数第5,7,11,12行等6处 | 'brew --prefix' | \`brew --prefix\` | [#146](http://redmine.ossxp.com/redmine/issues/146) | | 30 | 倒数第5行 | 'brew --prefix'/etc/bash\_completion | $ **. \`brew --prefix\`/etc/bash\_completion** | [#152](http://redmine.ossxp.com/redmine/issues/152) | -| 66 | 倒数第11行 | Author(提交者) | Author(作者) | [Github#2](http://github.com/ossxp-com/gotgit/issues/2) | +| 66 | 倒数第11行 | Author(提交者) | Author(作者) | [Github#2](http://github.com/gotgit/gotgit/issues/2) | | 144 | 第1行 | \`$ **git rev-parse A^{tree} A:** | $ **git rev-parse A^{tree} A:** | [#153](http://redmine.ossxp.com/redmine/issues/153) | | 218 | 第8行 | 况下,Gits标识出合并冲突, | 况下,Git标识出合并冲突, | [#159](http://redmine.ossxp.com/redmine/issues/159) | -| 369 | 第21行 | 但 `-i` 参数仅当对一个项执行时才有效。 | 但 `-i` 参数仅当对一个项目执行时才有效。 | [Github#3](http://github.com/ossxp-com/gotgit/issues/3) | +| 369 | 第21行 | 但 `-i` 参数仅当对一个项执行时才有效。 | 但 `-i` 参数仅当对一个项目执行时才有效。 | [Github#3](http://github.com/gotgit/gotgit/issues/3) | | 516 | 倒数第15行 | **oldtag="cat"** | **oldtag=\`cat\`** | [#151](http://redmine.ossxp.com/redmine/issues/151) | diff --git a/html/templates/index.erb b/html/templates/index.erb index 117e2dd1c..4f4880a1e 100644 --- a/html/templates/index.erb +++ b/html/templates/index.erb @@ -21,7 +21,7 @@ 作者:蒋鑫 -网址:http://www.ossxp.com/doc/gotgit/ +网址:http://gotgit.github.com/gotgit/ 版本:<%= @version %> diff --git a/html/templates/scast.erb b/html/templates/scast.erb index d63bc3199..7ac655c75 100644 --- a/html/templates/scast.erb +++ b/html/templates/scast.erb @@ -18,7 +18,7 @@ 作者:蒋鑫 -网址:http://www.ossxp.com/doc/gotgit/ +网址:http://gotgit.github.com/gotgit/ 版本:<%= version %> @@ -33,7 +33,7 @@

点击下面相应的链接通过Web网页观看操作回放。网页回放技术来自于 jsttyplay

如需要更好的控制回复的速度、暂停等,请使用 ttyplay (Linux), termrec (Windows) 等软件回放扩展名为 ".ttyrec" 的文件。

您也可以使用 ttyrec 软件录制自己的回放,将文件以 ".ttyrec" 为扩展名保存在 ttyrec 目录下,然后执行 "rake" 命令,自动将新增回放放入本页面中。 -

从版本库 git://github.com/ossxp-com/gotgit.git 克隆并创建您自己的分支,与大家分享。 +

从版本库 git://github.com/gotgit/gotgit.git 克隆并创建您自己的分支,与大家分享。 <% parts = { '1' => '第1篇:初识Git', From 0eb7544e03325e4dc66db1ccf766858855a2e26a Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Thu, 29 Sep 2011 10:56:48 +0800 Subject: [PATCH 65/84] Fixed #5: hello-word should be hello-world. --- errata.mkd | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/errata.mkd b/errata.mkd index a63d16268..ff59079ad 100644 --- a/errata.mkd +++ b/errata.mkd @@ -1,7 +1,7 @@ ## 缺陷跟踪 -访问 [缺陷追踪系统(Github)](https://github.com/gotgit/gotgit/issues/new) 或 [缺陷追踪系统(Redmine)](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) ,报告本书中的错误,会在下次印刷时纠正。 +访问 [缺陷追踪系统(GitHub)](https://github.com/gotgit/gotgit/issues/new) 或 [缺陷追踪系统(Redmine)](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) ,报告本书中的错误,会在下次印刷时纠正。 ## 勘误表 @@ -11,9 +11,10 @@ | ------:| ------------------------- | ---------------------------- | ---------------------------- | ---------------------------------------------------- | | 30 | 倒数第5,7,11,12行等6处 | 'brew --prefix' | \`brew --prefix\` | [#146](http://redmine.ossxp.com/redmine/issues/146) | | 30 | 倒数第5行 | 'brew --prefix'/etc/bash\_completion | $ **. \`brew --prefix\`/etc/bash\_completion** | [#152](http://redmine.ossxp.com/redmine/issues/152) | -| 66 | 倒数第11行 | Author(提交者) | Author(作者) | [Github#2](http://github.com/gotgit/gotgit/issues/2) | +| 66 | 倒数第11行 | Author(提交者) | Author(作者) | [GitHub#2](http://github.com/gotgit/gotgit/issues/2) | | 144 | 第1行 | \`$ **git rev-parse A^{tree} A:** | $ **git rev-parse A^{tree} A:** | [#153](http://redmine.ossxp.com/redmine/issues/153) | | 218 | 第8行 | 况下,Gits标识出合并冲突, | 况下,Git标识出合并冲突, | [#159](http://redmine.ossxp.com/redmine/issues/159) | -| 369 | 第21行 | 但 `-i` 参数仅当对一个项执行时才有效。 | 但 `-i` 参数仅当对一个项目执行时才有效。 | [Github#3](http://github.com/gotgit/gotgit/issues/3) | +| 265 | 最后1行 | 用户在使用1.0版的hello-word | 用户在使用1.0版的hello-world | [GitHub#5](http://github.com/gotgit/gotgit/issues/5) | +| 369 | 第21行 | 但 `-i` 参数仅当对一个项执行时才有效。 | 但 `-i` 参数仅当对一个项目执行时才有效。 | [GitHub#3](http://github.com/gotgit/gotgit/issues/3) | | 516 | 倒数第15行 | **oldtag="cat"** | **oldtag=\`cat\`** | [#151](http://redmine.ossxp.com/redmine/issues/151) | From 053d3b62788ff7982b03ef9ec61d9459c64325ca Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Mon, 10 Oct 2011 08:49:51 +0800 Subject: [PATCH 66/84] A line lost in the output of git rev-list command in P146. Output of the following git rev-list command should have commit G. $ git rev-list --oneline F^! D beb30ca Commit F: merge I with J 212efce Commit D: merge G with H 2ab52ad commit H. e80aa74 commit G. Fixed #11 in GotGit project at GitHub. --- errata.mkd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/errata.mkd b/errata.mkd index ff59079ad..35eb32b51 100644 --- a/errata.mkd +++ b/errata.mkd @@ -7,12 +7,13 @@ 说明:为突出字体加粗,用棕色字体显示加粗字体。 -| 页码 | 位置 | 原文 | 修正为 | 缺陷追踪 | +| 页码 | 位置 | 原文/错误描述 | 修正为 | 缺陷追踪 | | ------:| ------------------------- | ---------------------------- | ---------------------------- | ---------------------------------------------------- | | 30 | 倒数第5,7,11,12行等6处 | 'brew --prefix' | \`brew --prefix\` | [#146](http://redmine.ossxp.com/redmine/issues/146) | | 30 | 倒数第5行 | 'brew --prefix'/etc/bash\_completion | $ **. \`brew --prefix\`/etc/bash\_completion** | [#152](http://redmine.ossxp.com/redmine/issues/152) | | 66 | 倒数第11行 | Author(提交者) | Author(作者) | [GitHub#2](http://github.com/gotgit/gotgit/issues/2) | | 144 | 第1行 | \`$ **git rev-parse A^{tree} A:** | $ **git rev-parse A^{tree} A:** | [#153](http://redmine.ossxp.com/redmine/issues/153) | +| 146 | | ``$ git rev-list --oneline F^! D`` 的结果中应该有Commit G | | [GitHub#11](http://github.com/gotgit/gotgit/issues/11) | | 218 | 第8行 | 况下,Gits标识出合并冲突, | 况下,Git标识出合并冲突, | [#159](http://redmine.ossxp.com/redmine/issues/159) | | 265 | 最后1行 | 用户在使用1.0版的hello-word | 用户在使用1.0版的hello-world | [GitHub#5](http://github.com/gotgit/gotgit/issues/5) | | 369 | 第21行 | 但 `-i` 参数仅当对一个项执行时才有效。 | 但 `-i` 参数仅当对一个项目执行时才有效。 | [GitHub#3](http://github.com/gotgit/gotgit/issues/3) | From 00d5f1608b36dd9f6a7d5b240b030b8c29f00a36 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Sat, 3 Dec 2011 09:04:37 +0800 Subject: [PATCH 67/84] Update layout, add common worldhello header. --- html/templates/index.erb | 17 +++++++++++++++++ html/templates/scast.erb | 17 +++++++++++++++++ html/templates/ttyplay.erb | 17 +++++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/html/templates/index.erb b/html/templates/index.erb index 4f4880a1e..e0e65c71c 100644 --- a/html/templates/index.erb +++ b/html/templates/index.erb @@ -8,8 +8,25 @@ <% @css_files.each do |t| %> <% end %> + + +

+

<%= @title %>

diff --git a/html/templates/scast.erb b/html/templates/scast.erb index 7ac655c75..f10c74eab 100644 --- a/html/templates/scast.erb +++ b/html/templates/scast.erb @@ -5,8 +5,25 @@ <% css_files.each do |t| %> <% end %> + + + +

《Git权威指南》

diff --git a/html/templates/ttyplay.erb b/html/templates/ttyplay.erb index 8e2f77848..340ea7552 100644 --- a/html/templates/ttyplay.erb +++ b/html/templates/ttyplay.erb @@ -8,8 +8,25 @@ <% js_files.each do |t| %> <% end %> + + + +

<%=title %>

Enable JavaScript to see the animation.
From 6e50fb1c190c70cbc37264e8c8d302e0f2ffc69b Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Sun, 4 Dec 2011 13:27:36 +0800 Subject: [PATCH 68/84] Build pages using jekyll --- .gitignore | 6 +- Rakefile | 26 +------ _config.yml | 2 + _layouts/master.html | 57 ++++++++++++++ _layouts/master_with_jquery.html | 6 ++ _layouts/ttyrecord.html | 13 ++++ bookstore.md | 33 ++++++++ demo.md | 66 ++++++++++++++++ errata-others.mkd => errata-others.md | 18 ++++- errata.mkd => errata.md | 18 ++++- html/.gitignore | 1 + html/templates/scast.erb | 57 +------------- html/templates/ttyplay.erb | 43 ++--------- index.md | 105 ++++++++++++++++++++++++++ recommends.md | 80 ++++++++++++++++++++ screencast.html | 92 ++++++++++++++++++++++ 16 files changed, 498 insertions(+), 125 deletions(-) create mode 100644 _config.yml create mode 100644 _layouts/master.html create mode 100644 _layouts/master_with_jquery.html create mode 100644 _layouts/ttyrecord.html create mode 100644 bookstore.md create mode 100644 demo.md rename errata-others.mkd => errata-others.md (83%) rename errata.mkd => errata.md (78%) create mode 100644 index.md create mode 100644 recommends.md create mode 100644 screencast.html diff --git a/.gitignore b/.gitignore index cdb3d3f6c..57510a2be 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1 @@ -/screencast.html -/index.html -/demo*.html -/errata.html -*.json +_site/ diff --git a/Rakefile b/Rakefile index 70d78fcfa..e61ca347e 100644 --- a/Rakefile +++ b/Rakefile @@ -11,11 +11,7 @@ ABS_JS_SHOWTTY_FILE = File.expand_path('html/inc/showtty.js') ABS_CSS_COMMON_FILE = File.expand_path('html/inc/common.css') TTYPLAY_TMPL = File.expand_path('html/templates/ttyplay.erb') SCAST_TMPL = File.expand_path('html/templates/scast.erb') -INDEX_TMPL = File.expand_path('html/templates/index.erb') SCAST_HTML = File.expand_path('screencast.html') -INDEX_HTML = File.expand_path('index.html') -DEMO_INDEX_HTML = File.expand_path('demo_index.html') -ERRATA_HTML = File.expand_path('errata.html') class ArgsBinding def initialize(args) @@ -65,7 +61,7 @@ desc 'compile ttyrec files to json files' task :json desc 'create index.html and other html files for ttyplay.' -task :html => [:html_chunks, :html_screencast, INDEX_HTML, ERRATA_HTML] +task :html => [:html_chunks, :html_screencast ] task :html_chunks do FileList["html/**/*.json"].each do |t| @@ -151,23 +147,6 @@ def mkd2html args puts "built %s from %s" % [args[:output], args[:source]] end - -file INDEX_HTML => ['README.mkd', INDEX_TMPL] do |t| - mkd2html :title => "《Git权威指南》", :subtitle => "参考资料", - :source => t.prerequisites[0], :template => t.prerequisites[1], :output => INDEX_HTML, - :extra_js => ['html/inc/jquery-1.6.2.min.js', 'html/inc/click_more.js'] - - mkd2html :title => "《Git权威指南》", :subtitle => "参考资料", - :source => t.prerequisites[0], :template => t.prerequisites[1], :output => DEMO_INDEX_HTML -end - -file ERRATA_HTML => ['errata.mkd', INDEX_TMPL] do |t| - mkd2html :title => "《Git权威指南》", :subtitle => "勘误", - :source => t.prerequisites[0], :template => t.prerequisites[1], :output => ERRATA_HTML, - :extra_css => ['html/inc/errata.css'], - :extra_js => ['html/inc/jquery-1.6.2.min.js', 'html/inc/click_more.js'] -end - desc 'clean *.json and *.html files' task :clean => [:clean_json, :clean_html] @@ -181,9 +160,6 @@ task :clean_html do FileList["html/**/*.html"].each do |t| File.unlink t end - File.unlink SCAST_HTML if File.exists?(SCAST_HTML) - File.unlink INDEX_HTML if File.exists?(INDEX_HTML) - File.unlink ERRATA_HTML if File.exists?(ERRATA_HTML) end task :default => [:json, :html] diff --git a/_config.yml b/_config.yml new file mode 100644 index 000000000..6d67c09ed --- /dev/null +++ b/_config.yml @@ -0,0 +1,2 @@ +markdown: rdiscount +pygments: true diff --git a/_layouts/master.html b/_layouts/master.html new file mode 100644 index 000000000..eb98e2b97 --- /dev/null +++ b/_layouts/master.html @@ -0,0 +1,57 @@ + + + + + + Git权威指南 - {{ page.title }} + {% for style in page.stylesheets %} + + {% endfor %} + {% for script in page.javascripts %} + + {% endfor %} + + + + +
+ + + + +
+ + {{ content }} +
+
+
+ + + diff --git a/_layouts/master_with_jquery.html b/_layouts/master_with_jquery.html new file mode 100644 index 000000000..4820b2d74 --- /dev/null +++ b/_layouts/master_with_jquery.html @@ -0,0 +1,6 @@ +--- +layout: master +javascripts: [ "/javascripts/jquery.js", "/javascripts/jquery.github.js" ] +--- + +{{ content }} diff --git a/_layouts/ttyrecord.html b/_layouts/ttyrecord.html new file mode 100644 index 000000000..13fcec9ce --- /dev/null +++ b/_layouts/ttyrecord.html @@ -0,0 +1,13 @@ +--- +layout: master +stylesheets: [ "/gotgit/html/inc/common.css", "/gotgit/html/inc/tty.css" ] +javascripts: [ "/gotgit/html/inc/prototype.js", "/gotgit/html/inc/showtty.js" ] +--- + +
+

{{ page.title }}

+
Enable JavaScript to see the animation.
+ +
diff --git a/bookstore.md b/bookstore.md new file mode 100644 index 000000000..d3d33e2f9 --- /dev/null +++ b/bookstore.md @@ -0,0 +1,33 @@ +--- +layout: master_with_jquery +title: 如何购买 +--- + + + +## 如何购买 + +* China-pub 互动出版网 + + +* 卓越网 + + +* 当当网 + + +* 京东商城 + + + + +* 中关村图书大厦网上书店 + + +* 广购书城:广州购书中心网上书店 + + +* 北京图书大厦网络书店 + + + diff --git a/demo.md b/demo.md new file mode 100644 index 000000000..c06e9f460 --- /dev/null +++ b/demo.md @@ -0,0 +1,66 @@ +--- +layout: master +title: 操作回放 +--- + + + +## 操作回放 + +本书的部分操作用 ttyrec 录制,查看请访问:[《Git权威指南》——操作回放](screencast.html)。 +读者除了可以看到“活”的操作外,还可以从回放当中复制操作的代码。 + +如果该网页不存在、无法访问,或是您想在本地回放,或者想在其中添加您自己的操作回放, +有两种方式: + +方式一:你可以从 Github 上克隆本版本库,编译相关网页。 + + + +* 克隆版本库。 + + $ git clone git://github.com/gotgit/gotgit.git + +* 确认系统中安装了 ruby 和 perl,并通过 rubygems 安装 redcarpet。 + + $ gem install redcarpet + +* 执行编译。 + + $ rake + +* 点击生成的页面:[《Git权威指南》——操作回放](screencast.html)。 + +方式二:版本库中本来就保存了一份已编译文档,只不过缺省没有克隆出来。 + +> 如果您的系统上缺乏相应的工具软件而无法成功编译, + 在版本库中实际上保存了一份已经编译好的文件,可以通过Git下载, + 并检出到工作区。 + + + +* 克隆版本库。 + + $ git clone git://github.com/gotgit/gotgit.git + +* 添加新的配置,以便获取首次克隆未获取到的远程分支。 + + $ git config --add remote.origin.fetch +refs/remotes/*:refs/remotes/* + +* 执行获取操作。 + + $ git fetch + +* 检出分支 refs/remotes/compiled 分支中的内容到工作区。 + + $ git checkout compiled -- . + +* 执行重置,将已编译文档撤出暂存区,当然工作区中仍然保留。 + + $ git reset + +* 点击检出的页面:[《Git权威指南》——操作回放](screencast.html)。 + +如果您自己想把自己录制的操作与他人共享,可以将录制的文件以 ".ttyrec" 扩展名保存到 ttyrec 目录下。 +执行 rake 命令,可以自动生成新的播放页面。 + diff --git a/errata-others.mkd b/errata-others.md similarity index 83% rename from errata-others.mkd rename to errata-others.md index e2109b5f2..938dad5eb 100644 --- a/errata-others.mkd +++ b/errata-others.md @@ -1,7 +1,21 @@ +--- +layout: master +title: 勘误表 +--- -## 缺陷跟踪 +## 参与勘误 -访问 [缺陷追踪系统(Github)](https://github.com/gotgit/gotgit/issues/new) 或 [缺陷追踪系统(Redmine)](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) ,报告本书中的错误,会在下次印刷时纠正。 +您发现了新的错误么?贡献出来吧,这厢有礼了。Orz + +1. 记录您发现的问题。 + + 访问 [缺陷追踪系统(Github)](https://github.com/gotgit/gotgit/issues/new) 报告问题。 + +2. 修改本Git版本库中的勘误表。 + + * 在 GitHub 上从本版本库 派生后,直接修改勘误表。 + * 将您的修改通过 Github 的 Pull Request 工具通知我。 + * 您还可以直接通过 [新浪微博](http://weibo.com/gotgit/) @群英汇蒋鑫。 ## 勘误表 diff --git a/errata.mkd b/errata.md similarity index 78% rename from errata.mkd rename to errata.md index 35eb32b51..49cbd84f3 100644 --- a/errata.mkd +++ b/errata.md @@ -1,7 +1,21 @@ +--- +layout: master +title: 勘误表 +--- -## 缺陷跟踪 +## 参与勘误 -访问 [缺陷追踪系统(GitHub)](https://github.com/gotgit/gotgit/issues/new) 或 [缺陷追踪系统(Redmine)](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) ,报告本书中的错误,会在下次印刷时纠正。 +您发现了新的错误么?贡献出来吧,这厢有礼了。Orz + +1. 记录您发现的问题。 + + 访问 [缺陷追踪系统(Github)](https://github.com/gotgit/gotgit/issues/new) 报告问题。 + +2. 修改本Git版本库中的勘误表。 + + * 在 GitHub 上从本版本库 派生后,直接修改勘误表。 + * 将您的修改通过 Github 的 Pull Request 工具通知我。 + * 您还可以直接通过 [新浪微博](http://weibo.com/gotgit/) @群英汇蒋鑫。 ## 勘误表 diff --git a/html/.gitignore b/html/.gitignore index 2d19fc766..c427f5d3e 100644 --- a/html/.gitignore +++ b/html/.gitignore @@ -1 +1,2 @@ *.html +*.json diff --git a/html/templates/scast.erb b/html/templates/scast.erb index f10c74eab..6980bd4de 100644 --- a/html/templates/scast.erb +++ b/html/templates/scast.erb @@ -1,51 +1,7 @@ - - - -Git权威指南——操作回放 -<% css_files.each do |t| %> - -<% end %> - - - - - - -
- -

《Git权威指南》

-

操作回放

- --- - - - - - - - - - - - - - -
作者:蒋鑫
网址:http://gotgit.github.com/gotgit/
版本:<%= version %>
日期:<%= compile_time %>
版权信息:Creative Commons
+--- +layout: master +title: 操作回放 +---

点击下面相应的链接通过Web网页观看操作回放。网页回放技术来自于 jsttyplay

如需要更好的控制回复的速度、暂停等,请使用 ttyplay (Linux), termrec (Windows) 等软件回放扩展名为 ".ttyrec" 的文件。 @@ -78,8 +34,3 @@ parts = { '1' => '第1篇:初识Git', <% end %> <% end %> - -

- - - diff --git a/html/templates/ttyplay.erb b/html/templates/ttyplay.erb index 340ea7552..20e84f2fe 100644 --- a/html/templates/ttyplay.erb +++ b/html/templates/ttyplay.erb @@ -1,38 +1,5 @@ - - - -<%=title %> -<% css_files.each do |t| %> - -<% end %> -<% js_files.each do |t| %> - -<% end %> - - - - - - -
-

<%=title %>

-
Enable JavaScript to see the animation.
- -
- - +--- +layout: ttyrecord +title: <%=title %> +json_file: <%=json_file%> +--- diff --git a/index.md b/index.md new file mode 100644 index 000000000..44ff59ef9 --- /dev/null +++ b/index.md @@ -0,0 +1,105 @@ +--- +layout: master +title: 关于本书 +--- + + + +## 关于本书 + +Git权威指南封面 + +《Git权威指南》一书由机工华章于 2011年6月底出版,作者是 +[北京群英汇信息技术有限公司](http://www.ossxp.com/) +高级顾问 [蒋鑫](http://weibo.com/gotgit/)。 注意本书是原创,不是翻译的哦。 + +网上能够找到很多Git资料和电子书,包括《[Git社区书](http://book.git-scm.com/)》, +以及《[ProGit](http://progit.org/book/)》等,都是非常好、非常系统的教程, +也正是这些教程引领了我的Git学习之路。那么我写的Git书有什么特别之处呢? +以下是我认为这本书的优势: + +* 降低跨越的难度。 + 我曾经因为Git的古怪而放弃Git,改用Mercurial(Hg)。 + 因此一本成功的Git书要兼顾版本控制老用户的体验, + 即要照顾到那些拥有其他版本控制工具使用经验的用户的使用习惯和需求。 + +* 独特的讲故事的方式。 + 我有着自己讲故事的方式,这是我多年来为不同公司做 Subversion 和 Git + 培训和技术支持所积累的经验。 + (顺便说一句,书出了可以继续找我做培训哦,面对面的交流可比读书有意思多了)。8) + +* 介绍了众多实用的Git协同模型。 + 是什么将我由Mercurial拉回Git的呢?是Topgit, + 一个对Git特性分支管理做了封装的上层工具。 + 我对这款工具感触良多,而且也透彻的研究和改造了这一工具, + 相信我们在开源软件定制开发中用到的这一独特的Git协同模式也同样适用于他人。 + +* 子模组不堪大任,我找到了更好的多版本库协同模型 —— 来自于Android的Repo。 + 在给客户培训Git过程中,我发现客户在Android驱动开发中采用的独特的开发模式: + Repo + Gerrit,于是深入其中发现别有洞天。 + 我还对 Repo 进行了扩展,以便让其有更广阔的适用范围。 + +* 改进的 Gitosis 及 Gitolite。 + 基于SSH的Git服务器软件,在使用中我们对其做了很多改造,更加符合用户的使用习惯。 + +* 我开发的一款备份工具 Gistore。 + 我为这款工具起的名字来自于这两个单词的组合:Git + Store。 + 是用Python开发的以Git为后端的备份工具。 + 在该工具的开发中,我获得了更多的Git使用经验。 + + + +## 在线资源 + +* 官方网站 + + + > 采用Git方式维护的官方网站,欢迎大家一起参与其中。 + +* 新浪微群 + + + > 关于本书以及相关技术的讨论,还有本书的样章提供下载。 + +* 作者微博 + + + > 欢迎大家通过新浪微博与我交流,有什么意见和建议@我。 + +* 邮件列表 + + + > 社交网站140字的限制让复杂的交流显得吃力,这个邮件列表可以弥补不足。 + + + + +* 资源下载 + + * 代码示例下载 + [本地下载](download) + + * 演示版本库1 + + + * 演示版本库2 (Hello world) + + + * 本资料库 + + + + + +## 样章试读 + +您可以从下面的网址获取本书部分章节的电子版: + +* 新浪微盘 + + +* 或 China-pub 样章试读 + + + + diff --git a/recommends.md b/recommends.md new file mode 100644 index 000000000..b44683d36 --- /dev/null +++ b/recommends.md @@ -0,0 +1,80 @@ +--- +layout: master +title: 业界评价 +--- + + + +## 业界评价(以书评时间的先后为序) + + + +**Junio C Hamano** + + * “我是Junio C Hamano,Git的主要维护者。我当年写了一本针对日本读者的Git书, + 当我把我签名的书送给Linus时,他对我说:“除了截图和命令行示例外, + 什么也看不懂(Linus不懂日文)”。基于同样的原因,虽然我不能了解这本书的全貌, + 但是我可以看出这本书涵盖了非常广泛的主题,并且看出蒋鑫对这本书的用心。 + 我非常高兴能够看到这本书的出版,感谢向世界传播Git。” + + * 八卦:同时向 Git 社区大佬 Junio 和 Linus 发送本书章节目录的翻译稿, + 其中的翻译错误让人忍俊不住(感谢表妹和男友鹏辉)。 + 本书发行后,会同时给 Junio 和 Linus 邮寄一本签名版, + 并争取“等价”交换一本他们的自传或图书。 + + + +**范凯**,CSDN平台开发总监/Javaeye创始人 + + * “仔细拜读了本书前三篇共20章的内容,在我看来,这本书非常棒。 + 作者在软件版本管理控制系统方面有超过10年的经验, + 对版本管理系统有非常深入的认识,实践经验也十分丰富。尤为难得的是, + 本书文笔很流畅,虽然是技术书籍,但是作者娓娓道来,阅读体验很好。 + Git的学习门槛较高,包括我们公司在内的很多企业都将版本管理系统转向了Git, + 这本书能给我们带来帮助,强烈推荐。” + + * 八卦:为了能够获得CSDN评价,发动有限的社会资源向CSDN的老大传声,收效甚微。 + 最后我厚着二皮脸直接向CSDN 蒋总发送秋天的菠菜,... + 我给范凯发送了本书前三篇的内容作为样章(300页), + 没想到范凯在百忙中居然全部读完,之后才写撰写书评,让我佩服他的严谨。 + 编辑等待CSDN的书评一直很心急,也许当初我只发前言就好了。 8) + + + +**许晓斌**,《Maven实战》的作者,Git的重度使用者 + + * “这是我读过的关于Git最好的书。将复杂的Git解释得清晰透彻绝非易事, + 蒋鑫做到了,更让人惊喜的是他还分享了大量的经验总结。 + 我多年来积累的许多疑惑在读罢该书后一一得以解开。 + 如果你正在使用,或者打算使用Git,本书当然是必备的。 + 你也可以抱着Subversion/CVS不放, + 不过哪天有人拿起这本书敲你头的时候可别怪我没提醒过你。” + + * 八卦:许晓斌对本书帮助良多,大概是除了我和编辑之外, + 仅有的在本书上市前完整看过书稿的人。面对《Git权威指南》出版社一排书稿, + 大概又想到了当初自己书稿被编排的惨痛体验了吧... ;) + + + +**冯铃**,清华大学计算机科学与技术系“长江学者”特聘教授 + + * “Git是当前开源社区最流行的版本控制系统,代表了版本控制的未来。 + 每一个有志于计算机编程的学习者都应该学习和掌握这一工具,它不但 + 用于追踪编程者的思考过程,还是打开开源软件世界的金钥匙,更可以 + 通过版本控制掌握与他人协同工作的技能。本书是一本耐读原创之书, + 因为其涵盖的内容之广足可以让一名程序员在成长的不同阶段都可以从 + 中汲取丰富营养。” + + + +**徐继哲**,[哲思社区](http://www.zeuux.org/) 创始人 + + * “目前市面上关于Git的书不在少数,但迄今为止, + 国内外还没有一本书能在广度和深度上达到本书的水平, + 也许在今后相当长的一段时间内也不会有。如果你是一位软件开发者, + 强烈建议你学习并使用Git;如果你要学习Git,本书无疑是你最佳的选择。” + + * 八卦:现在可能要为 [招商银行](http://www.zeuux.org/event/content/1/) 正一下名了, + 招行一卡通专业版已经可以在Linux或Mac下的Windows虚拟机中通过UKey证书(非文件证书)运行啦, + 见[招行官方在微博中的回复](http://weibo.com/1687508662/eBU5pDV6bWK)。 + diff --git a/screencast.html b/screencast.html new file mode 100644 index 000000000..125a6a346 --- /dev/null +++ b/screencast.html @@ -0,0 +1,92 @@ +--- +layout: master +title: 操作回放 +--- + +

点击下面相应的链接通过Web网页观看操作回放。网页回放技术来自于 jsttyplay。 +

如需要更好的控制回复的速度、暂停等,请使用 ttyplay (Linux), termrec (Windows) 等软件回放扩展名为 ".ttyrec" 的文件。 +

您也可以使用 ttyrec 软件录制自己的回放,将文件以 ".ttyrec" 为扩展名保存在 ttyrec 目录下,然后执行 "rake" 命令,自动将新增回放放入本页面中。 +

从版本库 git://github.com/gotgit/gotgit.git 克隆并创建您自己的分支,与大家分享。 + + + + + +

第1篇:初识Git

+ + + + +

第2篇:Git独奏

+ + + + +

第3篇:Git和声

+ + + From 7be9fa97b10a38389f157a8f695a2d7a305d3e05 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Sun, 4 Dec 2011 13:35:25 +0800 Subject: [PATCH 69/84] screencasting htmls and jsons built from ttyrec. --- html/.gitignore | 2 -- html/part1/ch01-01-diff-patch.html | 5 +++++ html/part1/ch01-01-diff-patch.json | 1 + html/part2/ch04-01-first-commit.html | 5 +++++ html/part2/ch04-01-first-commit.json | 1 + html/part2/ch04-02-git-config.html | 5 +++++ html/part2/ch04-02-git-config.json | 1 + html/part2/ch04-03-who-does-commit.html | 5 +++++ html/part2/ch04-03-who-does-commit.json | 1 + html/part2/ch05-01-commit-modified.html | 5 +++++ html/part2/ch05-01-commit-modified.json | 1 + html/part2/ch05-02-index-and-diff.html | 5 +++++ html/part2/ch05-02-index-and-diff.json | 1 + html/part2/ch05-03-git-stash.html | 5 +++++ html/part2/ch05-03-git-stash.json | 1 + html/part2/ch06-01-git-objects.html | 5 +++++ html/part2/ch06-01-git-objects.json | 1 + html/part2/ch06-02-sha1-hash.html | 5 +++++ html/part2/ch06-02-sha1-hash.json | 1 + html/part2/ch07-01-git-reset.html | 5 +++++ html/part2/ch07-01-git-reset.json | 1 + html/part2/ch07-02-reflog.html | 5 +++++ html/part2/ch07-02-reflog.json | 1 + html/part2/ch08-01-checkout.html | 5 +++++ html/part2/ch08-01-checkout.json | 1 + html/part2/ch09-01-i-am-back.html | 5 +++++ html/part2/ch09-01-i-am-back.json | 1 + html/part2/ch09-02-inside-stash.html | 5 +++++ html/part2/ch09-02-inside-stash.json | 1 + html/part2/ch10-01-tag.html | 5 +++++ html/part2/ch10-01-tag.json | 1 + html/part2/ch10-02-rm1.html | 5 +++++ html/part2/ch10-02-rm1.json | 1 + html/part2/ch10-03-rm2.html | 5 +++++ html/part2/ch10-03-rm2.json | 1 + html/part2/ch10-04-undelete.html | 5 +++++ html/part2/ch10-04-undelete.json | 1 + html/part2/ch10-05-mv.html | 5 +++++ html/part2/ch10-05-mv.json | 1 + html/part2/ch10-06-hello-world.html | 5 +++++ html/part2/ch10-06-hello-world.json | 1 + html/part2/ch10-07-add-i.html | 5 +++++ html/part2/ch10-07-add-i.json | 1 + html/part2/ch10-08-ignore.html | 5 +++++ html/part2/ch10-08-ignore.json | 1 + html/part2/ch11-01-clone.html | 5 +++++ html/part2/ch11-01-clone.json | 1 + html/part2/ch11-02-rev-parse.html | 5 +++++ html/part2/ch11-02-rev-parse.json | 1 + html/part2/ch11-03-rev-list.html | 5 +++++ html/part2/ch11-03-rev-list.json | 1 + html/part2/ch12-01-back2future-1.html | 5 +++++ html/part2/ch12-01-back2future-1.json | 1 + html/part2/ch12-02-back2future-2.html | 5 +++++ html/part2/ch12-02-back2future-2.json | 1 + html/part2/ch12-03-back2future-3.html | 5 +++++ html/part2/ch12-03-back2future-3.json | 1 + html/part3/smart-and-dump-protocol.html | 5 +++++ html/part3/smart-and-dump-protocol.json | 1 + 59 files changed, 174 insertions(+), 2 deletions(-) delete mode 100644 html/.gitignore create mode 100644 html/part1/ch01-01-diff-patch.html create mode 100644 html/part1/ch01-01-diff-patch.json create mode 100644 html/part2/ch04-01-first-commit.html create mode 100644 html/part2/ch04-01-first-commit.json create mode 100644 html/part2/ch04-02-git-config.html create mode 100644 html/part2/ch04-02-git-config.json create mode 100644 html/part2/ch04-03-who-does-commit.html create mode 100644 html/part2/ch04-03-who-does-commit.json create mode 100644 html/part2/ch05-01-commit-modified.html create mode 100644 html/part2/ch05-01-commit-modified.json create mode 100644 html/part2/ch05-02-index-and-diff.html create mode 100644 html/part2/ch05-02-index-and-diff.json create mode 100644 html/part2/ch05-03-git-stash.html create mode 100644 html/part2/ch05-03-git-stash.json create mode 100644 html/part2/ch06-01-git-objects.html create mode 100644 html/part2/ch06-01-git-objects.json create mode 100644 html/part2/ch06-02-sha1-hash.html create mode 100644 html/part2/ch06-02-sha1-hash.json create mode 100644 html/part2/ch07-01-git-reset.html create mode 100644 html/part2/ch07-01-git-reset.json create mode 100644 html/part2/ch07-02-reflog.html create mode 100644 html/part2/ch07-02-reflog.json create mode 100644 html/part2/ch08-01-checkout.html create mode 100644 html/part2/ch08-01-checkout.json create mode 100644 html/part2/ch09-01-i-am-back.html create mode 100644 html/part2/ch09-01-i-am-back.json create mode 100644 html/part2/ch09-02-inside-stash.html create mode 100644 html/part2/ch09-02-inside-stash.json create mode 100644 html/part2/ch10-01-tag.html create mode 100644 html/part2/ch10-01-tag.json create mode 100644 html/part2/ch10-02-rm1.html create mode 100644 html/part2/ch10-02-rm1.json create mode 100644 html/part2/ch10-03-rm2.html create mode 100644 html/part2/ch10-03-rm2.json create mode 100644 html/part2/ch10-04-undelete.html create mode 100644 html/part2/ch10-04-undelete.json create mode 100644 html/part2/ch10-05-mv.html create mode 100644 html/part2/ch10-05-mv.json create mode 100644 html/part2/ch10-06-hello-world.html create mode 100644 html/part2/ch10-06-hello-world.json create mode 100644 html/part2/ch10-07-add-i.html create mode 100644 html/part2/ch10-07-add-i.json create mode 100644 html/part2/ch10-08-ignore.html create mode 100644 html/part2/ch10-08-ignore.json create mode 100644 html/part2/ch11-01-clone.html create mode 100644 html/part2/ch11-01-clone.json create mode 100644 html/part2/ch11-02-rev-parse.html create mode 100644 html/part2/ch11-02-rev-parse.json create mode 100644 html/part2/ch11-03-rev-list.html create mode 100644 html/part2/ch11-03-rev-list.json create mode 100644 html/part2/ch12-01-back2future-1.html create mode 100644 html/part2/ch12-01-back2future-1.json create mode 100644 html/part2/ch12-02-back2future-2.html create mode 100644 html/part2/ch12-02-back2future-2.json create mode 100644 html/part2/ch12-03-back2future-3.html create mode 100644 html/part2/ch12-03-back2future-3.json create mode 100644 html/part3/smart-and-dump-protocol.html create mode 100644 html/part3/smart-and-dump-protocol.json diff --git a/html/.gitignore b/html/.gitignore deleted file mode 100644 index c427f5d3e..000000000 --- a/html/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.html -*.json diff --git a/html/part1/ch01-01-diff-patch.html b/html/part1/ch01-01-diff-patch.html new file mode 100644 index 000000000..e8f33c259 --- /dev/null +++ b/html/part1/ch01-01-diff-patch.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch01-01-diff-patch +json_file: ch01-01-diff-patch.json +--- diff --git a/html/part1/ch01-01-diff-patch.json b/html/part1/ch01-01-diff-patch.json new file mode 100644 index 000000000..2c361847d --- /dev/null +++ b/html/part1/ch01-01-diff-patch.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305081330.96588,"i":1},{"y":1,"d":[[0,10,"c"]],"x":12,"t":1305081332.55884},{"y":1,"d":[[0,11,"a"]],"x":13,"t":1305081332.67096},{"y":1,"d":[[0,12,"t"]],"x":14,"t":1305081332.75059},{"y":1,"x":15,"t":1305081332.85462},{"y":1,"d":[[0,14,"h"]],"x":16,"t":1305081332.99056},{"y":1,"d":[[0,15,"e"]],"x":17,"t":1305081333.07873},{"y":1,"d":[[0,16,18,"llo"]],"x":21,"t":1305081333.31118},{"y":2,"x":1,"t":1305081333.87883},{"y":13,"d":[[1,0,35,"应该杜绝文章中的错别子。"],[3,0,17,"但是无论使用"],[4,0,16,"* 全拼,双拼"],[5,0,13,"* 还是五笔"],[7,0,47,"是人就有可能犯错,软件更是如此。"],[9,0,29,"犯了错,就要扣工资!"],[11,0,32,"改正的成本可能会很高。"],[12,0,8,"bash-3.2$"]],"x":11,"t":1305081333.88321},{"y":13,"d":[[12,10,"c"]],"x":12,"t":1305081334.76643},{"y":13,"d":[[12,11,"a"]],"x":13,"t":1305081334.88662},{"y":13,"d":[[12,12,"t"]],"x":14,"t":1305081334.95861},{"y":13,"x":15,"t":1305081335.0707},{"y":13,"d":[[12,14,"w"]],"x":16,"t":1305081335.32629},{"y":13,"d":[[12,15,"o"]],"x":17,"t":1305081335.43083},{"y":13,"d":[[12,16,18,"rld"]],"x":21,"t":1305081335.57766},{"y":14,"x":1,"t":1305081336.39826},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",1,5],["cp",7,6],["cp",1,7],["cp",9,8],["cp",1,9],["cp",11,10],["cp",12,11],[12,0,35,"应该杜绝文章中的错别字。"],["cp",2,14],["cp",3,15],["cp",4,16],["cp",6,18],["cp",10,20],[22,0,56,"但是“只要眼球足够多,所有Bug都好捉”,"],[23,0,32,"这就是开源的哲学之一。"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305081336.40578},{"y":25,"d":[[24,10,"d"]],"x":12,"t":1305081337.52646},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305081337.60639},{"y":25,"d":[[24,12,"f"]],"x":14,"t":1305081337.72651},{"y":25,"d":[[24,13,"f"]],"x":15,"t":1305081337.89438},{"y":25,"x":16,"t":1305081338.0227},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305081338.19817},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305081338.28642},{"y":25,"d":[[24,17,19,"llo"]],"x":22,"t":1305081338.52652},{"y":25,"d":[[24,21,"w"]],"x":23,"t":1305081339.05456},{"y":25,"d":[[24,22,"o"]],"x":24,"t":1305081339.14246},{"y":25,"d":[[24,23,"r"]],"x":25,"t":1305081339.43842},{"y":25,"d":[[24,24,25,"ld"]],"x":28,"t":1305081339.65498},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",6,5],["cp",0,6],["cp",8,7],["cp",0,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",0,12],["cp",1,13],["cp",2,14],["cp",3,15],["cp",0,16],["cp",5,17],["cp",0,18],["cp",9,19],["cp",0,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"t":1305081340.07071},{"y":25,"d":[["cp",11,0],["cp",4,1],["cp",13,2],["cp",14,3],["cp",15,4],["cp",1,5],["cp",17,6],["cp",1,7],["cp",9,8],["cp",1,9],["cp",21,10],["cp",22,11],["cp",23,12],[13,0,17,"1c1 "],[14,0,37,"< 应该杜绝文章中的错别子。"],[15,0,13,"--- "],[16,0,37,"> 应该杜绝文章中的错别字。"],[17,0,47,"9,10d8 "],[18,0,31,"< 犯了错,就要扣工资!"],[19,0,32,"< "],[20,0,7,"11a10,12"],[21,0,56,"> "],[22,0,58,"> 但是“只要眼球足够多,所有Bug都好捉”,"],[23,0,34,"> 这就是开源的哲学之一。"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305081340.07697},{"y":25,"d":[[24,10,"d"]],"x":12,"t":1305081341.28623},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305081341.38208},{"y":25,"d":[[24,12,"f"]],"x":14,"t":1305081341.47822},{"y":25,"d":[[24,13,"f"]],"x":15,"t":1305081341.63014},{"y":25,"x":16,"t":1305081341.73417},{"y":25,"d":[[24,15,"-"]],"x":17,"t":1305081341.84605},{"y":25,"d":[[24,16,"u"]],"x":18,"t":1305081342.06994},{"y":25,"x":19,"t":1305081342.18198},{"y":25,"d":[[24,18,"h"]],"x":20,"t":1305081342.34983},{"y":25,"d":[[24,19,"e"]],"x":21,"t":1305081342.44616},{"y":25,"d":[[24,20,22,"llo"]],"x":25,"t":1305081342.67056},{"y":25,"d":[[24,24,"w"]],"x":26,"t":1305081343.26992},{"y":25,"d":[[24,25,"o"]],"x":27,"t":1305081343.34993},{"y":25,"d":[[24,26,"r"]],"x":28,"t":1305081343.54209},{"y":25,"d":[[24,27,28,"ld"]],"x":31,"t":1305081343.86307},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",6,5],["cp",0,6],["cp",8,7],["cp",0,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"t":1305081345.07831},{"y":25,"d":[["cp",18,0],["cp",19,1],["cp",20,2],["cp",21,3],["cp",22,4],["cp",23,5],[6,0,8,"--- hello"],[6,16,50,"2011-05-11 10:34:17.000000000 +0800"],[7,0,50,"+++ world 2011-05-11 10:34:00.000000000 +0800"],[8,0,14,"@@ -1,4 +1,4 @@"],[9,0,56,"-应该杜绝文章中的错别子。 "],[10,0,36,"+应该杜绝文章中的错别字。"],["cp",24,11],[12,0,18," 但是无论使用"],[13,0,37," * 全拼,双拼 "],[14,0,14,"@@ -6,6 +6,7 @@"],["cp",11,15],[16,0,48," 是人就有可能犯错,软件更是如此。"],["cp",11,17],[18,0,30,"-犯了错,就要扣工资!"],[19,0,7,"- "],[20,0,33," 改正的成本可能会很高。"],[21,0,58,"+ "],[22,0,57,"+但是“只要眼球足够多,所有Bug都好捉”,"],[23,0,33,"+这就是开源的哲学之一。"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305081345.08417},{"y":25,"d":[[24,10,"d"]],"x":12,"t":1305081348.10974},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305081348.18185},{"y":25,"d":[[24,12,"f"]],"x":14,"t":1305081348.30173},{"y":25,"d":[[24,13,"f"]],"x":15,"t":1305081348.46163},{"y":25,"x":16,"t":1305081348.582},{"y":25,"d":[[24,15,"-"]],"x":17,"t":1305081348.7016},{"y":25,"d":[[24,16,"u"]],"x":18,"t":1305081348.91762},{"y":25,"x":19,"t":1305081349.07763},{"y":25,"d":[[24,18,"h"]],"x":20,"t":1305081349.2776},{"y":25,"d":[[24,19,22,"ello"]],"x":25,"t":1305081349.4224},{"y":25,"d":[[24,24,"w"]],"x":26,"t":1305081349.9095},{"y":25,"d":[[24,25,"o"]],"x":27,"t":1305081349.99775},{"y":25,"d":[["cp",5,24]],"x":31,"t":1305081350.13612},{"y":25,"d":[[24,30,">"]],"x":32,"t":1305081350.58173},{"y":25,"x":33,"t":1305081350.76545},{"y":25,"d":[[24,32,"d"]],"x":34,"t":1305081351.58968},{"y":25,"d":[[24,33,"i"]],"x":35,"t":1305081351.66966},{"y":25,"d":[[24,34,"f"]],"x":36,"t":1305081351.77356},{"y":25,"d":[[24,35,"f"]],"x":37,"t":1305081351.94159},{"y":25,"d":[[24,36,"."]],"x":38,"t":1305081352.02935},{"y":25,"d":[[24,37,"t"]],"x":39,"t":1305081352.16546},{"y":25,"d":[[24,38,"x"]],"x":40,"t":1305081352.30936},{"y":25,"d":[[24,39,"t"]],"x":41,"t":1305081352.41335},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",10,14],["cp",16,15],["cp",10,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",10,24]],"x":1,"t":1305081352.50949},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305081352.51433},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305081353.7415},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305081353.82123},{"y":25,"x":14,"t":1305081353.91721},{"y":25,"d":[[24,13,"-"]],"x":15,"t":1305081354.06116},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305081354.32529},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",9,13],["cp",15,14],["cp",9,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",9,24]],"x":1,"t":1305081354.733},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",14,10],["cp",5,11],["cp",16,12],["cp",17,13],["cp",18,14],["cp",19,15],["cp",20,16],["cp",21,17],["cp",22,18],["cp",23,19],[20,0,57,"total 24 "],[21,0,54,"-rw-r--r-- 1 jiangxin staff 460 5 11 10:35 diff.txt"],[22,0,51,"-rw-r--r-- 1 jiangxin staff 207 5 11 10:34 hello"],[23,0,51,"-rw-r--r-- 1 jiangxin staff 268 5 11 10:34 world"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305081354.74512},{"y":25,"d":[[24,10,"c"]],"x":12,"t":1305081358.42897},{"y":25,"d":[[24,11,"p"]],"x":13,"t":1305081358.54119},{"y":25,"x":14,"t":1305081358.669},{"y":25,"d":[[24,13,"w"]],"x":15,"t":1305081358.90921},{"y":25,"d":[[24,14,"o"]],"x":16,"t":1305081358.99696},{"y":25,"d":[[24,14," "]],"x":15,"t":1305081360.44505},{"y":25,"d":[[24,13," "]],"x":14,"t":1305081360.62095},{"y":25,"d":[[24,13,"h"]],"x":15,"t":1305081360.79693},{"y":25,"d":[[24,14,17,"ello"]],"x":20,"t":1305081360.89411},{"y":25,"d":[[24,19,"w"]],"x":21,"t":1305081361.44513},{"y":25,"d":[[24,20,"o"]],"x":22,"t":1305081361.53287},{"y":25,"d":[[24,21,"r"]],"x":23,"t":1305081361.87682},{"y":25,"d":[[24,22,23,"ld"]],"x":26,"t":1305081362.09346},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",4,8],["cp",10,9],["cp",4,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",4,24]],"x":1,"t":1305081362.46859},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305081362.47287},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305081362.73293},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305081362.81301},{"y":25,"x":14,"t":1305081362.93278},{"d":[["r","+++ world 2011-05-11 10:34:00.000000000 +0800 "],["r","@@ -1,4 +1,4 @@ "],["r","-应该杜绝文章中的错别子。 "],["r","+应该杜绝文章中的错别字。 "],["a"," "],["r"," 但是无论使用 "],["r"," * 全拼,双拼 "],["r","@@ -6,6 +6,7 @@ "],["a"," "],["r"," 是人就有可能犯错,软件更是如此。 "],["a"," "],["r","-犯了错,就要扣工资! "],["r","- "],["r"," 改正的成本可能会很高。 "],["r","+ "],["r","+但是“只要眼球足够多,所有Bug都好捉”, "],["r","+这就是开源的哲学之一。 "],["r","bash-3.2$ diff -u hello world > diff.txt "],["r","bash-3.2$ ls -l "],["r","total 24 "],["r","-rw-r--r-- 1 jiangxin staff 460 5 11 10:35 diff.txt "],["r","-rw-r--r-- 1 jiangxin staff 207 5 11 10:34 hello "],["r","-rw-r--r-- 1 jiangxin staff 268 5 11 10:34 world "],["r","bash-3.2$ cp hello world "],["r","bash-3.2$ ls - "]],"x":15,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305081363.02881,"i":1},{"y":25,"d":[["cp",18,24]],"x":16,"t":1305081363.25312},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",3,7],["cp",9,8],["cp",3,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",17,23],["cp",3,24]],"x":1,"t":1305081364.03676},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",8,4],["cp",3,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",13,9],["cp",14,10],["cp",15,11],["cp",16,12],["cp",17,13],["cp",18,14],["cp",19,15],["cp",20,16],["cp",21,17],["cp",22,18],["cp",13,19],["cp",14,20],["cp",15,21],["cp",16,22],[23,0,51,"-rw-r--r-- 1 jiangxin staff 207 5 11 10:36 world"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305081364.05124},{"y":25,"d":[[24,10,"p"]],"x":12,"t":1305081367.02864},{"y":25,"d":[[24,11,"a"]],"x":13,"t":1305081367.09256},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305081367.22881},{"y":25,"d":[[24,13,"c"]],"x":15,"t":1305081367.35656},{"y":25,"d":[[24,14,"h"]],"x":16,"t":1305081367.43687},{"y":25,"x":17,"t":1305081367.62082},{"y":25,"d":[[24,16,"w"]],"x":18,"t":1305081368.11768},{"y":25,"d":[[24,17,"o"]],"x":19,"t":1305081368.19691},{"y":25,"d":[[24,18,20,"rld"]],"x":23,"t":1305081368.32479},{"y":25,"d":[[24,22,"<"]],"x":24,"t":1305081368.83677},{"y":25,"d":[[24,23,"d"]],"x":25,"t":1305081369.17249},{"y":25,"d":[[24,24,"i"]],"x":26,"t":1305081369.26871},{"y":25,"d":[[24,24," "]],"x":25,"t":1305081369.82043},{"y":25,"d":[[24,23," "]],"x":24,"t":1305081369.98834},{"y":25,"x":25,"t":1305081370.05275},{"y":25,"d":[[24,24,"d"]],"x":26,"t":1305081370.22039},{"y":25,"d":[[24,25,"i"]],"x":27,"t":1305081370.28472},{"y":25,"d":[[24,26,31,"ff.txt"]],"x":34,"t":1305081370.48911},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",2,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",12,18],["cp",13,19],["cp",14,20],["cp",15,21],["cp",23,22],["cp",24,23],["cp",2,24]],"x":1,"t":1305081370.89243},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",11,17],["cp",12,18],["cp",13,19],["cp",14,20],["cp",22,21],["cp",23,22],[23,0,31,"patching file world "]],"x":1,"t":1305081370.89827},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305081371.18641},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305081372.25256},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305081372.31622},{"y":25,"x":14,"t":1305081372.42025},{"y":25,"d":[[24,13,"-"]],"x":15,"t":1305081372.47612},{"y":25,"d":[["cp",11,24]],"x":16,"t":1305081372.69198},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",10,16],["cp",11,17],["cp",12,18],["cp",13,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",10,23],["cp",0,24]],"x":1,"t":1305081372.88414},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",13,9],["cp",14,10],["cp",15,11],["cp",6,12],["cp",7,13],["cp",8,14],["cp",9,15],["cp",20,16],["cp",21,17],["cp",22,18],["cp",6,19],["cp",7,20],["cp",8,21],["cp",9,22],[23,0,51,"-rw-r--r-- 1 jiangxin staff 268 5 11 10:36 world"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305081372.89549},{"y":25,"d":[[24,10,"c"]],"x":12,"t":1305081375.82833},{"y":25,"d":[[24,11,"p"]],"x":13,"t":1305081375.9404},{"y":25,"x":14,"t":1305081376.05992},{"y":25,"d":[[24,13,"w"]],"x":15,"t":1305081376.21218},{"y":25,"d":[[24,14,"o"]],"x":16,"t":1305081376.27597},{"y":25,"d":[[24,15,17,"rld"]],"x":20,"t":1305081376.4441},{"y":25,"d":[[24,19,"h"]],"x":21,"t":1305081377.44391},{"y":25,"d":[[24,20,23,"ello"]],"x":26,"t":1305081377.55974},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",5,11],["cp",6,12],["cp",7,13],["cp",8,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",5,18],["cp",6,19],["cp",7,20],["cp",8,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305081378.03611},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305081378.0422},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305081378.90798},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305081378.98007},{"y":25,"x":14,"t":1305081379.09205},{"y":25,"d":[[24,13,"-"]],"x":15,"t":1305081379.18005},{"y":25,"d":[["cp",5,24]],"x":16,"t":1305081379.37979},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",4,10],["cp",5,11],["cp",6,12],["cp",7,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",4,17],["cp",5,18],["cp",6,19],["cp",7,20],["cp",22,21],["cp",23,22],["cp",4,23],[24,["a"," "]]],"x":1,"t":1305081379.55566},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",0,6],["cp",1,7],["cp",2,8],["cp",3,9],["cp",14,10],["cp",15,11],["cp",16,12],["cp",0,13],["cp",1,14],["cp",2,15],["cp",3,16],["cp",21,17],["cp",22,18],["cp",0,19],["cp",1,20],["cp",2,21],[22,0,51,"-rw-r--r-- 1 jiangxin staff 268 5 11 10:36 hello"],["cp",17,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305081379.5719},{"y":25,"d":[[24,10,"p"]],"x":12,"t":1305081380.42779},{"y":25,"d":[[24,11,"a"]],"x":13,"t":1305081380.52407},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305081380.67599},{"y":25,"d":[[24,13,"c"]],"x":15,"t":1305081380.8359},{"y":25,"d":[[24,14,"h"]],"x":16,"t":1305081380.94},{"y":25,"x":17,"t":1305081381.09961},{"y":25,"d":[[24,16,"-"]],"x":18,"t":1305081381.324},{"y":25,"d":[[24,17,"R"]],"x":19,"t":1305081381.58784},{"y":25,"x":20,"t":1305081381.69985},{"y":25,"d":[[24,19,"h"]],"x":21,"t":1305081382.2357},{"y":25,"d":[[24,20,23,"ello"]],"x":26,"t":1305081382.32472},{"y":25,"d":[[24,25,"<"]],"x":27,"t":1305081382.7718},{"y":25,"x":28,"t":1305081383.21992},{"y":25,"d":[[24,27,"d"]],"x":29,"t":1305081383.38765},{"y":25,"d":[[24,28,"i"]],"x":30,"t":1305081383.45974},{"y":25,"d":[[24,29,34,"ff.txt"]],"x":37,"t":1305081383.60521},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",1,7],["cp",2,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",5,12],["cp",0,13],["cp",1,14],["cp",2,15],["cp",17,16],["cp",18,17],["cp",5,18],["cp",0,19],["cp",1,20],["cp",22,21],["cp",16,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305081383.985},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",1,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",4,11],["cp",5,12],["cp",0,13],["cp",1,14],["cp",16,15],["cp",17,16],["cp",4,17],["cp",5,18],["cp",0,19],["cp",21,20],["cp",15,21],["cp",23,22],[23,0,34,"patching file hello "]],"x":1,"t":1305081383.98765},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305081384.27602},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305081385.67552},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305081385.7153},{"y":25,"x":14,"t":1305081385.81951},{"y":25,"d":[[24,13,"-"]],"x":15,"t":1305081385.92363},{"y":25,"d":[["cp",4,24]],"x":16,"t":1305081386.13192},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",3,10],["cp",4,11],["cp",5,12],["cp",0,13],["cp",15,14],["cp",16,15],["cp",3,16],["cp",4,17],["cp",5,18],["cp",20,19],["cp",14,20],["cp",22,21],["cp",23,22],["cp",3,23],[24,["a"," "]]],"x":1,"t":1305081386.31552},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",0,7],["cp",1,8],["cp",2,9],["cp",14,10],["cp",15,11],["cp",6,12],["cp",0,13],["cp",1,14],["cp",19,15],["cp",10,16],["cp",21,17],["cp",22,18],["cp",6,19],["cp",0,20],["cp",1,21],[22,0,51,"-rw-r--r-- 1 jiangxin staff 207 5 11 10:36 hello"],["cp",10,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305081386.32677},{"y":25,"d":[[24,10,"d"]],"x":12,"t":1305081388.55533},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305081388.63566},{"y":25,"d":[[24,12,"f"]],"x":14,"t":1305081388.73942},{"y":25,"d":[[24,13,"f"]],"x":15,"t":1305081388.89942},{"y":25,"x":16,"t":1305081389.01947},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305081389.13128},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305081389.25136},{"y":25,"d":[[24,17,19,"llo"]],"x":22,"t":1305081389.46791},{"y":25,"d":[[24,21,"w"]],"x":23,"t":1305081389.89132},{"y":25,"d":[[24,22,"o"]],"x":24,"t":1305081389.97116},{"y":25,"d":[[24,23,25,"rld"]],"x":28,"t":1305081390.09254},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",1,8],["cp",10,9],["cp",11,10],["cp",5,11],["cp",6,12],["cp",0,13],["cp",15,14],["cp",9,15],["cp",17,16],["cp",18,17],["cp",5,18],["cp",6,19],["cp",0,20],["cp",22,21],["cp",9,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305081390.29939},{"y":25,"d":[["cp",5,0],["cp",6,1],["cp",7,2],["cp",14,3],["cp",9,4],["cp",16,5],["cp",17,6],["cp",0,7],["cp",1,8],["cp",2,9],["cp",21,10],["cp",4,11],["cp",23,12],[13,0,54,"1c1 "],[14,0,51,"< 应该杜绝文章中的错别子。 "],[15,1,51,"-- "],[16,0,37,"> 应该杜绝文章中的错别字。"],[17,0,18,"9,10d8 "],[18,0,31,"< 犯了错,就要扣工资!"],[19,0,7,"< "],[20,0,54,"11a10,12 "],[21,0,51,"> "],[22,0,58,"> 但是“只要眼球足够多,所有Bug都好捉”,"],[23,0,34,"> 这就是开源的哲学之一。"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305081390.3041},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",1,8],["cp",10,9],["cp",3,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,34,"bash-3.2$ exit "],[24,["a"," "]]],"x":1,"t":1305081391.5714}]} \ No newline at end of file diff --git a/html/part2/ch04-01-first-commit.html b/html/part2/ch04-01-first-commit.html new file mode 100644 index 000000000..8ed225478 --- /dev/null +++ b/html/part2/ch04-01-first-commit.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch04-01-first-commit +json_file: ch04-01-first-commit.json +--- diff --git a/html/part2/ch04-01-first-commit.json b/html/part2/ch04-01-first-commit.json new file mode 100644 index 000000000..c51a26d25 --- /dev/null +++ b/html/part2/ch04-01-first-commit.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305082916.8102,"i":1},{"y":1,"d":[[0,10,"g"]],"x":12,"t":1305082917.40305},{"y":1,"d":[[0,11,"i"]],"x":13,"t":1305082917.491},{"y":1,"d":[[0,12,"t"]],"x":14,"t":1305082917.59517},{"y":1,"x":15,"t":1305082917.66714},{"y":1,"d":[[0,14,"-"]],"x":16,"t":1305082917.81913},{"y":1,"d":[[0,15,"-"]],"x":17,"t":1305082917.99517},{"y":1,"d":[[0,16,"v"]],"x":18,"t":1305082918.12325},{"y":1,"d":[[0,17,"e"]],"x":19,"t":1305082918.30168},{"y":1,"d":[[0,18,"r"]],"x":20,"t":1305082918.34696},{"y":1,"d":[[0,19,"s"]],"x":21,"t":1305082918.47501},{"y":1,"d":[[0,20,"i"]],"x":22,"t":1305082918.53904},{"y":1,"d":[[0,21,"o"]],"x":23,"t":1305082918.65096},{"y":1,"d":[[0,22,"n"]],"x":24,"t":1305082918.78705},{"y":2,"x":1,"t":1305082919.04311},{"y":3,"d":[[1,0,22,"git version 1.7.5.dirty"],[2,0,8,"bash-3.2$"]],"x":11,"t":1305082919.04959},{"y":3,"d":[[2,10,"g"]],"x":12,"t":1305082922.13909},{"y":3,"d":[[2,11,"i"]],"x":13,"t":1305082922.22691},{"y":3,"d":[[2,12,"t"]],"x":14,"t":1305082922.33092},{"y":3,"x":15,"t":1305082922.41892},{"y":3,"d":[[2,14,"c"]],"x":16,"t":1305082922.56298},{"y":3,"d":[[2,15,"o"]],"x":17,"t":1305082922.63484},{"y":3,"d":[[2,16,"n"]],"x":18,"t":1305082922.74673},{"y":3,"d":[[2,17,"f"]],"x":19,"t":1305082922.77065},{"y":3,"d":[[2,18,"i"]],"x":20,"t":1305082922.91483},{"y":3,"d":[[2,19,"g"]],"x":21,"t":1305082922.97902},{"y":3,"x":22,"t":1305082923.10683},{"y":3,"d":[[2,21,"-"]],"x":23,"t":1305082923.62736},{"y":3,"d":[[2,22,"-"]],"x":24,"t":1305082923.78664},{"y":3,"d":[[2,23,"g"]],"x":25,"t":1305082924.23466},{"y":3,"d":[[2,24,"l"]],"x":26,"t":1305082924.34669},{"y":3,"d":[[2,25,"o"]],"x":27,"t":1305082924.5065},{"y":3,"d":[[2,26,"b"]],"x":28,"t":1305082924.57063},{"y":3,"d":[[2,27,"a"]],"x":29,"t":1305082924.71469},{"y":3,"d":[[2,28,"l"]],"x":30,"t":1305082924.80276},{"y":3,"x":31,"t":1305082924.92272},{"y":3,"d":[[2,30,"u"]],"x":32,"t":1305082925.09885},{"y":3,"d":[[2,31,"s"]],"x":33,"t":1305082925.16277},{"y":3,"d":[[2,32,"e"]],"x":34,"t":1305082925.25864},{"y":3,"d":[[2,33,"r"]],"x":35,"t":1305082925.29079},{"y":3,"d":[[2,34,"."]],"x":36,"t":1305082925.5067},{"y":3,"d":[[2,35,"n"]],"x":37,"t":1305082926.09871},{"y":3,"d":[[2,36,"a"]],"x":38,"t":1305082926.14664},{"y":3,"d":[[2,37,"m"]],"x":39,"t":1305082926.27475},{"y":3,"d":[[2,38,"e"]],"x":40,"t":1305082926.35472},{"y":3,"x":41,"t":1305082926.46665},{"y":3,"d":[[2,40,"\""]],"x":42,"t":1305082927.11466},{"y":3,"d":[[2,41,"J"]],"x":43,"t":1305082927.72275},{"y":3,"d":[[2,42,"i"]],"x":44,"t":1305082927.85895},{"y":3,"d":[[2,43,"a"]],"x":45,"t":1305082927.98663},{"y":3,"d":[[2,44,"n"]],"x":46,"t":1305082928.05887},{"y":3,"d":[[2,45,"g"]],"x":47,"t":1305082928.14653},{"y":3,"x":48,"t":1305082928.24265},{"y":3,"d":[[2,47,"X"]],"x":49,"t":1305082928.43464},{"y":3,"d":[[2,48,"i"]],"x":50,"t":1305082928.58648},{"y":3,"d":[[2,49,"n"]],"x":51,"t":1305082928.69857},{"y":3,"d":[[2,50,"\""]],"x":52,"t":1305082929.10688},{"y":4,"x":1,"t":1305082929.30646},{"y":4,"d":[[3,0,8,"bash-3.2$"]],"x":11,"t":1305082929.3141},{"y":4,"d":[[3,10,"g"]],"x":12,"t":1305082929.89863},{"y":4,"d":[[3,11,"i"]],"x":13,"t":1305082929.95436},{"y":4,"d":[[3,12,"t"]],"x":14,"t":1305082930.0663},{"y":4,"x":15,"t":1305082930.10628},{"y":4,"d":[[3,14,"c"]],"x":16,"t":1305082930.25874},{"y":4,"d":[[3,15,"o"]],"x":17,"t":1305082930.31448},{"y":4,"d":[[3,16,"n"]],"x":18,"t":1305082930.42632},{"y":4,"d":[[3,17,"f"]],"x":19,"t":1305082930.4593},{"y":4,"d":[[3,18,"i"]],"x":20,"t":1305082930.57033},{"y":4,"d":[[3,19,"g"]],"x":21,"t":1305082930.65862},{"y":4,"x":22,"t":1305082930.75457},{"y":4,"d":[[3,21,"-"]],"x":23,"t":1305082930.96248},{"y":4,"d":[[3,22,"-"]],"x":24,"t":1305082931.12243},{"y":4,"d":[[3,23,"g"]],"x":25,"t":1305082931.40286},{"y":4,"d":[[3,24,"l"]],"x":26,"t":1305082931.50647},{"y":4,"d":[[3,25,"o"]],"x":27,"t":1305082931.6667},{"y":4,"d":[[3,26,"b"]],"x":28,"t":1305082931.73827},{"y":4,"d":[[3,27,"a"]],"x":29,"t":1305082931.87431},{"y":4,"d":[[3,28,"l"]],"x":30,"t":1305082931.9943},{"y":4,"x":31,"t":1305082932.14628},{"y":4,"d":[[3,30,"u"]],"x":32,"t":1305082932.53034},{"y":4,"d":[[3,31,"s"]],"x":33,"t":1305082932.5942},{"y":4,"d":[[3,32,"e"]],"x":34,"t":1305082932.65852},{"y":4,"d":[[3,33,"r"]],"x":35,"t":1305082932.69027},{"y":4,"d":[[3,34,"."]],"x":36,"t":1305082932.89813},{"y":4,"d":[[3,35,"e"]],"x":37,"t":1305082933.02628},{"y":4,"d":[[3,36,"m"]],"x":38,"t":1305082933.32247},{"y":4,"d":[[3,37,"a"]],"x":39,"t":1305082933.42624},{"y":4,"d":[[3,38,"i"]],"x":40,"t":1305082933.50625},{"y":4,"d":[[3,39,"l"]],"x":41,"t":1305082933.57809},{"y":4,"x":42,"t":1305082934.29006},{"y":4,"d":[[3,41,"j"]],"x":43,"t":1305082934.72211},{"y":4,"d":[[3,42,"i"]],"x":44,"t":1305082934.85824},{"y":4,"d":[[3,43,"a"]],"x":45,"t":1305082934.89001},{"y":4,"d":[[3,44,"n"]],"x":46,"t":1305082934.98598},{"y":4,"d":[[3,45,"g"]],"x":47,"t":1305082935.04227},{"y":4,"d":[[3,46,"x"]],"x":48,"t":1305082935.14618},{"y":4,"d":[[3,47,"i"]],"x":49,"t":1305082935.20228},{"y":4,"d":[[3,48,"n"]],"x":50,"t":1305082935.30635},{"y":4,"d":[[3,49,"@"]],"x":51,"t":1305082935.6263},{"y":4,"d":[[3,50,"o"]],"x":52,"t":1305082935.91441},{"d":[["r","bash-3.2$ git --version "],["r","git version 1.7.5.dirty "],["r","bash-3.2$ git config --global user.name \"Jiang Xin\" "],["r","bash-3.2$ git config --global user.email jiangxin@os "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":53,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":4,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305082936.01804,"i":1},{"y":4,"d":[[3,52,"s"]],"x":54,"t":1305082936.19416},{"y":4,"d":[[3,53,"x"]],"x":55,"t":1305082936.36203},{"y":4,"d":[[3,54,"p"]],"x":56,"t":1305082936.45134},{"y":4,"d":[[3,55,"."]],"x":57,"t":1305082936.60996},{"y":4,"d":[[3,56,"c"]],"x":58,"t":1305082936.682},{"y":4,"d":[[3,57,"o"]],"x":59,"t":1305082936.80237},{"y":4,"d":[[3,58,"m"]],"x":60,"t":1305082936.91424},{"y":5,"x":1,"t":1305082937.14588},{"y":5,"d":[[4,0,8,"bash-3.2$"]],"x":11,"t":1305082937.15638},{"y":5,"d":[[4,10,"g"]],"x":12,"t":1305082938.60992},{"y":5,"d":[[4,11,"i"]],"x":13,"t":1305082938.67397},{"y":5,"d":[[4,12,"t"]],"x":14,"t":1305082938.8021},{"y":5,"x":15,"t":1305082938.88228},{"y":5,"d":[[4,14,"c"]],"x":16,"t":1305082940.31379},{"y":5,"d":[[4,15,"o"]],"x":17,"t":1305082940.37787},{"y":5,"d":[[4,16,"n"]],"x":18,"t":1305082940.49828},{"y":5,"d":[[4,17,"f"]],"x":19,"t":1305082940.5297},{"y":5,"d":[[4,18,"i"]],"x":20,"t":1305082940.66585},{"y":5,"d":[[4,19,"g"]],"x":21,"t":1305082940.74588},{"y":5,"x":22,"t":1305082940.84184},{"y":5,"d":[[4,21,"-"]],"x":23,"t":1305082941.3138},{"y":5,"d":[[4,22,"-"]],"x":24,"t":1305082941.49944},{"y":5,"d":[[4,23,"g"]],"x":25,"t":1305082941.64192},{"y":5,"d":[[4,24,"l"]],"x":26,"t":1305082941.81774},{"y":5,"d":[[4,25,"o"]],"x":27,"t":1305082941.978},{"y":5,"d":[[4,26,"b"]],"x":28,"t":1305082942.06583},{"y":5,"d":[[4,27,"a"]],"x":29,"t":1305082942.18562},{"y":5,"d":[[4,28,"l"]],"x":30,"t":1305082942.27378},{"y":5,"x":31,"t":1305082942.5136},{"y":5,"d":[[4,30,"c"]],"x":32,"t":1305082943.63364},{"y":5,"d":[[4,31,"o"]],"x":33,"t":1305082943.72178},{"y":5,"d":[[4,32,"l"]],"x":34,"t":1305082943.89774},{"y":5,"d":[[4,33,"o"]],"x":35,"t":1305082944.07385},{"y":5,"d":[[4,34,"r"]],"x":36,"t":1305082944.17762},{"y":5,"d":[[4,35,"."]],"x":37,"t":1305082944.47368},{"y":5,"d":[[4,36,"u"]],"x":38,"t":1305082944.71372},{"y":5,"d":[[4,37,"i"]],"x":39,"t":1305082945.05754},{"y":5,"x":40,"t":1305082945.24144},{"y":5,"d":[[4,39,"t"]],"x":41,"t":1305082945.49757},{"y":5,"d":[[4,40,"r"]],"x":42,"t":1305082945.68147},{"y":5,"d":[[4,41,"u"]],"x":43,"t":1305082945.8255},{"y":5,"d":[[4,42,"e"]],"x":44,"t":1305082945.95352},{"y":6,"x":1,"t":1305082946.58541},{"y":6,"d":[[5,0,8,"bash-3.2$"]],"x":11,"t":1305082946.59185},{"y":6,"d":[[5,10,"g"]],"x":12,"t":1305082947.22555},{"y":6,"d":[[5,11,"i"]],"x":13,"t":1305082947.30527},{"y":6,"d":[[5,12,"t"]],"x":14,"t":1305082947.40156},{"y":6,"x":15,"t":1305082947.48945},{"y":6,"d":[[5,14,"c"]],"x":16,"t":1305082947.61032},{"y":6,"d":[[5,15,"o"]],"x":17,"t":1305082947.68157},{"y":6,"d":[[5,16,"n"]],"x":18,"t":1305082947.80955},{"y":6,"d":[[5,17,"f"]],"x":19,"t":1305082947.82574},{"y":6,"d":[[5,18,"i"]],"x":20,"t":1305082947.93739},{"y":6,"d":[[5,19,"g"]],"x":21,"t":1305082948.01757},{"y":6,"x":22,"t":1305082948.13735},{"y":6,"d":[[5,21,"-"]],"x":23,"t":1305082948.24123},{"y":6,"d":[[5,22,"-"]],"x":24,"t":1305082948.42567},{"y":6,"d":[[5,23,"s"]],"x":25,"t":1305082948.50568},{"y":6,"d":[[5,24,"y"]],"x":26,"t":1305082948.62533},{"y":6,"d":[[5,25,"s"]],"x":27,"t":1305082948.68936},{"y":6,"d":[[5,26,"t"]],"x":28,"t":1305082948.86569},{"y":6,"d":[[5,27,"e"]],"x":29,"t":1305082949.00142},{"y":6,"d":[[5,28,"m"]],"x":30,"t":1305082949.12959},{"y":6,"x":31,"t":1305082949.26551},{"y":6,"d":[[5,30,"a"]],"x":32,"t":1305082949.49741},{"y":6,"d":[[5,31,"l"]],"x":33,"t":1305082949.56934},{"y":6,"d":[[5,32,"i"]],"x":34,"t":1305082949.69738},{"y":6,"d":[[5,33,"a"]],"x":35,"t":1305082949.84963},{"y":6,"d":[[5,34,"s"]],"x":36,"t":1305082950.02551},{"y":6,"d":[[5,35,"."]],"x":37,"t":1305082950.21729},{"y":6,"d":[[5,36,"s"]],"x":38,"t":1305082951.71338},{"y":6,"d":[[5,37,"t"]],"x":39,"t":1305082951.85733},{"y":6,"x":40,"t":1305082951.99312},{"y":6,"d":[[5,39,"s"]],"x":41,"t":1305082952.1532},{"y":6,"d":[[5,40,"t"]],"x":42,"t":1305082952.26528},{"y":6,"d":[[5,41,"a"]],"x":43,"t":1305082952.40117},{"y":6,"d":[[5,42,"t"]],"x":44,"t":1305082952.51327},{"y":6,"d":[[5,43,"u"]],"x":45,"t":1305082952.61719},{"y":6,"d":[[5,44,"s"]],"x":46,"t":1305082952.68909},{"y":7,"x":1,"t":1305082952.84104},{"y":8,"d":[[6,0,66,"error: could not lock config file /etc/gitconfig: Permission denied"],[7,0,8,"bash-3.2$"]],"x":11,"t":1305082952.84775},{"y":8,"d":[["cp",5,7]],"x":11,"t":1305082954.53708},{"y":8,"d":[[7,10,45,"sgit config --system alias.st status"]],"x":12,"t":1305082954.94514},{"y":8,"d":[[7,11,46,"ugit config --system alias.st status"]],"x":13,"t":1305082955.07338},{"y":8,"d":[[7,12,47,"dgit config --system alias.st status"]],"x":14,"t":1305082955.13709},{"y":8,"d":[[7,13,48,"ogit config --system alias.st status"]],"x":15,"t":1305082955.26511},{"y":8,"d":[[7,14,49," git config --system alias.st status"]],"x":16,"t":1305082955.38523},{"y":9,"x":1,"t":1305082955.73707},{"y":9,"d":[[8,0,8,"bash-3.2$"]],"x":11,"t":1305082955.75914},{"y":9,"d":[["cp",7,8]],"x":11,"t":1305082956.50479},{"y":9,"x":16,"t":1305082956.68904},{"y":9,"x":20,"t":1305082957.18937},{"y":9,"x":27,"t":1305082957.27291},{"y":9,"x":29,"t":1305082957.35609},{"y":9,"x":36,"t":1305082957.43967},{"y":9,"x":41,"t":1305082958.425},{"y":9,"x":42,"t":1305082958.60913},{"y":9,"d":[[8,41,49,["a"," "]]],"x":41,"t":1305082959.48098},{"y":9,"x":42,"t":1305082959.65692},{"d":[["r","bash-3.2$ git --version "],["r","git version 1.7.5.dirty "],["r","bash-3.2$ git config --global user.name \"Jiang Xin\" "],["r","bash-3.2$ git config --global user.email jiangxin@ossxp.com "],["r","bash-3.2$ git config --global color.ui true "],["r","bash-3.2$ git config --system alias.st status "],["r","error: could not lock config file /etc/gitconfig: Permission denied "],["r","bash-3.2$ sudo git config --system alias.st status "],["r","bash-3.2$ sudo git config --system alias.c "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":43,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":9,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305082960.10465,"i":1},{"y":9,"d":[[8,42,"i"]],"x":44,"t":1305082960.18467},{"y":9,"x":45,"t":1305082960.34449},{"y":9,"d":[[8,44,"c"]],"x":46,"t":1305082960.55261},{"y":9,"d":[[8,45,"o"]],"x":47,"t":1305082960.63276},{"y":9,"d":[[8,46,"m"]],"x":48,"t":1305082960.80867},{"y":9,"d":[[8,47,"m"]],"x":49,"t":1305082960.95278},{"y":9,"d":[[8,48,"i"]],"x":50,"t":1305082961.10469},{"y":9,"d":[[8,49,"t"]],"x":51,"t":1305082961.19257},{"y":10,"x":1,"t":1305082961.3286},{"y":10,"d":[[9,0,8,"bash-3.2$"]],"x":11,"t":1305082961.346},{"y":10,"d":[["cp",8,9]],"x":11,"t":1305082961.9286},{"y":10,"x":16,"t":1305082962.31286},{"y":10,"x":20,"t":1305082962.81286},{"y":10,"x":27,"t":1305082962.89603},{"y":10,"x":29,"t":1305082962.97962},{"y":10,"x":36,"t":1305082963.06318},{"y":10,"x":41,"t":1305082963.14642},{"y":10,"x":42,"t":1305082963.23207},{"y":10,"x":45,"t":1305082963.31326},{"y":10,"x":42,"t":1305082963.69646},{"y":10,"d":[[9,41,49,["a"," "]]],"x":41,"t":1305082964.337},{"y":10,"x":42,"t":1305082964.50442},{"y":10,"d":[[9,41,"c"]],"x":43,"t":1305082964.75241},{"y":10,"d":[[9,42,"o"]],"x":44,"t":1305082964.8405},{"y":10,"x":45,"t":1305082965.05649},{"y":10,"d":[[9,44,"c"]],"x":46,"t":1305082965.24324},{"y":10,"d":[[9,45,"h"]],"x":47,"t":1305082965.33633},{"y":10,"d":[[9,46,"e"]],"x":48,"t":1305082965.43246},{"y":10,"d":[[9,47,"c"]],"x":49,"t":1305082965.60048},{"y":10,"d":[[9,48,"k"]],"x":50,"t":1305082965.64064},{"y":10,"d":[[9,49,"o"]],"x":51,"t":1305082965.78453},{"y":10,"d":[[9,50,"u"]],"x":52,"t":1305082965.88838},{"y":10,"d":[[9,51,"t"]],"x":53,"t":1305082966.02443},{"y":11,"x":1,"t":1305082966.19246},{"y":11,"d":[[10,0,8,"bash-3.2$"]],"x":11,"t":1305082966.21165},{"y":11,"d":[["cp",9,10]],"x":11,"t":1305082966.64829},{"y":11,"x":16,"t":1305082966.97628},{"y":11,"x":20,"t":1305082967.47669},{"y":11,"x":27,"t":1305082967.56013},{"y":11,"x":29,"t":1305082967.6432},{"y":11,"x":36,"t":1305082967.72644},{"y":11,"x":41,"t":1305082967.80997},{"y":11,"x":42,"t":1305082967.89338},{"y":11,"d":[[10,41,51,["a"," "]]],"x":41,"t":1305082968.65657},{"y":11,"x":42,"t":1305082968.88848},{"y":11,"d":[[10,41,"b"]],"x":43,"t":1305082969.69623},{"y":11,"d":[[10,42,"r"]],"x":44,"t":1305082969.88012},{"y":11,"x":45,"t":1305082969.98418},{"y":11,"d":[[10,44,"b"]],"x":46,"t":1305082970.18438},{"y":11,"d":[[10,45,"r"]],"x":47,"t":1305082970.36894},{"y":11,"d":[[10,46,"a"]],"x":48,"t":1305082970.52808},{"y":11,"d":[[10,47,"n"]],"x":49,"t":1305082970.64002},{"y":11,"d":[[10,48,"c"]],"x":50,"t":1305082970.77625},{"y":11,"d":[[10,49,"h"]],"x":51,"t":1305082970.89625},{"y":12,"x":1,"t":1305082971.21601},{"y":12,"d":[[11,0,8,"bash-3.2$"]],"x":11,"t":1305082971.23762},{"y":12,"d":[[11,10,"c"]],"x":12,"t":1305082973.96799},{"y":12,"d":[[11,11,"d"]],"x":13,"t":1305082974.14405},{"y":12,"x":14,"t":1305082974.232},{"y":12,"d":[[11,13,"/"]],"x":15,"t":1305082974.3599},{"y":12,"d":[[11,14,"p"]],"x":16,"t":1305082974.56907},{"y":12,"d":[[11,15,"a"]],"x":17,"t":1305082974.60831},{"y":12,"d":[[11,16,"t"]],"x":18,"t":1305082974.75992},{"y":12,"d":[[11,17,"h"]],"x":19,"t":1305082974.97751},{"y":12,"d":[[11,18,"t"]],"x":20,"t":1305082975.45583},{"y":12,"d":[[11,18," "]],"x":19,"t":1305082975.84789},{"y":12,"d":[[11,18,"/"]],"x":20,"t":1305082976.05599},{"y":12,"d":[[11,19,"t"]],"x":21,"t":1305082976.50516},{"y":12,"d":[[11,20,"o"]],"x":22,"t":1305082976.56008},{"y":12,"d":[[11,21,"/"]],"x":23,"t":1305082976.72662},{"y":12,"d":[[11,22,"m"]],"x":24,"t":1305082977.2799},{"y":12,"d":[[11,23,"y"]],"x":25,"t":1305082977.48781},{"y":12,"d":[[11,24,"/"]],"x":26,"t":1305082977.57401},{"y":12,"d":[[11,25,"w"]],"x":27,"t":1305082978.43963},{"y":12,"d":[[11,26,"o"]],"x":28,"t":1305082978.51991},{"y":12,"d":[[11,27,33,"rkspace"]],"x":35,"t":1305082978.67018},{"y":13,"d":[[12,0,8,"bash-3.2$"]],"x":11,"t":1305082979.83164},{"y":13,"d":[[12,10,"l"]],"x":12,"t":1305082981.33559},{"y":13,"d":[[12,11,"s"]],"x":13,"t":1305082981.41566},{"y":14,"x":1,"t":1305082981.55938},{"y":14,"d":[[13,0,8,"bash-3.2$"]],"x":11,"t":1305082981.56397},{"y":14,"d":[[13,10,"g"]],"x":12,"t":1305082981.87961},{"y":14,"d":[[13,11,"i"]],"x":13,"t":1305082981.93624},{"y":14,"d":[[13,12,"t"]],"x":14,"t":1305082982.05573},{"y":14,"x":15,"t":1305082982.12769},{"y":14,"d":[[13,14,"i"]],"x":16,"t":1305082982.28848},{"y":14,"d":[[13,15,"n"]],"x":17,"t":1305082982.41532},{"y":14,"d":[[13,16,"i"]],"x":18,"t":1305082982.53572},{"y":14,"d":[[13,17,"t"]],"x":19,"t":1305082982.62353},{"y":14,"x":20,"t":1305082982.67962},{"y":14,"d":[[13,19,"d"]],"x":21,"t":1305082982.89561},{"y":14,"d":[[13,20,"e"]],"x":22,"t":1305082983.07135},{"y":14,"d":[[13,21,"m"]],"x":23,"t":1305082983.20734},{"y":14,"d":[[13,22,"o"]],"x":24,"t":1305082983.33558},{"y":15,"x":1,"t":1305082983.53606},{"y":17,"d":[[14,0,79,"Initialized empty Git repository in /Volumes/MacDATA/path/to/my/workspace/demo/."],[15,0,3,"git/"],[16,0,8,"bash-3.2$"]],"x":11,"t":1305082983.55219},{"y":17,"d":[[16,10,"l"]],"x":12,"t":1305082983.75132},{"y":17,"d":[["cp",12,16]],"x":13,"t":1305082983.84751},{"y":18,"x":1,"t":1305082983.95129},{"d":[["r","bash-3.2$ git --version "],["r","git version 1.7.5.dirty "],["r","bash-3.2$ git config --global user.name \"Jiang Xin\" "],["r","bash-3.2$ git config --global user.email jiangxin@ossxp.com "],["r","bash-3.2$ git config --global color.ui true "],["r","bash-3.2$ git config --system alias.st status "],["r","error: could not lock config file /etc/gitconfig: Permission denied "],["r","bash-3.2$ sudo git config --system alias.st status "],["r","bash-3.2$ sudo git config --system alias.ci commit "],["r","bash-3.2$ sudo git config --system alias.co checkout "],["r","bash-3.2$ sudo git config --system alias.br branch "],["r","bash-3.2$ cd /path/to/my/workspace "],["r","bash-3.2$ ls "],["r","bash-3.2$ git init demo "],["r","Initialized empty Git repository in /Volumes/MacDATA/path/to/my/workspace/demo/."],["r","git/ "],["r","bash-3.2$ ls "],["r","demo "],["r","bash-3.2$ "],["a"," "],"d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":19,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["r","44447777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305082983.95562,"i":1},{"y":19,"d":[[18,10,"c"]],"x":12,"t":1305082984.61523},{"y":19,"d":[[18,11,"d"]],"x":13,"t":1305082984.79951},{"y":19,"x":14,"t":1305082984.86337},{"y":19,"d":[[18,13,"d"]],"x":15,"t":1305082985.0154},{"y":19,"d":[[18,14,"e"]],"x":16,"t":1305082985.16718},{"y":19,"d":[[18,15,"m"]],"x":17,"t":1305082985.27142},{"y":19,"d":[[18,16,17,"o/"]],"x":19,"t":1305082985.44007},{"y":20,"x":1,"t":1305082985.69522},{"y":20,"d":[[19,0,8,"bash-3.2$"]],"x":11,"t":1305082985.69549},{"y":20,"d":[[19,10,"l"]],"x":12,"t":1305082985.87922},{"y":20,"d":[["cp",12,19]],"x":13,"t":1305082985.9673},{"y":21,"x":1,"t":1305082986.07927},{"y":21,"d":[[20,0,8,"bash-3.2$"]],"x":11,"t":1305082986.0851},{"y":21,"d":[[20,10,"l"]],"x":12,"t":1305082986.33533},{"y":21,"d":[["cp",12,20]],"x":13,"t":1305082986.43123},{"y":21,"x":14,"t":1305082986.51915},{"y":21,"d":[[20,13,"-"]],"x":15,"t":1305082986.74349},{"y":21,"d":[[20,14,"a"]],"x":16,"t":1305082987.16736},{"y":21,"d":[[20,15,"F"]],"x":17,"t":1305082987.48736},{"y":22,"x":1,"t":1305082987.71128},{"y":23,"d":[[21,0,1,"./"],[21,6,16,"../ .git/"],[22,0,8,"bash-3.2$"]],"x":11,"f":[[21,0,"4"],[21,6,7,["a","4"]],[21,12,15,["a","4"]]],"t":1305082987.71608},{"y":23,"d":[[22,10,"e"]],"x":12,"t":1305082992.19099},{"y":23,"d":[[22,11,"c"]],"x":13,"t":1305082992.36687},{"y":23,"d":[[22,12,"h"]],"x":14,"t":1305082992.42302},{"y":23,"d":[[22,13,"o"]],"x":15,"t":1305082992.527},{"y":23,"x":16,"t":1305082992.71092},{"y":23,"d":[[22,15,"H"]],"x":17,"t":1305082993.03124},{"y":23,"d":[[22,16,"e"]],"x":18,"t":1305082993.17496},{"y":23,"d":[[22,17,"l"]],"x":19,"t":1305082993.28682},{"y":23,"d":[[22,18,"l"]],"x":20,"t":1305082993.43897},{"y":23,"d":[[22,19,"o"]],"x":21,"t":1305082993.61604},{"y":23,"d":[[22,20,"."]],"x":22,"t":1305082993.79156},{"y":23,"x":23,"t":1305082994.06283},{"y":23,"d":[[22,22,">"]],"x":24,"t":1305082994.31892},{"y":23,"x":25,"t":1305082994.45482},{"y":23,"d":[[22,24,"w"]],"x":26,"t":1305082995.18273},{"y":23,"d":[[22,25,"e"]],"x":27,"t":1305082995.38285},{"y":23,"d":[[22,26,"l"]],"x":28,"t":1305082995.5905},{"y":23,"d":[[22,27,"c"]],"x":29,"t":1305082995.75865},{"y":23,"d":[[22,28,"o"]],"x":30,"t":1305082995.8388},{"y":23,"d":[[22,29,"m"]],"x":31,"t":1305082995.99065},{"y":23,"d":[[22,30,"e"]],"x":32,"t":1305082996.12692},{"y":23,"d":[[22,31,"."]],"x":33,"t":1305082996.23886},{"y":23,"d":[[22,32,"t"]],"x":34,"t":1305082996.37469},{"y":23,"d":[[22,33,"x"]],"x":35,"t":1305082996.52692},{"y":23,"d":[[22,34,"t"]],"x":36,"t":1305082996.63057},{"y":24,"d":[[23,0,8,"bash-3.2$"]],"x":11,"t":1305082996.7512},{"y":24,"d":[[23,10,"g"]],"x":12,"t":1305082998.38251},{"y":24,"d":[[23,11,"i"]],"x":13,"t":1305082998.4387},{"y":24,"d":[[23,12,"t"]],"x":14,"t":1305082998.54271},{"y":24,"x":15,"t":1305082998.63869},{"y":24,"d":[[23,14,"a"]],"x":16,"t":1305082998.83069},{"y":24,"d":[[23,15,"d"]],"x":17,"t":1305082998.99052},{"y":24,"d":[[23,16,"d"]],"x":18,"t":1305082999.15065},{"y":24,"x":19,"t":1305082999.25443},{"y":24,"d":[[23,18,"."]],"x":20,"t":1305082999.35846},{"y":25,"x":1,"t":1305082999.57436},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305082999.58291},{"y":25,"d":[[24,10,"i"]],"x":12,"t":1305083003.11834},{"y":25,"d":[[24,10," "]],"x":11,"t":1305083003.58226},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305083003.71852},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305083003.82216},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305083003.89424},{"y":25,"x":15,"t":1305083003.98252},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305083004.14227},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305083004.2702},{"y":25,"x":18,"t":1305083004.47032},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305083004.63828},{"y":25,"d":[[24,18,"m"]],"x":20,"t":1305083004.87836},{"y":25,"x":21,"t":1305083005.03812},{"y":25,"d":[[24,20,"\""]],"x":22,"t":1305083005.33425},{"y":25,"d":[[24,21,"i"]],"x":23,"t":1305083005.92622},{"y":25,"d":[[24,22,"n"]],"x":24,"t":1305083006.08627},{"y":25,"d":[[24,23,"t"]],"x":25,"t":1305083006.27817},{"y":25,"d":[[24,24,"i"]],"x":26,"t":1305083006.38229},{"y":25,"d":[[24,25,"a"]],"x":27,"t":1305083006.50212},{"y":25,"d":[[24,26,"l"]],"x":28,"t":1305083007.06206},{"y":25,"d":[[24,27,"i"]],"x":29,"t":1305083007.27794},{"y":25,"d":[[24,28,"z"]],"x":30,"t":1305083007.6703},{"y":25,"d":[[24,29,"e"]],"x":31,"t":1305083007.83822},{"y":25,"d":[[24,30,"d"]],"x":32,"t":1305083007.9982},{"y":25,"d":[[24,31,"."]],"x":33,"t":1305083008.13387},{"y":25,"d":[[24,32,"\""]],"x":34,"t":1305083008.56619},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",11,15],["cp",17,16],["cp",18,17],["cp",11,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",17,16],["cp",0,17],["cp",21,20],["cp",0,21]],"t":1305083008.73392},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",10,14],["cp",16,15],["cp",17,16],["cp",10,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,41,"[master (root-commit) 3869015] intialized."]],"x":1,"f":[["cp",16,15],["cp",0,16],["cp",20,19],["cp",0,20]],"t":1305083009.02533},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",8,12],["cp",15,13],["cp",16,14],["cp",8,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,48," 1 files changed, 1 insertions(+), 0 deletions(-)"],[23,0,41," create mode 100644 welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",15,13],["cp",0,15],["cp",19,17],["cp",0,19]],"t":1305083009.02665},{"y":25,"d":[[24,10,"e"]],"x":12,"t":1305083013.0138},{"y":25,"d":[[24,11,"x"]],"x":13,"t":1305083013.20589},{"y":25,"d":[[24,12,"i"]],"x":14,"t":1305083013.29362},{"y":25,"d":[[24,13,"t"]],"x":15,"t":1305083013.4459},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",6,10],["cp",13,11],["cp",14,12],["cp",6,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],["cp",24,22],[23,0,30,"exit "],[24,["a"," "]]],"x":1,"f":[["cp",13,11],["cp",0,13],["cp",17,15],["cp",0,17]],"t":1305083014.2244}]} \ No newline at end of file diff --git a/html/part2/ch04-02-git-config.html b/html/part2/ch04-02-git-config.html new file mode 100644 index 000000000..e4b73ea64 --- /dev/null +++ b/html/part2/ch04-02-git-config.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch04-02-git-config +json_file: ch04-02-git-config.json +--- diff --git a/html/part2/ch04-02-git-config.json b/html/part2/ch04-02-git-config.json new file mode 100644 index 000000000..d5ec12953 --- /dev/null +++ b/html/part2/ch04-02-git-config.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305084231.27491,"i":1},{"y":1,"d":[[0,10,"c"]],"x":12,"t":1305084231.86193},{"y":1,"d":[[0,11,"d"]],"x":13,"t":1305084232.03725},{"y":1,"x":14,"t":1305084232.14159},{"y":1,"d":[[0,13,"/"]],"x":15,"t":1305084232.17336},{"y":1,"d":[[0,14,"p"]],"x":16,"t":1305084232.42141},{"y":1,"d":[[0,15,"a"]],"x":17,"t":1305084232.48518},{"y":1,"d":[[0,16,"t"]],"x":18,"t":1305084232.6214},{"y":1,"d":[[0,17,"h"]],"x":19,"t":1305084232.69323},{"y":1,"d":[[0,18,"/"]],"x":20,"t":1305084232.83701},{"y":1,"d":[[0,19,"t"]],"x":21,"t":1305084233.06117},{"y":1,"d":[[0,20,"o"]],"x":22,"t":1305084233.43743},{"y":1,"d":[[0,21,"/"]],"x":23,"t":1305084233.58008},{"y":1,"d":[[0,22,"m"]],"x":24,"t":1305084234.02146},{"y":1,"d":[[0,23,"y"]],"x":25,"t":1305084234.22141},{"y":1,"d":[[0,24,"/"]],"x":26,"t":1305084234.28572},{"y":1,"d":[[0,25,"w"]],"x":27,"t":1305084234.9332},{"y":1,"d":[[0,26,"o"]],"x":28,"t":1305084235.03736},{"y":1,"d":[[0,27,33,"rkspace"]],"x":35,"t":1305084235.16374},{"y":1,"d":[[0,34,"d"]],"x":36,"t":1305084235.50911},{"y":1,"d":[[0,35,"e"]],"x":37,"t":1305084235.69326},{"y":1,"d":[[0,35," "]],"x":36,"t":1305084235.94887},{"y":1,"d":[[0,34," "]],"x":35,"t":1305084236.09282},{"y":1,"d":[[0,34,"/"]],"x":36,"t":1305084236.30913},{"y":1,"d":[[0,35,"d"]],"x":37,"t":1305084236.38924},{"y":1,"d":[[0,36,"e"]],"x":38,"t":1305084236.56522},{"y":1,"d":[[0,37,39,"mo/"]],"x":41,"t":1305084236.77946},{"y":2,"x":1,"t":1305084238.21298},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305084238.2133},{"y":2,"d":[[1,10,"l"]],"x":12,"t":1305084239.78905},{"y":2,"d":[[1,11,"s"]],"x":13,"t":1305084239.85295},{"y":3,"x":1,"t":1305084239.99724},{"y":4,"d":[[2,0,10,"welcome.txt"],[3,0,8,"bash-3.2$"]],"x":11,"t":1305084240.00685},{"y":4,"d":[[3,10,"g"]],"x":12,"t":1305084240.55679},{"y":4,"d":[[3,11,"i"]],"x":13,"t":1305084240.64492},{"y":4,"d":[[3,12,"t"]],"x":14,"t":1305084240.73276},{"y":4,"x":15,"t":1305084240.8369},{"y":4,"d":[[3,14,"c"]],"x":16,"t":1305084240.96502},{"y":4,"d":[[3,15,"o"]],"x":17,"t":1305084241.04527},{"y":4,"d":[[3,16,"n"]],"x":18,"t":1305084241.15681},{"y":4,"d":[[3,17,"f"]],"x":19,"t":1305084241.16499},{"y":4,"d":[[3,18,"i"]],"x":20,"t":1305084241.26916},{"y":4,"d":[[3,19,"g"]],"x":21,"t":1305084241.36499},{"y":4,"x":22,"t":1305084241.47705},{"y":4,"d":[[3,21,"-"]],"x":23,"t":1305084241.68479},{"y":4,"d":[[3,22,"e"]],"x":24,"t":1305084241.90904},{"y":5,"x":1,"t":1305084242.21289},{"y":5,"x":1,"t":1305084242.4906},{"y":1,"b":[[0,0,"6"],[0,5,"6"]],"d":[[0,0,39,"[core] "],[1,0,28," repositoryformatversion = 0"],[2,0,16," filemode = true"],[3,0,22," bare = false "],[4,2,24,"logallrefupdates = true"],[5,2,18,"ignorecase = true"],[6,0,"~"],["cp",6,7],["cp",6,8],["cp",6,9],["cp",6,10],["cp",6,11],["cp",6,12],["cp",6,13],["cp",6,14],["cp",6,15],["cp",6,16],["cp",6,17],["cp",6,18],["cp",6,19],["cp",6,20],[21,0,22,"\".git/config\" 6L, 111Cc"]],"x":1,"f":[[0,0,5,["a","3"]],[1,2,28,"666666666666666666666667771"],[2,2,16,"666666667771111"],[3,2,13,"666677711111"],[4,2,24,"66666666666666667771111"],[5,2,18,"66666666667771111"],[6,0,77,["a","4"]],["cp",6,7],["cp",6,8],["cp",6,9],["cp",6,10],["cp",6,11],["cp",6,12],["cp",6,13],["cp",6,14],["cp",6,15],["cp",6,16],["cp",6,17],["cp",6,18],["cp",6,19],["cp",6,20]],"B":[[6,0,77,["a","1"]],["cp",6,7],["cp",6,8],["cp",6,9],["cp",6,10],["cp",6,11],["cp",6,12],["cp",6,13],["cp",6,14],["cp",6,15],["cp",6,16],["cp",6,17],["cp",6,18],["cp",6,19],["cp",6,20]],"t":1305084242.49679},{"y":2,"b":[["cp",1,0]],"x":2,"t":1305084243.41323},{"y":3,"x":2,"t":1305084243.58093},{"y":4,"x":2,"t":1305084243.7651},{"y":5,"x":2,"t":1305084243.94873},{"y":6,"x":2,"t":1305084244.11718},{"y":22,"d":[[21,0,22,": "]],"x":2,"t":1305084244.85293},{"y":22,"d":[[21,1,"q"]],"x":3,"t":1305084245.10867},{"y":5,"d":[["cp",22,0],["cp",0,1],["cp",0,2],["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"x":1,"f":[["cp",21,0],["cp",0,1],["cp",0,2],["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20]],"B":[["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20]],"t":1305084245.54188},{"y":5,"d":[[4,0,8,"bash-3.2$"]],"x":11,"t":1305084245.83076},{"y":5,"d":[[4,10,"g"]],"x":12,"t":1305084245.98891},{"y":5,"d":[[4,11,"i"]],"x":13,"t":1305084246.06069},{"y":5,"d":[[4,12,"t"]],"x":14,"t":1305084246.17247},{"y":5,"x":15,"t":1305084246.24466},{"y":5,"d":[[4,14,"c"]],"x":16,"t":1305084246.38864},{"y":5,"d":[[4,15,"o"]],"x":17,"t":1305084246.4289},{"y":5,"d":[[4,16,"n"]],"x":18,"t":1305084246.57282},{"y":5,"d":[[4,17,"f"]],"x":19,"t":1305084246.58046},{"y":5,"d":[[4,18,"i"]],"x":20,"t":1305084246.72556},{"y":5,"d":[[4,19,"g"]],"x":21,"t":1305084247.26048},{"y":5,"x":22,"t":1305084247.59653},{"y":5,"d":[[4,21,"-"]],"x":23,"t":1305084247.83633},{"y":5,"d":[[4,22,"-"]],"x":24,"t":1305084248.0124},{"y":5,"d":[[4,23,"s"]],"x":25,"t":1305084248.1163},{"y":5,"d":[[4,24,"y"]],"x":26,"t":1305084248.23633},{"y":5,"d":[[4,25,"s"]],"x":27,"t":1305084248.30844},{"y":5,"d":[[4,26,"t"]],"x":28,"t":1305084248.54034},{"y":5,"d":[[4,27,"e"]],"x":29,"t":1305084248.67653},{"y":5,"d":[[4,28,"m"]],"x":30,"t":1305084248.75662},{"y":5,"x":31,"t":1305084248.91634},{"y":5,"d":[[4,30,"-"]],"x":32,"t":1305084249.15629},{"y":5,"d":[[4,31,"e"]],"x":33,"t":1305084249.24427},{"y":6,"x":1,"t":1305084249.42829},{"y":6,"d":[["cp",0,4]],"x":1,"t":1305084249.47766},{"y":1,"b":[[0,0,"6"],[0,6,"6"]],"d":[[0,0,6,"[alias]"],[1,2,12,"st = status"],[2,2,12,"ci = commit"],[3,2,14,"co = checkout"],[4,2,12,"br = branch"],[5,0,"~"],["cp",5,6],["cp",5,7],["cp",5,8],["cp",5,9],["cp",5,10],["cp",5,11],["cp",5,12],["cp",5,13],["cp",5,14],["cp",5,15],["cp",5,16],["cp",5,17],["cp",5,18],["cp",5,19],["cp",5,20],[21,0,35,"\"/etc/gitconfig\" [readonly] 5L, 62Cc"]],"x":1,"f":[[5,0,77,["a","4"]],["cp",5,6],["cp",5,7],["cp",5,8],["cp",5,9],["cp",5,10],["cp",5,11],["cp",5,12],["cp",5,13],["cp",5,14],["cp",5,15],["cp",5,16],["cp",5,17],["cp",5,18],["cp",5,19],["cp",5,20]],"B":[[5,0,77,["a","1"]],["cp",5,6],["cp",5,7],["cp",5,8],["cp",5,9],["cp",5,10],["cp",5,11],["cp",5,12],["cp",5,13],["cp",5,14],["cp",5,15],["cp",5,16],["cp",5,17],["cp",5,18],["cp",5,19],["cp",5,20]],"t":1305084249.48158},{"y":2,"b":[["cp",1,0]],"x":2,"t":1305084250.4608},{"y":3,"x":2,"t":1305084250.96072},{"y":4,"x":2,"t":1305084251.04384},{"y":5,"x":2,"t":1305084251.12748},{"y":5,"x":2,"t":1305084251.21071},{"y":5,"x":2,"t":1305084251.29452},{"y":5,"x":2,"t":1305084251.3777},{"y":22,"d":[[21,0,35,": "]],"x":2,"t":1305084252.69243},{"y":22,"d":[[21,1,"q"]],"x":3,"t":1305084252.81247},{"y":22,"x":1,"t":1305084252.96438},{"y":6,"d":[["cp",22,0],["cp",0,1],["cp",0,2],["cp",0,3],[4,0,31,"bash-3.2$ git config --system -e"],[5,0,8,"bash-3.2$"],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"x":11,"f":[["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20]],"B":[["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20]],"t":1305084252.96702},{"y":6,"d":[["cp",4,5]],"x":11,"t":1305084253.54009},{"y":6,"x":15,"t":1305084253.71606},{"y":6,"x":22,"t":1305084253.94041},{"y":6,"x":24,"t":1305084254.124},{"y":6,"d":[[5,23,31,"-e "]],"x":24,"t":1305084254.62823},{"y":6,"d":[[5,23,25,"g-e"]],"x":25,"t":1305084254.97205},{"d":[["a"," "],"d","d","d",["r","bash-3.2$ git config --system -e "],["r","bash-3.2$ git config --gl-e "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":26,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":6,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305084255.06003,"i":1},{"y":6,"d":[[5,25,27,"o-e"]],"x":27,"t":1305084255.24405},{"y":6,"d":[[5,26,28,"b-e"]],"x":28,"t":1305084255.30786},{"y":6,"d":[[5,27,29,"a-e"]],"x":29,"t":1305084255.43618},{"y":6,"d":[[5,28,30,"l-e"]],"x":30,"t":1305084255.50017},{"y":6,"d":[[5,29,31," -e"]],"x":31,"t":1305084255.65205},{"y":7,"x":1,"t":1305084255.76427},{"y":7,"d":[["cp",0,4],["cp",0,5]],"x":1,"t":1305084255.81253},{"y":1,"b":[[0,0,"6"],[0,5,"6"]],"d":[[0,0,5,"[user]"],[1,2,17,"name = Jiang Xin"],[2,2,27,"email = jiangxin@ossxp.com"],[3,0,6,"[color]"],[4,2,10,"ui = true"],[5,0,"~"],["cp",5,6],["cp",5,7],["cp",5,8],["cp",5,9],["cp",5,10],["cp",5,11],["cp",5,12],["cp",5,13],["cp",5,14],["cp",5,15],["cp",5,16],["cp",5,17],["cp",5,18],["cp",5,19],["cp",5,20],[21,0,22,"\"~/.gitconfig\" 5L, 72Cc"]],"x":1,"f":[[0,0,5,["a","3"]],[1,2,5,["a","6"]],[2,2,6,["a","6"]],[3,0,6,["a","3"]],[4,2,10,"667771111"],[5,0,77,["a","4"]],["cp",5,6],["cp",5,7],["cp",5,8],["cp",5,9],["cp",5,10],["cp",5,11],["cp",5,12],["cp",5,13],["cp",5,14],["cp",5,15],["cp",5,16],["cp",5,17],["cp",5,18],["cp",5,19],["cp",5,20]],"B":[[5,0,77,["a","1"]],["cp",5,6],["cp",5,7],["cp",5,8],["cp",5,9],["cp",5,10],["cp",5,11],["cp",5,12],["cp",5,13],["cp",5,14],["cp",5,15],["cp",5,16],["cp",5,17],["cp",5,18],["cp",5,19],["cp",5,20]],"t":1305084255.8204},{"y":2,"b":[["cp",1,0]],"x":2,"t":1305084256.79633},{"y":3,"x":2,"t":1305084256.98016},{"y":4,"b":[[3,0,"6"],[3,6,"6"]],"x":1,"t":1305084257.18093},{"y":5,"b":[["cp",0,3]],"x":2,"t":1305084257.37381},{"y":5,"x":2,"t":1305084258.116},{"y":4,"b":[[3,0,"6"],[3,6,"6"]],"x":1,"t":1305084258.52445},{"y":22,"d":[[21,0,22,": "]],"x":2,"t":1305084259.42832},{"y":22,"d":[[21,1,"q"]],"x":3,"t":1305084259.55589},{"y":22,"x":1,"t":1305084260.0681},{"y":7,"b":[["cp",0,3]],"d":[["cp",22,0],["cp",0,1],["cp",0,2],["cp",0,3],[4,0,31,"bash-3.2$ git config --system -e"],[5,0,31,"bash-3.2$ git config --global -e"],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"x":1,"f":[["cp",21,0],["cp",0,1],["cp",0,2],["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20]],"B":[["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20]],"t":1305084260.0683},{"y":7,"d":[[6,0,8,"bash-3.2$"]],"x":11,"t":1305084260.35926},{"y":7,"d":[[6,10,"c"]],"x":12,"t":1305084260.83598},{"y":7,"d":[[6,11,"a"]],"x":13,"t":1305084260.96376},{"y":7,"d":[[6,12,"t"]],"x":14,"t":1305084261.04443},{"y":7,"x":15,"t":1305084261.13994},{"y":7,"d":[[6,14,"."]],"x":16,"t":1305084261.54773},{"y":7,"d":[[6,15,"g"]],"x":17,"t":1305084261.68377},{"y":7,"d":[[6,16,"i"]],"x":18,"t":1305084261.7637},{"y":7,"d":[[6,17,18,"t/"]],"x":20,"t":1305084261.90786},{"y":7,"d":[[6,19,"c"]],"x":21,"t":1305084262.29186},{"y":7,"d":[[6,20,"o"]],"x":22,"t":1305084262.39582},{"y":7,"d":[[6,21,"n"]],"x":23,"t":1305084263.01965},{"y":7,"d":[[6,22,24,"fig"]],"x":27,"t":1305084263.14805},{"y":8,"x":1,"t":1305084263.65148},{"y":14,"d":[[7,0,5,"[core]"],[8,8,34,"repositoryformatversion = 0"],[9,8,22,"filemode = true"],[10,8,19,"bare = false"],[11,8,30,"logallrefupdates = true"],[12,8,24,"ignorecase = true"],[13,0,8,"bash-3.2$"]],"x":11,"t":1305084263.65633},{"y":14,"d":[[13,10,"g"]],"x":12,"t":1305084264.85145},{"y":14,"d":[[13,11,"i"]],"x":13,"t":1305084264.92368},{"y":14,"d":[[13,12,"t"]],"x":14,"t":1305084265.03551},{"y":14,"x":15,"t":1305084265.1236},{"y":14,"d":[[13,14,"c"]],"x":16,"t":1305084265.28347},{"y":14,"d":[[13,15,"o"]],"x":17,"t":1305084265.35567},{"y":14,"d":[[13,16,"n"]],"x":18,"t":1305084265.47535},{"y":14,"d":[[13,17,"f"]],"x":19,"t":1305084265.49978},{"y":14,"d":[[13,18,"i"]],"x":20,"t":1305084265.6036},{"y":14,"d":[[13,19,"g"]],"x":21,"t":1305084265.7156},{"y":14,"x":22,"t":1305084265.81949},{"y":14,"d":[[13,21,"c"]],"x":23,"t":1305084266.41206},{"y":14,"d":[[13,22,"o"]],"x":24,"t":1305084266.50761},{"y":14,"d":[[13,23,"r"]],"x":25,"t":1305084266.59549},{"y":14,"d":[[13,24,"e"]],"x":26,"t":1305084266.73145},{"y":14,"d":[[13,25,"."]],"x":27,"t":1305084266.96333},{"y":14,"d":[[13,26,"b"]],"x":28,"t":1305084267.55545},{"y":14,"d":[[13,27,"a"]],"x":29,"t":1305084267.70742},{"y":14,"d":[[13,28,"r"]],"x":30,"t":1305084267.81937},{"y":14,"d":[[13,29,"e"]],"x":31,"t":1305084267.94723},{"y":15,"x":1,"t":1305084268.14728},{"y":16,"d":[[14,0,4,"false"],[15,0,8,"bash-3.2$"]],"x":11,"t":1305084268.15424},{"y":16,"d":[[15,10,"g"]],"x":12,"t":1305084268.81131},{"y":16,"d":[[15,11,"i"]],"x":13,"t":1305084268.8913},{"y":16,"d":[[15,12,"t"]],"x":14,"t":1305084268.9793},{"y":16,"x":15,"t":1305084269.11527},{"y":16,"d":[[15,14,"c"]],"x":16,"t":1305084269.29927},{"y":16,"d":[[15,15,"o"]],"x":17,"t":1305084269.41148},{"y":16,"d":[[15,16,"f"]],"x":18,"t":1305084269.55531},{"y":16,"d":[[15,17,"n"]],"x":19,"t":1305084269.61154},{"y":16,"d":[[15,18,"i"]],"x":20,"t":1305084269.75514},{"y":16,"d":[[15,19,"g"]],"x":21,"t":1305084269.90737},{"y":16,"d":[[15,19," "]],"x":20,"t":1305084270.33127},{"y":16,"d":[[15,18," "]],"x":19,"t":1305084270.48323},{"y":16,"d":[[15,17," "]],"x":18,"t":1305084270.64325},{"y":16,"d":[[15,16," "]],"x":17,"t":1305084270.81112},{"y":16,"d":[[15,16,"n"]],"x":18,"t":1305084271.01127},{"y":16,"d":[[15,17,"f"]],"x":19,"t":1305084271.23512},{"y":16,"d":[[15,18,"i"]],"x":20,"t":1305084271.32331},{"y":16,"d":[[15,19,"g"]],"x":21,"t":1305084271.4353},{"y":16,"x":22,"t":1305084271.58713},{"y":16,"d":[[15,21,"c"]],"x":23,"t":1305084271.94695},{"y":16,"d":[[15,22,"o"]],"x":24,"t":1305084272.01942},{"y":16,"d":[[15,23,"r"]],"x":25,"t":1305084272.12304},{"y":16,"d":[[15,24,"e"]],"x":26,"t":1305084272.25938},{"y":16,"d":[[15,25,"."]],"x":27,"t":1305084272.51668},{"y":16,"d":[[15,26,"f"]],"x":28,"t":1305084272.79626},{"y":16,"d":[[15,27,"i"]],"x":29,"t":1305084272.85945},{"y":16,"d":[[15,28,"l"]],"x":30,"t":1305084272.96305},{"y":16,"d":[[15,29,"e"]],"x":31,"t":1305084273.04332},{"y":16,"d":[[15,30,"m"]],"x":32,"t":1305084273.27507},{"y":16,"d":[[15,31,"o"]],"x":33,"t":1305084273.41102},{"y":16,"d":[[15,32,"d"]],"x":34,"t":1305084273.54699},{"y":16,"d":[[15,33,"e"]],"x":35,"t":1305084273.69896},{"y":17,"x":1,"t":1305084273.85092},{"y":18,"d":[[16,0,3,"true"],[17,0,8,"bash-3.2$"]],"x":11,"t":1305084273.85761},{"y":18,"d":[[17,10,"g"]],"x":12,"t":1305084276.05926},{"y":18,"d":[[17,11,"i"]],"x":13,"t":1305084276.12313},{"y":18,"d":[[17,12,"t"]],"x":14,"t":1305084276.23486},{"y":18,"x":15,"t":1305084276.30699},{"y":18,"d":[[17,14,"c"]],"x":16,"t":1305084276.46687},{"y":18,"d":[[17,15,"o"]],"x":17,"t":1305084276.53906},{"y":18,"d":[[17,16,"n"]],"x":18,"t":1305084276.66697},{"y":18,"d":[[17,17,"f"]],"x":19,"t":1305084276.69087},{"y":18,"d":[[17,18,"i"]],"x":20,"t":1305084276.9468},{"y":18,"d":[[17,19,"g"]],"x":21,"t":1305084277.91484},{"d":[["a"," "],"d","d","d",["r","bash-3.2$ git config --system -e "],["r","bash-3.2$ git config --global -e "],["r","bash-3.2$ cat .git/config "],["r","[core] "],["r"," repositoryformatversion = 0 "],["r"," filemode = true "],["r"," bare = false "],["r"," logallrefupdates = true "],["r"," ignorecase = true "],["r","bash-3.2$ git config core.bare "],["r","false "],["r","bash-3.2$ git config core.filemode "],["r","true "],["r","bash-3.2$ git config "],["a"," "],"d","d","d","d","d","d"],"x":22,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":18,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305084278.08292,"i":1},{"y":18,"d":[[17,21,"a"]],"x":23,"t":1305084278.37097},{"y":18,"d":[[17,22,"."]],"x":24,"t":1305084279.40288},{"y":18,"d":[[17,23,"b"]],"x":25,"t":1305084279.51455},{"y":18,"x":26,"t":1305084279.72265},{"y":18,"d":[[17,25,"s"]],"x":27,"t":1305084279.92284},{"y":18,"d":[[17,26,"o"]],"x":28,"t":1305084280.02668},{"y":18,"d":[[17,27,"m"]],"x":29,"t":1305084280.17888},{"y":18,"d":[[17,28,"e"]],"x":30,"t":1305084280.29089},{"y":18,"d":[[17,29,"t"]],"x":31,"t":1305084280.46655},{"y":18,"d":[[17,30,"h"]],"x":32,"t":1305084280.54706},{"y":18,"d":[[17,31,"i"]],"x":33,"t":1305084280.68288},{"y":18,"d":[[17,32,"n"]],"x":34,"t":1305084280.81062},{"y":18,"d":[[17,33,"g"]],"x":35,"t":1305084280.94652},{"y":19,"x":1,"t":1305084281.0506},{"y":19,"d":[[18,0,8,"bash-3.2$"]],"x":11,"t":1305084281.05728},{"y":19,"d":[[18,10,"g"]],"x":12,"t":1305084282.27461},{"y":19,"d":[[18,11,"i"]],"x":13,"t":1305084282.33067},{"y":19,"d":[[18,12,"t"]],"x":14,"t":1305084282.44248},{"y":19,"x":15,"t":1305084282.53152},{"y":19,"d":[[18,14,"c"]],"x":16,"t":1305084282.69858},{"y":19,"d":[[18,15,"o"]],"x":17,"t":1305084282.75452},{"y":19,"d":[[18,16,"n"]],"x":18,"t":1305084282.8908},{"y":19,"d":[[18,17,"f"]],"x":19,"t":1305084282.90654},{"y":19,"d":[[18,18,"i"]],"x":20,"t":1305084283.03442},{"y":19,"d":[[18,19,"g"]],"x":21,"t":1305084283.13831},{"y":19,"x":22,"t":1305084283.26648},{"y":19,"d":[[18,21,"x"]],"x":23,"t":1305084284.31438},{"y":19,"d":[[18,22,"y"]],"x":24,"t":1305084284.47433},{"y":19,"d":[[18,23,"."]],"x":25,"t":1305084284.74648},{"y":19,"d":[[18,23," "]],"x":24,"t":1305084285.1784},{"y":19,"d":[[18,22," "]],"x":23,"t":1305084285.31435},{"y":19,"d":[[18,22,"."]],"x":24,"t":1305084285.50622},{"y":19,"d":[[18,23,"y"]],"x":25,"t":1305084285.7383},{"y":19,"d":[[18,24,"."]],"x":26,"t":1305084285.98635},{"y":19,"d":[[18,25,"z"]],"x":27,"t":1305084286.16251},{"y":19,"x":28,"t":1305084286.56257},{"y":19,"d":[[18,27,"o"]],"x":29,"t":1305084287.00243},{"y":19,"d":[[18,28,"t"]],"x":30,"t":1305084287.11446},{"y":19,"d":[[18,29,"h"]],"x":31,"t":1305084287.19425},{"y":19,"d":[[18,30,"e"]],"x":32,"t":1305084287.28241},{"y":19,"d":[[18,31,"r"]],"x":33,"t":1305084287.34623},{"y":19,"d":[[18,32,"s"]],"x":34,"t":1305084287.49824},{"y":20,"x":1,"t":1305084287.60279},{"y":20,"d":[[19,0,8,"bash-3.2$"]],"x":11,"t":1305084287.62125},{"y":20,"d":[[19,10,"g"]],"x":12,"t":1305084289.61012},{"y":20,"d":[[19,11,"i"]],"x":13,"t":1305084289.70614},{"y":20,"d":[[19,12,"t"]],"x":14,"t":1305084289.79427},{"y":20,"x":15,"t":1305084289.86615},{"y":20,"d":[[19,14,"c"]],"x":16,"t":1305084290.01032},{"y":20,"d":[[19,15,"o"]],"x":17,"t":1305084290.06631},{"y":20,"d":[[19,16,"n"]],"x":18,"t":1305084290.18623},{"y":20,"d":[[19,17,"f"]],"x":19,"t":1305084290.20209},{"y":20,"d":[[19,18,"i"]],"x":20,"t":1305084290.3061},{"y":20,"d":[[19,19,"g"]],"x":21,"t":1305084290.4022},{"y":20,"x":22,"t":1305084290.48228},{"y":20,"d":[[19,21,"-"]],"x":23,"t":1305084290.59399},{"y":20,"d":[[19,22,"l"]],"x":24,"t":1305084290.82624},{"y":21,"x":1,"t":1305084291.03419},{"y":25,"d":[["cp",10,0],["cp",11,1],["cp",12,2],["cp",13,3],["cp",14,4],["cp",15,5],["cp",16,6],["cp",17,7],["cp",18,8],["cp",19,9],[10,0,19,"alias.st=status "],[11,0,30,"alias.ci=commit "],[12,0,24,"alias.co=checkout "],[13,0,29,"alias.br=branch "],[14,0,18,"user.name=Jiang Xin"],[15,0,33,"user.email=jiangxin@ossxp.com "],[16,0,12,"color.ui=true"],[17,0,33,"core.repositoryformatversion=0 "],[18,0,32,"core.filemode=true "],[19,0,22,"core.bare=false "],[20,0,25,"core.logallrefupdates=true"],[21,0,19,"core.ignorecase=true"],[22,0,12,"a.b=something"],[23,0,11,"x.y.z=others"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305084291.04018},{"y":25,"d":[[24,10,"c"]],"x":12,"t":1305084291.53806},{"y":25,"d":[[24,11,"a"]],"x":13,"t":1305084291.66606},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305084291.70631},{"y":25,"x":15,"t":1305084291.80197},{"y":25,"d":[[24,14,"."]],"x":16,"t":1305084292.43414},{"y":25,"d":[[24,15,"g"]],"x":17,"t":1305084292.56209},{"y":25,"d":[[24,16,"i"]],"x":18,"t":1305084292.62624},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305084292.74613},{"y":25,"d":[[24,18,"/"]],"x":20,"t":1305084292.97846},{"y":25,"d":[[24,19,"c"]],"x":21,"t":1305084293.44234},{"y":25,"d":[[24,20,"o"]],"x":22,"t":1305084293.53031},{"y":25,"d":[[24,21,"n"]],"x":23,"t":1305084293.63422},{"y":25,"d":[[24,22,"f"]],"x":24,"t":1305084293.66575},{"y":25,"d":[[24,23,"i"]],"x":25,"t":1305084293.80983},{"y":25,"d":[[24,24,"g"]],"x":27,"t":1305084293.89048},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305084294.30566},{"y":25,"d":[["cp",10,0],["cp",11,1],["cp",12,2],["cp",13,3],["cp",14,4],["cp",15,5],["cp",16,6],["cp",17,7],["cp",18,8],["cp",19,9],["cp",20,10],["cp",21,11],["cp",22,12],["cp",23,13],[14,0,28,"[core] "],[15,0,34," repositoryformatversion = 0"],[16,0,29," filemode = true "],[17,0,19," bare = false"],[18,0,30," logallrefupdates = true"],[19,0,25," ignorecase = true "],[20,0,19,"[a] "],[21,0,20," b = something"],[22,0,11,"[x \"y\"] "],[23,0,24," z = others "],[24,0,8,"bash-3.2$"]],"x":11,"t":1305084294.30963},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305084295.28969},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305084295.35408},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305084295.46611},{"y":25,"x":15,"t":1305084295.55363},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305084295.70572},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305084295.76201},{"y":25,"d":[[24,16,"n"]],"x":18,"t":1305084295.88187},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305084295.91378},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305084296.03377},{"y":25,"d":[[24,19,"g"]],"x":21,"t":1305084296.12198},{"y":25,"x":22,"t":1305084296.20979},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305084296.34652},{"y":25,"d":[[24,22,"-"]],"x":24,"t":1305084296.49792},{"y":25,"d":[[24,23,"u"]],"x":25,"t":1305084296.68976},{"y":25,"d":[[24,24,"n"]],"x":26,"t":1305084296.87374},{"y":25,"d":[[24,25,"s"]],"x":27,"t":1305084297.00975},{"y":25,"d":[[24,26,"e"]],"x":28,"t":1305084297.16168},{"y":25,"d":[[24,27,"t"]],"x":29,"t":1305084297.32984},{"y":25,"x":30,"t":1305084297.47386},{"y":25,"d":[[24,29,"a"]],"x":31,"t":1305084297.9777},{"y":25,"d":[[24,30,"."]],"x":32,"t":1305084298.10701},{"y":25,"d":[[24,31,"b"]],"x":33,"t":1305084298.25762},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305084298.84173},{"d":[["r","alias.co=checkout "],["r","alias.br=branch "],["r","user.name=Jiang Xin "],["r","user.email=jiangxin@ossxp.com "],["r","color.ui=true "],["r","core.repositoryformatversion=0 "],["r","core.filemode=true "],["r","core.bare=false "],["r","core.logallrefupdates=true "],["r","core.ignorecase=true "],["r","a.b=something "],["r","x.y.z=others "],["r","bash-3.2$ cat .git/config "],["r","[core] "],["r"," repositoryformatversion = 0 "],["r"," filemode = true "],["r"," bare = false "],["r"," logallrefupdates = true "],["r"," ignorecase = true "],["r","[a] "],["r"," b = something "],["r","[x \"y\"] "],["r"," z = others "],["r","bash-3.2$ git config --unset a.b "],["r","bash-3.2$ "]],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305084298.8491,"i":1},{"y":25,"d":[["cp",23,24]],"x":33,"t":1305084299.35362},{"y":25,"d":[[24,31," "]],"x":32,"t":1305084299.62561},{"y":25,"d":[[24,30," "]],"x":31,"t":1305084299.80158},{"y":25,"d":[[24,29," "]],"x":30,"t":1305084299.96969},{"y":25,"d":[[24,29,"x"]],"x":31,"t":1305084300.18538},{"y":25,"d":[[24,30,"."]],"x":32,"t":1305084300.46552},{"y":25,"d":[[24,31,"y"]],"x":33,"t":1305084300.75338},{"y":25,"d":[[24,32,"."]],"x":34,"t":1305084301.20144},{"y":25,"d":[[24,33,"z"]],"x":35,"t":1305084301.33765},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305084301.53773},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305084301.54837},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305084302.05766},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305084302.13756},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305084302.25759},{"y":25,"x":15,"t":1305084302.29761},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305084302.63363},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305084302.72144},{"y":25,"d":[[24,16,"n"]],"x":18,"t":1305084302.84141},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305084302.85066},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305084303.00142},{"y":25,"d":[[24,19,"g"]],"x":21,"t":1305084303.05778},{"y":25,"x":22,"t":1305084303.14542},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305084303.2575},{"y":25,"d":[[24,22,"-"]],"x":24,"t":1305084303.42552},{"y":25,"d":[[24,23,"r"]],"x":25,"t":1305084303.52306},{"y":25,"d":[[24,24,"e"]],"x":26,"t":1305084303.64936},{"y":25,"d":[[24,25,"n"]],"x":27,"t":1305084303.71337},{"y":25,"d":[[24,26,"m"]],"x":28,"t":1305084303.72152},{"y":25,"d":[[24,27,"o"]],"x":29,"t":1305084303.8492},{"y":25,"d":[[24,27," "]],"x":28,"t":1305084304.28132},{"y":25,"d":[[24,26," "]],"x":27,"t":1305084304.44142},{"y":25,"d":[[24,25," "]],"x":26,"t":1305084304.60131},{"y":25,"d":[[24,25,"m"]],"x":27,"t":1305084304.80947},{"y":25,"d":[[24,26,"o"]],"x":28,"t":1305084304.92134},{"y":25,"d":[[24,27,"v"]],"x":29,"t":1305084305.00136},{"y":25,"d":[[24,28,"e"]],"x":30,"t":1305084305.11317},{"y":25,"d":[[24,29,"-"]],"x":31,"t":1305084305.48123},{"y":25,"d":[[24,30,"s"]],"x":32,"t":1305084305.72909},{"y":25,"d":[[24,31,"e"]],"x":33,"t":1305084305.92115},{"y":25,"d":[[24,32,"c"]],"x":34,"t":1305084306.11334},{"y":25,"d":[[24,33,"t"]],"x":35,"t":1305084306.28936},{"y":25,"d":[[24,34,"i"]],"x":36,"t":1305084306.33753},{"y":25,"d":[[24,35,"o"]],"x":37,"t":1305084306.44936},{"y":25,"d":[[24,36,"n"]],"x":39,"t":1305084306.60885},{"y":25,"d":[[24,38,"a"]],"x":40,"t":1305084307.7611},{"y":25,"d":[[24,39,"."]],"x":41,"t":1305084308.12901},{"y":25,"d":[[24,40,"b"]],"x":42,"t":1305084308.23308},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305084308.38502},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,40,"fatal: No such section! "],[24,0,8,"bash-3.2$"]],"x":11,"t":1305084308.39346},{"y":25,"d":[["cp",22,24]],"x":42,"t":1305084310.58502},{"y":25,"d":[[24,40," "]],"x":41,"t":1305084310.91288},{"y":25,"d":[[24,39," "]],"x":40,"t":1305084311.1049},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305084311.3448},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305084311.35192},{"y":25,"d":[["cp",23,24]],"x":40,"t":1305084312.25689},{"y":25,"d":[[24,38," "]],"x":39,"t":1305084312.53675},{"y":25,"d":[[24,38,"x"]],"x":40,"t":1305084313.27291},{"y":25,"d":[[24,39,"."]],"x":41,"t":1305084313.5609},{"y":25,"d":[[24,40,"y"]],"x":42,"t":1305084313.79271},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305084314.02472},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305084314.03428},{"y":25,"d":[[24,10,"G"]],"x":12,"t":1305084322.1924},{"y":25,"d":[[24,11,"I"]],"x":13,"t":1305084322.29666},{"y":25,"d":[[24,12,"T"]],"x":14,"t":1305084322.37634},{"y":25,"d":[[24,13,"_"]],"x":15,"t":1305084322.65652},{"y":25,"d":[[24,14,"C"]],"x":16,"t":1305084322.85634},{"y":25,"d":[[24,15,"N"]],"x":17,"t":1305084323.28039},{"y":25,"d":[[24,15," "]],"x":16,"t":1305084323.64044},{"y":25,"d":[[24,15,"O"]],"x":17,"t":1305084323.84841},{"y":25,"d":[[24,16,"N"]],"x":18,"t":1305084324.00819},{"y":25,"d":[[24,17,"F"]],"x":19,"t":1305084324.55225},{"y":25,"d":[[24,18,"I"]],"x":20,"t":1305084324.67218},{"y":25,"d":[[24,19,"G"]],"x":21,"t":1305084324.7924},{"y":25,"d":[[24,20,"="]],"x":22,"t":1305084325.76024},{"y":25,"d":[[24,21,"t"]],"x":23,"t":1305084326.01706},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305084326.17784},{"y":25,"d":[[24,23,"s"]],"x":25,"t":1305084326.28815},{"y":25,"d":[[24,24,"t"]],"x":26,"t":1305084326.40835},{"y":25,"d":[[24,25,"."]],"x":27,"t":1305084326.56828},{"y":25,"d":[[24,26,"i"]],"x":28,"t":1305084326.7285},{"y":25,"d":[[24,27,"n"]],"x":29,"t":1305084327.19199},{"y":25,"d":[[24,28,"i"]],"x":30,"t":1305084327.53596},{"y":25,"x":31,"t":1305084327.96012},{"y":25,"d":[[24,30,"g"]],"x":32,"t":1305084328.56011},{"y":25,"d":[[24,31,"i"]],"x":33,"t":1305084328.63227},{"y":25,"d":[[24,32,"t"]],"x":34,"t":1305084328.75242},{"y":25,"x":35,"t":1305084328.84829},{"y":25,"d":[[24,34,"c"]],"x":36,"t":1305084328.99993},{"y":25,"d":[[24,35,"o"]],"x":37,"t":1305084329.03991},{"y":25,"d":[[24,36,"n"]],"x":38,"t":1305084329.17588},{"y":25,"d":[[24,37,"f"]],"x":39,"t":1305084329.20046},{"y":25,"d":[[24,38,"i"]],"x":40,"t":1305084329.32012},{"y":25,"d":[[24,39,"g"]],"x":41,"t":1305084329.40805},{"y":25,"x":42,"t":1305084329.51203},{"y":25,"d":[[24,41,"a"]],"x":43,"t":1305084329.98429},{"y":25,"d":[[24,42,"."]],"x":44,"t":1305084330.1597},{"y":25,"d":[[24,43,"b"]],"x":45,"t":1305084330.27989},{"y":25,"d":[[24,44,"."]],"x":46,"t":1305084330.40782},{"y":25,"d":[[24,45,"c"]],"x":47,"t":1305084330.54447},{"d":[["r","core.repositoryformatversion=0 "],["r","core.filemode=true "],["r","core.bare=false "],["r","core.logallrefupdates=true "],["r","core.ignorecase=true "],["r","a.b=something "],["r","x.y.z=others "],["r","bash-3.2$ cat .git/config "],["r","[core] "],["r"," repositoryformatversion = 0 "],["r"," filemode = true "],["r"," bare = false "],["r"," logallrefupdates = true "],["r"," ignorecase = true "],["r","[a] "],["r"," b = something "],["r","[x \"y\"] "],["r"," z = others "],["r","bash-3.2$ git config --unset a.b "],["r","bash-3.2$ git config --unset x.y.z "],["r","bash-3.2$ git config --remove-section a.b "],["r","fatal: No such section! "],["r","bash-3.2$ git config --remove-section a "],["r","bash-3.2$ git config --remove-section x.y "],["r","bash-3.2$ GIT_CONFIG=test.ini git config a.b.c. "]],"x":48,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305084330.65589,"i":1},{"y":25,"d":[[24,47,"d"]],"x":49,"t":1305084330.83207},{"y":25,"x":50,"t":1305084331.28017},{"y":25,"d":[[24,49,"\""]],"x":51,"t":1305084331.66418},{"y":25,"d":[[24,50,"h"]],"x":52,"t":1305084332.08831},{"y":25,"d":[[24,51,"e"]],"x":53,"t":1305084332.16777},{"y":25,"d":[[24,52,"l"]],"x":54,"t":1305084332.27195},{"y":25,"d":[[24,53,"l"]],"x":55,"t":1305084332.43979},{"y":25,"d":[[24,54,"o"]],"x":56,"t":1305084332.60823},{"y":25,"d":[[24,55,","]],"x":57,"t":1305084332.78381},{"y":25,"d":[[24,56,"w"]],"x":58,"t":1305084333.3276},{"y":25,"d":[[24,56," "]],"x":57,"t":1305084333.75986},{"y":25,"x":58,"t":1305084333.87185},{"y":25,"d":[[24,57,"w"]],"x":59,"t":1305084334.06374},{"y":25,"d":[[24,58,"o"]],"x":60,"t":1305084334.19165},{"y":25,"d":[[24,59,"r"]],"x":61,"t":1305084334.27988},{"y":25,"d":[[24,60,"l"]],"x":62,"t":1305084334.37557},{"y":25,"d":[[24,61,"d"]],"x":63,"t":1305084334.51285},{"y":25,"d":[[24,62,"."]],"x":64,"t":1305084334.64795},{"y":25,"d":[[24,63,"\""]],"x":65,"t":1305084335.07165},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305084335.26352},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305084335.27102},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305084336.89572},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305084336.97581},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305084337.07164},{"y":25,"x":15,"t":1305084337.15181},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305084337.30377},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305084337.37582},{"y":25,"d":[[24,16,"n"]],"x":18,"t":1305084337.51151},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305084337.52013},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305084337.6558},{"y":25,"d":[[24,19,"g"]],"x":21,"t":1305084337.75177},{"y":25,"x":22,"t":1305084337.84746},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305084337.93544},{"y":25,"d":[[24,22,"f"]],"x":24,"t":1305084338.05554},{"y":25,"x":25,"t":1305084338.18341},{"y":25,"d":[[24,24,"t"]],"x":26,"t":1305084338.99955},{"y":25,"d":[[24,25,"e"]],"x":27,"t":1305084339.15945},{"y":25,"d":[[24,26,31,"st.ini"]],"x":33,"t":1305084339.44061},{"y":25,"x":34,"t":1305084340.44733},{"y":25,"d":[[24,33,"a"]],"x":35,"t":1305084340.70332},{"y":25,"d":[[24,34,"."]],"x":36,"t":1305084340.85548},{"y":25,"d":[[24,35,"b"]],"x":37,"t":1305084340.95131},{"y":25,"d":[[24,36,"."]],"x":38,"t":1305084341.05553},{"y":25,"d":[[24,37,"c"]],"x":39,"t":1305084341.19118},{"y":25,"d":[[24,38,"."]],"x":40,"t":1305084341.27953},{"y":25,"d":[[24,39,"d"]],"x":41,"t":1305084341.51136},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305084341.67126},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,39,"hello, world. "],[24,0,8,"bash-3.2$"]],"x":11,"t":1305084341.67856},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305084342.85536},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305084342.9673},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305084343.07923},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,22,"test.ini welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305084343.08366},{"y":25,"d":[[24,10,"c"]],"x":12,"t":1305084343.55128},{"y":25,"d":[[24,11,"a"]],"x":13,"t":1305084343.67135},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305084343.75118},{"y":25,"x":15,"t":1305084343.81539},{"y":25,"d":[[24,14,"t"]],"x":16,"t":1305084343.98316},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305084344.15926},{"y":25,"d":[[24,16,21,"st.ini"]],"x":24,"t":1305084344.39943},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305084344.82342},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,22,"[a \"b.c\"] "],[23,0,24," d = hello, world."],[24,0,8,"bash-3.2$"]],"x":11,"t":1305084344.82928},{"y":25,"d":[[24,10,"r"]],"x":12,"t":1305084345.35911},{"y":25,"d":[[24,11,"m"]],"x":13,"t":1305084345.47905},{"y":25,"x":14,"t":1305084345.59128},{"y":25,"d":[[24,13,"t"]],"x":15,"t":1305084345.79923},{"y":25,"d":[[24,14,"e"]],"x":16,"t":1305084345.94291},{"y":25,"d":[[24,15,20,"st.ini"]],"x":23,"t":1305084346.18433},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305084347.15894},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305084347.16492},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,10,20,"exit "],[24,["a"," "]]],"x":1,"t":1305084349.11128}]} \ No newline at end of file diff --git a/html/part2/ch04-03-who-does-commit.html b/html/part2/ch04-03-who-does-commit.html new file mode 100644 index 000000000..4f18bc90b --- /dev/null +++ b/html/part2/ch04-03-who-does-commit.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch04-03-who-does-commit +json_file: ch04-03-who-does-commit.json +--- diff --git a/html/part2/ch04-03-who-does-commit.json b/html/part2/ch04-03-who-does-commit.json new file mode 100644 index 000000000..eef2d8006 --- /dev/null +++ b/html/part2/ch04-03-who-does-commit.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305084692.5636,"i":1},{"y":1,"d":[[0,10,"c"]],"x":12,"t":1305084693.78828},{"y":1,"d":[[0,11,"d"]],"x":13,"t":1305084693.98006},{"y":1,"x":14,"t":1305084694.08417},{"y":1,"d":[[0,13,"/"]],"x":15,"t":1305084694.23601},{"y":1,"d":[[0,14,"p"]],"x":16,"t":1305084694.51605},{"y":1,"d":[[0,15,"a"]],"x":17,"t":1305084694.55595},{"y":1,"d":[[0,16,"t"]],"x":18,"t":1305084694.67594},{"y":1,"d":[[0,17,"h"]],"x":19,"t":1305084694.75623},{"y":1,"d":[[0,18,"/"]],"x":20,"t":1305084694.89138},{"y":1,"d":[[0,19,"t"]],"x":21,"t":1305084695.33209},{"y":1,"d":[[0,20,"o"]],"x":22,"t":1305084695.4279},{"y":1,"d":[[0,21,"/"]],"x":23,"t":1305084695.57827},{"y":1,"d":[[0,22,"m"]],"x":24,"t":1305084695.804},{"y":1,"d":[[0,23,"y"]],"x":25,"t":1305084695.99611},{"y":1,"d":[[0,24,"/"]],"x":26,"t":1305084696.09805},{"y":1,"d":[[0,25,"w"]],"x":27,"t":1305084696.57201},{"y":1,"d":[[0,26,"o"]],"x":28,"t":1305084696.65208},{"y":1,"d":[[0,27,33,"rkspace"]],"x":35,"t":1305084696.78623},{"y":1,"d":[[0,34,"/"]],"x":36,"t":1305084697.46789},{"y":1,"d":[[0,35,"d"]],"x":37,"t":1305084697.55574},{"y":1,"d":[[0,36,"e"]],"x":38,"t":1305084697.71598},{"y":1,"d":[[0,37,"m"]],"x":39,"t":1305084697.81975},{"y":1,"d":[[0,38,39,"o/"]],"x":41,"t":1305084697.97141},{"y":2,"x":1,"t":1305084698.45209},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305084698.45236},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305084699.22775},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305084699.30764},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305084699.38796},{"y":2,"x":15,"t":1305084699.4679},{"y":2,"d":[[1,14,"l"]],"x":16,"t":1305084699.54762},{"y":2,"d":[[1,15,"o"]],"x":17,"t":1305084699.72515},{"y":2,"d":[[1,16,"g"]],"x":18,"t":1305084699.84369},{"y":3,"x":1,"t":1305084700.47691},{"y":8,"d":[[2,0,46,"commit 38690158d57ea02061e42ab88101ed3517a4292f"],[3,0,37,"Author: Jiang Xin "],[4,0,37,"Date: Wed May 11 11:03:28 2011 +0800"],[6,4,14,"intialized."],[7,0,8,"bash-3.2$"]],"x":11,"f":[[2,0,46,["a","3"]]],"t":1305084700.49141},{"y":8,"d":[[7,10,"g"]],"x":12,"t":1305084701.404},{"y":8,"d":[[7,11,"i"]],"x":13,"t":1305084701.6997},{"y":8,"d":[[7,12,"t"]],"x":14,"t":1305084701.80363},{"y":8,"x":15,"t":1305084701.92365},{"y":8,"d":[[7,14,"l"]],"x":16,"t":1305084702.07558},{"y":8,"d":[[7,15,"o"]],"x":17,"t":1305084702.24361},{"y":8,"d":[["cp",1,7]],"x":18,"t":1305084702.33172},{"y":8,"x":19,"t":1305084702.41164},{"y":8,"d":[[7,18,"-"]],"x":20,"t":1305084702.55554},{"y":8,"d":[[7,19,"-"]],"x":21,"t":1305084702.7078},{"y":8,"d":[[7,20,"p"]],"x":22,"t":1305084702.92351},{"y":8,"d":[[7,21,"r"]],"x":23,"t":1305084703.31576},{"y":8,"d":[[7,22,"e"]],"x":24,"t":1305084703.47565},{"y":8,"d":[[7,23,26,"tty="]],"x":28,"t":1305084703.71846},{"y":8,"d":[[7,27,"f"]],"x":29,"t":1305084704.41136},{"y":8,"d":[[7,28,"u"]],"x":30,"t":1305084704.59533},{"y":8,"d":[[7,29,"l"]],"x":31,"t":1305084704.75551},{"y":8,"d":[[7,30,"l"]],"x":32,"t":1305084704.90749},{"y":8,"d":[[7,31,"e"]],"x":33,"t":1305084704.9877},{"y":8,"d":[[7,32,"r"]],"x":34,"t":1305084705.07553},{"y":8,"x":35,"t":1305084705.27496},{"y":9,"x":1,"t":1305084705.69683},{"y":16,"d":[["cp",2,8],[9,0,6,"Author:"],[9,12,41,"Jiang Xin "],[10,0,41,"AuthorDate: Wed May 11 11:03:28 2011 +0800"],[11,0,6,"Commit:"],[11,12,41,"Jiang Xin "],[12,0,41,"CommitDate: Wed May 11 11:03:28 2011 +0800"],["cp",6,14],[15,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,8]],"t":1305084705.70602},{"y":16,"d":[[15,10,"g"]],"x":12,"t":1305084707.93158},{"y":16,"d":[[15,11,"i"]],"x":13,"t":1305084708.01146},{"y":16,"d":[[15,12,"t"]],"x":14,"t":1305084708.09941},{"y":16,"x":15,"t":1305084708.18805},{"y":16,"d":[[15,14,"c"]],"x":16,"t":1305084708.47529},{"y":16,"d":[[15,15,"o"]],"x":17,"t":1305084708.55538},{"y":16,"d":[[15,16,"n"]],"x":18,"t":1305084708.66743},{"y":16,"d":[[15,17,"f"]],"x":19,"t":1305084708.72339},{"y":16,"d":[[15,18,"i"]],"x":20,"t":1305084708.85124},{"y":16,"d":[[15,19,"g"]],"x":21,"t":1305084708.92322},{"y":16,"x":22,"t":1305084709.03527},{"y":16,"d":[[15,21,"-"]],"x":23,"t":1305084709.14715},{"y":16,"d":[[15,22,"-"]],"x":24,"t":1305084709.31537},{"y":16,"d":[[15,23,"u"]],"x":25,"t":1305084709.51518},{"y":16,"d":[[15,24,"n"]],"x":26,"t":1305084709.69126},{"y":16,"d":[[15,25,"s"]],"x":27,"t":1305084709.82003},{"y":16,"d":[[15,26,"e"]],"x":28,"t":1305084709.94709},{"y":16,"d":[[15,27,"t"]],"x":29,"t":1305084710.10727},{"y":16,"x":30,"t":1305084710.26702},{"y":16,"d":[[15,29,"-"]],"x":31,"t":1305084710.81924},{"y":16,"d":[[15,30,"-"]],"x":32,"t":1305084711.04328},{"y":16,"d":[[15,31,"g"]],"x":33,"t":1305084711.29132},{"y":16,"d":[[15,32,"l"]],"x":34,"t":1305084711.37907},{"y":16,"d":[[15,33,"o"]],"x":35,"t":1305084711.56301},{"y":16,"d":[[15,34,"b"]],"x":36,"t":1305084711.65922},{"y":16,"d":[[15,35,"a"]],"x":37,"t":1305084711.79674},{"y":16,"d":[[15,36,"l"]],"x":38,"t":1305084711.87506},{"y":16,"x":39,"t":1305084712.0032},{"y":16,"d":[[15,38,"u"]],"x":40,"t":1305084712.16323},{"y":16,"d":[[15,39,"s"]],"x":41,"t":1305084712.2191},{"y":16,"d":[[15,40,"e"]],"x":42,"t":1305084712.29916},{"y":16,"d":[[15,41,"r"]],"x":43,"t":1305084712.33902},{"y":16,"d":[[15,42,"."]],"x":44,"t":1305084712.61899},{"y":16,"d":[[15,43,"n"]],"x":45,"t":1305084712.86727},{"y":16,"d":[[15,44,"a"]],"x":46,"t":1305084712.94691},{"y":16,"d":[[15,45,"m"]],"x":47,"t":1305084713.07528},{"y":16,"d":[[15,46,"e"]],"x":48,"t":1305084713.14692},{"y":17,"x":1,"t":1305084713.33105},{"y":17,"d":[[16,0,8,"bash-3.2$"]],"x":11,"t":1305084713.34087},{"y":17,"d":[["cp",15,16]],"x":11,"t":1305084714.14686},{"y":17,"x":15,"t":1305084714.44295},{"y":17,"x":22,"t":1305084714.94315},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/demo/ "],["r","bash-3.2$ git log "],["r","commit 38690158d57ea02061e42ab88101ed3517a4292f "],["r","Author: Jiang Xin "],["r","Date: Wed May 11 11:03:28 2011 +0800 "],["a"," "],["r"," intialized. "],["r","bash-3.2$ git log --pretty=fuller "],["r","commit 38690158d57ea02061e42ab88101ed3517a4292f "],["r","Author: Jiang Xin "],["r","AuthorDate: Wed May 11 11:03:28 2011 +0800 "],["r","Commit: Jiang Xin "],["r","CommitDate: Wed May 11 11:03:28 2011 +0800 "],["a"," "],["r"," intialized. "],["r","bash-3.2$ git config --unset --global user.name "],"d",["a"," "],"d","d","d","d","d","d","d"],"x":24,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":17,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305084715.02681,"i":1},{"y":17,"x":30,"t":1305084715.11003},{"y":17,"x":32,"t":1305084715.19368},{"y":17,"x":39,"t":1305084715.27691},{"y":17,"x":43,"t":1305084715.64283},{"y":17,"x":44,"t":1305084715.85916},{"y":17,"d":[[16,43,46,["a"," "]]],"x":43,"t":1305084716.36282},{"y":17,"x":44,"t":1305084716.58694},{"y":17,"d":[[16,43,"e"]],"x":45,"t":1305084716.81102},{"y":17,"d":[[16,44,"m"]],"x":46,"t":1305084716.98685},{"y":17,"d":[[16,45,"a"]],"x":47,"t":1305084717.09886},{"y":17,"d":[[16,46,"i"]],"x":48,"t":1305084717.17077},{"y":17,"d":[[16,47,"l"]],"x":49,"t":1305084717.25895},{"y":18,"x":1,"t":1305084717.70679},{"y":18,"d":[[17,0,8,"bash-3.2$"]],"x":11,"t":1305084717.71383},{"y":18,"d":[[17,10,"g"]],"x":12,"t":1305084720.69057},{"y":18,"d":[[17,11,"i"]],"x":13,"t":1305084720.77874},{"y":18,"d":[[17,12,"t"]],"x":14,"t":1305084720.90658},{"y":18,"x":15,"t":1305084720.95473},{"y":18,"d":[[17,14,"c"]],"x":16,"t":1305084721.20249},{"y":18,"d":[[17,15,"o"]],"x":17,"t":1305084721.29867},{"y":18,"d":[[17,16,"m"]],"x":18,"t":1305084721.48266},{"y":18,"d":[[17,17,"m"]],"x":19,"t":1305084721.63442},{"y":18,"d":[[17,18,"i"]],"x":20,"t":1305084721.80251},{"y":18,"d":[[17,19,"t"]],"x":21,"t":1305084721.90651},{"y":18,"x":22,"t":1305084722.04249},{"y":18,"d":[[17,21,"-"]],"x":23,"t":1305084722.57053},{"y":18,"d":[[17,22,"-"]],"x":24,"t":1305084722.74645},{"y":18,"d":[[17,23,"a"]],"x":25,"t":1305084723.67444},{"y":18,"d":[[17,24,"l"]],"x":26,"t":1305084723.7706},{"y":18,"d":[[17,25,"l"]],"x":27,"t":1305084723.93049},{"y":18,"d":[[17,26,"o"]],"x":28,"t":1305084724.08251},{"y":18,"d":[[17,27,"w"]],"x":29,"t":1305084724.13824},{"y":18,"d":[[17,28,"-"]],"x":30,"t":1305084724.33026},{"y":18,"d":[[17,29,"e"]],"x":31,"t":1305084724.54636},{"y":18,"d":[[17,30,"m"]],"x":32,"t":1305084724.65843},{"y":18,"d":[[17,31,"p"]],"x":33,"t":1305084724.88257},{"y":18,"d":[[17,32,"t"]],"x":34,"t":1305084725.04231},{"y":18,"d":[[17,33,"y"]],"x":35,"t":1305084725.12227},{"y":18,"x":36,"t":1305084726.22635},{"y":18,"d":[[17,35,"-"]],"x":37,"t":1305084726.61835},{"y":18,"d":[[17,36,"m"]],"x":38,"t":1305084726.82639},{"y":18,"x":39,"t":1305084726.98632},{"y":18,"d":[[17,38,"\""]],"x":40,"t":1305084727.35419},{"y":18,"d":[[17,39,"w"]],"x":41,"t":1305084727.75467},{"y":18,"d":[[17,40,"h"]],"x":42,"t":1305084727.82617},{"y":18,"d":[[17,41,"o"]],"x":43,"t":1305084727.94625},{"y":18,"x":44,"t":1305084728.45818},{"y":18,"d":[[17,43,"d"]],"x":45,"t":1305084728.63429},{"y":18,"d":[[17,44,"o"]],"x":46,"t":1305084729.07416},{"y":18,"d":[[17,45,"e"]],"x":47,"t":1305084729.21089},{"y":18,"d":[[17,46,"s"]],"x":48,"t":1305084729.36205},{"y":18,"x":49,"t":1305084729.57048},{"y":18,"d":[[17,48,"c"]],"x":50,"t":1305084729.75426},{"y":18,"d":[[17,49,"o"]],"x":51,"t":1305084729.78607},{"y":18,"d":[[17,50,"m"]],"x":52,"t":1305084729.97047},{"y":18,"d":[[17,51,"m"]],"x":53,"t":1305084730.11412},{"y":18,"d":[[17,52,"i"]],"x":54,"t":1305084730.25811},{"y":18,"d":[[17,53,"t"]],"x":55,"t":1305084730.33819},{"y":18,"d":[[17,54,"?"]],"x":56,"t":1305084730.73836},{"y":18,"d":[[17,55,"\""]],"x":57,"t":1305084731.16219},{"y":19,"x":1,"t":1305084731.72975},{"y":19,"d":[[18,0,6,"[master"]],"x":9,"t":1305084731.95677},{"y":25,"d":[["cp",7,0],["cp",2,1],["cp",9,2],["cp",10,3],["cp",11,4],["cp",12,5],["cp",13,6],["cp",14,7],["cp",15,8],["cp",16,9],["cp",17,10],[11,0,41,"[master c615828] who does commit? "],[12,0,48," Committer: Jiang Xin "],[13,0,62,"Your name and email address were configured automatically based"],[14,0,66,"on your username and hostname. Please check that they are accurate."],[15,0,56,"You can suppress this message by setting them explicitly:"],["cp",6,16],[17,0,55," git config --global user.name \"Your Name\" "],[18,0,49," git config --global user.email you@example.com"],[20,0,68,"After doing this, you may fix the identity used for this commit with:"],[22,4,36,"git commit --amend --reset-author"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,1],["cp",0,2],["cp",0,8]],"t":1305084731.95806},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305084736.37332},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305084736.42563},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305084736.54547},{"y":25,"x":15,"t":1305084736.62568},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305084736.80959},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305084736.99356},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305084737.15373},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",5,15],["cp",17,16],["cp",18,17],["cp",5,18],["cp",20,19],["cp",5,20],["cp",22,21],["cp",5,22],["cp",24,23],["cp",5,24]],"x":1,"f":[["cp",1,0],["cp",2,1]],"t":1305084739.11333},{"y":25,"d":[["cp",11,0],["cp",12,1],["cp",13,2],["cp",14,3],["cp",5,4],["cp",16,5],["cp",17,6],["cp",4,7],["cp",19,8],["cp",4,9],["cp",21,10],["cp",4,11],["cp",23,12],[13,0,66,"commit c61582861843af13db902fa7873bcc1b7bd66c28 "],[14,0,56,"Author: Jiang Xin "],[15,0,37,"Date: Wed May 11 11:32:11 2011 +0800"],["cp",4,16],[17,4,49,"who does commit? "],[19,0,68,"commit 38690158d57ea02061e42ab88101ed3517a4292f "],[20,0,37,"Author: Jiang Xin "],[21,0,37,"Date: Wed May 11 11:03:28 2011 +0800"],[23,0,16," intialized. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],[13,0,46,["a","3"]],["cp",13,19]],"t":1305084739.12806},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305084742.46536},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305084742.5613},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305084742.66539},{"y":25,"x":15,"t":1305084742.72961},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305084742.88122},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305084743.06562},{"y":25,"d":[["cp",12,24]],"x":18,"t":1305084743.18546},{"y":25,"x":19,"t":1305084743.28126},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305084744.29752},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305084744.48146},{"y":25,"d":[[24,20,"p"]],"x":22,"t":1305084745.33745},{"y":25,"d":[[24,21,"r"]],"x":23,"t":1305084745.44895},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305084745.58505},{"y":25,"d":[[24,23,26,"tty="]],"x":28,"t":1305084745.96588},{"y":25,"d":[[24,27,"f"]],"x":29,"t":1305084746.79338},{"y":25,"d":[[24,28,"u"]],"x":30,"t":1305084746.95316},{"y":25,"d":[[24,29,"l"]],"x":31,"t":1305084747.10518},{"y":25,"d":[[24,30,"l"]],"x":32,"t":1305084747.31607},{"y":25,"d":[[24,31,"e"]],"x":33,"t":1305084748.16893},{"y":25,"d":[[24,32,"r"]],"x":35,"t":1305084748.43337},{"y":25,"d":[[24,34,"-"]],"x":36,"t":1305084748.96908},{"y":25,"d":[[24,35,"1"]],"x":37,"t":1305084749.53704},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",3,6],["cp",8,7],["cp",3,8],["cp",10,9],["cp",3,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",3,15],["cp",17,16],["cp",3,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",3,21],["cp",23,22],["cp",24,23],["cp",3,24]],"x":1,"f":[["cp",13,12],["cp",0,13],["cp",12,18],["cp",0,19]],"t":1305084749.8109},{"y":25,"d":[["cp",7,0],["cp",3,1],["cp",9,2],["cp",11,4],["cp",12,5],["cp",13,6],["cp",14,7],["cp",16,9],["cp",18,11],["cp",19,12],["cp",20,13],["cp",1,14],["cp",22,15],["cp",23,16],["cp",5,17],[18,0,48,"Author: Jiang Xin "],[19,6,41,"Date: Wed May 11 11:32:11 2011 +0800"],[20,0,48,"Commit: Jiang Xin "],[21,0,41,"CommitDate: Wed May 11 11:32:11 2011 +0800"],["cp",1,22],["cp",9,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",12,5],["cp",5,11],["cp",0,12],["cp",5,17],["cp",0,18]],"t":1305084749.82168},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305084754.16066},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305084754.24087},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305084754.35265},{"d":[["r","After doing this, you may fix the identity used for this commit with: "],["a"," "],["r"," git commit --amend --reset-author "],["a"," "],["r","bash-3.2$ git log "],["r","commit c61582861843af13db902fa7873bcc1b7bd66c28 "],["r","Author: Jiang Xin "],["r","Date: Wed May 11 11:32:11 2011 +0800 "],["a"," "],["r"," who does commit? "],["a"," "],["r","commit 38690158d57ea02061e42ab88101ed3517a4292f "],["r","Author: Jiang Xin "],["r","Date: Wed May 11 11:03:28 2011 +0800 "],["a"," "],["r"," intialized. "],["r","bash-3.2$ git log --pretty=fuller -1 "],["r","commit c61582861843af13db902fa7873bcc1b7bd66c28 "],["r","Author: Jiang Xin "],["r","AuthorDate: Wed May 11 11:32:11 2011 +0800 "],["r","Commit: Jiang Xin "],["r","CommitDate: Wed May 11 11:32:11 2011 +0800 "],["a"," "],["r"," who does commit? "],["r","bash-3.2$ git "]],"x":15,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305084754.43269,"i":1},{"y":25,"x":14,"t":1305084756.40054},{"y":25,"d":[[24,12," "]],"x":13,"t":1305084756.55274},{"y":25,"d":[[24,11," "]],"x":12,"t":1305084756.71263},{"y":25,"d":[[24,10," "]],"x":11,"t":1305084756.87246},{"y":25,"d":[[24,10,"w"]],"x":12,"t":1305084757.37685},{"y":25,"d":[[24,11,"h"]],"x":13,"t":1305084757.59251},{"y":25,"d":[[24,12,"o"]],"x":14,"t":1305084757.73662},{"y":25,"d":[[24,13,"a"]],"x":15,"t":1305084758.12879},{"y":25,"d":[[24,14,"m"]],"x":16,"t":1305084758.20847},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305084758.38432},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",9,8],["cp",0,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13],["cp",15,14],["cp",16,15],["cp",4,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",0,21],["cp",8,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",5,4],["cp",0,5],["cp",4,10],["cp",0,11],["cp",4,16],["cp",0,17]],"t":1305084758.66438},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",1,6],["cp",8,7],["cp",1,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",1,12],["cp",14,13],["cp",15,14],["cp",3,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",1,20],["cp",7,21],["cp",23,22],[23,0,15,"jiangxin "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,3],["cp",0,4],["cp",3,9],["cp",0,10],["cp",3,15],["cp",0,16]],"t":1305084758.6718},{"y":25,"d":[[24,10,"h"]],"x":12,"t":1305084759.35249},{"y":25,"d":[[24,11,"o"]],"x":13,"t":1305084759.47247},{"y":25,"d":[[24,12,"s"]],"x":14,"t":1305084759.58429},{"y":25,"d":[[24,13,"t"]],"x":15,"t":1305084759.7125},{"y":25,"d":[[24,14,"n"]],"x":16,"t":1305084759.96831},{"y":25,"d":[[24,15,"a"]],"x":17,"t":1305084760.08849},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305084760.16041},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305084760.24835},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",0,5],["cp",7,6],["cp",0,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",0,11],["cp",13,12],["cp",14,13],["cp",2,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",0,19],["cp",6,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",3,2],["cp",0,3],["cp",2,8],["cp",0,9],["cp",2,14],["cp",0,15]],"t":1305084760.36831},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",4,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",4,10],["cp",12,11],["cp",13,12],["cp",1,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",4,18],["cp",5,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,17,"mac.bj.ossxp.com "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,1],["cp",0,2],["cp",1,7],["cp",0,8],["cp",1,13],["cp",0,14]],"t":1305084760.37298},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305084763.0163},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305084763.09631},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305084763.18433},{"y":25,"x":15,"t":1305084763.28048},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305084763.42424},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305084763.48813},{"y":25,"d":[[24,16,"n"]],"x":18,"t":1305084764.08817},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305084764.27233},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305084764.36015},{"y":25,"d":[[24,19,"g"]],"x":21,"t":1305084764.48012},{"y":25,"x":22,"t":1305084764.79215},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305084765.59226},{"y":25,"d":[[24,22,"-"]],"x":24,"t":1305084765.76005},{"y":25,"d":[[24,23,"g"]],"x":25,"t":1305084766.12006},{"y":25,"d":[[24,24,"l"]],"x":26,"t":1305084766.20019},{"y":25,"d":[[24,25,"o"]],"x":27,"t":1305084766.36795},{"y":25,"d":[[24,26,"b"]],"x":28,"t":1305084766.43208},{"y":25,"d":[[24,27,"a"]],"x":29,"t":1305084766.55203},{"y":25,"d":[[24,28,"l"]],"x":30,"t":1305084766.65762},{"y":25,"x":31,"t":1305084766.76824},{"y":25,"d":[[24,30,"u"]],"x":32,"t":1305084767.80805},{"y":25,"d":[[24,31,"s"]],"x":33,"t":1305084767.90394},{"y":25,"d":[[24,32,"e"]],"x":34,"t":1305084767.96823},{"y":25,"d":[[24,33,"r"]],"x":35,"t":1305084768.00822},{"y":25,"d":[[24,34,"."]],"x":36,"t":1305084768.30403},{"y":25,"d":[[24,35,"n"]],"x":37,"t":1305084768.512},{"y":25,"d":[[24,36,"a"]],"x":38,"t":1305084768.56812},{"y":25,"d":[[24,37,"m"]],"x":39,"t":1305084768.68803},{"y":25,"d":[[24,38,"e"]],"x":40,"t":1305084768.74396},{"y":25,"x":41,"t":1305084768.86401},{"y":25,"d":[[24,40,"\""]],"x":42,"t":1305084769.11209},{"y":25,"d":[[24,41,"j"]],"x":43,"t":1305084769.41592},{"y":25,"d":[[24,42,"i"]],"x":44,"t":1305084769.5359},{"y":25,"d":[[24,43,"a"]],"x":45,"t":1305084769.59203},{"y":25,"d":[[24,44,"n"]],"x":46,"t":1305084769.69582},{"y":25,"d":[[24,45,"g"]],"x":47,"t":1305084769.76001},{"y":25,"d":[[24,45," "]],"x":46,"t":1305084770.04006},{"y":25,"d":[[24,44," "]],"x":45,"t":1305084770.19978},{"y":25,"d":[[24,43," "]],"x":44,"t":1305084770.35972},{"y":25,"d":[[24,42," "]],"x":43,"t":1305084770.51995},{"y":25,"d":[[24,41," "]],"x":42,"t":1305084770.68763},{"y":25,"d":[[24,41,"J"]],"x":43,"t":1305084770.93621},{"y":25,"d":[[24,42,"i"]],"x":44,"t":1305084771.08799},{"y":25,"d":[[24,43,"a"]],"x":45,"t":1305084771.21581},{"y":25,"d":[[24,44,"n"]],"x":46,"t":1305084771.26394},{"y":25,"d":[[24,45,"g"]],"x":47,"t":1305084771.34408},{"y":25,"x":48,"t":1305084771.4477},{"y":25,"d":[[24,47,"X"]],"x":49,"t":1305084771.63975},{"y":25,"d":[[24,48,"9"]],"x":50,"t":1305084771.76801},{"y":25,"d":[[24,49,"i"]],"x":51,"t":1305084771.77595},{"y":25,"d":[[24,50,"n"]],"x":52,"t":1305084771.88778},{"y":25,"d":[[24,50," "]],"x":51,"t":1305084772.38503},{"y":25,"d":[[24,49," "]],"x":50,"t":1305084772.51998},{"y":25,"d":[[24,48," "]],"x":49,"t":1305084772.67966},{"y":25,"d":[[24,48,"i"]],"x":50,"t":1305084772.92758},{"y":25,"d":[[24,49,"n"]],"x":51,"t":1305084773.09578},{"y":25,"d":[[24,50,"\""]],"x":52,"t":1305084773.47329},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",3,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",3,9],["cp",11,10],["cp",12,11],["cp",0,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",3,17],["cp",4,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",3,24]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",0,6],["cp",1,7],["cp",0,12],["cp",1,13]],"t":1305084773.6875},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305084773.69836},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305084774.20764},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305084774.2637},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305084774.38372},{"y":25,"x":15,"t":1305084774.44759},{"y":25,"x":14,"t":1305084775.23966},{"y":25,"d":[["cp",23,24]],"x":11,"t":1305084775.35953},{"y":25,"x":15,"t":1305084775.67959},{"y":25,"x":22,"t":1305084776.17981},{"y":25,"x":24,"t":1305084776.26341},{"y":25,"x":31,"t":1305084776.34666},{"y":25,"x":35,"t":1305084776.43018},{"y":25,"x":36,"t":1305084776.51504},{"y":25,"d":[[24,35,50,["a"," "]]],"x":35,"t":1305084777.11948},{"y":25,"x":36,"t":1305084777.27945},{"y":25,"d":[[24,35,"e"]],"x":37,"t":1305084777.55972},{"y":25,"d":[[24,36,"m"]],"x":38,"t":1305084777.70347},{"y":25,"d":[[24,37,"a"]],"x":39,"t":1305084777.80768},{"y":25,"d":[[24,38,"i"]],"x":40,"t":1305084777.87948},{"d":[["r","commit c61582861843af13db902fa7873bcc1b7bd66c28 "],["r","Author: Jiang Xin "],["r","Date: Wed May 11 11:32:11 2011 +0800 "],["a"," "],["r"," who does commit? "],["a"," "],["r","commit 38690158d57ea02061e42ab88101ed3517a4292f "],["r","Author: Jiang Xin "],["r","Date: Wed May 11 11:03:28 2011 +0800 "],["a"," "],["r"," intialized. "],["r","bash-3.2$ git log --pretty=fuller -1 "],["r","commit c61582861843af13db902fa7873bcc1b7bd66c28 "],["r","Author: Jiang Xin "],["r","AuthorDate: Wed May 11 11:32:11 2011 +0800 "],["r","Commit: Jiang Xin "],["r","CommitDate: Wed May 11 11:32:11 2011 +0800 "],["a"," "],["r"," who does commit? "],["r","bash-3.2$ whoami "],["r","jiangxin "],["r","bash-3.2$ hostname "],["r","mac.bj.ossxp.com "],["r","bash-3.2$ git config --global user.name \"Jiang Xin\" "],["r","bash-3.2$ git config --global user.email "]],"x":41,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305084777.96752,"i":1},{"y":25,"x":42,"t":1305084778.09548},{"y":25,"d":[[24,41,"j"]],"x":43,"t":1305084778.27146},{"y":25,"d":[[24,42,"i"]],"x":44,"t":1305084778.38463},{"y":25,"d":[[24,43,"a"]],"x":45,"t":1305084778.43937},{"y":25,"d":[[24,44,"n"]],"x":46,"t":1305084778.51939},{"y":25,"d":[[24,45,"g"]],"x":47,"t":1305084778.57559},{"y":25,"d":[[24,46,"x"]],"x":48,"t":1305084778.6715},{"y":25,"d":[[24,47,"i"]],"x":49,"t":1305084778.73528},{"y":25,"d":[[24,48,"n"]],"x":50,"t":1305084778.83139},{"y":25,"d":[[24,49,"@"]],"x":51,"t":1305084779.10371},{"y":25,"d":[[24,50,"o"]],"x":52,"t":1305084779.41544},{"y":25,"d":[[24,51,"s"]],"x":53,"t":1305084779.55142},{"y":25,"d":[[24,52,"s"]],"x":54,"t":1305084779.7035},{"y":25,"d":[[24,53,"x"]],"x":55,"t":1305084779.87151},{"y":25,"d":[[24,54,"p"]],"x":56,"t":1305084779.92738},{"y":25,"d":[[24,55,"."]],"x":57,"t":1305084780.08831},{"y":25,"d":[[24,56,"c"]],"x":58,"t":1305084780.19926},{"y":25,"d":[[24,57,"o"]],"x":59,"t":1305084780.27934},{"y":25,"d":[[24,58,"m"]],"x":60,"t":1305084780.38328},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",2,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",2,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",2,16],["cp",3,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",2,24]],"x":1,"f":[["cp",1,0],["cp",6,5],["cp",0,6],["cp",5,11],["cp",0,12]],"t":1305084780.59132},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305084780.59805},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305084781.47123},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305084781.5674},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305084781.67906},{"y":25,"x":15,"t":1305084781.76722},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305084782.92713},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305084783.0394},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305084783.21567},{"y":25,"d":[[24,17,"m"]],"x":19,"t":1305084783.36714},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305084783.50299},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305084783.58334},{"y":25,"x":22,"t":1305084783.66327},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305084784.30429},{"y":25,"d":[[24,22,"-"]],"x":24,"t":1305084784.49499},{"y":25,"d":[[24,23,"a"]],"x":25,"t":1305084784.759},{"y":25,"d":[[24,24,"m"]],"x":26,"t":1305084784.90301},{"y":25,"d":[[24,25,"e"]],"x":27,"t":1305084785.03907},{"y":25,"d":[[24,26,"n"]],"x":28,"t":1305084785.16703},{"y":25,"d":[[24,27,"d"]],"x":29,"t":1305084785.25498},{"y":25,"x":30,"t":1305084786.5191},{"y":25,"d":[[24,29,"-"]],"x":31,"t":1305084787.57511},{"y":25,"d":[[24,30,"-"]],"x":32,"t":1305084787.74307},{"y":25,"d":[[24,31,"a"]],"x":33,"t":1305084787.92693},{"y":25,"d":[[24,32,"l"]],"x":34,"t":1305084788.06318},{"y":25,"d":[[24,33,"l"]],"x":35,"t":1305084788.215},{"y":25,"d":[[24,34,"o"]],"x":36,"t":1305084788.39912},{"y":25,"d":[[24,35,"w"]],"x":37,"t":1305084788.48698},{"y":25,"d":[[24,36,"-"]],"x":38,"t":1305084788.85481},{"y":25,"d":[[24,37,"e"]],"x":39,"t":1305084789.07094},{"y":25,"d":[[24,38,"m"]],"x":40,"t":1305084789.1589},{"y":25,"d":[[24,39,"p"]],"x":41,"t":1305084789.35887},{"y":25,"d":[[24,40,"t"]],"x":42,"t":1305084789.47866},{"y":25,"d":[[24,41,"y"]],"x":43,"t":1305084789.58275},{"y":25,"x":44,"t":1305084790.21484},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",1,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",1,15],["cp",2,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",1,24]],"x":1,"f":[["cp",5,4],["cp",0,5],["cp",4,10],["cp",0,11]],"t":1305084792.94289},{"y":25,"x":1,"t":1305084792.99589},{"y":23,"d":[["cp",1,0],["cp",0,2],["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21],[22,0,58,"\".git/COMMIT_EDITMSG\" "],["cp",0,23]],"x":22,"f":[["cp",0,4],["cp",0,10]],"t":1305084792.99849},{"y":23,"d":[[22,22,29,"9L, 240C"]],"x":31,"t":1305084793.2391},{"y":1,"d":[[0,0,15,"who does commit?"],[2,0,65,"# Please enter the commit message for your changes. Lines starting"],[3,0,66,"# with '#' will be ignored, and an empty message aborts the commit."],[4,0,"#"],[5,0,8,"# Author:"],[5,13,49,"Jiang Xin "],["cp",4,6],[7,0,17,"# On branch master"],[8,0,11,"# No changes"],[9,0,"~"],["cp",9,10],["cp",9,11],["cp",9,12],["cp",9,13],["cp",9,14],["cp",9,15],["cp",9,16],["cp",9,17],["cp",9,18],["cp",9,19],["cp",9,20],["cp",9,21],[22,30,"c"]],"x":1,"f":[[0,0,15,["a","3"]],[2,0,65,["a","4"]],[3,0,66,["a","4"]],[4,0,"4"],[5,0,49,"44555555544444444444444444444444444444444444444444"],["cp",4,6],[7,0,17,"444444444444555555"],[8,0,11,"445555555555"],[9,0,77,["a","4"]],["cp",9,10],["cp",9,11],["cp",9,12],["cp",9,13],["cp",9,14],["cp",9,15],["cp",9,16],["cp",9,17],["cp",9,18],["cp",9,19],["cp",9,20],["cp",9,21]],"B":[[9,0,77,["a","1"]],["cp",9,10],["cp",9,11],["cp",9,12],["cp",9,13],["cp",9,14],["cp",9,15],["cp",9,16],["cp",9,17],["cp",9,18],["cp",9,19],["cp",9,20],["cp",9,21]],"t":1305084793.24598},{"y":23,"d":[[22,0,30,": "]],"x":2,"t":1305084794.49473},{"y":23,"d":[[22,1,"w"]],"x":3,"t":1305084794.62265},{"y":23,"d":[[22,2,"q"]],"x":4,"t":1305084794.82269},{"y":23,"d":[[22,0,20,"\".git/COMMIT_EDITMSG\""]],"x":22,"t":1305084795.27057},{"y":23,"d":[[22,22,37,"9L, 240C written"]],"x":39,"t":1305084795.34689},{"y":25,"d":[["cp",1,0],["cp",0,2],["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21],["cp",0,22]],"x":1,"f":[["cp",1,0],["cp",0,2],["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"B":[["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"t":1305084795.34746},{"y":25,"d":[[24,0,6,"[master"]],"x":9,"t":1305084795.68635},{"y":25,"d":[[22,0,32,"[master ca0c91c] who does commit?"],[23,1,45,"Author: Jiang Xin "],[24,0,8,"bash-3.2$"]],"x":11,"t":1305084795.68773},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305084797.3027},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305084797.39038},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305084797.50261},{"y":25,"x":15,"t":1305084797.58235},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305084798.4544},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305084798.60627},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305084798.68625},{"y":25,"x":19,"t":1305084799.0943},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305084799.23028},{"y":25,"d":[[24,19,"1"]],"x":21,"t":1305084799.39808},{"y":25,"d":[["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"t":1305084799.55013},{"y":25,"d":[["cp",21,16],["cp",22,17],["cp",23,18],[19,0,46,"commit ca0c91ccf55922867ac08bfe9246c773be3e2ddd"],[20,0,44,"Author: Jiang Xin "],[21,0,37,"Date: Wed May 11 11:32:11 2011 +0800"],["cp",0,22],[23,0,19," who does commit?"],[24,0,8,"bash-3.2$"]],"x":11,"f":[[19,0,46,["a","3"]]],"t":1305084799.56196},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305084802.1422},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305084802.23005},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305084802.326},{"y":25,"x":15,"t":1305084802.37416},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305084802.49411},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305084802.66988},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305084802.77413},{"y":25,"x":19,"t":1305084802.90247},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305084803.12603},{"y":25,"d":[["cp",18,24]],"x":21,"t":1305084803.28614},{"y":25,"x":22,"t":1305084803.49405},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305084803.86205},{"y":25,"d":[[24,22,"-"]],"x":24,"t":1305084804.04601},{"y":25,"d":[[24,23,"p"]],"x":25,"t":1305084804.73401},{"y":25,"d":[[24,24,"r"]],"x":26,"t":1305084804.8621},{"y":25,"d":[[24,25,"e"]],"x":27,"t":1305084805.01402},{"y":25,"d":[[24,26,"t"]],"x":28,"t":1305084805.22196},{"y":25,"d":[[24,27,29,"ty="]],"x":31,"t":1305084805.54257},{"y":25,"d":[[24,30,"f"]],"x":32,"t":1305084806.18191},{"y":25,"d":[[24,31,"u"]],"x":33,"t":1305084806.33403},{"d":[["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["r","[master ca0c91c] who does commit? "],["r"," Author: Jiang Xin "],["r","bash-3.2$ git log -1 "],["r","commit ca0c91ccf55922867ac08bfe9246c773be3e2ddd "],["r","Author: Jiang Xin "],["r","Date: Wed May 11 11:32:11 2011 +0800 "],["a"," "],["r"," who does commit? "],["r","bash-3.2$ git log -1 --pretty=ful "]],"x":34,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305084806.48619,"i":1},{"y":25,"d":[[24,33,"l"]],"x":35,"t":1305084806.79862},{"y":25,"d":[[24,34,"e"]],"x":36,"t":1305084807.53438},{"y":25,"d":[[24,35,"r"]],"x":37,"t":1305084807.62196},{"y":25,"d":[["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",0,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",19,18],["cp",0,19]],"t":1305084807.80674},{"y":25,"d":[["cp",15,8],["cp",16,9],["cp",17,10],["cp",18,11],["cp",19,12],["cp",20,13],["cp",22,15],["cp",23,16],["cp",11,17],[18,0,48,"Author: Jiang Xin "],[19,6,44,"Date: Wed May 11 11:32:11 2011 +0800 "],[20,0,41,"Commit: Jiang Xin "],[21,0,41,"CommitDate: Wed May 11 11:33:12 2011 +0800"],["cp",0,22],["cp",15,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",18,11],["cp",11,17],["cp",0,18]],"t":1305084807.81811},{"y":25,"d":[["cp",16,24]],"x":11,"t":1305084813.53371},{"y":25,"d":[[24,10,35,"/ "]],"x":12,"t":1305084813.82979},{"y":25,"d":[[24,11,"c"]],"x":13,"t":1305084814.10137},{"y":25,"d":[[24,12,"i"]],"x":14,"t":1305084814.18943},{"y":25,"d":[[24,12," "]],"x":13,"t":1305084814.94945},{"y":25,"d":[[24,12,"o"]],"x":14,"t":1305084815.1574},{"y":25,"d":[[24,13,"m"]],"x":15,"t":1305084815.34935},{"y":25,"d":[[24,14,"m"]],"x":16,"t":1305084815.90942},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305084816.10137},{"y":25,"d":[[24,16,"t"]],"x":18,"t":1305084816.20531},{"y":25,"d":[[24,10,41,"git commit --amend --allow-empty"]],"x":11,"t":1305084816.30925},{"y":25,"x":15,"t":1305084816.92549},{"y":25,"x":22,"t":1305084817.42564},{"y":25,"x":24,"t":1305084817.50882},{"y":25,"x":30,"t":1305084817.59223},{"y":25,"x":43,"t":1305084818.29334},{"y":25,"x":44,"t":1305084818.47743},{"y":25,"d":[[24,43,"-"]],"x":45,"t":1305084819.14104},{"y":25,"d":[[24,44,"-"]],"x":46,"t":1305084819.32517},{"y":25,"d":[[24,45,"r"]],"x":47,"t":1305084819.58108},{"y":25,"d":[[24,46,"e"]],"x":48,"t":1305084819.7411},{"y":25,"d":[[24,47,"s"]],"x":49,"t":1305084819.94907},{"y":25,"d":[[24,48,"e"]],"x":50,"t":1305084820.20509},{"y":25,"d":[[24,49,"t"]],"x":51,"t":1305084820.38131},{"y":25,"d":[[24,50,"-"]],"x":52,"t":1305084820.59714},{"y":25,"d":[[24,51,"a"]],"x":53,"t":1305084821.77306},{"y":25,"d":[[24,52,"u"]],"x":54,"t":1305084821.92532},{"y":25,"d":[[24,53,"t"]],"x":55,"t":1305084822.10891},{"y":25,"d":[[24,54,"h"]],"x":56,"t":1305084822.18116},{"y":25,"d":[[24,55,"o"]],"x":57,"t":1305084822.63706},{"y":25,"d":[[24,56,"r"]],"x":59,"t":1305084822.97173},{"y":25,"d":[["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13],["cp",15,14],["cp",16,15],["cp",10,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",0,21],["cp",14,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",11,10],["cp",0,11],["cp",10,16],["cp",0,17]],"t":1305084824.07678},{"y":25,"d":[["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,22],["cp",0,23]],"x":1,"f":[["cp",0,10],["cp",0,16]],"t":1305084824.13012},{"y":23,"d":[[22,0,20,"\".git/COMMIT_EDITMSG\""]],"x":22,"t":1305084824.13171},{"y":23,"d":[[22,22,29,"6L, 185C"]],"x":31,"t":1305084824.37461},{"y":1,"d":[[0,0,15,"who does commit?"],[2,0,65,"# Please enter the commit message for your changes. Lines starting"],[3,0,66,"# with '#' will be ignored, and an empty message aborts the commit."],[4,0,17,"# On branch master"],[5,0,11,"# No changes"],[6,0,"~"],["cp",6,7],["cp",6,8],["cp",6,9],["cp",6,10],["cp",6,11],["cp",6,12],["cp",6,13],["cp",6,14],["cp",6,15],["cp",6,16],["cp",6,17],["cp",6,18],["cp",6,19],["cp",6,20],["cp",6,21],[22,30,"c"]],"x":1,"f":[[0,0,15,["a","3"]],[2,0,65,["a","4"]],[3,0,66,["a","4"]],[4,0,17,"444444444444555555"],[5,0,11,"445555555555"],[6,0,77,["a","4"]],["cp",6,7],["cp",6,8],["cp",6,9],["cp",6,10],["cp",6,11],["cp",6,12],["cp",6,13],["cp",6,14],["cp",6,15],["cp",6,16],["cp",6,17],["cp",6,18],["cp",6,19],["cp",6,20],["cp",6,21]],"B":[[6,0,77,["a","1"]],["cp",6,7],["cp",6,8],["cp",6,9],["cp",6,10],["cp",6,11],["cp",6,12],["cp",6,13],["cp",6,14],["cp",6,15],["cp",6,16],["cp",6,17],["cp",6,18],["cp",6,19],["cp",6,20],["cp",6,21]],"t":1305084824.38172},{"y":23,"d":[[22,0,30,": "]],"x":2,"t":1305084825.26132},{"y":23,"d":[[22,1,"w"]],"x":3,"t":1305084825.37298},{"y":23,"d":[[22,2,"q"]],"x":4,"t":1305084825.58891},{"y":23,"d":[[22,0,20,"\".git/COMMIT_EDITMSG\""]],"x":22,"t":1305084826.97462},{"y":25,"d":[["cp",1,0],["cp",0,2],["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,6],[7,0,32,"[master ca0c91c] who does commit?"],[8,0,45," Author: Jiang Xin "],[9,0,19,"bash-3.2$ git log -1"],[10,0,46,"commit ca0c91ccf55922867ac08bfe9246c773be3e2ddd"],[11,0,44,"Author: Jiang Xin "],[12,0,37,"Date: Wed May 11 11:32:11 2011 +0800"],["cp",0,13],[14,0,19," who does commit?"],[15,0,35,"bash-3.2$ git log -1 --pretty=fuller"],["cp",10,16],[17,0,6,"Author:"],[17,12,48,"Jiang Xin "],[18,0,41,"AuthorDate: Wed May 11 11:32:11 2011 +0800"],[19,0,6,"Commit:"],[19,12,41,"Jiang Xin "],[20,0,41,"CommitDate: Wed May 11 11:33:12 2011 +0800"],["cp",0,21],["cp",14,22],[23,0,56,"bash-3.2$ git commit --amend --allow-empty --reset-author"]],"x":1,"f":[["cp",1,0],["cp",0,2],["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],[10,0,77,"333333333333333333333333333333333333333333333337777777777777777777777777777777"],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",10,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"B":[["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"t":1305084826.97795},{"y":25,"d":[["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",0,12],["cp",14,13],["cp",15,14],["cp",9,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",0,20],["cp",13,21],["cp",23,22],[23,0,56,"[master 61b1516] who does commit? "]],"x":1,"f":[["cp",10,9],["cp",0,10],["cp",9,15],["cp",0,16]],"t":1305084827.20641},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305084827.20753},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305084829.06863},{"y":25,"d":[["cp",14,24]],"x":11,"t":1305084829.82855},{"y":25,"d":[["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",0,11],["cp",13,12],["cp",14,13],["cp",8,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",0,19],["cp",12,20],["cp",22,21],["cp",23,22],["cp",13,23],["cp",0,24]],"x":1,"f":[["cp",9,8],["cp",0,9],["cp",8,14],["cp",0,15]],"t":1305084830.81253},{"y":25,"d":[["cp",7,0],["cp",8,1],["cp",9,2],["cp",10,3],["cp",12,5],["cp",13,6],["cp",1,7],["cp",15,8],["cp",16,9],["cp",17,10],["cp",18,11],["cp",4,12],["cp",5,13],["cp",21,14],["cp",22,15],["cp",6,16],[17,0,"c"],[17,6,46," 61b1516058bd2359f99437d28a6b9fd6e933b001"],[18,0,41,"Author: Jiang Xin "],[19,0,41,"AuthorDate: Wed May 11 11:33:44 2011 +0800"],["cp",10,20],[21,0,56,"CommitDate: Wed May 11 11:33:44 2011 +0800 "],["cp",4,22],["cp",5,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",8,1],["cp",1,7],["cp",0,8],["cp",0,14],["cp",1,17]],"t":1305084830.8279},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305084832.79653},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305084832.8606},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305084833.00452},{"y":25,"x":15,"t":1305084833.08438},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305084833.22034},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305084833.39632},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305084833.50852},{"y":25,"x":19,"t":1305084833.63636},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305084833.87657},{"y":25,"d":[["cp",0,24]],"x":21,"t":1305084834.01237},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",3,11],["cp",4,12],["cp",14,13],["cp",15,14],["cp",5,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",9,19],["cp",21,20],["cp",3,21],["cp",4,22],["cp",24,23],["cp",3,24]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",0,6],["cp",1,7],["cp",0,16],["cp",1,17]],"t":1305084834.2526},{"y":25,"d":[["cp",5,0],["cp",6,1],["cp",7,2],["cp",8,3],["cp",9,4],["cp",10,5],["cp",11,6],["cp",12,7],["cp",13,8],["cp",14,9],["cp",0,10],["cp",16,11],["cp",17,12],["cp",18,13],["cp",4,14],["cp",20,15],["cp",6,16],["cp",7,17],["cp",23,18],["cp",11,19],[20,0,41,"Author: Jiang Xin "],[21,0,37,"Date: Wed May 11 11:33:44 2011 +0800"],["cp",6,22],["cp",7,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",6,1],["cp",0,6],["cp",1,11],["cp",0,16],["cp",1,19]],"t":1305084834.26396},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",3,13],["cp",15,14],["cp",5,15],["cp",6,16],["cp",18,17],["cp",10,18],["cp",20,19],["cp",21,20],["cp",5,21],["cp",6,22],[23,0,19,"bash-3.2$ exit "],["cp",5,24]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",0,10],["cp",1,11],["cp",0,18],["cp",1,19]],"t":1305084838.98854}]} \ No newline at end of file diff --git a/html/part2/ch05-01-commit-modified.html b/html/part2/ch05-01-commit-modified.html new file mode 100644 index 000000000..db666341d --- /dev/null +++ b/html/part2/ch05-01-commit-modified.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch05-01-commit-modified +json_file: ch05-01-commit-modified.json +--- diff --git a/html/part2/ch05-01-commit-modified.json b/html/part2/ch05-01-commit-modified.json new file mode 100644 index 000000000..1183b0738 --- /dev/null +++ b/html/part2/ch05-01-commit-modified.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305092002.9374,"i":1},{"y":1,"d":[[0,10,"c"]],"x":12,"t":1305092003.82487},{"y":1,"d":[[0,11,"d"]],"x":13,"t":1305092003.99267},{"y":1,"x":14,"t":1305092004.08072},{"y":1,"d":[[0,13,"/"]],"x":15,"t":1305092004.21655},{"y":1,"d":[[0,14,"p"]],"x":16,"t":1305092004.40084},{"y":1,"d":[[0,15,"a"]],"x":17,"t":1305092004.44885},{"y":1,"d":[[0,16,"t"]],"x":18,"t":1305092004.54466},{"y":1,"d":[[0,17,"h"]],"x":19,"t":1305092004.61689},{"y":1,"d":[[0,18,"/"]],"x":20,"t":1305092004.77565},{"y":1,"d":[[0,19,"t"]],"x":21,"t":1305092005.00046},{"y":1,"d":[[0,20,"o"]],"x":22,"t":1305092005.08865},{"y":1,"d":[[0,21,"/"]],"x":23,"t":1305092005.22336},{"y":1,"d":[[0,22,"m"]],"x":24,"t":1305092006.08866},{"y":1,"d":[[0,23,"y"]],"x":25,"t":1305092006.26487},{"y":1,"d":[[0,24,"/"]],"x":26,"t":1305092006.38328},{"y":1,"d":[[0,25,"w"]],"x":27,"t":1305092006.8646},{"y":1,"d":[[0,26,"o"]],"x":28,"t":1305092006.98453},{"y":1,"d":[[0,27,33,"rkspace"]],"x":35,"t":1305092007.08703},{"y":1,"d":[[0,34,"/"]],"x":36,"t":1305092007.68093},{"y":1,"d":[[0,35,"d"]],"x":37,"t":1305092007.91265},{"y":1,"d":[[0,36,"e"]],"x":38,"t":1305092008.07249},{"y":1,"d":[[0,37,"m"]],"x":39,"t":1305092008.18458},{"y":1,"d":[[0,38,"o"]],"x":40,"t":1305092008.29663},{"y":2,"x":1,"t":1305092008.52846},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305092008.52876},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305092009.03259},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305092009.11277},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305092009.22446},{"y":2,"x":15,"t":1305092009.25662},{"y":2,"d":[[1,14,"l"]],"x":16,"t":1305092009.33639},{"y":2,"d":[[1,15,"o"]],"x":17,"t":1305092009.52058},{"y":2,"d":[[1,16,"g"]],"x":18,"t":1305092009.68049},{"y":2,"x":19,"t":1305092009.83275},{"y":2,"d":[[1,18,"-"]],"x":20,"t":1305092010.08054},{"y":2,"d":[[1,19,"-"]],"x":21,"t":1305092010.26458},{"y":2,"d":[[1,20,"s"]],"x":22,"t":1305092010.38423},{"y":2,"d":[[1,21,"t"]],"x":23,"t":1305092010.50457},{"y":2,"d":[[1,22,"a"]],"x":24,"t":1305092010.63241},{"y":2,"d":[[1,23,"t"]],"x":25,"t":1305092010.7286},{"y":3,"x":1,"t":1305092010.79712},{"y":17,"d":[[2,0,46,"commit 61b1516058bd2359f99437d28a6b9fd6e933b001"],[3,0,37,"Author: Jiang Xin "],[4,0,37,"Date: Wed May 11 11:33:44 2011 +0800"],[6,4,19,"who does commit?"],[8,0,46,"commit 38690158d57ea02061e42ab88101ed3517a4292f"],["cp",3,9],[10,0,37,"Date: Wed May 11 11:03:28 2011 +0800"],[12,4,14,"intialized."],[14,1,13,"welcome.txt |"],[14,18,20,"1 +"],[15,1,48,"1 files changed, 1 insertions(+), 0 deletions(-)"],[16,0,8,"bash-3.2$"]],"x":11,"f":[[2,0,46,["a","3"]],["cp",2,8],[14,20,"2"]],"t":1305092010.80495},{"y":17,"d":[[16,10,"e"]],"x":12,"t":1305092016.46447},{"y":17,"d":[[16,11,"c"]],"x":13,"t":1305092016.64049},{"y":17,"d":[[16,12,"h"]],"x":14,"t":1305092016.72812},{"y":17,"d":[[16,13,"o"]],"x":15,"t":1305092016.82428},{"y":17,"x":16,"t":1305092017.00024},{"y":17,"d":[[16,15,"N"]],"x":17,"t":1305092018.26417},{"y":17,"d":[[16,16,"c"]],"x":18,"t":1305092018.56837},{"y":17,"d":[[16,16," "]],"x":17,"t":1305092019.04799},{"y":17,"d":[[16,16,"i"]],"x":18,"t":1305092019.26497},{"y":17,"d":[[16,17,"c"]],"x":19,"t":1305092019.35997},{"y":17,"d":[[16,18,"e"]],"x":20,"t":1305092019.55196},{"y":17,"x":21,"t":1305092020.44069},{"y":17,"d":[[16,20,"t"]],"x":22,"t":1305092020.61625},{"y":17,"d":[[16,21,"o"]],"x":23,"t":1305092020.66388},{"y":17,"x":24,"t":1305092020.79991},{"y":17,"d":[[16,23,"m"]],"x":25,"t":1305092020.99189},{"y":17,"d":[[16,24,"e"]],"x":26,"t":1305092021.08012},{"y":17,"d":[[16,25,"e"]],"x":27,"t":1305092021.25577},{"y":17,"d":[[16,26,"t"]],"x":28,"t":1305092021.64785},{"y":17,"x":29,"t":1305092021.83984},{"y":17,"d":[[16,28,"y"]],"x":30,"t":1305092021.99186},{"y":17,"d":[[16,29,"o"]],"x":31,"t":1305092022.10377},{"y":17,"d":[[16,30,"u"]],"x":32,"t":1305092022.18382},{"y":17,"d":[[16,31,"."]],"x":33,"t":1305092022.79231},{"y":17,"x":34,"t":1305092022.9918},{"y":17,"d":[[16,33,">"]],"x":35,"t":1305092023.26416},{"y":17,"d":[[16,34,">"]],"x":36,"t":1305092023.43167},{"y":17,"x":37,"t":1305092023.64792},{"y":17,"d":[[16,36,"w"]],"x":38,"t":1305092023.90375},{"y":17,"d":[[16,37,"e"]],"x":39,"t":1305092024.05568},{"y":17,"d":[[16,38,46,"lcome.txt"]],"x":49,"t":1305092024.2799},{"y":18,"x":1,"t":1305092024.48774},{"y":18,"d":[[17,0,8,"bash-3.2$"]],"x":11,"t":1305092024.48809},{"y":18,"d":[[17,10,"g"]],"x":12,"t":1305092024.93552},{"y":18,"d":[[17,11,"i"]],"x":13,"t":1305092025.01558},{"y":18,"d":[[17,12,"t"]],"x":14,"t":1305092025.13585},{"y":18,"x":15,"t":1305092025.18378},{"y":18,"d":[[17,14,"s"]],"x":16,"t":1305092025.4157},{"y":18,"d":[[17,15,"t"]],"x":17,"t":1305092025.58404},{"y":18,"d":[[17,16,"a"]],"x":18,"t":1305092025.67172},{"y":18,"d":[[17,17,"t"]],"x":19,"t":1305092025.79982},{"y":18,"d":[[17,18,"u"]],"x":20,"t":1305092025.89562},{"y":18,"d":[[17,19,"s"]],"x":21,"t":1305092025.99177},{"y":19,"x":1,"t":1305092026.23166},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",8,6],["cp",1,7],["cp",10,8],["cp",3,9],["cp",12,10],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],[16,0,46,"# On branch master "],[17,0,11,"# Changes no"],[17,17,31,"ged for commit:"],[18,0,61,"# (use \"git add ...\" to update what will be committed)"],[19,0,76,"# (use \"git checkout -- ...\" to discard changes in working directory)"],[20,0,"#"],[21,0,"#"],[21,8,30,"modified: welcome.txt"],["cp",20,22],[23,0,64,"no changes added to commit (use \"git add\" and/or \"git commit -a\")"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",1,2],["cp",0,6],["cp",1,8],["cp",14,12],["cp",1,14],[21,8,30,["a","1"]]],"t":1305092026.2401},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092026.83171},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092026.91176},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092027.02366},{"y":25,"x":15,"t":1305092027.07953},{"y":25,"d":[[24,14,"d"]],"x":16,"t":1305092027.20744},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305092027.26415},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305092027.40763},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305092027.5679},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",2,4],["cp",6,5],["cp",0,6],["cp",8,7],["cp",2,8],["cp",10,9],["cp",2,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",19,21],["cp",23,22],["cp",24,23],["cp",2,24]],"x":1,"f":[["cp",1,0],["cp",6,5],["cp",0,6],["cp",12,11],["cp",0,12],["cp",21,20],["cp",0,21]],"t":1305092027.64737},{"y":25,"d":[["cp",7,0],["cp",2,1],["cp",9,2],["cp",1,3],["cp",11,4],["cp",12,5],["cp",13,6],["cp",14,7],["cp",15,8],["cp",16,9],["cp",17,10],["cp",18,11],["cp",19,12],["cp",20,13],["cp",12,14],["cp",22,15],["cp",23,16],[17,0,61,"diff --git a/welcome.txt b/welcome.txt "],[18,0,76,"index 18832d3..fd3c069 100644 "],[19,0,16,"--- a/welcome.txt"],[20,0,30,"+++ b/welcome.txt "],[21,0,12,"@@ -1 +1,2 @@"],[22,0,64," Hello. "],[23,0,17,"+Nice to meet you."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",11,4],["cp",0,5],["cp",0,11],["cp",20,13],["cp",0,20],[21,0,12,["a","6"]],[23,0,17,["a","2"]]],"B":[[17,0,37,["a","1"]],[18,0,28,["a","1"]],[19,0,16,["a","1"]],["cp",19,20]],"t":1305092027.65936},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092030.62358},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092030.73556},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092030.79926},{"d":[["r","Date: Wed May 11 11:03:28 2011 +0800 "],["a"," "],["r"," intialized. "],["a"," "],["r"," welcome.txt | 1 + "],["r"," 1 files changed, 1 insertions(+), 0 deletions(-) "],["r","bash-3.2$ echo Nice to meet you. >> welcome.txt "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","# Changes not staged for commit: "],["r","# (use \"git add ...\" to update what will be committed) "],["r","# (use \"git checkout -- ...\" to discard changes in working directory) "],["r","# "],["r","# modified: welcome.txt "],["r","# "],["r","no changes added to commit (use \"git add\" and/or \"git commit -a\") "],["r","bash-3.2$ git diff "],["r","diff --git a/welcome.txt b/welcome.txt "],["r","index 18832d3..fd3c069 100644 "],["r","--- a/welcome.txt "],["r","+++ b/welcome.txt "],["r","@@ -1 +1,2 @@ "],["r"," Hello. "],["r","+Nice to meet you. "],["r","bash-3.2$ git "]],"x":15,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["r","11111111111111111111111111111111111111000000000000000000000000000000000000000000"],["r","11111111111111111111111111111000000000000000000000000000000000000000000000000000"],["r","11111111111111111000000000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],"d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d",["r","77777777777777777777277777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d",["r","77777777111111111111111111111117777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d",["r","66666666666667777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","22222222222222222277777777777777777777777777777777777777777777777777777777777777"],["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305092030.87936,"i":1},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305092031.02364},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305092031.07153},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305092031.23936},{"y":25,"d":[[24,17,"m"]],"x":19,"t":1305092031.38348},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305092031.55938},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305092031.65532},{"y":25,"x":22,"t":1305092031.74357},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305092031.9112},{"y":25,"d":[[24,22,"m"]],"x":24,"t":1305092032.15946},{"y":25,"x":25,"t":1305092032.31924},{"y":25,"d":[[24,24,"\""]],"x":26,"t":1305092032.85533},{"y":25,"d":[[24,25,"A"]],"x":27,"t":1305092033.33524},{"y":25,"d":[[24,26,"p"]],"x":28,"t":1305092033.58345},{"y":25,"d":[[24,27,"p"]],"x":29,"t":1305092033.72729},{"y":25,"d":[[24,28,"e"]],"x":30,"t":1305092033.87917},{"y":25,"d":[[24,29,"n"]],"x":31,"t":1305092033.99933},{"y":25,"d":[[24,30,"d"]],"x":32,"t":1305092034.10322},{"y":25,"x":33,"t":1305092034.5752},{"y":25,"d":[[24,32,"a"]],"x":34,"t":1305092035.07104},{"y":25,"x":35,"t":1305092035.20722},{"y":25,"d":[[24,34,"n"]],"x":36,"t":1305092035.37503},{"y":25,"d":[[24,35,"i"]],"x":37,"t":1305092035.50334},{"y":25,"d":[[24,36,"c"]],"x":38,"t":1305092035.62353},{"y":25,"d":[[24,37,"e"]],"x":39,"t":1305092035.79918},{"y":25,"x":40,"t":1305092035.97495},{"y":25,"d":[[24,39,"l"]],"x":41,"t":1305092036.10343},{"y":25,"d":[[24,40,"i"]],"x":42,"t":1305092036.23913},{"y":25,"d":[[24,41,"n"]],"x":43,"t":1305092036.37524},{"y":25,"d":[[24,42,"e"]],"x":44,"t":1305092036.519},{"y":25,"d":[[24,43,"."]],"x":45,"t":1305092036.67108},{"y":25,"d":[[24,44,"\""]],"x":46,"t":1305092037.71124},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",11,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",4,3],["cp",0,4],["cp",13,12],["cp",0,13],["cp",21,20],["cp",0,21],["cp",23,22],["cp",0,23]],"B":[["cp",17,16],["cp",18,17],["cp",19,18],["cp",0,20]],"t":1305092038.47098},{"y":25,"d":[["cp",8,0],["cp",9,1],["cp",10,2],["cp",11,3],["cp",12,4],["cp",3,5],["cp",14,6],["cp",15,7],["cp",16,8],["cp",17,9],["cp",18,10],["cp",19,11],["cp",20,12],["cp",21,13],["cp",22,14],["cp",23,15],[16,0,37,"# On branch master "],["cp",0,17],["cp",1,18],["cp",2,19],["cp",3,20],["cp",4,21],["cp",3,22],["cp",6,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,3],["cp",12,4],["cp",20,12],["cp",22,14],["cp",0,20],["cp",4,21],["cp",0,22]],"B":[["cp",16,8],["cp",17,9],["cp",18,10],["cp",10,11],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19]],"t":1305092038.48097},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092040.80686},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092040.871},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092041.00698},{"y":25,"x":15,"t":1305092041.06387},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305092041.17482},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305092041.35983},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305092041.44692},{"y":25,"x":19,"t":1305092041.52682},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305092041.7831},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305092041.98297},{"y":25,"d":[[24,20,"p"]],"x":22,"t":1305092043.01487},{"y":25,"d":[[24,21,"r"]],"x":23,"t":1305092043.11874},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305092043.27891},{"y":25,"d":[[24,23,"t"]],"x":25,"t":1305092043.51913},{"y":25,"d":[[24,24,"t"]],"x":26,"t":1305092043.67908},{"y":25,"d":[[24,25,"y"]],"x":27,"t":1305092043.83066},{"y":25,"d":[[24,26,"="]],"x":28,"t":1305092044.15066},{"y":25,"d":[[24,27,"o"]],"x":29,"t":1305092044.4548},{"y":25,"d":[[24,28,"n"]],"x":30,"t":1305092044.59904},{"y":25,"d":[[24,29,"e"]],"x":31,"t":1305092044.71061},{"y":25,"d":[[24,30,"l"]],"x":32,"t":1305092044.80787},{"y":25,"d":[[24,31,"i"]],"x":33,"t":1305092044.98284},{"y":25,"d":[[24,32,"n"]],"x":34,"t":1305092045.08681},{"y":25,"d":[[24,33,"e"]],"x":35,"t":1305092045.16662},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",2,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",0,17],["cp",1,18],["cp",2,19],["cp",3,20],["cp",2,21],["cp",5,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",4,3],["cp",0,4],["cp",12,11],["cp",0,12],["cp",14,13],["cp",0,14],["cp",3,20],["cp",0,21]],"B":[["cp",8,7],["cp",9,8],["cp",10,9],["cp",0,11]],"t":1305092045.31057},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",0,17],["cp",1,18],["cp",3,20],["cp",23,21],[22,0,64,"61b1516058bd2359f99437d28a6b9fd6e933b001 who does commit? "],[23,0,51,"38690158d57ea02061e42ab88101ed3517a4292f intialized."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,1],["cp",0,3],["cp",11,9],["cp",13,11],["cp",0,13],["cp",1,18],["cp",0,20],[22,0,39,["a","3"]],["cp",22,23]],"B":[["cp",7,5],["cp",8,6],["cp",9,7],["cp",7,8],["cp",0,9],["cp",0,10]],"t":1305092045.32237},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092045.72689},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092045.7907},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092045.90279},{"y":25,"x":15,"t":1305092045.95878},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305092046.51077},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305092046.67062},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305092046.77462},{"y":25,"x":19,"t":1305092046.83095},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305092047.04656},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305092047.24652},{"y":25,"d":[[24,20,"o"]],"x":22,"t":1305092047.42263},{"y":25,"d":[[24,21,"n"]],"x":23,"t":1305092047.55854},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305092047.60649},{"y":25,"d":[[24,23,"l"]],"x":25,"t":1305092047.75054},{"y":25,"d":[[24,24,"i"]],"x":26,"t":1305092047.89455},{"y":25,"d":[[24,25,"n"]],"x":27,"t":1305092048.02297},{"y":25,"d":[[24,26,"e"]],"x":28,"t":1305092048.13469},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",1,16],["cp",0,17],["cp",1,18],["cp",2,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",9,8],["cp",1,9],["cp",11,10],["cp",1,11],["cp",0,17],["cp",1,18],["cp",22,21],["cp",1,23]],"B":[["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,8]],"t":1305092048.28019},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",0,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,51,"61b1516 who does commit? "],[23,0,26,"3869015 intialized. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",8,6],["cp",10,8],["cp",0,10],["cp",17,15],["cp",0,17],["cp",21,19],["cp",19,20],["cp",0,21],[22,7,39,["a","7"]],["cp",22,23]],"B":[["cp",4,2],["cp",5,3],["cp",6,4],["cp",4,5],["cp",0,6],["cp",0,7]],"t":1305092048.29132},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092051.60657},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092051.70224},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092051.8065},{"y":25,"x":15,"t":1305092051.91044},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305092052.07171},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305092052.21432},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305092052.39028},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305092052.49439},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305092052.63042},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305092052.70234},{"y":25,"x":22,"t":1305092052.83828},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305092052.93458},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305092053.07839},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",13,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",6,5],["cp",0,6],["cp",8,7],["cp",0,8],["cp",15,14],["cp",0,15],["cp",19,18],["cp",0,20],["cp",22,21],["cp",0,23]],"B":[["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,5]],"t":1305092053.21425},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",12,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,22," M welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",5,4],["cp",0,5],["cp",7,6],["cp",0,7],["cp",14,13],["cp",0,14],["cp",18,17],["cp",0,19],["cp",21,20],["cp",0,22],[23,1,"1"]],"B":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",5,4]],"t":1305092053.22631},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092055.06237},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092055.25413},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092055.42224},{"y":25,"x":15,"t":1305092055.48644},{"y":25,"d":[[24,14,"a"]],"x":16,"t":1305092057.61422},{"y":25,"d":[[24,15,"d"]],"x":17,"t":1305092057.78197},{"d":[["r","diff --git a/welcome.txt b/welcome.txt "],["r","index 18832d3..fd3c069 100644 "],["r","--- a/welcome.txt "],["r","+++ b/welcome.txt "],["r","@@ -1 +1,2 @@ "],["r"," Hello. "],["r","+Nice to meet you. "],["r","bash-3.2$ git commit -m \"Append a nice line.\" "],["r","# On branch master "],["r","# Changes not staged for commit: "],["r","# (use \"git add ...\" to update what will be committed) "],["r","# (use \"git checkout -- ...\" to discard changes in working directory) "],["r","# "],["r","# modified: welcome.txt "],["r","# "],["r","no changes added to commit (use \"git add\" and/or \"git commit -a\") "],["r","bash-3.2$ git log --pretty=oneline "],["r","61b1516058bd2359f99437d28a6b9fd6e933b001 who does commit? "],["r","38690158d57ea02061e42ab88101ed3517a4292f intialized. "],["r","bash-3.2$ git log --oneline "],["r","61b1516 who does commit? "],["r","3869015 intialized. "],["r","bash-3.2$ git status -s "],["r"," M welcome.txt "],["r","bash-3.2$ git add "]],"x":18,"B":[["r","11111111111111111111111111111111111111000000000000000000000000000000000000000000"],["r","11111111111111111111111111111000000000000000000000000000000000000000000000000000"],["r","11111111111111111000000000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d",["r","66666666666667777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","22222222222222222277777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d",["r","77777777111111111111111111111117777777777777777777777777777777777777777777777777"],["a","7"],"d","d",["r","33333333333333333333333333333333333333337777777777777777777777777777777777777777"],"d",["a","7"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],"d",["a","7"],["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305092057.95014,"i":1},{"y":25,"x":19,"t":1305092058.03823},{"y":25,"d":[[24,18,"w"]],"x":20,"t":1305092058.22212},{"y":25,"d":[[24,19,"e"]],"x":21,"t":1305092058.35811},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305092058.49415},{"y":25,"d":[[24,21,28,"come.txt"]],"x":30,"t":1305092058.63174},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",11,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",4,3],["cp",0,4],["cp",6,5],["cp",0,6],["cp",13,12],["cp",0,13],["cp",17,16],["cp",0,18],["cp",20,19],["cp",0,21],["cp",23,22],["cp",0,23]],"B":[["cp",1,0],["cp",2,1],["cp",4,3]],"t":1305092059.1099},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305092059.11816},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092060.02222},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092060.11788},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092060.2301},{"y":25,"x":15,"t":1305092060.31802},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305092061.29399},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305092061.46985},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305092061.60575},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305092061.71008},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305092061.79801},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305092061.89397},{"y":25,"x":22,"t":1305092062.40578},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305092062.51787},{"y":25,"d":[["cp",21,24]],"x":24,"t":1305092062.64595},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",10,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",20,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",0,3],["cp",5,4],["cp",0,5],["cp",12,11],["cp",0,12],["cp",16,15],["cp",0,17],["cp",19,18],["cp",0,20],["cp",22,21],["cp",0,22]],"B":[["cp",1,0],["cp",3,2]],"t":1305092062.75781},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",9,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",19,22],[23,0,22,"M welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,1],["cp",0,2],["cp",4,3],["cp",0,4],["cp",11,10],["cp",0,11],["cp",15,14],["cp",0,16],["cp",18,17],["cp",0,19],["cp",21,20],["cp",0,21],[23,0,"2"]],"B":[["cp",2,1]],"t":1305092062.76687},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092063.2789},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092063.35798},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092063.49405},{"y":25,"x":15,"t":1305092063.56567},{"y":25,"d":[[24,14,"d"]],"x":16,"t":1305092063.74985},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305092063.8297},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305092063.93366},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305092064.1189},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",8,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",18,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",10,9],["cp",1,10],["cp",14,13],["cp",1,15],["cp",17,16],["cp",1,18],["cp",20,19],["cp",1,20],["cp",23,22],["cp",1,23]],"B":[["cp",1,0]],"t":1305092064.21389},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305092064.22605},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092065.14963},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092065.25349},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092065.34971},{"y":25,"x":15,"t":1305092065.40562},{"y":25,"d":[[24,14,"d"]],"x":16,"t":1305092065.59771},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305092065.69365},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305092065.8138},{"y":25,"d":[["cp",23,24]],"x":19,"t":1305092065.97363},{"y":25,"x":20,"t":1305092066.06178},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305092066.27761},{"y":25,"d":[["cp",23,24]],"x":20,"t":1305092066.74942},{"y":25,"d":[[24,19,"H"]],"x":21,"t":1305092067.12561},{"y":25,"d":[[24,20,"E"]],"x":22,"t":1305092067.19761},{"y":25,"d":[[24,21,"A"]],"x":23,"t":1305092067.34952},{"y":25,"d":[[24,22,"D"]],"x":24,"t":1305092067.45343},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",7,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",17,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",9,8],["cp",0,9],["cp",13,12],["cp",0,14],["cp",16,15],["cp",0,17],["cp",19,18],["cp",0,19],["cp",22,21],["cp",0,22]],"t":1305092068.1255},{"y":25,"d":[["cp",7,0],["cp",8,1],["cp",0,2],["cp",10,3],["cp",11,4],["cp",12,5],["cp",13,6],["cp",14,7],["cp",15,8],["cp",16,9],["cp",17,10],["cp",18,11],["cp",19,12],["cp",10,13],["cp",21,14],["cp",22,15],["cp",23,16],[17,0,37,"diff --git a/welcome.txt b/welcome.txt"],[18,0,28,"index 18832d3..fd3c069 100644"],[19,0,28,"--- a/welcome.txt "],[20,0,22,"+++ b/welcome.txt "],[21,0,13,"@@ -1 +1,2 @@ "],[22,0,17," Hello. "],[23,0,22,"+Nice to meet you. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",8,1],["cp",12,5],["cp",5,6],["cp",15,8],["cp",8,9],["cp",18,11],["cp",0,12],["cp",0,13],["cp",21,14],["cp",0,15],["cp",0,16],["cp",0,18],[21,0,12,["a","6"]],[23,0,17,["a","2"]]],"B":[[17,0,37,["a","1"]],[18,0,28,["a","1"]],[19,0,16,["a","1"]],["cp",19,20]],"t":1305092068.13853},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092072.56559},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092072.66949},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092072.77326},{"y":25,"x":15,"t":1305092072.85338},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305092073.07731},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305092073.26123},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305092073.39727},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305092073.52542},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305092073.65328},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305092073.75735},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",9,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",5,4],["cp",1,6],["cp",8,7],["cp",1,9],["cp",11,10],["cp",1,11],["cp",14,13],["cp",1,14],["cp",21,20],["cp",1,21],["cp",23,22],["cp",1,23]],"B":[["cp",17,16],["cp",18,17],["cp",19,18],["cp",0,20]],"t":1305092074.04542},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",3,6],["cp",13,7],["cp",14,8],["cp",15,9],["cp",16,10],["cp",17,11],["cp",18,12],["cp",19,13],["cp",20,14],["cp",21,15],["cp",22,16],["cp",23,17],[18,0,17,"# On branch master"],[19,0,25,"# Changes to be committed:"],[20,0,46,"# (use \"git reset HEAD ...\" to unstage)"],[21,0,6,"# "],[22,0,30,"# modified: welcome.txt"],["cp",21,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",7,1],["cp",1,2],["cp",10,4],["cp",0,5],["cp",13,7],["cp",0,8],["cp",0,10],["cp",0,13],["cp",20,14],["cp",22,16],["cp",0,20],[22,0,7,["a","7"]],[22,18,30,["a","2"]]],"B":[["cp",16,10],["cp",17,11],["cp",18,12],["cp",12,13],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19]],"t":1305092074.0556},{"y":25,"d":[[24,10,"e"]],"x":12,"t":1305092079.60496},{"y":25,"d":[[24,11,"c"]],"x":13,"t":1305092079.78127},{"y":25,"d":[[24,12,"h"]],"x":14,"t":1305092079.84491},{"y":25,"d":[[24,13,"o"]],"x":15,"t":1305092079.94888},{"y":25,"x":16,"t":1305092080.04498},{"y":25,"d":[[24,15,"B"]],"x":17,"t":1305092080.73322},{"y":25,"d":[[24,16,"y"]],"x":18,"t":1305092080.97286},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305092081.10902},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305092081.30897},{"y":25,"d":[[24,19,"B"]],"x":21,"t":1305092081.66906},{"y":25,"d":[[24,20,"y"]],"x":22,"t":1305092081.84475},{"y":25,"d":[[24,21,"e"]],"x":23,"t":1305092081.99668},{"y":25,"d":[[24,22,"."]],"x":24,"t":1305092082.72497},{"y":25,"x":25,"t":1305092082.88481},{"y":25,"d":[[24,24,">"]],"x":26,"t":1305092083.14098},{"y":25,"d":[[24,25,">"]],"x":27,"t":1305092083.31672},{"y":25,"x":28,"t":1305092083.53306},{"y":25,"d":[[24,27,"w"]],"x":29,"t":1305092083.84475},{"y":25,"d":[[24,28,"e"]],"x":30,"t":1305092084.02087},{"y":25,"d":[[24,29,"l"]],"x":31,"t":1305092084.18076},{"y":25,"d":[[24,30,37,"come.txt"]],"x":40,"t":1305092084.58067},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",2,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",20,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",3,2],["cp",4,3],["cp",2,4],["cp",7,6],["cp",2,7],["cp",14,13],["cp",2,14],["cp",16,15],["cp",2,16],["cp",22,21],["cp",2,22]],"B":[["cp",10,9],["cp",11,10],["cp",12,11],["cp",0,13]],"t":1305092085.74074},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305092085.74109},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092086.54867},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092086.64475},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092086.75658},{"y":25,"x":15,"t":1305092086.81257},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305092087.02856},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305092087.16479},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305092087.29251},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305092087.39669},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305092087.50876},{"y":25,"d":[["cp",16,24]],"x":21,"t":1305092087.58869},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",1,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",19,21],["cp",23,22],["cp",15,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",3,2],["cp",1,3],["cp",6,5],["cp",1,6],["cp",13,12],["cp",1,13],["cp",15,14],["cp",1,15],["cp",21,20],["cp",1,21]],"B":[["cp",9,8],["cp",10,9],["cp",11,10],["cp",0,12]],"t":1305092087.77246},{"y":25,"d":[["cp",12,0],["cp",13,1],["cp",14,2],["cp",15,3],["cp",16,4],["cp",17,5],["cp",18,6],["cp",19,7],["cp",20,8],["cp",7,9],["cp",22,10],["cp",3,11],["cp",4,12],["cp",5,13],["cp",6,14],["cp",7,15],["cp",8,16],["cp",7,17],[18,2,46,"Changes not staged for commit: "],[19,4,61,"(use \"git add ...\" to update what will be committed)"],[20,4,76,"(use \"git checkout -- ...\" to discard changes in working directory)"],["cp",8,22],["cp",7,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",12,0],["cp",14,2],["cp",1,5],["cp",20,8],["cp",1,12],["cp",1,14],["cp",8,16],["cp",1,20],[22,8,30,["a","1"]]],"B":[["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11]],"t":1305092087.78176},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092090.4689},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092090.54869},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092090.63632},{"d":[["r","@@ -1 +1,2 @@ "],["r"," Hello. "],["r","+Nice to meet you. "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","# Changes to be committed: "],["r","# (use \"git reset HEAD ...\" to unstage) "],["r","# "],["r","# modified: welcome.txt "],["r","# "],["r","bash-3.2$ echo Bye-Bye. >> welcome.txt "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","# Changes to be committed: "],["r","# (use \"git reset HEAD ...\" to unstage) "],["r","# "],["r","# modified: welcome.txt "],["r","# "],["r","# Changes not staged for commit: "],["r","# (use \"git add ...\" to update what will be committed) "],["r","# (use \"git checkout -- ...\" to discard changes in working directory) "],["r","# "],["r","# modified: welcome.txt "],["r","# "],["r","bash-3.2$ git "]],"x":15,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","66666666666667777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","22222222222222222277777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","77777777222222222222222222222227777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d",["r","77777777222222222222222222222227777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","77777777111111111111111111111117777777777777777777777777777777777777777777777777"],["a","7"],"d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305092090.7085,"i":1},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305092090.90045},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305092091.02038},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305092091.15651},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305092091.23631},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305092091.32451},{"y":25,"d":[["cp",3,24]],"x":21,"t":1305092091.41241},{"y":25,"x":22,"t":1305092091.5488},{"y":25,"d":[[24,21,"="]],"x":23,"t":1305092091.66851},{"y":25,"d":[[24,22,"-"]],"x":24,"t":1305092091.68436},{"y":25,"d":[[24,23,"s"]],"x":25,"t":1305092091.78037},{"y":25,"d":[[24,23," "]],"x":24,"t":1305092092.13242},{"y":25,"d":[[24,22," "]],"x":23,"t":1305092092.30834},{"y":25,"d":[["cp",3,24]],"x":22,"t":1305092092.47652},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305092092.70038},{"y":25,"d":[[24,22,"0"]],"x":24,"t":1305092092.71751},{"y":25,"d":[[24,23,"s"]],"x":25,"t":1305092092.82026},{"y":25,"d":[[24,23," "]],"x":24,"t":1305092093.19614},{"y":25,"d":[[24,22," "]],"x":23,"t":1305092093.37222},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305092093.41223},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",6,8],["cp",10,9],["cp",2,10],["cp",3,11],["cp",4,12],["cp",5,13],["cp",6,14],["cp",7,15],["cp",6,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",6,20],["cp",7,21],["cp",6,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",8,7],["cp",0,8],["cp",7,15],["cp",0,16],["cp",22,21],["cp",0,22]],"t":1305092093.56445},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",5,7],["cp",9,8],["cp",1,9],["cp",2,10],["cp",3,11],["cp",4,12],["cp",5,13],["cp",6,14],["cp",5,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",5,19],["cp",6,20],["cp",5,21],["cp",23,22],[23,0,22,"MM welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",7,6],["cp",1,7],["cp",6,14],["cp",1,15],["cp",21,20],["cp",1,21],[23,0,1,"21"]],"t":1305092093.58319},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092096.83647},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092096.92411},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092097.02025},{"y":25,"x":15,"t":1305092097.07735},{"y":25,"d":[[24,14,"d"]],"x":16,"t":1305092097.20413},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305092097.27598},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305092097.39634},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305092097.55698},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",4,6],["cp",8,7],["cp",0,8],["cp",1,9],["cp",2,10],["cp",3,11],["cp",4,12],["cp",5,13],["cp",4,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",4,18],["cp",5,19],["cp",4,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",6,5],["cp",0,6],["cp",5,13],["cp",0,14],["cp",20,19],["cp",0,20],["cp",23,22],["cp",0,23]],"t":1305092097.66791},{"y":25,"d":[["cp",15,7],["cp",16,8],["cp",17,9],["cp",4,10],["cp",5,11],["cp",21,13],["cp",22,14],["cp",23,15],[16,0,61,"diff --git a/welcome.txt b/welcome.txt "],[17,0,76,"index fd3c069..51dbfd2 100644 "],[18,0,16,"--- a/welcome.txt"],[19,0,30,"+++ b/welcome.txt "],[20,0,14,"@@ -1,2 +1,3 @@"],[21,0,22," Hello. "],[22,0,17," Nice to meet you."],[23,0,17,"+Bye-Bye. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",19,11],["cp",0,13],["cp",22,14],["cp",0,19],[20,0,14,["a","6"]],["cp",0,22],[23,0,8,["a","2"]]],"B":[[16,0,37,["a","1"]],[17,0,28,["a","1"]],[18,0,16,["a","1"]],["cp",18,19]],"t":1305092097.68074},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092101.99607},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092102.07631},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092102.172},{"y":25,"x":15,"t":1305092102.25988},{"y":25,"d":[[24,14,"d"]],"x":16,"t":1305092102.40388},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305092102.4919},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305092102.58009},{"y":25,"d":[["cp",15,24]],"x":19,"t":1305092102.75591},{"y":25,"x":20,"t":1305092102.81185},{"y":25,"d":[[24,19,"H"]],"x":21,"t":1305092103.07608},{"y":25,"d":[[24,20,"E"]],"x":22,"t":1305092103.18787},{"y":25,"d":[[24,21,"A"]],"x":23,"t":1305092103.36371},{"y":25,"d":[[24,22,"D"]],"x":24,"t":1305092103.42767},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",3,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",3,9],["cp",4,10],["cp",3,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",5,4],["cp",0,5],["cp",11,10],["cp",0,11],["cp",14,13],["cp",0,14],["cp",20,19],["cp",0,20],["cp",23,22],["cp",0,23]],"B":[["cp",16,15],["cp",17,16],["cp",18,17],["cp",0,19]],"t":1305092103.89171},{"y":25,"d":[["cp",8,0],["cp",3,1],["cp",4,2],["cp",12,4],["cp",13,5],["cp",14,6],["cp",15,7],["cp",16,8],["cp",17,9],["cp",18,10],["cp",19,11],["cp",20,12],["cp",21,13],["cp",22,14],["cp",23,15],["cp",7,16],[17,0,28,"index 18832d3..51dbfd2 100644"],["cp",9,18],["cp",10,19],[20,0,12,"@@ -1 +1,3 @@"],["cp",12,21],[22,1,17,"Nice to meet you."],["cp",14,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",10,2],["cp",0,4],["cp",13,5],["cp",0,10],["cp",19,11],["cp",0,13],["cp",22,14],["cp",0,19],[20,0,12,["a","6"]],[22,9,17,["a","2"]],["cp",14,23]],"B":[["cp",15,7],["cp",16,8],["cp",17,9],["cp",9,10],["cp",0,15],["cp",7,16],["cp",8,17],["cp",9,19]],"t":1305092103.90446},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092104.29182},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092104.37209},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092104.48348},{"y":25,"x":15,"t":1305092104.52366},{"y":25,"d":[[24,14,"d"]],"x":16,"t":1305092104.68384},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305092104.75588},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305092104.87557},{"y":25,"d":[["cp",6,24]],"x":19,"t":1305092105.04367},{"y":25,"x":20,"t":1305092105.17166},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305092105.65167},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305092105.83569},{"y":25,"d":[[24,21,"c"]],"x":23,"t":1305092106.00365},{"y":25,"d":[[24,22,"a"]],"x":24,"t":1305092106.12376},{"y":25,"d":[[24,23,"c"]],"x":25,"t":1305092106.26774},{"y":25,"d":[[24,24,"h"]],"x":26,"t":1305092106.35594},{"y":25,"d":[[24,25,"e"]],"x":27,"t":1305092106.49972},{"y":25,"d":[[24,26,"d"]],"x":28,"t":1305092106.67564},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",6,15],["cp",17,16],["cp",8,17],["cp",9,18],["cp",20,19],["cp",11,20],["cp",22,21],["cp",13,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,2],["cp",5,4],["cp",0,5],["cp",11,10],["cp",0,11],["cp",14,13],["cp",0,14],["cp",20,19],["cp",0,20],["cp",22,21],["cp",13,22],["cp",0,23]],"B":[["cp",7,6],["cp",8,7],["cp",9,8],["cp",0,10],["cp",6,15],["cp",7,16],["cp",8,17],["cp",0,19]],"t":1305092107.17189},{"y":25,"d":[["cp",7,0],["cp",8,1],["cp",9,2],["cp",10,3],["cp",11,4],["cp",12,5],["cp",13,6],["cp",14,7],["cp",15,8],["cp",16,9],["cp",1,10],["cp",2,11],["cp",19,12],["cp",4,13],["cp",21,14],["cp",6,15],["cp",23,16],["cp",8,17],[18,0,28,"index 18832d3..fd3c069 100644"],["cp",1,19],["cp",2,20],[21,0,17,"@@ -1 +1,2 @@ "],["cp",4,22],["cp",14,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,1],["cp",10,3],["cp",0,4],["cp",13,6],["cp",0,10],["cp",19,12],["cp",0,13],["cp",21,14],["cp",6,15],["cp",0,19],["cp",12,21],["cp",0,22],["cp",14,23]],"B":[["cp",7,0],["cp",8,1],["cp",1,2],["cp",3,6],["cp",3,7],["cp",15,8],["cp",0,9],["cp",1,10],["cp",1,11],["cp",3,15],["cp",3,16],["cp",8,17],["cp",0,18],["cp",1,19],["cp",1,20]],"t":1305092107.18988},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092107.71557},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092107.79549},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092107.88353},{"y":25,"x":15,"t":1305092107.94774},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305092108.1235},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305092108.19547},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305092108.37977},{"y":25,"d":[[24,17,"m"]],"x":19,"t":1305092108.53941},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305092108.67585},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305092108.74747},{"y":25,"x":22,"t":1305092108.85939},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305092109.18755},{"y":25,"d":[[24,22,"m"]],"x":24,"t":1305092109.46772},{"y":25,"x":25,"t":1305092109.5958},{"y":25,"d":[[24,24,"\""]],"x":26,"t":1305092109.91544},{"y":25,"d":[[24,25,"w"]],"x":27,"t":1305092110.21934},{"y":25,"d":[[24,26,"h"]],"x":28,"t":1305092110.30755},{"y":25,"d":[[24,27,"i"]],"x":29,"t":1305092110.41967},{"y":25,"d":[[24,28,"c"]],"x":30,"t":1305092110.57966},{"y":25,"d":[[24,29,"h"]],"x":31,"t":1305092110.69945},{"y":25,"x":32,"t":1305092110.94732},{"y":25,"d":[[24,31,"v"]],"x":33,"t":1305092111.38747},{"y":25,"d":[[24,32,"e"]],"x":34,"t":1305092111.56336},{"y":25,"d":[[24,33,"r"]],"x":35,"t":1305092111.62756},{"y":25,"d":[[24,34,"s"]],"x":36,"t":1305092111.7713},{"y":25,"d":[[24,35,"i"]],"x":37,"t":1305092111.81947},{"y":25,"d":[[24,36,"o"]],"x":38,"t":1305092111.92341},{"y":25,"d":[[24,37,"n"]],"x":39,"t":1305092112.06732},{"y":25,"x":40,"t":1305092112.29141},{"y":25,"d":[[24,39,"c"]],"x":41,"t":1305092112.69121},{"y":25,"d":[[24,40,"h"]],"x":42,"t":1305092112.79587},{"y":25,"d":[[24,41,"e"]],"x":43,"t":1305092112.92326},{"y":25,"d":[[24,42,"c"]],"x":44,"t":1305092113.0994},{"y":25,"d":[[24,43,"k"]],"x":45,"t":1305092113.17929},{"d":[["r","index fd3c069..51dbfd2 100644 "],["r","--- a/welcome.txt "],["r","+++ b/welcome.txt "],["r","@@ -1,2 +1,3 @@ "],["r"," Hello. "],["r"," Nice to meet you. "],["r","+Bye-Bye. "],["r","bash-3.2$ git diff HEAD "],["r","diff --git a/welcome.txt b/welcome.txt "],["r","index 18832d3..51dbfd2 100644 "],["r","--- a/welcome.txt "],["r","+++ b/welcome.txt "],["r","@@ -1 +1,3 @@ "],["r"," Hello. "],["r","+Nice to meet you. "],["r","+Bye-Bye. "],["r","bash-3.2$ git diff --cached "],["r","diff --git a/welcome.txt b/welcome.txt "],["r","index 18832d3..fd3c069 100644 "],["r","--- a/welcome.txt "],["r","+++ b/welcome.txt "],["r","@@ -1 +1,2 @@ "],["r"," Hello. "],["r","+Nice to meet you. "],["r","bash-3.2$ git commit -m \"which version checke "]],"x":46,"B":[["r","11111111111111111111111111111000000000000000000000000000000000000000000000000000"],["r","11111111111111111000000000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],"d","d","d","d",["r","11111111111111111111111111111111111111000000000000000000000000000000000000000000"],["r","11111111111111111111111111111000000000000000000000000000000000000000000000000000"],["r","11111111111111111000000000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],"d","d","d","d",["r","11111111111111111111111111111111111111000000000000000000000000000000000000000000"],["r","11111111111111111111111111111000000000000000000000000000000000000000000000000000"],["r","11111111111111111000000000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],"d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d",["r","66666666666666677777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","22222222277777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","66666666666667777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","22222222222222222277777777777777777777777777777777777777777777777777777777777777"],["r","22222222277777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","66666666666667777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","22222222222222222277777777777777777777777777777777777777777777777777777777777777"],["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305092113.41155,"i":1},{"y":25,"d":[[24,45,"d"]],"x":47,"t":1305092113.57947},{"y":25,"x":48,"t":1305092113.7394},{"y":25,"d":[[24,47,"i"]],"x":49,"t":1305092113.89128},{"y":25,"d":[[24,48,"n"]],"x":50,"t":1305092114.03516},{"y":25,"d":[[24,49,"?"]],"x":51,"t":1305092114.5074},{"y":25,"d":[[24,50,"\""]],"x":52,"t":1305092114.89937},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",0,9],["cp",1,10],["cp",12,11],["cp",3,12],["cp",14,13],["cp",5,14],["cp",16,15],["cp",7,16],["cp",18,17],["cp",0,18],["cp",1,19],["cp",21,20],["cp",3,21],["cp",13,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",0,3],["cp",6,5],["cp",0,6],["cp",12,11],["cp",0,12],["cp",14,13],["cp",5,14],["cp",0,15],["cp",11,20],["cp",0,21],["cp",13,22],["cp",0,23]],"B":[["cp",1,0],["cp",3,2],["cp",8,7],["cp",9,8],["cp",0,9],["cp",2,11],["cp",7,16],["cp",8,17],["cp",0,18],["cp",2,20]],"t":1305092115.63528},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",0,9],["cp",11,10],["cp",2,11],["cp",13,12],["cp",4,13],["cp",15,14],["cp",6,15],["cp",17,16],["cp",8,17],["cp",0,18],["cp",20,19],["cp",2,20],["cp",12,21],["cp",23,22],[23,0,50,"[master 0e3a4c9] which version checked in? "]],"x":1,"f":[["cp",2,1],["cp",0,2],["cp",5,4],["cp",0,5],["cp",11,10],["cp",0,11],["cp",13,12],["cp",4,13],["cp",0,14],["cp",10,19],["cp",0,20],["cp",12,21],["cp",0,22]],"B":[["cp",2,1],["cp",7,6],["cp",8,7],["cp",0,8],["cp",1,10],["cp",6,15],["cp",7,16],["cp",0,17],["cp",1,19]],"t":1305092115.92652},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",1,10],["cp",12,11],["cp",3,12],["cp",14,13],["cp",5,14],["cp",16,15],["cp",7,16],["cp",8,17],["cp",19,18],["cp",1,19],["cp",11,20],["cp",22,21],["cp",23,22],[23,0,48," 1 files changed, 1 insertions(+), 0 deletions(-)"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",4,3],["cp",1,4],["cp",10,9],["cp",1,10],["cp",12,11],["cp",3,12],["cp",1,13],["cp",9,18],["cp",1,19],["cp",11,20],["cp",1,21]],"B":[["cp",1,0],["cp",6,5],["cp",7,6],["cp",8,7],["cp",0,9],["cp",5,14],["cp",6,15],["cp",7,16],["cp",0,18]],"t":1305092115.92811},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092116.89095},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092116.97109},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092117.1152},{"y":25,"x":15,"t":1305092117.1872},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305092117.45921},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305092117.63509},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305092117.74831},{"y":25,"x":19,"t":1305092117.83527},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305092118.0192},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305092118.20304},{"y":25,"d":[[24,20,"o"]],"x":22,"t":1305092118.84301},{"y":25,"d":[[24,21,"n"]],"x":23,"t":1305092118.97887},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305092119.05905},{"y":25,"d":[[24,23,"l"]],"x":25,"t":1305092119.16339},{"y":25,"d":[[24,24,"i"]],"x":26,"t":1305092119.3231},{"y":25,"d":[[24,25,"n"]],"x":27,"t":1305092119.43483},{"y":25,"d":[[24,26,"e"]],"x":28,"t":1305092119.54741},{"y":25,"x":29,"t":1305092119.64301},{"y":25,"d":[[24,28,"-"]],"x":30,"t":1305092120.31496},{"y":25,"d":[[24,29,"-"]],"x":31,"t":1305092120.49896},{"y":25,"d":[[24,30,"s"]],"x":32,"t":1305092120.65085},{"y":25,"d":[[24,31,"t"]],"x":33,"t":1305092120.74699},{"y":25,"d":[[24,32,"a"]],"x":34,"t":1305092120.86669},{"y":25,"d":[[24,33,"t"]],"x":35,"t":1305092120.97878},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",0,9],["cp",11,10],["cp",2,11],["cp",13,12],["cp",4,13],["cp",15,14],["cp",6,15],["cp",7,16],["cp",18,17],["cp",0,18],["cp",10,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",3,2],["cp",0,3],["cp",9,8],["cp",0,9],["cp",11,10],["cp",2,11],["cp",0,12],["cp",8,17],["cp",0,18],["cp",10,19],["cp",0,20]],"B":[["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,8],["cp",4,13],["cp",5,14],["cp",6,15],["cp",0,17]],"t":1305092121.20287},{"y":25,"d":[["cp",7,0],["cp",8,1],["cp",9,2],["cp",10,3],["cp",11,4],["cp",12,5],["cp",13,6],["cp",14,7],["cp",15,8],["cp",0,9],["cp",17,10],["cp",2,11],["cp",3,12],["cp",20,13],["cp",21,14],["cp",22,15],["cp",23,16],[17,0,32,"0e3a4c9 which version checked in?"],[18,1,13,"welcome.txt |"],[18,18,20,"1 +"],["cp",15,19],[20,0,50,"61b1516 who does commit? "],[21,0,41,"3869015 intialized. "],["cp",18,22],["cp",15,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",8,1],["cp",0,2],["cp",10,3],["cp",11,4],["cp",0,8],["cp",1,10],["cp",0,11],["cp",3,12],[17,0,12,"3333333777777"],[18,20,"2"],["cp",0,19],["cp",17,20],["cp",17,21],["cp",18,22]],"B":[["cp",6,0],["cp",1,4],["cp",1,5],["cp",13,6],["cp",14,7],["cp",0,8],["cp",0,9],["cp",1,13],["cp",1,14],["cp",1,15],["cp",1,16]],"t":1305092121.21707},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092125.57857},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092125.66673},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092125.76283},{"y":25,"x":15,"t":1305092125.83464},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305092125.98735},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305092126.09855},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305092126.22661},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305092126.32322},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305092126.43493},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305092126.51475},{"y":25,"x":22,"t":1305092126.68255},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305092126.82656},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305092126.93858},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",1,10],["cp",2,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",14,18],["cp",20,19],["cp",21,20],["cp",17,21],["cp",14,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",1,4],["cp",0,9],["cp",1,10],["cp",2,11],["cp",1,12],["cp",17,16],["cp",18,17],["cp",1,18],["cp",16,19],["cp",17,21],["cp",1,22]],"B":[["cp",1,0],["cp",6,5],["cp",7,6],["cp",8,7],["cp",0,9]],"t":1305092127.04269},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",0,9],["cp",1,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",13,17],["cp",19,18],["cp",20,19],["cp",16,20],["cp",13,21],["cp",23,22],[23,0,22," M welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,3],["cp",9,8],["cp",0,9],["cp",1,10],["cp",0,11],["cp",16,15],["cp",17,16],["cp",0,17],["cp",15,18],["cp",16,20],["cp",0,21],[23,1,"1"]],"B":[["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,8]],"t":1305092127.05097},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305092128.78762},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305092128.85059},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305092128.97871},{"y":25,"x":15,"t":1305092129.05058},{"y":25,"d":[[24,14,"d"]],"x":16,"t":1305092129.20239},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305092129.27438},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305092129.38659},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305092129.56245},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",0,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",12,16],["cp",18,17],["cp",19,18],["cp",15,19],["cp",12,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",8,7],["cp",2,8],["cp",0,9],["cp",2,10],["cp",15,14],["cp",16,15],["cp",2,16],["cp",14,17],["cp",15,19],["cp",2,20],["cp",23,22],["cp",2,23]],"B":[["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,7]],"t":1305092130.25061},{"y":25,"d":[["cp",8,0],["cp",9,1],["cp",10,2],["cp",11,3],["cp",12,4],["cp",13,5],["cp",14,6],["cp",15,7],["cp",4,8],["cp",17,9],["cp",18,10],["cp",7,11],["cp",21,13],["cp",22,14],["cp",23,15],[16,0,48,"diff --git a/welcome.txt b/welcome.txt "],[17,0,28,"index fd3c069..51dbfd2 100644"],[18,0,18,"--- a/welcome.txt "],[19,0,20,"+++ b/welcome.txt "],[20,0,48,"@@ -1,2 +1,3 @@ "],["cp",0,21],[22,1,17,"Nice to meet you."],[23,0,17,"+Bye-Bye. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",9,1],["cp",14,6],["cp",15,7],["cp",6,9],["cp",6,10],["cp",7,11],["cp",22,14],["cp",0,15],["cp",0,17],["cp",0,18],["cp",0,19],[20,0,14,["a","6"]],["cp",0,22],[23,0,8,["a","2"]]],"B":[["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,6],[16,0,37,["a","1"]],[17,0,28,["a","1"]],[18,0,16,["a","1"]],["cp",18,19]],"t":1305092130.26254},{"y":25,"d":[[24,10,"e"]],"x":12,"t":1305092132.18645},{"y":25,"d":[[24,11,"x"]],"x":13,"t":1305092132.35432},{"y":25,"d":[[24,12,"i"]],"x":14,"t":1305092132.49858},{"y":25,"d":[[24,13,"t"]],"x":15,"t":1305092132.61041},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",3,7],["cp",9,8],["cp",10,9],["cp",6,10],["cp",3,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",6,5],["cp",7,6],["cp",1,7],["cp",5,8],["cp",6,10],["cp",1,11],["cp",14,13],["cp",1,14],["cp",20,19],["cp",1,20],["cp",23,22],["cp",1,23]],"B":[["cp",16,15],["cp",17,16],["cp",18,17],["cp",0,19]],"t":1305092132.77026},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",2,6],["cp",8,7],["cp",9,8],["cp",5,9],["cp",2,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,13,"exit "]],"x":1,"f":[["cp",1,0],["cp",5,4],["cp",6,5],["cp",0,6],["cp",4,7],["cp",5,9],["cp",0,10],["cp",13,12],["cp",0,13],["cp",19,18],["cp",0,19],["cp",22,21],["cp",0,22]],"B":[["cp",15,14],["cp",16,15],["cp",17,16],["cp",0,18]],"t":1305092132.77051}]} \ No newline at end of file diff --git a/html/part2/ch05-02-index-and-diff.html b/html/part2/ch05-02-index-and-diff.html new file mode 100644 index 000000000..fecea3b49 --- /dev/null +++ b/html/part2/ch05-02-index-and-diff.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch05-02-index-and-diff +json_file: ch05-02-index-and-diff.json +--- diff --git a/html/part2/ch05-02-index-and-diff.json b/html/part2/ch05-02-index-and-diff.json new file mode 100644 index 000000000..2cd957b61 --- /dev/null +++ b/html/part2/ch05-02-index-and-diff.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305094383.97764,"i":1},{"y":1,"d":[[0,10,"c"]],"x":12,"t":1305094384.37002},{"y":1,"d":[[0,11,"d"]],"x":13,"t":1305094384.54581},{"y":1,"x":14,"t":1305094384.62549},{"y":1,"d":[[0,13,"/"]],"x":15,"t":1305094384.78557},{"y":1,"d":[[0,14,"p"]],"x":16,"t":1305094385.16169},{"y":1,"d":[[0,15,"a"]],"x":17,"t":1305094385.21086},{"y":1,"d":[[0,16,"t"]],"x":18,"t":1305094385.35371},{"y":1,"d":[[0,17,"h"]],"x":19,"t":1305094385.44161},{"y":1,"d":[[0,18,"/"]],"x":20,"t":1305094385.58439},{"y":1,"d":[[0,19,"t"]],"x":21,"t":1305094385.80161},{"y":1,"d":[[0,20,"o"]],"x":22,"t":1305094385.88157},{"y":1,"d":[[0,21,"/"]],"x":23,"t":1305094386.01566},{"y":1,"d":[[0,22,"m"]],"x":24,"t":1305094386.24186},{"y":1,"d":[[0,23,"y"]],"x":25,"t":1305094386.42615},{"y":1,"d":[[0,24,"/"]],"x":26,"t":1305094386.49657},{"y":1,"d":[[0,25,"w"]],"x":27,"t":1305094386.74563},{"y":1,"d":[[0,26,"o"]],"x":28,"t":1305094386.81745},{"y":1,"d":[[0,27,33,"rkspace"]],"x":35,"t":1305094386.95988},{"y":1,"d":[[0,34,"/"]],"x":36,"t":1305094387.54561},{"y":1,"d":[[0,35,"d"]],"x":37,"t":1305094387.65758},{"y":1,"d":[[0,36,"e"]],"x":38,"t":1305094387.81732},{"y":1,"d":[[0,37,"m"]],"x":39,"t":1305094387.84956},{"y":1,"d":[[0,38,39,"o/"]],"x":41,"t":1305094388.03979},{"y":2,"x":1,"t":1305094388.4654},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305094388.46568},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305094388.80943},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305094388.87334},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305094388.99347},{"y":2,"x":15,"t":1305094389.04924},{"y":2,"d":[[1,14,"s"]],"x":16,"t":1305094389.17739},{"y":2,"d":[[1,15,"t"]],"x":17,"t":1305094389.35327},{"y":2,"d":[[1,16,"a"]],"x":18,"t":1305094389.48119},{"y":2,"d":[[1,17,"t"]],"x":19,"t":1305094389.5693},{"y":2,"d":[[1,18,"u"]],"x":20,"t":1305094389.65761},{"y":2,"d":[[1,19,"s"]],"x":21,"t":1305094389.74522},{"y":2,"x":22,"t":1305094389.8975},{"y":2,"d":[[1,21,"-"]],"x":23,"t":1305094389.9853},{"y":2,"d":[[1,22,"s"]],"x":24,"t":1305094390.07333},{"y":3,"x":1,"t":1305094390.20116},{"y":4,"d":[[2,1,13,"M welcome.txt"],[3,0,8,"bash-3.2$"]],"x":11,"f":[[2,1,"1"]],"t":1305094390.21187},{"y":4,"d":[[3,10,"g"]],"x":12,"t":1305094390.56131},{"y":4,"d":[[3,11,"i"]],"x":13,"t":1305094390.62522},{"y":4,"d":[[3,12,"t"]],"x":14,"t":1305094390.72942},{"y":4,"x":15,"t":1305094390.78529},{"y":4,"d":[[3,14,"l"]],"x":16,"t":1305094390.86524},{"y":4,"d":[[3,15,"o"]],"x":17,"t":1305094391.04249},{"y":4,"d":[[3,15," "]],"x":16,"t":1305094391.67322},{"y":4,"d":[[3,14," "]],"x":15,"t":1305094391.95326},{"y":4,"d":[[3,14,"d"]],"x":16,"t":1305094392.58536},{"y":4,"d":[[3,15,"i"]],"x":17,"t":1305094392.65728},{"y":4,"d":[[3,16,"f"]],"x":18,"t":1305094392.76912},{"y":4,"d":[[3,17,"f"]],"x":19,"t":1305094392.94517},{"y":5,"x":1,"t":1305094393.18503},{"y":13,"d":[[4,0,37,"diff --git a/welcome.txt b/welcome.txt"],[5,0,28,"index fd3c069..51dbfd2 100644"],[6,0,16,"--- a/welcome.txt"],[7,0,16,"+++ b/welcome.txt"],[8,0,14,"@@ -1,2 +1,3 @@"],[9,1,6,"Hello."],[10,1,17,"Nice to meet you."],[11,0,8,"+Bye-Bye."],[12,0,8,"bash-3.2$"]],"x":11,"f":[[8,0,14,["a","6"]],[11,0,8,["a","2"]]],"B":[[4,0,37,["a","1"]],[5,0,28,["a","1"]],[6,0,16,["a","1"]],["cp",6,7]],"t":1305094393.19721},{"y":13,"d":[[12,10,"g"]],"x":12,"t":1305094394.16132},{"y":13,"d":[[12,11,"i"]],"x":13,"t":1305094394.24117},{"y":13,"d":[[12,12,"t"]],"x":14,"t":1305094394.35334},{"y":13,"x":15,"t":1305094394.39315},{"y":13,"d":[[12,14,"c"]],"x":16,"t":1305094394.55314},{"y":13,"d":[[12,15,"h"]],"x":17,"t":1305094394.65727},{"y":13,"d":[[12,16,"e"]],"x":18,"t":1305094394.75309},{"y":13,"d":[[12,17,"c"]],"x":19,"t":1305094394.91442},{"y":13,"d":[[12,18,"k"]],"x":20,"t":1305094394.99336},{"y":13,"d":[[12,19,"o"]],"x":21,"t":1305094395.11301},{"y":13,"d":[[12,20,"u"]],"x":22,"t":1305094395.20908},{"y":13,"d":[[12,21,"t"]],"x":23,"t":1305094395.2971},{"y":13,"x":24,"t":1305094395.37737},{"y":13,"d":[[12,23,"-"]],"x":25,"t":1305094395.92915},{"y":13,"d":[[12,24,"-"]],"x":26,"t":1305094396.10497},{"y":13,"x":27,"t":1305094396.20899},{"y":13,"d":[[12,26,"w"]],"x":28,"t":1305094396.43299},{"y":13,"d":[[12,27,"e"]],"x":29,"t":1305094396.5689},{"y":13,"d":[[12,28,36,"lcome.txt"]],"x":38,"t":1305094396.80121},{"y":14,"x":1,"t":1305094397.13689},{"y":14,"d":[[13,0,8,"bash-3.2$"]],"x":11,"t":1305094397.145},{"y":14,"d":[[13,10,"g"]],"x":12,"t":1305094397.68888},{"y":14,"d":[[13,11,"i"]],"x":13,"t":1305094397.77693},{"y":14,"d":[[13,12,"t"]],"x":14,"t":1305094397.897},{"y":14,"x":15,"t":1305094397.93712},{"y":14,"d":[[13,14,"s"]],"x":16,"t":1305094398.11315},{"y":14,"d":[[13,15,"t"]],"x":17,"t":1305094398.18506},{"y":14,"d":[[13,16,"a"]],"x":18,"t":1305094398.3049},{"y":14,"d":[[13,17,"t"]],"x":19,"t":1305094398.39307},{"y":14,"d":[[13,18,"u"]],"x":20,"t":1305094398.46497},{"y":14,"d":[[13,19,"s"]],"x":21,"t":1305094398.53684},{"y":14,"x":22,"t":1305094398.66485},{"y":14,"d":[[13,21,"-"]],"x":23,"t":1305094398.76884},{"y":14,"d":[["cp",1,13]],"x":24,"t":1305094398.85683},{"y":15,"x":1,"t":1305094398.99285},{"y":15,"d":[[14,0,8,"bash-3.2$"]],"x":11,"t":1305094399.0024},{"y":15,"d":[[14,10,"l"]],"x":12,"t":1305094399.4889},{"y":15,"d":[[14,11,"s"]],"x":13,"t":1305094399.5527},{"y":15,"x":14,"t":1305094399.64202},{"y":15,"d":[[14,13,"-"]],"x":15,"t":1305094399.74481},{"y":15,"d":[[14,14,"-"]],"x":16,"t":1305094400.21683},{"y":15,"d":[[14,15,"f"]],"x":17,"t":1305094400.46478},{"y":15,"d":[[14,16,"u"]],"x":18,"t":1305094400.54499},{"y":15,"d":[[14,17,"l"]],"x":19,"t":1305094400.68884},{"y":15,"d":[[14,18,"l"]],"x":20,"t":1305094400.8487},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/demo/ "],["r","bash-3.2$ git status -s "],["r"," M welcome.txt "],["r","bash-3.2$ git diff "],["r","diff --git a/welcome.txt b/welcome.txt "],["r","index fd3c069..51dbfd2 100644 "],["r","--- a/welcome.txt "],["r","+++ b/welcome.txt "],["r","@@ -1,2 +1,3 @@ "],["r"," Hello. "],["r"," Nice to meet you. "],["r","+Bye-Bye. "],["r","bash-3.2$ git checkout -- welcome.txt "],["r","bash-3.2$ git status -s "],["r","bash-3.2$ ls --full- "],["a"," "],"d","d","d","d","d","d","d","d","d"],"x":21,"B":[["a","0"],"d","d","d",["r","11111111111111111111111111111111111111000000000000000000000000000000000000000000"],["r","11111111111111111111111111111000000000000000000000000000000000000000000000000000"],["r","11111111111111111000000000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":15,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d",["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","66666666666666677777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","22222222277777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305094401.22473,"i":1},{"y":15,"d":[[14,20,"t"]],"x":22,"t":1305094401.53686},{"y":15,"d":[[14,21,"i"]],"x":23,"t":1305094401.95364},{"y":15,"d":[[14,22,"m"]],"x":24,"t":1305094402.06487},{"y":15,"d":[[14,23,"e"]],"x":25,"t":1305094402.16093},{"y":15,"x":26,"t":1305094402.27271},{"y":15,"d":[[14,25,"."]],"x":27,"t":1305094402.48889},{"y":15,"d":[[14,26,"g"]],"x":28,"t":1305094402.63261},{"y":15,"d":[[14,27,"i"]],"x":29,"t":1305094402.72061},{"y":15,"d":[[14,28,29,"t/"]],"x":31,"t":1305094402.88207},{"y":15,"d":[[14,30,"i"]],"x":32,"t":1305094403.11266},{"y":15,"d":[[14,31,"n"]],"x":33,"t":1305094403.26481},{"y":15,"d":[[14,32,"d"]],"x":34,"t":1305094403.80862},{"y":15,"d":[[14,33,34,"ex"]],"x":37,"t":1305094404.06639},{"y":16,"x":1,"t":1305094404.36851},{"y":17,"d":[[15,0,77,"-rw-r--r-- 1 jiangxin staff 112 2011-05-11 14:13:19.000000000 +0800 .git/index"],[16,0,8,"bash-3.2$"]],"x":11,"t":1305094404.37874},{"y":17,"d":[[16,10,"g"]],"x":12,"t":1305094405.0489},{"y":17,"d":[[16,11,"i"]],"x":13,"t":1305094405.1286},{"y":17,"d":[[16,12,"t"]],"x":14,"t":1305094405.23254},{"y":17,"x":15,"t":1305094405.28875},{"y":17,"d":[[16,14,"s"]],"x":16,"t":1305094405.3846},{"y":17,"d":[[16,15,"t"]],"x":17,"t":1305094405.50474},{"y":17,"d":[[16,16,"a"]],"x":18,"t":1305094405.64178},{"y":17,"d":[[16,17,"t"]],"x":19,"t":1305094405.72907},{"y":17,"d":[[16,18,"u"]],"x":20,"t":1305094405.83245},{"y":17,"d":[[16,19,"s"]],"x":21,"t":1305094405.88869},{"y":17,"x":22,"t":1305094406.0247},{"y":17,"d":[[16,21,"-"]],"x":23,"t":1305094406.13677},{"y":17,"d":[["cp",1,16]],"x":24,"t":1305094406.24122},{"y":18,"x":1,"t":1305094407.03245},{"y":18,"d":[[17,0,8,"bash-3.2$"]],"x":11,"t":1305094407.04063},{"y":18,"d":[["cp",1,17]],"x":11,"t":1305094407.69632},{"y":18,"d":[["cp",14,17]],"x":11,"t":1305094407.8566},{"y":19,"x":1,"t":1305094408.39243},{"y":20,"d":[["cp",15,18],[19,0,8,"bash-3.2$"]],"x":11,"t":1305094408.39947},{"y":20,"d":[[19,10,"t"]],"x":12,"t":1305094410.3687},{"y":20,"d":[[19,11,"o"]],"x":13,"t":1305094410.45632},{"y":20,"d":[[19,12,"u"]],"x":14,"t":1305094410.52048},{"y":20,"d":[[19,13,"c"]],"x":15,"t":1305094410.58436},{"y":20,"d":[[19,14,"h"]],"x":16,"t":1305094410.72832},{"y":20,"x":17,"t":1305094410.84852},{"y":20,"d":[[19,16,"w"]],"x":18,"t":1305094411.04847},{"y":20,"d":[[19,17,"e"]],"x":19,"t":1305094411.18433},{"y":20,"d":[[19,18,26,"lcome.txt"]],"x":29,"t":1305094411.41661},{"y":21,"x":1,"t":1305094411.75215},{"y":21,"d":[[20,0,8,"bash-3.2$"]],"x":11,"t":1305094411.75791},{"y":21,"d":[[20,10,"g"]],"x":12,"t":1305094412.04039},{"y":21,"d":[[20,11,"i"]],"x":13,"t":1305094412.1443},{"y":21,"d":[[20,12,"t"]],"x":14,"t":1305094412.23239},{"y":21,"x":15,"t":1305094412.29629},{"y":21,"d":[[20,14,"s"]],"x":16,"t":1305094412.40821},{"y":21,"d":[[20,15,"t"]],"x":17,"t":1305094412.48028},{"y":21,"d":[[20,16,"a"]],"x":18,"t":1305094412.60051},{"y":21,"d":[[20,17,"t"]],"x":19,"t":1305094412.70435},{"y":21,"d":[[20,18,"u"]],"x":20,"t":1305094412.80048},{"y":21,"d":[[20,19,"s"]],"x":21,"t":1305094412.8562},{"y":21,"x":22,"t":1305094413.00821},{"y":21,"d":[[20,21,"-"]],"x":23,"t":1305094413.08818},{"y":21,"d":[["cp",1,20]],"x":24,"t":1305094413.20016},{"y":22,"x":1,"t":1305094413.33608},{"y":22,"d":[[21,0,8,"bash-3.2$"]],"x":11,"t":1305094413.34528},{"y":22,"d":[["cp",1,21]],"x":11,"t":1305094414.55219},{"y":22,"d":[["cp",19,21]],"x":11,"t":1305094414.92828},{"y":22,"d":[["cp",14,21]],"x":11,"t":1305094416.24835},{"y":23,"x":1,"t":1305094417.60788},{"y":24,"d":[[22,0,77,"-rw-r--r-- 1 jiangxin staff 112 2011-05-11 14:13:33.000000000 +0800 .git/index"],[23,0,8,"bash-3.2$"]],"x":11,"t":1305094417.61864},{"y":24,"d":[[23,10,"g"]],"x":12,"t":1305094421.29599},{"y":24,"d":[[23,11,"i"]],"x":13,"t":1305094421.37579},{"y":24,"d":[[23,12,"t"]],"x":14,"t":1305094421.47999},{"y":24,"x":15,"t":1305094421.52778},{"y":24,"d":[[23,14,"l"]],"x":16,"t":1305094421.71196},{"y":24,"d":[[23,15,"s"]],"x":17,"t":1305094421.89602},{"y":24,"d":[[23,16,"-"]],"x":18,"t":1305094422.64776},{"y":24,"d":[[23,17,"t"]],"x":19,"t":1305094423.15171},{"y":24,"d":[[23,18,"r"]],"x":20,"t":1305094423.35171},{"y":24,"d":[[23,19,"e"]],"x":21,"t":1305094423.5359},{"y":24,"d":[[23,20,"e"]],"x":22,"t":1305094423.71986},{"y":24,"d":[[23,20," "]],"x":21,"t":1305094424.63191},{"y":24,"d":[[23,19," "]],"x":20,"t":1305094424.80759},{"y":24,"d":[[23,18," "]],"x":19,"t":1305094424.97573},{"y":24,"d":[[23,17," "]],"x":18,"t":1305094425.13547},{"y":24,"d":[[23,17,"f"]],"x":19,"t":1305094425.27991},{"y":24,"d":[[23,18,"i"]],"x":20,"t":1305094425.37586},{"y":24,"d":[[23,19,"l"]],"x":21,"t":1305094425.46373},{"y":24,"x":21,"t":1305094425.87349},{"y":24,"d":[[23,20,"e"]],"x":22,"t":1305094426.35966},{"y":24,"d":[[23,21,"s"]],"x":23,"t":1305094426.86365},{"y":24,"x":24,"t":1305094427.05559},{"y":24,"d":[[23,23,"-"]],"x":25,"t":1305094427.28775},{"y":24,"d":[[23,24,"s"]],"x":26,"t":1305094427.37546},{"y":25,"x":1,"t":1305094427.67976},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",0,12],["cp",14,13],["cp",15,14],["cp",0,15],["cp",13,16],["cp",14,17],["cp",19,18],["cp",0,19],["cp",13,20],["cp",22,21],["cp",23,22],[23,0,48,"100644 fd3c069c1de4f4bc9b15940f490aeb48852f3c42 0"],[23,56,66,"welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,1],["cp",0,2],["cp",8,7],["cp",0,8],["cp",11,10],["cp",0,11]],"B":[["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,7]],"t":1305094427.68754},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305094429.98362},{"y":25,"x":25,"t":1305094430.77561},{"y":25,"x":26,"t":1305094431.00858},{"y":25,"x":27,"t":1305094431.14369},{"y":25,"d":[[24,26,"-"]],"x":28,"t":1305094431.33565},{"y":25,"d":[[24,27,"-"]],"x":29,"t":1305094431.52757},{"y":25,"d":[[24,28,"d"]],"x":30,"t":1305094431.63965},{"y":25,"d":[[24,29,"e"]],"x":31,"t":1305094431.79136},{"d":[["r","bash-3.2$ git status -s "],["r"," M welcome.txt "],["r","bash-3.2$ git diff "],["r","diff --git a/welcome.txt b/welcome.txt "],["r","index fd3c069..51dbfd2 100644 "],["r","--- a/welcome.txt "],["r","+++ b/welcome.txt "],["r","@@ -1,2 +1,3 @@ "],["r"," Hello. "],["r"," Nice to meet you. "],["r","+Bye-Bye. "],["r","bash-3.2$ git checkout -- welcome.txt "],["r","bash-3.2$ git status -s "],["r","bash-3.2$ ls --full-time .git/index "],["r","-rw-r--r-- 1 jiangxin staff 112 2011-05-11 14:13:19.000000000 +0800 .git/index "],["r","bash-3.2$ git status -s "],["r","bash-3.2$ ls --full-time .git/index "],["r","-rw-r--r-- 1 jiangxin staff 112 2011-05-11 14:13:19.000000000 +0800 .git/index "],["r","bash-3.2$ touch welcome.txt "],["r","bash-3.2$ git status -s "],["r","bash-3.2$ ls --full-time .git/index "],["r","-rw-r--r-- 1 jiangxin staff 112 2011-05-11 14:13:33.000000000 +0800 .git/index "],["r","bash-3.2$ git ls-files -s "],["r","100644 fd3c069c1de4f4bc9b15940f490aeb48852f3c42 0 welcome.txt "],["r","bash-3.2$ git ls-files -s --deb "]],"x":32,"B":[["a","0"],"d","d",["r","11111111111111111111111111111111111111000000000000000000000000000000000000000000"],["r","11111111111111111111111111111000000000000000000000000000000000000000000000000000"],["r","11111111111111111000000000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","66666666666666677777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","22222222277777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305094431.95125,"i":1},{"y":25,"d":[[24,31,"u"]],"x":33,"t":1305094432.03144},{"y":25,"d":[[24,32,"g"]],"x":34,"t":1305094432.15983},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",11,14],["cp",12,15],["cp",13,16],["cp",18,17],["cp",11,18],["cp",12,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",7,6],["cp",1,7],["cp",10,9],["cp",1,10]],"B":[["cp",3,2],["cp",4,3],["cp",5,4],["cp",0,6]],"t":1305094432.47131},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",5,8],["cp",6,9],["cp",7,10],["cp",17,11],["cp",5,12],["cp",6,13],["cp",20,14],["cp",21,15],["cp",22,16],["cp",23,17],["cp",16,18],[19,0,34," ctime: 1305094411:0 "],[20,0,77," mtime: 1305094411:0 "],[21,0,34," dev: 234881027 ino: 497139"],[22,0,48," uid: 501 gid: 20 "],[22,56,66,["a"," "]],[23,0,32," size: 25 flags: b "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",6,0],["cp",9,3],["cp",1,6],["cp",1,9]],"B":[["cp",0,2],["cp",0,3],["cp",0,4],["cp",0,5]],"t":1305094432.47798},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305094436.84021},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305094436.92711},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305094437.0233},{"y":25,"x":15,"t":1305094437.08699},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305094437.2633},{"y":25,"d":[[24,15,"s"]],"x":17,"t":1305094437.35109},{"y":25,"d":[[24,16,"-"]],"x":18,"t":1305094437.55127},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305094437.76791},{"y":25,"d":[[24,18,"r"]],"x":20,"t":1305094437.95117},{"y":25,"d":[[24,19,"e"]],"x":21,"t":1305094438.08733},{"y":25,"d":[[24,20,"e"]],"x":22,"t":1305094438.26315},{"y":25,"x":23,"t":1305094438.44689},{"y":25,"d":[[24,22,"H"]],"x":24,"t":1305094438.76703},{"y":25,"d":[[24,23,"E"]],"x":25,"t":1305094438.85528},{"y":25,"d":[[24,24,"A"]],"x":26,"t":1305094439.02304},{"y":25,"d":[[24,25,"D"]],"x":27,"t":1305094439.143},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",4,7],["cp",5,8],["cp",6,9],["cp",11,10],["cp",4,11],["cp",5,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",15,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",3,2],["cp",0,3]],"t":1305094440.04679},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",3,6],["cp",4,7],["cp",5,8],["cp",10,9],["cp",3,10],["cp",4,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",14,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,51,"100644 blob fd3c069c1de4f4bc9b15940f490aeb48852f3c42"],[23,56,66,"welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,1],["cp",0,2]],"t":1305094440.06077},{"y":25,"d":[["cp",22,24]],"x":27,"t":1305094440.93529},{"y":25,"x":28,"t":1305094441.08702},{"y":25,"d":[[24,27,"-"]],"x":29,"t":1305094441.351},{"y":25,"d":[[24,28,"l"]],"x":30,"t":1305094441.79884},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",2,5],["cp",3,6],["cp",4,7],["cp",9,8],["cp",2,9],["cp",3,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",13,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1]],"t":1305094442.1132},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",1,4],["cp",2,5],["cp",3,6],["cp",8,7],["cp",1,8],["cp",2,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",12,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,51,"100644 blob fd3c069c1de4f4bc9b15940f490aeb48852f3c42"],[23,58,59,"25"],[23,64,74,"welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0]],"t":1305094442.11727},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305094446.79054},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305094446.85464},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305094446.98281},{"y":25,"x":15,"t":1305094447.07086},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305094448.31914},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305094448.41477},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305094448.54271},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305094448.67851},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305094448.76656},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305094448.85474},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,3],["cp",1,4],["cp",2,5],["cp",7,6],["cp",0,7],["cp",1,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",11,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305094449.08666},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",0,3],["cp",6,4],["cp",1,5],["cp",2,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,51,"# On branch master "],[22,58,59,["a"," "]],[22,64,74,["a"," "]],[23,0,42,"nothing to commit (working directory clean)"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305094449.09462},{"y":25,"d":[[24,10,"e"]],"x":12,"t":1305094450.8786},{"y":25,"d":[[24,11,"c"]],"x":13,"t":1305094451.08643},{"y":25,"d":[[24,12,"h"]],"x":14,"t":1305094451.15857},{"y":25,"d":[[24,13,"o"]],"x":15,"t":1305094451.27045},{"y":25,"x":16,"t":1305094451.39851},{"y":25,"d":[[24,15,"B"]],"x":17,"t":1305094452.26246},{"y":25,"d":[[24,16,"y"]],"x":18,"t":1305094452.43917},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305094452.51057},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305094452.71059},{"y":25,"d":[[24,19,"B"]],"x":21,"t":1305094453.03846},{"y":25,"d":[[24,20,"y"]],"x":22,"t":1305094453.20637},{"y":25,"d":[[24,21,"e"]],"x":23,"t":1305094453.31034},{"y":25,"d":[[24,22,"."]],"x":24,"t":1305094453.79057},{"y":25,"x":25,"t":1305094453.89447},{"y":25,"d":[[24,24,">"]],"x":26,"t":1305094454.19836},{"y":25,"d":[[24,25,">"]],"x":27,"t":1305094454.36656},{"y":25,"x":28,"t":1305094454.53461},{"y":25,"d":[[24,27,"w"]],"x":29,"t":1305094454.73426},{"y":25,"d":[[24,28,"e"]],"x":30,"t":1305094454.87841},{"y":25,"d":[[24,29,37,"lcome.txt"]],"x":40,"t":1305094455.11857},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",1,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",8,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305094456.91045},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305094456.91082},{"y":25,"d":[[24,10,"m"]],"x":12,"t":1305094457.88641},{"y":25,"d":[[24,11,"k"]],"x":13,"t":1305094458.06207},{"y":25,"d":[[24,12,"d"]],"x":14,"t":1305094458.0701},{"y":25,"d":[[24,13,"i"]],"x":15,"t":1305094458.23011},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305094458.27023},{"y":25,"x":17,"t":1305094458.39022},{"y":25,"d":[[24,16,"-"]],"x":18,"t":1305094458.52606},{"y":25,"d":[[24,17,"p"]],"x":19,"t":1305094458.78201},{"y":25,"x":20,"t":1305094458.89435},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305094459.10219},{"y":25,"d":[[24,20,"/"]],"x":22,"t":1305094459.27005},{"y":25,"d":[[24,21,"b"]],"x":23,"t":1305094459.42206},{"y":25,"d":[[24,22,"/"]],"x":24,"t":1305094459.54211},{"y":25,"d":[[24,23,"c"]],"x":25,"t":1305094459.70207},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",7,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305094459.97396},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305094459.97766},{"y":25,"d":[[24,10,"e"]],"x":12,"t":1305094461.07803},{"y":25,"d":[[24,11,"c"]],"x":13,"t":1305094461.26202},{"y":25,"d":[[24,12,"h"]],"x":14,"t":1305094461.33404},{"y":25,"d":[[24,13,"o"]],"x":15,"t":1305094461.40606},{"y":25,"x":16,"t":1305094461.51012},{"y":25,"d":[[24,15,"H"]],"x":17,"t":1305094461.7819},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305094461.90988},{"y":25,"d":[[24,17,"l"]],"x":19,"t":1305094462.03785},{"y":25,"d":[[24,18,"l"]],"x":20,"t":1305094462.19024},{"y":25,"d":[[24,19,"o"]],"x":21,"t":1305094462.36615},{"y":25,"d":[[24,20,"."]],"x":22,"t":1305094462.55},{"y":25,"x":23,"t":1305094462.75935},{"y":25,"d":[[24,22,">"]],"x":24,"t":1305094463.03801},{"y":25,"x":25,"t":1305094463.55801},{"y":25,"d":[[24,24,"a"]],"x":26,"t":1305094463.83788},{"y":25,"d":[[24,25,"/"]],"x":27,"t":1305094464.03814},{"y":25,"d":[[24,26,27,"b/"]],"x":29,"t":1305094464.23804},{"y":25,"d":[[24,28,29,"c/"]],"x":31,"t":1305094464.42206},{"y":25,"d":[[24,30,"h"]],"x":32,"t":1305094464.84575},{"y":25,"d":[[24,31,"e"]],"x":33,"t":1305094464.92578},{"y":25,"d":[[24,32,"l"]],"x":34,"t":1305094465.06985},{"d":[["r","bash-3.2$ ls --full-time .git/index "],["r","-rw-r--r-- 1 jiangxin staff 112 2011-05-11 14:13:19.000000000 +0800 .git/index "],["r","bash-3.2$ touch welcome.txt "],["r","bash-3.2$ git status -s "],["r","bash-3.2$ ls --full-time .git/index "],["r","-rw-r--r-- 1 jiangxin staff 112 2011-05-11 14:13:33.000000000 +0800 .git/index "],["r","bash-3.2$ git ls-files -s "],["r","100644 fd3c069c1de4f4bc9b15940f490aeb48852f3c42 0 welcome.txt "],["r","bash-3.2$ git ls-files -s --debug "],["r","100644 fd3c069c1de4f4bc9b15940f490aeb48852f3c42 0 welcome.txt "],["r"," ctime: 1305094411:0 "],["r"," mtime: 1305094411:0 "],["r"," dev: 234881027 ino: 497139 "],["r"," uid: 501 gid: 20 "],["r"," size: 25 flags: b "],["r","bash-3.2$ git ls-tree HEAD "],["r","100644 blob fd3c069c1de4f4bc9b15940f490aeb48852f3c42 welcome.txt "],["r","bash-3.2$ git ls-tree HEAD -l "],["r","100644 blob fd3c069c1de4f4bc9b15940f490aeb48852f3c42 25 welcome.txt "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","nothing to commit (working directory clean) "],["r","bash-3.2$ echo Bye-Bye. >> welcome.txt "],["r","bash-3.2$ mkdir -p a/b/c "],["r","bash-3.2$ echo Hello. > a/b/c/hell "]],"x":35,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305094465.22984,"i":1},{"y":25,"d":[[24,34,"o"]],"x":36,"t":1305094465.38984},{"y":25,"d":[[24,35,"."]],"x":37,"t":1305094465.55786},{"y":25,"d":[[24,36,"t"]],"x":38,"t":1305094465.66199},{"y":25,"d":[[24,37,"x"]],"x":39,"t":1305094465.81377},{"y":25,"d":[[24,38,"t"]],"x":40,"t":1305094465.93372},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",6,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305094466.27778},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305094466.2782},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305094466.83784},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305094466.93398},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305094467.01398},{"y":25,"x":15,"t":1305094467.08576},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305094467.20592},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305094467.30187},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305094467.45367},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305094467.83762},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305094467.95762},{"y":25,"d":[["cp",18,24]],"x":21,"t":1305094468.02959},{"y":25,"x":22,"t":1305094468.18173},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305094468.2618},{"y":25,"d":[["cp",2,24]],"x":24,"t":1305094468.38971},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",5,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",1,23],[24,["a"," "]]],"x":1,"t":1305094468.49361},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,38," M welcome.txt "],[23,0,22,"?? a/ "],[24,0,8,"bash-3.2$"]],"x":11,"f":[[22,1,"1"],[23,0,1,["a","1"]]],"t":1305094468.50336},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305094468.91775},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305094468.9975},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305094469.10982},{"y":25,"x":15,"t":1305094469.14156},{"y":25,"d":[[24,14,"a"]],"x":16,"t":1305094469.30157},{"y":25,"d":[[24,15,"d"]],"x":17,"t":1305094469.4855},{"y":25,"d":[[24,16,"d"]],"x":18,"t":1305094469.65368},{"y":25,"x":19,"t":1305094469.74201},{"y":25,"d":[[24,18,"."]],"x":20,"t":1305094470.39754},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",2,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",22,21],["cp",23,22],["cp",0,23]],"t":1305094470.65348},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305094470.66171},{"y":25,"d":[["cp",23,24]],"x":11,"t":1305094471.80559},{"y":25,"d":[["cp",20,24]],"x":11,"t":1305094471.98167},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",19,23],[24,["a"," "]]],"x":1,"f":[["cp",21,20],["cp",22,21],["cp",0,22]],"t":1305094472.83747},{"y":25,"d":[["cp",2,0],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",17,21],[22,0,18,"A a/b/c/hello.txt "],[23,0,22,"M welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",20,18],["cp",21,19],["cp",0,20],["cp",0,21],[22,0,"2"],["cp",22,23]],"t":1305094472.84611},{"y":25,"d":[[24,10,"e"]],"x":12,"t":1305094475.14934},{"y":25,"d":[[24,11,"c"]],"x":13,"t":1305094475.34958},{"y":25,"d":[[24,12,"h"]],"x":14,"t":1305094475.44566},{"y":25,"d":[[24,13,"o"]],"x":15,"t":1305094475.54946},{"y":25,"x":16,"t":1305094475.6133},{"y":25,"d":[[24,15,"B"]],"x":17,"t":1305094475.79749},{"y":25,"d":[[24,16,"y"]],"x":18,"t":1305094475.94954},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305094476.02946},{"y":25,"d":[[24,18,"."]],"x":20,"t":1305094476.31866},{"y":25,"d":[[24,18," "]],"x":19,"t":1305094476.64526},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305094477.19732},{"y":25,"d":[[24,19,"B"]],"x":21,"t":1305094477.51727},{"y":25,"d":[[24,20,"y"]],"x":22,"t":1305094477.66914},{"y":25,"d":[[24,21,"e"]],"x":23,"t":1305094477.78926},{"y":25,"d":[[24,22,"."]],"x":24,"t":1305094477.97305},{"y":25,"x":25,"t":1305094478.24501},{"y":25,"d":[[24,24,">"]],"x":26,"t":1305094478.56533},{"y":25,"d":[[24,25,">"]],"x":27,"t":1305094478.75729},{"y":25,"x":28,"t":1305094479.03781},{"y":25,"d":[[24,27,"a"]],"x":29,"t":1305094479.22913},{"y":25,"d":[[24,28,"/"]],"x":30,"t":1305094479.44567},{"y":25,"d":[[24,29,30,"b/"]],"x":32,"t":1305094479.6533},{"y":25,"d":[[24,31,32,"c/"]],"x":34,"t":1305094479.8455},{"y":25,"d":[[24,33,41,"hello.txt"]],"x":44,"t":1305094480.04533},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",16,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",18,17],["cp",19,18],["cp",0,19],["cp",22,21],["cp",0,23]],"t":1305094480.60527},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305094480.60599},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305094480.98909},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305094481.07725},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305094481.16502},{"y":25,"x":15,"t":1305094481.24515},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305094481.35707},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305094481.461},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305094481.57324},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305094481.6771},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305094481.74927},{"y":25,"d":[["cp",10,24]],"x":21,"t":1305094481.82918},{"y":25,"x":22,"t":1305094481.99717},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305094482.08507},{"y":25,"d":[["cp",16,24]],"x":24,"t":1305094482.23706},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",15,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",15,23],[24,["a"," "]]],"x":1,"f":[["cp",17,16],["cp",18,17],["cp",0,18],["cp",21,20],["cp",0,22]],"t":1305094483.8929},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",13,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",13,21],[22,0,41,"AM a/b/c/hello.txt "],["cp",19,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",16,14],["cp",17,15],["cp",0,16],["cp",0,17],["cp",20,18],["cp",18,19],["cp",0,20],["cp",0,21],[22,0,1,"21"],["cp",18,23]],"t":1305094483.90178},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",12,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",12,20],["cp",22,21],["cp",18,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",14,13],["cp",15,14],["cp",0,15],["cp",18,17],["cp",0,19],["cp",22,21],["cp",17,22],["cp",0,23]],"t":1305094487.5888},{"y":25,"d":[["cp",23,24]],"x":11,"t":1305094487.58893},{"y":25,"d":[[24,10,"f"]],"x":12,"t":1305094488.0373},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305094488.10876},{"y":25,"d":[[24,12,"n"]],"x":14,"t":1305094488.2369},{"y":25,"d":[[24,13,"d"]],"x":15,"t":1305094488.46964},{"y":25,"x":16,"t":1305094488.6127},{"y":25,"d":[[24,15,"."]],"x":17,"t":1305094489.3409},{"y":25,"x":18,"t":1305094489.43676},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305094489.6541},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305094490.01263},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305094490.11671},{"y":25,"d":[[24,20,"h"]],"x":22,"t":1305094490.21293},{"y":25,"d":[[24,21,"t"]],"x":23,"t":1305094490.24462},{"y":25,"x":24,"t":1305094490.44482},{"y":25,"d":[[24,23,"."]],"x":25,"t":1305094490.58184},{"y":25,"d":[[24,23," "]],"x":24,"t":1305094490.91672},{"y":25,"x":23,"t":1305094491.06861},{"y":25,"d":[[24,21," "]],"x":22,"t":1305094491.23657},{"y":25,"d":[[24,20," "]],"x":21,"t":1305094491.39672},{"y":25,"d":[[24,20,"t"]],"x":22,"t":1305094491.52466},{"d":[["r"," uid: 501 gid: 20 "],["r"," size: 25 flags: b "],["r","bash-3.2$ git ls-tree HEAD "],["r","100644 blob fd3c069c1de4f4bc9b15940f490aeb48852f3c42 welcome.txt "],["r","bash-3.2$ git ls-tree HEAD -l "],["r","100644 blob fd3c069c1de4f4bc9b15940f490aeb48852f3c42 25 welcome.txt "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","nothing to commit (working directory clean) "],["r","bash-3.2$ echo Bye-Bye. >> welcome.txt "],["r","bash-3.2$ mkdir -p a/b/c "],["r","bash-3.2$ echo Hello. > a/b/c/hello.txt "],["r","bash-3.2$ git status -s "],["r"," M welcome.txt "],["r","?? a/ "],["r","bash-3.2$ git add . "],["r","bash-3.2$ git status -s "],["r","A a/b/c/hello.txt "],["r","M welcome.txt "],["r","bash-3.2$ echo Bye-Bye. >> a/b/c/hello.txt "],["r","bash-3.2$ git status -s "],["r","AM a/b/c/hello.txt "],["r","M welcome.txt "],["r","bash-3.2$ "],["r","bash-3.2$ find . -path "]],"x":23,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d",["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d",["a","7"],"d",["r","21777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305094491.60487,"i":1},{"y":25,"x":24,"t":1305094491.84465},{"y":25,"d":[[24,23,"."]],"x":25,"t":1305094492.04456},{"y":25,"d":[[24,24,"/"]],"x":26,"t":1305094492.26056},{"y":25,"d":[[24,25,"."]],"x":27,"t":1305094492.53256},{"y":25,"d":[[24,26,"g"]],"x":28,"t":1305094492.68473},{"y":25,"d":[[24,27,"i"]],"x":29,"t":1305094492.76482},{"y":25,"d":[[24,28,"t"]],"x":30,"t":1305094492.8607},{"y":25,"x":31,"t":1305094493.14836},{"y":25,"d":[[24,30,"-"]],"x":32,"t":1305094493.35675},{"y":25,"d":[[24,31,"p"]],"x":33,"t":1305094493.59648},{"y":25,"d":[[24,32,"r"]],"x":34,"t":1305094493.69253},{"y":25,"d":[[24,33,"u"]],"x":35,"t":1305094493.84465},{"y":25,"d":[[24,34,"n"]],"x":36,"t":1305094494.03669},{"y":25,"d":[[24,35,"e"]],"x":37,"t":1305094494.39664},{"y":25,"x":38,"t":1305094494.55649},{"y":25,"d":[[24,37,"-"]],"x":39,"t":1305094494.70853},{"y":25,"d":[[24,38,"o"]],"x":40,"t":1305094494.93285},{"y":25,"x":41,"t":1305094495.06845},{"y":25,"d":[[24,40,"-"]],"x":42,"t":1305094495.26043},{"y":25,"d":[[24,41,"t"]],"x":43,"t":1305094495.45238},{"y":25,"d":[[24,42,"y"]],"x":44,"t":1305094495.5324},{"y":25,"d":[[24,43,"p"]],"x":45,"t":1305094495.68453},{"y":25,"d":[[24,44,"e"]],"x":46,"t":1305094495.79659},{"y":25,"x":47,"t":1305094495.90063},{"y":25,"d":[[24,46,"f"]],"x":48,"t":1305094496.07752},{"y":25,"x":49,"t":1305094496.42839},{"y":25,"d":[[24,48,"-"]],"x":50,"t":1305094496.96452},{"y":25,"d":[[24,49,"p"]],"x":51,"t":1305094497.26854},{"y":25,"d":[[24,50,"r"]],"x":52,"t":1305094497.38044},{"y":25,"d":[[24,51,"i"]],"x":53,"t":1305094497.4765},{"y":25,"d":[[24,52,"n"]],"x":54,"t":1305094497.60452},{"y":25,"d":[[24,53,"t"]],"x":55,"t":1305094497.63688},{"y":25,"d":[[24,54,"f"]],"x":56,"t":1305094497.8368},{"y":25,"x":57,"t":1305094498.13233},{"y":25,"d":[[24,56,"\""]],"x":58,"t":1305094498.5083},{"y":25,"d":[[24,57,"^"]],"x":59,"t":1305094499.22839},{"y":25,"d":[[24,57," "]],"x":58,"t":1305094499.71627},{"y":25,"d":[[24,57,"%"]],"x":59,"t":1305094500.28425},{"y":25,"d":[[24,58,"-"]],"x":60,"t":1305094501.2367},{"y":25,"d":[[24,59,"2"]],"x":61,"t":1305094501.54012},{"y":25,"d":[[24,60,"0"]],"x":62,"t":1305094501.62828},{"y":25,"d":[[24,61,"p"]],"x":63,"t":1305094502.0362},{"y":25,"d":[[24,62,"\\"]],"x":64,"t":1305094503.74001},{"y":25,"d":[[24,63,"t"]],"x":65,"t":1305094503.9002},{"y":25,"d":[[24,64,"%"]],"x":66,"t":1305094504.81996},{"y":25,"d":[[24,65,"s"]],"x":67,"t":1305094505.04387},{"y":25,"d":[[24,66,"\\"]],"x":68,"t":1305094505.49182},{"y":25,"d":[[24,67,"n"]],"x":69,"t":1305094505.7479},{"y":25,"d":[[24,68,"\""]],"x":70,"t":1305094506.25192},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",11,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",11,19],["cp",21,20],["cp",17,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",13,12],["cp",14,13],["cp",0,14],["cp",17,16],["cp",0,18],["cp",21,20],["cp",16,21],["cp",0,22]],"t":1305094507.32403},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",9,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",9,17],["cp",20,18],["cp",15,19],["cp",22,20],["cp",23,21],[22,0,16,"./a/b/c/hello.txt"],[22,24,25,"16"],[23,0,68,"./welcome.txt 34 "],["cp",20,24]],"x":11,"f":[["cp",12,10],["cp",13,11],["cp",0,12],["cp",0,13],["cp",16,14],["cp",14,15],["cp",0,16],["cp",0,17],["cp",20,18],["cp",14,19],["cp",0,20],["cp",0,21]],"t":1305094507.33139},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305094510.88395},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305094510.95593},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305094511.11569},{"y":25,"x":15,"t":1305094511.40388},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305094511.5877},{"y":25,"d":[[24,15,"s"]],"x":17,"t":1305094511.69166},{"y":25,"d":[[24,16,"-"]],"x":18,"t":1305094511.85179},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305094511.97955},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305094512.0839},{"y":25,"d":[[24,19,"l"]],"x":21,"t":1305094512.17175},{"y":25,"d":[[24,20,"e"]],"x":22,"t":1305094512.23566},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305094512.38783},{"y":25,"x":24,"t":1305094512.58782},{"y":25,"d":[[24,23,"-"]],"x":25,"t":1305094513.37173},{"y":25,"d":[[24,24,"s"]],"x":26,"t":1305094513.54767},{"y":25,"x":27,"t":1305094513.65175},{"y":25,"d":[[24,26,"-"]],"x":28,"t":1305094513.76375},{"y":25,"d":[[24,27,"-"]],"x":29,"t":1305094513.94764},{"y":25,"d":[[24,28,"d"]],"x":30,"t":1305094514.09136},{"y":25,"d":[[24,29,"e"]],"x":31,"t":1305094514.26786},{"y":25,"d":[[24,30,"b"]],"x":32,"t":1305094514.41961},{"y":25,"d":[[24,31,"u"]],"x":33,"t":1305094514.49969},{"y":25,"d":[[24,32,"g"]],"x":34,"t":1305094514.61984},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",8,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",8,16],["cp",18,17],["cp",14,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",10,9],["cp",11,10],["cp",0,11],["cp",14,13],["cp",0,15],["cp",18,17],["cp",13,18],["cp",0,19]],"t":1305094515.5798},{"y":25,"d":[["cp",8,0],["cp",13,1],["cp",14,2],["cp",15,3],["cp",0,4],["cp",17,5],["cp",2,6],["cp",19,7],["cp",20,8],["cp",21,9],["cp",22,10],["cp",23,11],[12,0,48,"100644 18832d35117ef2f013c4009f5b2128dfaeff354f 0"],[12,56,70,"a/b/c/hello.txt"],[13,0,20," ctime: 1305094466:0"],[14,0,20," mtime: 1305094466:0"],[15,0,41," dev: 234881027 ino: 497147 "],[16,0,22," uid: 501 gid: 20"],[17,0,23," size: 7 flags: f"],[18,0,48,"100644 51dbfd25a804c30e9d8dc441740452534de8264b 0"],[18,56,66,"welcome.txt"],[19,0,20," ctime: 1305094456:0"],[20,0,68," mtime: 1305094456:0 "],[21,0,16," dev: 234881027 "],[21,24,34,"ino: 497139"],["cp",16,22],[23,0,32," size: 34 flags: b "],["cp",7,24]],"x":11,"f":[["cp",13,1],["cp",1,2],["cp",17,5],["cp",1,6],["cp",0,9],["cp",0,10],["cp",0,13],["cp",0,14],["cp",0,17],["cp",0,18]],"t":1305094515.58734},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305094521.11591},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305094521.17125},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305094521.29921},{"y":25,"x":15,"t":1305094521.36333},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305094521.54783},{"y":25,"d":[[24,15,"s"]],"x":17,"t":1305094521.6272},{"y":25,"d":[[24,16,"-"]],"x":18,"t":1305094521.94716},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305094522.05915},{"y":25,"d":[[24,18,"r"]],"x":20,"t":1305094522.23558},{"y":25,"d":[[24,19,"e"]],"x":21,"t":1305094522.37931},{"y":25,"d":[[24,20,"e"]],"x":22,"t":1305094522.54743},{"y":25,"x":23,"t":1305094522.68323},{"y":25,"d":[[24,22,"-"]],"x":24,"t":1305094522.86734},{"y":25,"d":[[24,23,"l"]],"x":25,"t":1305094524.22724},{"y":25,"x":26,"t":1305094525.17919},{"y":25,"d":[[24,25,"H"]],"x":27,"t":1305094525.58704},{"y":25,"d":[[24,26,"E"]],"x":28,"t":1305094525.66729},{"y":25,"d":[[24,27,"A"]],"x":29,"t":1305094525.83523},{"y":25,"d":[[24,28,"D"]],"x":30,"t":1305094525.92298},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",1,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",15,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",3,2],["cp",5,4],["cp",0,5],["cp",2,6]],"t":1305094526.22727},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",14,20],["cp",22,21],["cp",23,22],[23,0,51,"100644 blob fd3c069c1de4f4bc9b15940f490aeb48852f3c42"],[23,58,59,"25"],[23,64,74,"welcome.txt"],["cp",5,24]],"x":11,"f":[["cp",2,1],["cp",4,3],["cp",0,4],["cp",1,5]],"t":1305094526.23835},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305094527.06709},{"y":25,"x":12,"t":1305094529.37898},{"d":[["r","M welcome.txt "],["r","bash-3.2$ echo Bye-Bye. >> a/b/c/hello.txt "],["r","bash-3.2$ git status -s "],["r","AM a/b/c/hello.txt "],["r","M welcome.txt "],["r","bash-3.2$ "],["r","bash-3.2$ find . -path ./.git -prune -o -type f -printf \"%-20p\\t%s\\n\" "],["r","./a/b/c/hello.txt 16 "],["r","./welcome.txt 34 "],["r","bash-3.2$ git ls-files -s --debug "],["r","100644 18832d35117ef2f013c4009f5b2128dfaeff354f 0 a/b/c/hello.txt "],["r"," ctime: 1305094466:0 "],["r"," mtime: 1305094466:0 "],["r"," dev: 234881027 ino: 497147 "],["r"," uid: 501 gid: 20 "],["r"," size: 7 flags: f "],["r","100644 51dbfd25a804c30e9d8dc441740452534de8264b 0 welcome.txt "],["r"," ctime: 1305094456:0 "],["r"," mtime: 1305094456:0 "],["r"," dev: 234881027 ino: 497139 "],["r"," uid: 501 gid: 20 "],["r"," size: 34 flags: b "],["r","bash-3.2$ git ls-tree -l HEAD "],["r","100644 blob fd3c069c1de4f4bc9b15940f490aeb48852f3c42 25 welcome.txt "],["r","bash-3.2$ git ls-tree -l HEAD "]],"x":13,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","21777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305094529.87917,"i":1},{"y":25,"x":14,"t":1305094529.96271},{"y":25,"x":15,"t":1305094530.23499},{"y":25,"d":[[24,14,28,["a"," "]]],"x":14,"t":1305094530.61889},{"y":25,"x":15,"t":1305094530.75505},{"y":25,"d":[[24,14,"w"]],"x":16,"t":1305094531.01087},{"y":25,"d":[[24,15,"r"]],"x":17,"t":1305094531.25079},{"y":25,"d":[[24,16,"i"]],"x":18,"t":1305094531.33099},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305094531.43497},{"y":25,"d":[[24,18,"e"]],"x":20,"t":1305094531.58695},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305094531.86668},{"y":25,"d":[[24,20,"t"]],"x":22,"t":1305094532.0027},{"y":25,"d":[[24,21,"r"]],"x":23,"t":1305094532.19468},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305094532.40272},{"y":25,"d":[[24,23,"e"]],"x":25,"t":1305094532.563},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",13,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",3,2],["cp",4,3],["cp",0,4]],"t":1305094533.88258},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",12,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,39,"9431f4a3f3e1504e03659406faa9529f83cd56f8"],["cp",3,24]],"x":11,"f":[["cp",2,1],["cp",3,2],["cp",0,3]],"t":1305094533.8896},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305094534.85848},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305094534.93079},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305094535.02688},{"y":25,"x":15,"t":1305094535.11476},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305094535.36263},{"y":25,"d":[[24,15,"s"]],"x":17,"t":1305094535.45057},{"y":25,"d":[[24,16,"-"]],"x":18,"t":1305094535.63462},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305094535.78008},{"y":25,"d":[[24,18,"r"]],"x":20,"t":1305094535.93042},{"y":25,"d":[[24,19,"e"]],"x":21,"t":1305094536.09053},{"y":25,"d":[[24,20,"e"]],"x":22,"t":1305094536.25058},{"y":25,"x":23,"t":1305094536.9947},{"y":25,"d":[[24,22,"9"]],"x":24,"t":1305094538.25048},{"y":25,"d":[[24,23,"4"]],"x":25,"t":1305094538.62656},{"y":25,"d":[[24,24,"3"]],"x":26,"t":1305094539.73836},{"y":25,"d":[[24,25,"1"]],"x":27,"t":1305094540.34636},{"y":25,"d":[[24,26,"f"]],"x":28,"t":1305094540.90674},{"y":25,"d":[[24,27,"4"]],"x":29,"t":1305094541.73825},{"y":25,"d":[[24,28,"a"]],"x":30,"t":1305094541.97041},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",11,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2]],"t":1305094544.00217},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",9,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,51,"040000 tree 53583ee687fbb2e913d18d508aefd512465b2092"],[22,56,"a"],[23,0,51,"100644 blob 51dbfd25a804c30e9d8dc441740452534de8264b"],[23,56,66,"welcome.txt"],["cp",0,24]],"x":11,"f":[["cp",2,0],["cp",0,1]],"t":1305094544.00952},{"y":25,"d":[["cp",21,24]],"x":11,"t":1305094545.6263},{"y":25,"x":15,"t":1305094545.85024},{"y":25,"x":17,"t":1305094546.03414},{"y":25,"x":18,"t":1305094546.21027},{"y":25,"x":23,"t":1305094546.37818},{"y":25,"d":[[24,22,29,"-9431f4a"]],"x":24,"t":1305094547.02616},{"y":25,"d":[[24,23,30,"l9431f4a"]],"x":25,"t":1305094547.25803},{"y":25,"d":[[24,24,31,"r9431f4a"]],"x":26,"t":1305094547.83407},{"y":25,"d":[[24,25,32,"t9431f4a"]],"x":27,"t":1305094548.30602},{"y":25,"d":[[24,26,33," 9431f4a"]],"x":28,"t":1305094548.49796},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",8,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305094549.29009},{"y":25,"d":[["cp",5,0],["cp",6,1],["cp",7,2],["cp",8,3],["cp",9,4],["cp",10,5],["cp",11,6],["cp",12,7],["cp",13,8],["cp",3,9],["cp",15,10],["cp",16,11],["cp",17,12],["cp",18,13],["cp",19,14],["cp",20,15],["cp",21,16],["cp",22,17],["cp",23,18],[19,0,51,"040000 tree 53583ee687fbb2e913d18d508aefd512465b2092"],[19,59,"-"],[19,64,"a"],[20,0,51,"040000 tree 514d729095b7bc203cf336723af710d41b84867b"],[20,59,"-"],[20,64,66,"a/b"],[21,12,50,"deaec688e84302d4a0b98a1b78a434be1b22ca0"],[21,56,59," -"],[21,64,68,"a/b/c"],[22,12,51,"18832d35117ef2f013c4009f5b2128dfaeff354f"],[22,56,78," 7 a/b/c/hello.txt"],[23,0,51,"100644 blob 51dbfd25a804c30e9d8dc441740452534de8264b"],[23,58,59,"34"],[23,64,74,"welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305094549.29719},{"y":25,"d":[["cp",18,24]],"x":11,"t":1305094556.89779},{"y":25,"d":[[24,10,33,"/ "]],"x":12,"t":1305094557.11389},{"y":25,"d":[[24,11,"l"]],"x":13,"t":1305094557.41752},{"y":25,"d":[[24,12,"s"]],"x":14,"t":1305094557.55359},{"y":25,"d":[[24,13,"-"]],"x":15,"t":1305094557.90558},{"y":25,"d":[[24,14,"f"]],"x":16,"t":1305094558.15378},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305094558.23355},{"y":25,"d":[[24,16,"l"]],"x":18,"t":1305094558.32155},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305094558.42565},{"y":25,"d":[[24,18,"s"]],"x":20,"t":1305094558.54572},{"y":25,"d":[[24,10,32,"git ls-files -s --debug"]],"x":11,"t":1305094558.66546},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",2,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305094561.02553},{"y":25,"d":[["cp",12,0],["cp",13,1],["cp",14,2],["cp",15,3],["cp",16,4],["cp",17,5],["cp",18,6],["cp",19,7],["cp",20,8],["cp",21,9],["cp",22,10],["cp",23,11],[12,0,48,"100644 18832d35117ef2f013c4009f5b2128dfaeff354f 0"],[12,56,70,"a/b/c/hello.txt"],[13,0,39," ctime: 1305094466:0 "],[14,0,28," mtime: 1305094466:0 "],[15,0,51," dev: 234881027 ino: 497147 "],[15,56," "],[16,0,51," uid: 501 gid: 20 "],[16,56,66,["a"," "]],[17,0,33," size: 7 flags: f "],[18,0,51,"100644 51dbfd25a804c30e9d8dc441740452534de8264b 0 "],[18,56,66,"welcome.txt"],[19,0,51," ctime: 1305094456:0 "],[19,59," "],[19,64,66,["a"," "]],[20,0,51," mtime: 1305094456:0 "],[20,59," "],[20,64,68,["a"," "]],[21,0,51," dev: 234881027 ino: 497139 "],[21,59," "],[21,64,78,["a"," "]],["cp",16,22],[23,0,32," size: 34 flags: b "],[24,0,8,"bash-3.2$"]],"x":11,"t":1305094561.03233},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305094565.60909},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305094565.68121},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305094565.80122},{"y":25,"x":15,"t":1305094565.88115},{"y":25,"d":[[24,14,"d"]],"x":16,"t":1305094566.97725},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305094567.06516},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305094567.58519},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305094567.76126},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",15,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305094567.97706},{"y":25,"d":[["cp",7,0],["cp",8,1],["cp",9,2],["cp",10,3],["cp",11,4],["cp",12,5],["cp",13,6],["cp",14,7],["cp",15,8],["cp",16,9],["cp",17,10],["cp",18,11],["cp",19,12],["cp",20,13],["cp",8,14],["cp",22,15],["cp",23,16],[17,0,48,"diff --git a/a/b/c/hello.txt b/a/b/c/hello.txt "],[17,56,66,["a"," "]],[18,0,28,"index 18832d3..e8577ea 100644"],[19,0,20,"--- a/a/b/c/hello.txt"],[20,0,34,"+++ b/a/b/c/hello.txt "],[21,0,22,"@@ -1 +1,2 @@ "],[22,1,9,"Hello. "],[22,16,23,["a"," "]],[23,0,17,"+Bye-Bye. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[[21,0,12,["a","6"]],[23,0,8,["a","2"]]],"B":[[17,0,45,["a","1"]],[18,0,28,["a","1"]],[19,0,20,["a","1"]],["cp",19,20]],"t":1305094567.98891},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305094568.77717},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305094568.8652},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305094568.96936},{"y":25,"x":15,"t":1305094569.04909},{"y":25,"d":[[24,14,"d"]],"x":16,"t":1305094569.25714},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305094569.35292},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305094569.47971},{"y":25,"d":[["cp",16,24]],"x":19,"t":1305094569.6413},{"y":25,"x":20,"t":1305094569.75291},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305094570.23337},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305094570.43406},{"y":25,"d":[[24,21,"c"]],"x":23,"t":1305094570.56081},{"y":25,"d":[[24,22,"a"]],"x":24,"t":1305094570.68096},{"y":25,"d":[[24,23,"c"]],"x":25,"t":1305094570.82491},{"y":25,"d":[[24,24,"h"]],"x":26,"t":1305094570.95294},{"y":25,"d":[[24,25,"e"]],"x":27,"t":1305094571.03311},{"y":25,"d":[[24,26,"d"]],"x":28,"t":1305094571.1931},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",7,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",21,20],["cp",0,21],["cp",23,22],["cp",0,23]],"B":[["cp",17,16],["cp",18,17],["cp",19,18],["cp",0,20]],"t":1305094573.26546},{"y":25,"d":[["cp",15,0],["cp",16,1],["cp",17,2],["cp",18,3],["cp",19,4],["cp",20,5],["cp",21,6],["cp",22,7],["cp",23,8],["cp",1,9],[10,0,20,"new file mode 100644 "],[11,0,21,"index 0000000..18832d3"],[12,0,15,"--- /dev/null "],[12,24,34,["a"," "]],["cp",4,13],[14,0,23,"@@ -0,0 +1 @@ "],[15,0,17,"+Hello. "],[16,13,45,"welcome.txt b/welcome.txt "],[17,6,21,"fd3c069..51dbfd2"],[18,6,20,"welcome.txt "],[19,6,20,"welcome.txt "],[20,5,14,",2 +1,3 @@"],[22,0,17," Nice to meet you."],["cp",7,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",20,5],["cp",22,7],["cp",5,14],[15,0,6,["a","2"]],[20,13,14,["a","6"]],["cp",0,22],["cp",7,23]],"B":[["cp",16,1],["cp",17,2],["cp",18,3],["cp",3,4],["cp",1,9],[10,0,19,["a","1"]],[11,0,21,["a","1"]],[12,0,12,["a","1"]],["cp",3,13],[16,38,45,["a","0"]],[18,17,20,["a","0"]],["cp",18,19]],"t":1305094573.2827},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305094575.64897},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305094575.72872},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305094575.86469},{"y":25,"x":15,"t":1305094575.90481},{"y":25,"d":[[24,14,"d"]],"x":16,"t":1305094576.09719},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305094576.16076},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305094576.29668},{"y":25,"d":[["cp",0,24]],"x":19,"t":1305094576.46479},{"d":[["r","bash-3.2$ git diff "],["r","diff --git a/a/b/c/hello.txt b/a/b/c/hello.txt "],["r","index 18832d3..e8577ea 100644 "],["r","--- a/a/b/c/hello.txt "],["r","+++ b/a/b/c/hello.txt "],["r","@@ -1 +1,2 @@ "],["r"," Hello. "],["r","+Bye-Bye. "],["r","bash-3.2$ git diff --cached "],["r","diff --git a/a/b/c/hello.txt b/a/b/c/hello.txt "],["r","new file mode 100644 "],["r","index 0000000..18832d3 "],["r","--- /dev/null "],["r","+++ b/a/b/c/hello.txt "],["r","@@ -0,0 +1 @@ "],["r","+Hello. "],["r","diff --git a/welcome.txt b/welcome.txt "],["r","index fd3c069..51dbfd2 100644 "],["r","--- a/welcome.txt "],["r","+++ b/welcome.txt "],["r","@@ -1,2 +1,3 @@ "],["r"," Hello. "],["r"," Nice to meet you. "],["r","+Bye-Bye. "],["r","bash-3.2$ git diff "]],"x":20,"B":[["a","0"],["r","11111111111111111111111111111111111111111111110000000000000000000000000000000000"],["r","11111111111111111111111111111000000000000000000000000000000000000000000000000000"],["r","11111111111111111111100000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],"d","d","d",["r","11111111111111111111111111111111111111111111110000000000000000000000000000000000"],["r","11111111111111111111000000000000000000000000000000000000000000000000000000000000"],["r","11111111111111111111110000000000000000000000000000000000000000000000000000000000"],["r","11111111111110000000000000000000000000000000000000000000000000000000000000000000"],["r","11111111111111111111100000000000000000000000000000000000000000000000000000000000"],["a","0"],"d",["r","11111111111111111111111111111111111111000000000000000000000000000000000000000000"],["r","11111111111111111111111111111000000000000000000000000000000000000000000000000000"],["r","11111111111111111000000000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],"d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d",["r","66666666666667777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","22222222277777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d",["r","66666666666667777777777777777777777777777777777777777777777777777777777777777777"],["r","22222227777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d",["r","66666666666666677777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","22222222277777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305094576.5849,"i":1},{"y":25,"d":[[24,19,"H"]],"x":21,"t":1305094577.04071},{"y":25,"d":[[24,20,"E"]],"x":22,"t":1305094577.09681},{"y":25,"d":[[24,21,"A"]],"x":23,"t":1305094577.2806},{"y":25,"d":[[24,22,"D"]],"x":24,"t":1305094577.40872},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",0,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",3,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",5,20],["cp",22,21],["cp",6,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",5,4],["cp",0,5],["cp",7,6],["cp",0,7],["cp",4,13],["cp",15,14],["cp",0,15],["cp",20,19],["cp",0,20],["cp",6,22],["cp",0,23]],"B":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",5,4],["cp",0,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",2,12],["cp",4,13],["cp",16,15],["cp",1,16],["cp",18,17],["cp",4,19]],"t":1305094578.64858},{"y":25,"d":[["cp",16,0],["cp",17,1],["cp",18,2],["cp",19,3],["cp",5,4],["cp",21,5],["cp",23,7],[10,15,21,"e8577ea"],[13,10,14,",2 @@"],["cp",6,15],[16,0,37,"diff --git a/welcome.txt b/welcome.txt"],["cp",0,17],["cp",1,18],["cp",2,19],["cp",3,20],["cp",4,21],["cp",5,22],["cp",6,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",19,3],["cp",0,4],["cp",3,13],["cp",6,15],["cp",0,19],["cp",3,20],["cp",0,22],["cp",6,23]],"B":[["cp",1,0],["cp",17,1],["cp",1,2],["cp",4,3],["cp",3,15],[16,29,37,["a","1"]],["cp",0,17],["cp",1,19]],"t":1305094578.66347},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",5,14],["cp",16,15],["cp",17,16],["cp",0,17],["cp",1,18],["cp",2,19],["cp",3,20],["cp",4,21],["cp",5,22],[23,0,13,"bash-3.2$ exit"],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",0,3],["cp",6,5],["cp",0,6],["cp",2,12],["cp",14,13],["cp",5,14],["cp",0,15],["cp",2,19],["cp",0,20],["cp",5,22],["cp",0,23]],"B":[["cp",1,0],["cp",3,2],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",2,12],["cp",16,15],["cp",17,16],["cp",0,17],["cp",2,19]],"t":1305094581.98502}]} \ No newline at end of file diff --git a/html/part2/ch05-03-git-stash.html b/html/part2/ch05-03-git-stash.html new file mode 100644 index 000000000..5ca6ebfab --- /dev/null +++ b/html/part2/ch05-03-git-stash.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch05-03-git-stash +json_file: ch05-03-git-stash.json +--- diff --git a/html/part2/ch05-03-git-stash.json b/html/part2/ch05-03-git-stash.json new file mode 100644 index 000000000..e0abf88c5 --- /dev/null +++ b/html/part2/ch05-03-git-stash.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305094970.6121,"i":1},{"y":1,"d":[[0,10,"c"]],"x":12,"t":1305094971.05524},{"y":1,"d":[[0,11,"d"]],"x":13,"t":1305094971.20648},{"y":1,"x":14,"t":1305094971.28673},{"y":1,"d":[[0,13,"/"]],"x":15,"t":1305094971.36651},{"y":1,"d":[[0,14,"p"]],"x":16,"t":1305094971.55842},{"y":1,"d":[[0,15,"a"]],"x":17,"t":1305094971.65435},{"y":1,"d":[[0,16,"t"]],"x":18,"t":1305094971.73439},{"y":1,"d":[[0,17,"h"]],"x":19,"t":1305094971.76638},{"y":1,"d":[[0,18,"/"]],"x":20,"t":1305094971.94079},{"y":1,"d":[[0,19,"t"]],"x":21,"t":1305094972.12649},{"y":1,"d":[[0,20,"o"]],"x":22,"t":1305094972.21456},{"y":1,"d":[[0,21,"/"]],"x":23,"t":1305094972.33362},{"y":1,"d":[[0,22,"m"]],"x":24,"t":1305094972.69438},{"y":1,"d":[[0,23,"y"]],"x":25,"t":1305094972.96647},{"y":1,"d":[[0,24,"/"]],"x":26,"t":1305094973.0687},{"y":1,"d":[[0,25,"w"]],"x":27,"t":1305094973.32651},{"y":1,"d":[[0,26,"o"]],"x":28,"t":1305094973.41437},{"y":1,"d":[[0,27,34,"rkspace/"]],"x":36,"t":1305094973.55663},{"y":1,"d":[[0,35,"d"]],"x":37,"t":1305094973.94225},{"y":1,"d":[[0,36,"e"]],"x":38,"t":1305094974.10238},{"y":1,"d":[[0,37,39,"mo/"]],"x":41,"t":1305094974.30137},{"y":2,"x":1,"t":1305094974.7663},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305094974.76655},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305094976.03954},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305094976.11836},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305094976.20631},{"y":2,"x":15,"t":1305094976.29415},{"y":2,"d":[[1,14,"s"]],"x":16,"t":1305094976.4143},{"y":2,"d":[[1,15,"t"]],"x":17,"t":1305094976.53434},{"y":2,"d":[[1,16,"a"]],"x":18,"t":1305094976.63833},{"y":2,"d":[[1,17,"t"]],"x":19,"t":1305094976.75826},{"y":2,"d":[[1,18,"u"]],"x":20,"t":1305094976.83015},{"y":2,"d":[[1,19,"s"]],"x":21,"t":1305094976.91836},{"y":3,"x":1,"t":1305094977.08607},{"y":16,"d":[[2,0,17,"# On branch master"],[3,0,25,"# Changes to be committed:"],[4,0,46,"# (use \"git reset HEAD ...\" to unstage)"],[5,0,"#"],[6,0,"#"],[6,8,34,"new file: a/b/c/hello.txt"],[7,0,"#"],[7,8,30,"modified: welcome.txt"],["cp",5,8],[9,0,31,"# Changes not staged for commit:"],[10,0,61,"# (use \"git add ...\" to update what will be committed)"],[11,0,76,"# (use \"git checkout -- ...\" to discard changes in working directory)"],["cp",5,12],[13,0,"#"],[13,8,34,"modified: a/b/c/hello.txt"],["cp",5,14],[15,0,8,"bash-3.2$"]],"x":11,"f":[[6,8,34,["a","2"]],[7,8,30,["a","2"]],[13,8,34,["a","1"]]],"t":1305094977.09564},{"y":16,"d":[[15,10,"g"]],"x":12,"t":1305094979.01413},{"y":16,"d":[[15,11,"i"]],"x":13,"t":1305094979.10204},{"y":16,"d":[[15,12,"t"]],"x":14,"t":1305094979.20617},{"y":16,"x":15,"t":1305094979.2782},{"y":16,"d":[[15,14,"s"]],"x":16,"t":1305094979.43811},{"y":16,"d":[[15,15,"t"]],"x":17,"t":1305094979.6302},{"y":16,"d":[[15,16,"a"]],"x":18,"t":1305094979.8142},{"y":16,"d":[[15,17,"s"]],"x":19,"t":1305094980.11801},{"y":16,"d":[[15,18,"h"]],"x":20,"t":1305094980.25386},{"y":17,"x":1,"t":1305094980.51815},{"y":19,"d":[[16,0,79,"Saved working directory and index state WIP on master: 0e3a4c9 which version che"],[17,0,7,"cked in?"]],"x":1,"t":1305094980.92693},{"y":20,"d":[[18,0,47,"HEAD is now at 0e3a4c9 which version checked in?"],[19,0,8,"bash-3.2$"]],"x":11,"t":1305094980.93704},{"y":20,"d":[[19,10,"g"]],"x":12,"t":1305094982.23844},{"y":20,"d":[[19,11,"i"]],"x":13,"t":1305094982.32608},{"y":20,"d":[[19,12,"t"]],"x":14,"t":1305094982.40616},{"y":20,"x":15,"t":1305094982.47795},{"y":20,"d":[[19,14,"s"]],"x":16,"t":1305094982.63791},{"y":20,"d":[[19,15,"t"]],"x":17,"t":1305094982.77412},{"y":20,"d":[[19,16,"a"]],"x":18,"t":1305094983.26204},{"y":20,"d":[[19,17,"t"]],"x":19,"t":1305094983.4859},{"y":20,"d":[[19,18,"u"]],"x":20,"t":1305094983.62206},{"y":20,"d":[["cp",1,19]],"x":21,"t":1305094983.70198},{"y":20,"x":22,"t":1305094984.11811},{"y":20,"d":[[19,21,"-"]],"x":23,"t":1305094984.20569},{"y":20,"d":[[19,22,"s"]],"x":24,"t":1305094984.31799},{"y":21,"x":1,"t":1305094984.41385},{"y":21,"d":[[20,0,8,"bash-3.2$"]],"x":11,"t":1305094984.42142},{"y":22,"d":[[20,10,13,"exit"]],"x":1,"t":1305094987.91786}]} \ No newline at end of file diff --git a/html/part2/ch06-01-git-objects.html b/html/part2/ch06-01-git-objects.html new file mode 100644 index 000000000..8500d377e --- /dev/null +++ b/html/part2/ch06-01-git-objects.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch06-01-git-objects +json_file: ch06-01-git-objects.json +--- diff --git a/html/part2/ch06-01-git-objects.json b/html/part2/ch06-01-git-objects.json new file mode 100644 index 000000000..32e7b1643 --- /dev/null +++ b/html/part2/ch06-01-git-objects.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305097221.75863,"i":1},{"y":1,"d":[[0,10,"c"]],"x":12,"t":1305097222.43546},{"y":1,"d":[[0,11,"d"]],"x":13,"t":1305097222.60299},{"y":1,"x":14,"t":1305097222.65123},{"y":1,"d":[[0,13,"/"]],"x":15,"t":1305097222.75488},{"y":1,"d":[[0,14,"p"]],"x":16,"t":1305097222.97092},{"y":1,"d":[[0,15,"a"]],"x":17,"t":1305097223.03497},{"y":1,"d":[[0,16,"t"]],"x":18,"t":1305097223.57902},{"y":1,"d":[[0,17,"h"]],"x":19,"t":1305097223.80223},{"y":1,"d":[[0,18,"/"]],"x":20,"t":1305097224.36286},{"y":1,"d":[[0,19,"t"]],"x":21,"t":1305097224.49887},{"y":1,"d":[[0,20,"o"]],"x":22,"t":1305097224.58699},{"y":1,"d":[[0,21,"/"]],"x":23,"t":1305097224.73},{"y":1,"d":[[0,22,"m"]],"x":24,"t":1305097224.87479},{"y":1,"d":[[0,23,"y"]],"x":25,"t":1305097225.05141},{"y":1,"d":[[0,24,"/"]],"x":26,"t":1305097225.14516},{"y":1,"d":[[0,25,"w"]],"x":27,"t":1305097225.4427},{"y":1,"d":[[0,26,"o"]],"x":28,"t":1305097225.50695},{"y":1,"d":[[0,27,34,"rkspace/"]],"x":36,"t":1305097225.65732},{"y":1,"d":[[0,35,"d"]],"x":37,"t":1305097226.19483},{"y":1,"d":[[0,36,"e"]],"x":38,"t":1305097226.34697},{"y":1,"d":[[0,37,39,"mo/"]],"x":41,"t":1305097226.56148},{"y":2,"x":1,"t":1305097226.91491},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305097226.91514},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305097227.34665},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305097227.43486},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305097227.50677},{"y":2,"x":15,"t":1305097227.58677},{"y":2,"d":[[1,14,"s"]],"x":16,"t":1305097227.69079},{"y":2,"d":[[1,15,"t"]],"x":17,"t":1305097227.78672},{"y":2,"d":[[1,16,"a"]],"x":18,"t":1305097227.89873},{"y":2,"d":[[1,17,"t"]],"x":19,"t":1305097227.99471},{"y":2,"d":[[1,18,"u"]],"x":20,"t":1305097228.07505},{"y":2,"d":[[1,19,"s"]],"x":21,"t":1305097228.16298},{"y":2,"x":22,"t":1305097228.31465},{"y":2,"d":[[1,21,"-"]],"x":23,"t":1305097228.44292},{"y":2,"d":[[1,22,"s"]],"x":24,"t":1305097228.61878},{"y":3,"x":1,"t":1305097228.92281},{"y":3,"d":[[2,0,8,"bash-3.2$"]],"x":11,"t":1305097228.93105},{"y":3,"d":[[2,10,"g"]],"x":12,"t":1305097230.30682},{"y":3,"d":[[2,11,"i"]],"x":13,"t":1305097230.41084},{"y":3,"d":[[2,12,"t"]],"x":14,"t":1305097230.49055},{"y":3,"x":15,"t":1305097230.54704},{"y":3,"d":[[2,14,"l"]],"x":16,"t":1305097230.62673},{"y":3,"d":[[2,15,"o"]],"x":17,"t":1305097230.79483},{"y":3,"d":[[2,16,"g"]],"x":18,"t":1305097230.89054},{"y":3,"x":19,"t":1305097230.97057},{"y":3,"d":[[2,18,"-"]],"x":20,"t":1305097231.13068},{"y":3,"d":[[2,19,"1"]],"x":21,"t":1305097231.32259},{"y":3,"x":22,"t":1305097231.59478},{"y":3,"d":[[2,21,"-"]],"x":23,"t":1305097231.77851},{"y":3,"d":[[2,22,"-"]],"x":24,"t":1305097231.97055},{"y":3,"d":[[2,23,"p"]],"x":25,"t":1305097232.17834},{"y":3,"d":[[2,24,"r"]],"x":26,"t":1305097232.26668},{"y":3,"d":[[2,25,"e"]],"x":27,"t":1305097232.39469},{"y":3,"d":[[2,26,"t"]],"x":28,"t":1305097232.5305},{"y":3,"d":[[2,27,"t"]],"x":29,"t":1305097232.70659},{"y":3,"d":[[2,28,"y"]],"x":30,"t":1305097232.83463},{"y":3,"d":[[2,29,"="]],"x":31,"t":1305097233.12266},{"y":3,"d":[[2,30,"r"]],"x":32,"t":1305097233.41064},{"y":3,"d":[[2,31,"a"]],"x":33,"t":1305097233.57033},{"y":3,"d":[[2,32,"w"]],"x":34,"t":1305097233.77048},{"y":4,"x":1,"t":1305097234.27443},{"y":11,"d":[[3,0,46,"commit 0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a"],[4,0,44,"tree f58da9a820e3fd9d84ab2ca2f1b467ac265038f9"],[5,0,46,"parent 61b1516058bd2359f99437d28a6b9fd6e933b001"],[6,0,53,"author Jiang Xin 1305092115 +0800"],[7,0,56,"committer Jiang Xin 1305092115 +0800"],[9,4,28,"which version checked in?"],[10,0,8,"bash-3.2$"]],"x":11,"f":[[3,0,46,["a","3"]]],"t":1305097234.28606},{"y":11,"d":[[10,10,"g"]],"x":12,"t":1305097236.74647},{"y":11,"d":[[10,11,"i"]],"x":13,"t":1305097236.85021},{"y":11,"d":[[10,12,"t"]],"x":14,"t":1305097236.99448},{"y":11,"x":15,"t":1305097237.13048},{"y":11,"d":[[10,14,"c"]],"x":16,"t":1305097237.29041},{"y":11,"d":[[10,15,"a"]],"x":17,"t":1305097237.43442},{"y":11,"d":[[10,16,"t"]],"x":18,"t":1305097237.54629},{"y":11,"d":[[10,17,"-"]],"x":19,"t":1305097237.69052},{"y":11,"d":[[10,18,"f"]],"x":20,"t":1305097237.87443},{"y":11,"d":[[10,19,"i"]],"x":21,"t":1305097237.97827},{"y":11,"d":[[10,20,"l"]],"x":22,"t":1305097238.05837},{"y":11,"d":[[10,21,"e"]],"x":23,"t":1305097238.17022},{"y":11,"x":24,"t":1305097238.31442},{"y":11,"d":[[10,23,"-"]],"x":25,"t":1305097238.57025},{"y":11,"d":[[10,24,"t"]],"x":26,"t":1305097239.18637},{"y":11,"x":27,"t":1305097240.05831},{"y":11,"d":[[10,26,"0"]],"x":28,"t":1305097240.61016},{"y":11,"d":[[10,27,"e"]],"x":29,"t":1305097241.0581},{"y":11,"d":[[10,28,"3"]],"x":30,"t":1305097241.6421},{"y":11,"d":[[10,29,"a"]],"x":31,"t":1305097242.13804},{"y":12,"x":1,"t":1305097242.71413},{"y":13,"d":[[11,0,5,"commit"],[12,0,8,"bash-3.2$"]],"x":11,"t":1305097242.72144},{"y":13,"d":[["cp",10,12]],"x":11,"t":1305097243.68997},{"y":13,"x":15,"t":1305097243.93002},{"y":13,"x":18,"t":1305097244.10643},{"y":13,"x":19,"t":1305097244.30605},{"y":13,"x":24,"t":1305097244.47408},{"y":13,"x":25,"t":1305097244.65012},{"y":13,"x":27,"t":1305097244.81792},{"y":13,"d":[[12,26,29,["a"," "]]],"x":26,"t":1305097245.19402},{"y":13,"x":27,"t":1305097245.46623},{"y":13,"d":[[12,26,"f"]],"x":28,"t":1305097246.25784},{"y":13,"d":[[12,27,"4"]],"x":29,"t":1305097247.18588},{"y":13,"d":[[12,27," "]],"x":28,"t":1305097247.61781},{"y":13,"d":[[12,27,"5"]],"x":29,"t":1305097247.76999},{"y":13,"d":[[12,28,"8"]],"x":30,"t":1305097247.88188},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/demo/ "],["r","bash-3.2$ git status -s "],["r","bash-3.2$ git log -1 --pretty=raw "],["r","commit 0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],["r","tree f58da9a820e3fd9d84ab2ca2f1b467ac265038f9 "],["r","parent 61b1516058bd2359f99437d28a6b9fd6e933b001 "],["r","author Jiang Xin 1305092115 +0800 "],["r","committer Jiang Xin 1305092115 +0800 "],["a"," "],["r"," which version checked in? "],["r","bash-3.2$ git cat-file -t 0e3a "],["r","commit "],["r","bash-3.2$ git cat-file -t f58d "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d"],"x":31,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":13,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305097248.84178,"i":1},{"y":14,"x":1,"t":1305097249.12174},{"y":15,"d":[[13,0,3,"tree"],[14,0,8,"bash-3.2$"]],"x":11,"t":1305097249.1321},{"y":15,"d":[["cp",12,14]],"x":11,"t":1305097249.97782},{"y":15,"x":15,"t":1305097250.3458},{"y":15,"x":18,"t":1305097250.84589},{"y":15,"x":19,"t":1305097250.92953},{"y":15,"x":24,"t":1305097251.01295},{"y":15,"x":25,"t":1305097251.09647},{"y":15,"x":26,"t":1305097251.44969},{"y":15,"x":27,"t":1305097251.63352},{"y":15,"d":[[14,26,29,["a"," "]]],"x":26,"t":1305097251.84168},{"y":15,"x":27,"t":1305097252.05077},{"y":15,"d":[[14,26,"6"]],"x":28,"t":1305097252.96161},{"y":15,"d":[[14,27,"1"]],"x":29,"t":1305097253.33776},{"y":15,"d":[[14,28,"b"]],"x":30,"t":1305097253.92157},{"y":15,"d":[[14,29,"1"]],"x":31,"t":1305097254.20162},{"y":16,"x":1,"t":1305097254.65775},{"y":17,"d":[["cp",11,15],[16,0,8,"bash-3.2$"]],"x":11,"t":1305097254.67296},{"y":17,"d":[["cp",14,16]],"x":11,"t":1305097256.72156},{"y":17,"x":15,"t":1305097257.106},{"y":17,"x":18,"t":1305097257.28127},{"y":17,"x":19,"t":1305097257.43355},{"y":17,"x":24,"t":1305097257.60136},{"y":17,"x":25,"t":1305097257.76173},{"y":17,"d":[[16,24,"p"]],"x":25,"t":1305097258.18538},{"y":18,"x":1,"t":1305097258.40137},{"y":24,"d":[[17,0,44,"tree 190d840dd3d8fa319bdec6b8112b0957be7ee769"],[18,0,46,"parent 38690158d57ea02061e42ab88101ed3517a4292f"],[19,0,53,"author Jiang Xin 1305084824 +0800"],[20,0,56,"committer Jiang Xin 1305084824 +0800"],[22,0,15,"who does commit?"],[23,0,8,"bash-3.2$"]],"x":11,"t":1305097258.40888},{"y":24,"d":[["cp",16,23]],"x":11,"t":1305097258.98563},{"y":24,"d":[["cp",14,23]],"x":11,"t":1305097259.14542},{"y":24,"d":[["cp",12,23]],"x":11,"t":1305097259.28152},{"y":24,"d":[["cp",10,23]],"x":11,"t":1305097259.44189},{"y":24,"x":15,"t":1305097259.96932},{"y":24,"x":18,"t":1305097260.13738},{"y":24,"x":19,"t":1305097260.30528},{"y":24,"x":24,"t":1305097260.47348},{"y":24,"x":25,"t":1305097260.63348},{"y":24,"d":[[23,24,"p"]],"x":25,"t":1305097261.07321},{"y":25,"x":1,"t":1305097261.2734},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",14,8],["cp",5,9],["cp",16,10],["cp",17,11],["cp",18,12],["cp",19,13],["cp",20,14],["cp",2,15],["cp",22,16],["cp",23,17],[18,0,46,"tree f58da9a820e3fd9d84ab2ca2f1b467ac265038f9 "],[19,0,53,"parent 61b1516058bd2359f99437d28a6b9fd6e933b001 "],["cp",0,20],["cp",1,21],["cp",2,22],[23,0,29,"which version checked in? "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,3]],"t":1305097261.2818},{"y":25,"d":[["cp",17,24]],"x":11,"t":1305097262.44159},{"y":25,"d":[["cp",10,24]],"x":11,"t":1305097262.84121},{"y":25,"d":[["cp",8,24]],"x":11,"t":1305097263.52955},{"y":25,"d":[["cp",6,24]],"x":11,"t":1305097263.92946},{"y":25,"x":15,"t":1305097264.28132},{"y":25,"x":18,"t":1305097264.44133},{"y":25,"x":19,"t":1305097264.60915},{"y":25,"x":24,"t":1305097264.78634},{"y":25,"x":25,"t":1305097264.94511},{"y":25,"x":27,"t":1305097265.12925},{"y":25,"x":26,"t":1305097265.57716},{"y":25,"x":25,"t":1305097266.609},{"y":25,"d":[[24,24,"p"]],"x":25,"t":1305097267.0972},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",4,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",1,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",0,20],["cp",1,21],["cp",23,22],["cp",24,23],["cp",1,24]],"x":1,"t":1305097267.30502},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",3,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",0,20],["cp",22,21],["cp",23,22],[23,0,51,"100644 blob fd3c069c1de4f4bc9b15940f490aeb48852f3c42"],[23,56,66,"welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305097267.31153},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305097269.52109},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305097269.60098},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305097269.71338},{"y":25,"x":15,"t":1305097269.79286},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305097270.09693},{"y":25,"d":[[24,15,"a"]],"x":17,"t":1305097270.26487},{"y":25,"d":[[24,16,"t"]],"x":18,"t":1305097270.34488},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305097270.50489},{"y":25,"d":[[24,18,"f"]],"x":20,"t":1305097270.64902},{"y":25,"d":[[24,19,"i"]],"x":21,"t":1305097270.73694},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305097270.83308},{"y":25,"d":[[24,21,"e"]],"x":23,"t":1305097270.91299},{"y":25,"x":24,"t":1305097271.00087},{"y":25,"d":[[24,23,"-"]],"x":25,"t":1305097271.17694},{"y":25,"d":[[24,24,"t"]],"x":26,"t":1305097272.13711},{"y":25,"x":27,"t":1305097272.33686},{"y":25,"d":[[24,26,"f"]],"x":28,"t":1305097272.76072},{"y":25,"d":[[24,27,"d"]],"x":29,"t":1305097272.96876},{"y":25,"d":[[24,28,"3"]],"x":30,"t":1305097273.6888},{"y":25,"d":[[24,29,"c"]],"x":31,"t":1305097273.9448},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",2,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",12,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",12,24]],"x":1,"t":1305097274.28858},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",1,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",11,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,1,29,"lob "],[24,0,8,"bash-3.2$"]],"x":11,"t":1305097274.29514},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305097275.06475},{"y":25,"x":15,"t":1305097275.24886},{"y":25,"x":18,"t":1305097275.40877},{"y":25,"x":19,"t":1305097275.58484},{"y":25,"x":24,"t":1305097275.75318},{"y":25,"x":25,"t":1305097275.91248},{"y":25,"d":[[24,24,"p"]],"x":25,"t":1305097276.48052},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",10,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",10,24]],"x":1,"t":1305097277.1769},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",8,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,5,"Hello."],[23,0,29,"Nice to meet you. "],[24,0,8,"bash-3.2$"]],"x":11,"t":1305097277.18404},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",7,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",7,24]],"x":1,"t":1305097279.15266},{"y":25,"d":[["cp",23,24]],"x":11,"t":1305097279.15279},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305097279.44051},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305097279.51275},{"y":25,"x":14,"t":1305097279.60853},{"y":25,"d":[[24,13,"."]],"x":15,"t":1305097279.73684},{"y":25,"d":[[24,14,"g"]],"x":16,"t":1305097279.86449},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305097279.96028},{"y":25,"d":[[24,16,17,"t/"]],"x":19,"t":1305097280.13681},{"y":25,"d":[[24,18,"b"]],"x":20,"t":1305097280.75249},{"y":25,"d":[[24,18," "]],"x":19,"t":1305097281.19247},{"y":25,"d":[[24,18,"o"]],"x":20,"t":1305097281.37643},{"y":25,"d":[[24,19,"b"]],"x":21,"t":1305097281.48841},{"y":25,"d":[[24,20,25,"jects/"]],"x":27,"t":1305097281.74861},{"d":[["r","commit "],["r","bash-3.2$ git cat-file -p 61b1 "],["r","tree 190d840dd3d8fa319bdec6b8112b0957be7ee769 "],["r","parent 38690158d57ea02061e42ab88101ed3517a4292f "],["r","author Jiang Xin 1305084824 +0800 "],["r","committer Jiang Xin 1305084824 +0800 "],["a"," "],["r","who does commit? "],["r","bash-3.2$ git cat-file -p 0e3a "],["r","tree f58da9a820e3fd9d84ab2ca2f1b467ac265038f9 "],["r","parent 61b1516058bd2359f99437d28a6b9fd6e933b001 "],["r","author Jiang Xin 1305092115 +0800 "],["r","committer Jiang Xin 1305092115 +0800 "],["a"," "],["r","which version checked in? "],["r","bash-3.2$ git cat-file -p f58d "],["r","100644 blob fd3c069c1de4f4bc9b15940f490aeb48852f3c42 welcome.txt "],["r","bash-3.2$ git cat-file -t fd3c "],["r","blob "],["r","bash-3.2$ git cat-file -p fd3c "],["r","Hello. "],["r","Nice to meet you. "],["r","bash-3.2$ "],["r","bash-3.2$ ls .git/objects/ "],["a"," "]],"x":1,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305097282.1766,"i":1},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",4,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,47,"0e 19 38 51 61 93 a1 c6 d9 e8 f7 info"],[23,0,47,"18 34 4a 53 8d 94 be ca de f5 fd pack"],["cp",20,24]],"x":11,"t":1305097282.18314},{"y":25,"d":[["cp",21,24]],"x":11,"t":1305097282.73629},{"y":25,"x":14,"t":1305097282.9445},{"y":25,"x":15,"t":1305097283.12827},{"y":25,"x":14,"t":1305097283.49638},{"y":25,"d":[[24,13,26,"-.git/objects/"]],"x":15,"t":1305097283.92858},{"y":25,"d":[[24,14,27,"F.git/objects/"]],"x":16,"t":1305097284.1765},{"y":25,"d":[[24,15,28," .git/objects/"]],"x":17,"t":1305097284.28048},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",3,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",3,24]],"x":1,"t":1305097284.46471},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",1,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,59,"0e/ 19/ 38/ 51/ 61/ 93/ a1/ c6/ d9/ e8/ f7/ info/"],[23,0,59,"18/ 34/ 4a/ 53/ 8d/ 94/ be/ ca/ de/ f5/ fd/ pack/"],["cp",17,24]],"x":11,"t":1305097284.47051},{"y":25,"d":[[24,10,"f"]],"x":12,"t":1305097286.47212},{"y":25,"d":[[24,11,"o"]],"x":13,"t":1305097286.53627},{"y":25,"d":[[24,12,"r"]],"x":14,"t":1305097286.6562},{"y":25,"x":15,"t":1305097286.76807},{"y":25,"d":[[24,14,"i"]],"x":16,"t":1305097286.92825},{"y":25,"d":[[24,15,"d"]],"x":17,"t":1305097287.06425},{"y":25,"x":18,"t":1305097287.45625},{"y":25,"d":[[24,17,"i"]],"x":19,"t":1305097287.62437},{"y":25,"d":[[24,18,"n"]],"x":20,"t":1305097287.81634},{"y":25,"x":21,"t":1305097288.01625},{"y":25,"d":[[24,20,"0"]],"x":22,"t":1305097289.55224},{"y":25,"d":[[24,21,"e"]],"x":23,"t":1305097290.14466},{"y":25,"d":[[24,22,"3"]],"x":24,"t":1305097290.40795},{"y":25,"d":[[24,23,"a"]],"x":25,"t":1305097290.66438},{"y":25,"x":26,"t":1305097290.93613},{"y":25,"d":[[24,25,"f"]],"x":27,"t":1305097291.47229},{"y":25,"d":[[24,26,"5"]],"x":28,"t":1305097291.8162},{"y":25,"d":[[24,27,"8"]],"x":29,"t":1305097292.2402},{"y":25,"d":[[24,28,"d"]],"x":30,"t":1305097292.52805},{"y":25,"x":31,"t":1305097293.96796},{"y":25,"d":[[24,30,"6"]],"x":32,"t":1305097294.92787},{"y":25,"d":[[24,31,"1"]],"x":33,"t":1305097295.21576},{"y":25,"d":[[24,32,"b"]],"x":34,"t":1305097295.74382},{"y":25,"d":[[24,33,"1"]],"x":35,"t":1305097296.01579},{"y":25,"x":36,"t":1305097296.43198},{"y":25,"d":[[24,35,"f"]],"x":37,"t":1305097297.20803},{"y":25,"d":[[24,36,"d"]],"x":38,"t":1305097297.4078},{"y":25,"d":[[24,37,"3"]],"x":39,"t":1305097297.92777},{"y":25,"d":[[24,38,"c"]],"x":40,"t":1305097298.17581},{"y":25,"x":41,"t":1305097299.06394},{"y":25,"x":40,"t":1305097299.46377},{"y":25,"d":[[24,39,";"]],"x":41,"t":1305097299.73585},{"y":25,"x":42,"t":1305097299.86391},{"y":25,"d":[[24,41,"d"]],"x":43,"t":1305097300.52819},{"y":25,"d":[[24,42,"o"]],"x":44,"t":1305097300.59967},{"y":25,"x":45,"t":1305097300.75153},{"y":25,"d":[[24,44,"l"]],"x":46,"t":1305097301.50366},{"y":25,"d":[[24,45,"s"]],"x":47,"t":1305097301.58369},{"y":25,"x":48,"t":1305097301.67181},{"y":25,"d":[[24,47,"-"]],"x":49,"t":1305097301.97549},{"y":25,"d":[[24,48,"l"]],"x":50,"t":1305097302.5115},{"y":25,"x":51,"t":1305097302.6635},{"y":25,"d":[[24,50,"."]],"x":52,"t":1305097303.0001},{"y":25,"d":[[24,51,"g"]],"x":53,"t":1305097303.12748},{"y":25,"d":[[24,52,"i"]],"x":54,"t":1305097303.28749},{"y":25,"d":[[24,53,"t"]],"x":55,"t":1305097303.44779},{"y":25,"d":[[24,53," "]],"x":54,"t":1305097303.78338},{"y":25,"d":[[24,52," "]],"x":53,"t":1305097304.28349},{"y":25,"d":[[24,51," "]],"x":52,"t":1305097304.36694},{"y":25,"d":[[24,50," "]],"x":51,"t":1305097304.45033},{"y":25,"x":50,"t":1305097304.53373},{"y":25,"d":[[24,48," "]],"x":49,"t":1305097304.61706},{"y":25,"d":[[24,47," "]],"x":48,"t":1305097304.70048},{"y":25,"x":47,"t":1305097304.90346},{"y":25,"d":[[24,46,"."]],"x":48,"t":1305097305.17533},{"y":25,"d":[[24,46," "]],"x":47,"t":1305097305.55146},{"y":25,"x":48,"t":1305097305.67154},{"y":25,"d":[[24,47,"."]],"x":49,"t":1305097305.82321},{"y":25,"d":[[24,48,"g"]],"x":50,"t":1305097305.95944},{"y":25,"d":[[24,49,"i"]],"x":51,"t":1305097306.02367},{"y":25,"d":[[24,50,51,"t/"]],"x":53,"t":1305097306.19654},{"y":25,"d":[[24,52,"o"]],"x":54,"t":1305097306.6637},{"y":25,"d":[[24,53,"b"]],"x":55,"t":1305097306.75951},{"y":25,"d":[[24,54,"j"]],"x":56,"t":1305097306.84736},{"y":25,"d":[[24,55,59,"ects/"]],"x":61,"t":1305097307.02907},{"y":25,"d":[[24,60,"$"]],"x":62,"t":1305097308.1115},{"y":25,"d":[[24,61,"{"]],"x":63,"t":1305097309.07953},{"y":25,"d":[[24,62,"i"]],"x":64,"t":1305097309.37539},{"y":25,"d":[[24,63,"d"]],"x":65,"t":1305097309.46342},{"y":25,"d":[[24,64,":"]],"x":66,"t":1305097309.97534},{"y":25,"d":[[24,65,"0"]],"x":67,"t":1305097310.65538},{"y":25,"d":[[24,66,":"]],"x":68,"t":1305097311.11242},{"y":25,"d":[[24,67,"2"]],"x":69,"t":1305097311.33512},{"y":25,"d":[[24,68,"}"]],"x":70,"t":1305097312.35132},{"y":25,"d":[[24,69,"\\"]],"x":71,"t":1305097312.73521},{"y":25,"d":[[24,69," "]],"x":70,"t":1305097313.11127},{"y":25,"d":[[24,69,"/"]],"x":71,"t":1305097313.39915},{"y":25,"d":[[24,70,"#"]],"x":72,"t":1305097314.20705},{"y":25,"d":[[24,71,"$"]],"x":73,"t":1305097314.22325},{"y":25,"d":[[24,71," "]],"x":72,"t":1305097315.09503},{"y":25,"d":[[24,70," "]],"x":71,"t":1305097315.287},{"y":25,"d":[[24,70,"#"]],"x":72,"t":1305097315.55933},{"y":25,"d":[[24,70," "]],"x":71,"t":1305097316.17494},{"y":25,"d":[[24,70,"$"]],"x":72,"t":1305097316.55923},{"y":25,"d":[[24,71,"{"]],"x":73,"t":1305097317.71099},{"y":25,"d":[[24,72,"i"]],"x":74,"t":1305097318.08706},{"y":25,"d":[[24,73,"d"]],"x":75,"t":1305097318.18282},{"y":25,"d":[[24,74,":"]],"x":76,"t":1305097318.57501},{"y":25,"d":[[24,75,"2"]],"x":77,"t":1305097318.73482},{"d":[["r","committer Jiang Xin 1305084824 +0800 "],["a"," "],["r","who does commit? "],["r","bash-3.2$ git cat-file -p 0e3a "],["r","tree f58da9a820e3fd9d84ab2ca2f1b467ac265038f9 "],["r","parent 61b1516058bd2359f99437d28a6b9fd6e933b001 "],["r","author Jiang Xin 1305092115 +0800 "],["r","committer Jiang Xin 1305092115 +0800 "],["a"," "],["r","which version checked in? "],["r","bash-3.2$ git cat-file -p f58d "],["r","100644 blob fd3c069c1de4f4bc9b15940f490aeb48852f3c42 welcome.txt "],["r","bash-3.2$ git cat-file -t fd3c "],["r","blob "],["r","bash-3.2$ git cat-file -p fd3c "],["r","Hello. "],["r","Nice to meet you. "],["r","bash-3.2$ "],["r","bash-3.2$ ls .git/objects/ "],["r","0e 19 38 51 61 93 a1 c6 d9 e8 f7 info "],["r","18 34 4a 53 8d 94 be ca de f5 fd pack "],["r","bash-3.2$ ls -F .git/objects/ "],["r","0e/ 19/ 38/ 51/ 61/ 93/ a1/ c6/ d9/ e8/ f7/ info/ "],["r","18/ 34/ 4a/ 53/ 8d/ 94/ be/ ca/ de/ f5/ fd/ pack/ "],["r","bash-3.2$ for id in 0e3a f58d 61b1 fd3c; do ls .git/objects/${id:0:2}/${id:2} "]],"x":78,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305097319.51111,"i":1},{"y":25,"d":[[24,77,"*"]],"x":1,"t":1305097320.17497},{"y":25,"d":[[24,0,";"]],"x":2,"t":1305097320.68691},{"y":25,"d":[[24,1," "]],"x":3,"t":1305097320.89514},{"y":25,"d":[[24,2,"d"]],"x":4,"t":1305097321.13492},{"y":25,"d":[[24,3,"o"]],"x":5,"t":1305097321.18292},{"y":25,"d":[[24,4,"n"]],"x":6,"t":1305097321.30277},{"y":25,"d":[[24,5,"e"]],"x":7,"t":1305097321.3909},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"t":1305097322.13488},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",13,9],["cp",14,10],["cp",15,11],["cp",16,12],["cp",17,13],["cp",18,14],["cp",19,15],["cp",20,16],["cp",21,17],["cp",22,18],["cp",23,19],[20,0,53,".git/objects/0e/3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a"],[21,0,59,".git/objects/f5/8da9a820e3fd9d84ab2ca2f1b467ac265038f9 "],[22,0,59,".git/objects/61/b1516058bd2359f99437d28a6b9fd6e933b001 "],[23,0,77,".git/objects/fd/3c069c1de4f4bc9b15940f490aeb48852f3c42 "],["cp",12,24]],"x":11,"t":1305097322.16976},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305097326.43857},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305097326.50261},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305097326.64655},{"y":25,"x":15,"t":1305097326.7425},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305097326.90259},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305097327.07841},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305097327.21484},{"y":25,"x":19,"t":1305097327.29453},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305097327.59047},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305097327.77464},{"y":25,"d":[[24,20,"p"]],"x":22,"t":1305097328.01455},{"y":25,"d":[[24,21,"r"]],"x":23,"t":1305097328.12639},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305097328.27056},{"y":25,"d":[[24,23,"t"]],"x":25,"t":1305097328.46293},{"y":25,"d":[[24,24,"t"]],"x":26,"t":1305097328.63862},{"y":25,"d":[[24,25,"y"]],"x":27,"t":1305097328.74246},{"y":25,"d":[[24,26,"-"]],"x":28,"t":1305097329.65434},{"y":25,"d":[[24,27,"r"]],"x":29,"t":1305097329.92634},{"y":25,"d":[[24,28,"a"]],"x":30,"t":1305097330.14245},{"y":25,"d":[[24,29,"w"]],"x":31,"t":1305097330.45472},{"y":25,"x":32,"t":1305097331.24644},{"y":25,"d":[[24,31,"-"]],"x":33,"t":1305097331.47055},{"y":25,"d":[[24,32,"-"]],"x":34,"t":1305097331.64672},{"y":25,"d":[[24,33,"g"]],"x":35,"t":1305097331.69465},{"y":25,"d":[[24,34,"r"]],"x":36,"t":1305097331.8704},{"y":25,"d":[[24,35,"a"]],"x":37,"t":1305097331.99826},{"y":25,"d":[[24,36,"p"]],"x":38,"t":1305097332.11035},{"y":25,"d":[[24,37,"h"]],"x":39,"t":1305097332.39029},{"y":25,"x":40,"t":1305097332.88617},{"y":25,"d":[[24,39,"0"]],"x":41,"t":1305097333.87815},{"y":25,"d":[[24,40,"e"]],"x":42,"t":1305097333.98231},{"y":25,"d":[[24,41,"3"]],"x":43,"t":1305097335.19016},{"y":25,"d":[[24,42,"a"]],"x":44,"t":1305097335.43809},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",2,24]],"x":1,"t":1305097336.40599},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,42,"fatal: unrecognized argument: --pretty-raw "],["cp",10,24]],"x":11,"t":1305097336.41398},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305097337.68628},{"y":25,"x":15,"t":1305097337.91818},{"y":25,"x":19,"t":1305097338.11793},{"y":25,"x":21,"t":1305097338.29394},{"y":25,"x":22,"t":1305097338.6539},{"y":25,"x":23,"t":1305097338.83348},{"y":25,"x":24,"t":1305097338.99784},{"y":25,"x":25,"t":1305097339.16593},{"y":25,"x":26,"t":1305097339.33387},{"y":25,"x":27,"t":1305097339.49459},{"y":25,"d":[[24,26,"="]],"x":27,"t":1305097339.89422},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"t":1305097340.28585},{"y":25,"d":[["cp",22,0],["cp",23,1],[2,0,48,"* commit 0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a"],[3,0,51,"| tree f58da9a820e3fd9d84ab2ca2f1b467ac265038f9 "],[3,56,66,["a"," "]],[4,0,48,"| parent 61b1516058bd2359f99437d28a6b9fd6e933b001"],[5,0,55,"| author Jiang Xin 1305092115 +0800"],[6,0,58,"| committer Jiang Xin 1305092115 +0800"],[7,0,5,"| "],[8,0,30,"| which version checked in?"],["cp",7,9],[10,0,48,"* commit 61b1516058bd2359f99437d28a6b9fd6e933b001"],[11,0,47,"| tree 190d840dd3d8fa319bdec6b8112b0957be7ee769 "],[12,0,48,"| parent 38690158d57ea02061e42ab88101ed3517a4292f"],[13,0,55,"| author Jiang Xin 1305084824 +0800"],[14,0,59,"| committer Jiang Xin 1305084824 +0800 "],["cp",7,15],[16,0,77,"| who does commit? "],["cp",7,17],[18,0,53,"* commit 38690158d57ea02061e42ab88101ed3517a4292f "],[19,0,53," tree 190d840dd3d8fa319bdec6b8112b0957be7ee769 "],[20,0,55," author Jiang Xin 1305083008 +0800"],[21,0,58," committer Jiang Xin 1305083008 +0800"],["cp",24,22],[23,0,42," intialized. "],[24,0,":"]],"x":2,"f":[[2,2,48,["a","3"]],[3,0,"1"],["cp",3,4],["cp",3,5],["cp",3,6],["cp",3,7],["cp",3,8],["cp",3,9],["cp",2,10],["cp",3,11],["cp",3,12],["cp",3,13],["cp",3,14],["cp",3,15],["cp",3,16],["cp",3,17],["cp",2,18]],"t":1305097340.29703},{"y":25,"b":[[24,0,5,["a","7"]]],"d":[[24,0,4,"(END)"]],"x":7,"f":[[24,0,5,["a","0"]]],"t":1305097345.758},{"y":25,"b":[["cp",0,24]],"d":[["cp",22,24]],"x":1,"f":[["cp",0,24]],"t":1305097347.34953},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305097347.35116},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305097348.13373},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305097348.22966},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305097348.35801},{"y":25,"x":15,"t":1305097348.42167},{"y":25,"d":[[24,14,"b"]],"x":16,"t":1305097348.64553},{"y":25,"d":[[24,15,"r"]],"x":17,"t":1305097348.82182},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305097348.95768},{"y":25,"d":[[24,17,"n"]],"x":19,"t":1305097349.12588},{"y":25,"d":[[24,18,"c"]],"x":20,"t":1305097349.30954},{"y":25,"d":[[24,19,"h"]],"x":21,"t":1305097349.42946},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",6,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",6,14],["cp",16,15],["cp",6,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",21,24]],"x":1,"f":[["cp",2,1],["cp",3,2],["cp",1,9],["cp",2,10],["cp",1,17],["cp",0,18]],"t":1305097349.6853},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",5,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",5,13],["cp",15,14],["cp",5,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,19,"* master "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",0,8],["cp",1,9],["cp",0,16],["cp",18,17],[23,2,7,["a","2"]]],"t":1305097349.69284},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305097350.19743},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305097350.26956},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305097350.35754},{"y":25,"x":15,"t":1305097350.42168},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305097350.58161},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305097350.74992},{"y":25,"d":[[24,16,"t"]],"x":18,"t":1305097350.9494},{"y":25,"d":[[24,17,"u"]],"x":19,"t":1305097351.08573},{"y":25,"d":[[24,17," "]],"x":18,"t":1305097351.38943},{"y":25,"d":[[24,16," "]],"x":17,"t":1305097351.56544},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305097351.66951},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305097351.82151},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305097351.91759},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305097352.02172},{"y":25,"x":22,"t":1305097352.19857},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305097352.30949},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305097352.50161},{"y":25,"x":25,"t":1305097352.75725},{"y":25,"d":[[24,24,"-"]],"x":26,"t":1305097353.07744},{"y":25,"d":[[24,25,"b"]],"x":27,"t":1305097353.22933},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",4,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",4,12],["cp",14,13],["cp",4,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",19,24]],"x":1,"f":[["cp",1,0],["cp",8,7],["cp",0,8],["cp",7,15],["cp",17,16],["cp",23,22],["cp",16,23]],"t":1305097354.36555},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",3,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",3,11],["cp",13,12],["cp",3,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,25,"## master "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",7,6],["cp",0,7],["cp",6,14],["cp",16,15],["cp",22,21],["cp",15,22],[23,3,8,["a","2"]]],"t":1305097354.37372},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305097354.77325},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305097354.82946},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305097354.9573},{"y":25,"x":15,"t":1305097355.01327},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305097355.15738},{"d":[["r","| parent 61b1516058bd2359f99437d28a6b9fd6e933b001 "],["r","| author Jiang Xin 1305092115 +0800 "],["r","| committer Jiang Xin 1305092115 +0800 "],["r","| "],["r","| which version checked in? "],["r","| "],["r","* commit 61b1516058bd2359f99437d28a6b9fd6e933b001 "],["r","| tree 190d840dd3d8fa319bdec6b8112b0957be7ee769 "],["r","| parent 38690158d57ea02061e42ab88101ed3517a4292f "],["r","| author Jiang Xin 1305084824 +0800 "],["r","| committer Jiang Xin 1305084824 +0800 "],["r","| "],["r","| who does commit? "],["r","| "],["r","* commit 38690158d57ea02061e42ab88101ed3517a4292f "],["r"," tree 190d840dd3d8fa319bdec6b8112b0957be7ee769 "],["r"," author Jiang Xin 1305083008 +0800 "],["r"," committer Jiang Xin 1305083008 +0800 "],["a"," "],["r"," intialized. "],["r","bash-3.2$ git branch "],["r","* master "],["r","bash-3.2$ git status -s -b "],["r","## master "],["r","bash-3.2$ git lo "]],"x":17,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","17777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d","d","d","d",["r","77333333333333333333333333333333333333333333333337777777777777777777777777777777"],["r","17777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d","d","d","d","d",["r","77333333333333333333333333333333333333333333333337777777777777777777777777777777"],["a","7"],"d","d","d","d","d",["r","77222222777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","77722222277777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305097355.31814,"i":1},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305097355.42128},{"y":25,"x":19,"t":1305097355.52526},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305097355.63722},{"y":25,"d":[[24,19,"1"]],"x":21,"t":1305097355.85323},{"y":25,"x":22,"t":1305097356.07744},{"y":25,"d":[[24,21,"H"]],"x":23,"t":1305097357.74145},{"y":25,"d":[[24,22,"E"]],"x":24,"t":1305097357.82915},{"y":25,"d":[[24,23,"A"]],"x":25,"t":1305097358.01342},{"y":25,"d":[[24,24,"D"]],"x":26,"t":1305097358.14926},{"y":25,"x":27,"t":1305097359.78143},{"y":25,"d":[[24,26,"-"]],"x":28,"t":1305097360.06922},{"y":25,"d":[[24,27,"-"]],"x":29,"t":1305097360.26896},{"y":25,"d":[[24,28,"o"]],"x":30,"t":1305097360.46118},{"y":25,"d":[[24,29,"n"]],"x":31,"t":1305097360.62097},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305097360.71707},{"y":25,"d":[[24,31,"l"]],"x":33,"t":1305097360.98118},{"y":25,"d":[[24,32,"i"]],"x":34,"t":1305097361.14922},{"y":25,"d":[[24,33,"n"]],"x":35,"t":1305097361.27721},{"y":25,"d":[[24,34,"e"]],"x":36,"t":1305097361.34104},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",2,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",2,10],["cp",12,11],["cp",2,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",17,24]],"x":1,"f":[["cp",6,5],["cp",0,6],["cp",5,13],["cp",15,14],["cp",21,20],["cp",14,21],["cp",23,22],["cp",14,23]],"t":1305097361.51727},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",1,9],["cp",11,10],["cp",1,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,34,"0e3a4c9 which version checked in? "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",5,4],["cp",0,5],["cp",4,12],["cp",14,13],["cp",20,19],["cp",13,20],["cp",22,21],["cp",13,22],[23,0,6,["a","3"]]],"t":1305097361.52922},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305097362.70095},{"y":25,"x":15,"t":1305097362.98911},{"y":25,"x":19,"t":1305097363.1411},{"y":25,"x":20,"t":1305097363.30889},{"y":25,"x":22,"t":1305097363.50105},{"y":25,"d":[[24,21,34,"--oneline "]],"x":22,"t":1305097363.86113},{"y":25,"d":[[24,21,30,"m--oneline"]],"x":23,"t":1305097364.09314},{"y":25,"d":[[24,22,31,"a--oneline"]],"x":24,"t":1305097364.17285},{"y":25,"d":[[24,23,32,"s--oneline"]],"x":25,"t":1305097364.34092},{"y":25,"d":[[24,24,33,"t--oneline"]],"x":26,"t":1305097364.45305},{"y":25,"d":[[24,25,34,"e--oneline"]],"x":27,"t":1305097364.60556},{"y":25,"d":[[24,26,35,"r--oneline"]],"x":28,"t":1305097364.68492},{"y":25,"d":[[24,27,36," --oneline"]],"x":29,"t":1305097364.78083},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",0,8],["cp",10,9],["cp",0,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",15,24]],"x":1,"f":[["cp",4,3],["cp",0,4],["cp",3,11],["cp",13,12],["cp",19,18],["cp",12,19],["cp",21,20],["cp",12,21],["cp",23,22],["cp",12,23]],"t":1305097364.93279},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",1,7],["cp",9,8],["cp",1,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",21,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,2],["cp",0,3],["cp",2,10],["cp",12,11],["cp",18,17],["cp",11,18],["cp",20,19],["cp",11,20],["cp",22,21],["cp",11,22],["cp",21,23]],"t":1305097364.94403},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305097366.20492},{"y":25,"x":15,"t":1305097366.42088},{"y":25,"x":19,"t":1305097366.62064},{"y":25,"x":20,"t":1305097366.80495},{"y":25,"x":22,"t":1305097366.98107},{"y":25,"d":[[24,21,36,"--oneline "]],"x":22,"t":1305097367.39713},{"y":25,"d":[[24,21,30,"r--oneline"]],"x":23,"t":1305097367.67677},{"y":25,"d":[[24,22,31,"e--oneline"]],"x":24,"t":1305097367.81269},{"y":25,"d":[[24,23,32,"f--oneline"]],"x":25,"t":1305097367.98108},{"y":25,"d":[[24,24,33,"s--oneline"]],"x":26,"t":1305097368.84487},{"y":25,"d":[[24,25,34,"/--oneline"]],"x":27,"t":1305097369.05261},{"y":25,"d":[[24,26,35,"h--oneline"]],"x":28,"t":1305097369.27657},{"y":25,"d":[[24,27,36,"e--oneline"]],"x":29,"t":1305097369.32472},{"y":25,"d":[[24,28,37,"a--oneline"]],"x":30,"t":1305097369.46069},{"y":25,"d":[[24,29,38,"d--oneline"]],"x":31,"t":1305097369.60472},{"y":25,"d":[[24,30,39,"s--oneline"]],"x":32,"t":1305097369.84476},{"y":25,"d":[[24,31,40,"/--oneline"]],"x":33,"t":1305097370.06898},{"y":25,"d":[[24,32,41,"m--oneline"]],"x":34,"t":1305097370.2847},{"y":25,"d":[[24,33,42,"a--oneline"]],"x":35,"t":1305097370.3488},{"y":25,"d":[[24,34,43,"s--oneline"]],"x":36,"t":1305097370.50057},{"y":25,"d":[[24,35,44,"t--oneline"]],"x":37,"t":1305097370.60473},{"y":25,"d":[[24,36,45,"e--oneline"]],"x":38,"t":1305097370.74059},{"y":25,"d":[[24,37,46,"r--oneline"]],"x":39,"t":1305097370.82082},{"y":25,"d":[[24,38,47," --oneline"]],"x":40,"t":1305097370.94069},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",8,7],["cp",0,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",20,22],["cp",24,23],["cp",13,24]],"x":1,"f":[["cp",2,1],["cp",0,2],["cp",1,9],["cp",11,10],["cp",17,16],["cp",10,17],["cp",19,18],["cp",10,19],["cp",21,20],["cp",10,21],["cp",20,22],["cp",10,23]],"t":1305097371.13275},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",5,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",19,21],["cp",23,22],["cp",19,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",0,8],["cp",10,9],["cp",16,15],["cp",9,16],["cp",18,17],["cp",9,18],["cp",20,19],["cp",9,20],["cp",19,21],["cp",9,22],["cp",19,23]],"t":1305097371.14608},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",4,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",18,20],["cp",22,21],["cp",18,22],["cp",24,23],["cp",11,24]],"x":1,"f":[["cp",1,0],["cp",8,7],["cp",9,8],["cp",15,14],["cp",8,15],["cp",17,16],["cp",8,17],["cp",19,18],["cp",8,19],["cp",18,20],["cp",8,21],["cp",18,22],["cp",8,23]],"t":1305097373.52465},{"y":25,"d":[["cp",23,24]],"x":11,"t":1305097373.52478},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305097375.70041},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305097375.8043},{"y":25,"x":14,"t":1305097375.88451},{"y":25,"d":[[24,13,"-"]],"x":15,"t":1305097377.56466},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305097377.7965},{"y":25,"x":17,"t":1305097377.95639},{"y":25,"d":[[24,16,"."]],"x":18,"t":1305097378.05242},{"y":25,"d":[[24,17,"g"]],"x":19,"t":1305097378.33229},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305097378.48432},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305097378.62019},{"y":25,"d":[[24,20,"/"]],"x":22,"t":1305097378.91765},{"y":25,"d":[[24,21,"H"]],"x":23,"t":1305097379.5882},{"y":25,"d":[[24,22,"E"]],"x":24,"t":1305097379.68415},{"y":25,"d":[[24,23,"A"]],"x":25,"t":1305097379.83621},{"y":25,"d":[[24,24,"D"]],"x":26,"t":1305097379.97218},{"y":25,"x":27,"t":1305097380.52426},{"y":25,"d":[[24,26,"."]],"x":28,"t":1305097380.69248},{"y":25,"d":[[24,27,"g"]],"x":29,"t":1305097380.80425},{"y":25,"d":[[24,28,"i"]],"x":30,"t":1305097380.86018},{"y":25,"d":[[24,29,30,"t/"]],"x":32,"t":1305097381.04141},{"y":25,"d":[[24,31,"r"]],"x":33,"t":1305097381.38031},{"y":25,"d":[[24,32,"e"]],"x":34,"t":1305097381.5322},{"y":25,"d":[[24,33,"f"]],"x":35,"t":1305097381.66938},{"y":25,"d":[[24,34,35,"s/"]],"x":37,"t":1305097381.90996},{"y":25,"d":[[24,36,"h"]],"x":38,"t":1305097382.34032},{"y":25,"d":[[24,37,41,"eads/"]],"x":43,"t":1305097382.43788},{"y":25,"d":[[24,42,"m"]],"x":44,"t":1305097382.91613},{"y":25,"d":[[24,43,47,"aster"]],"x":50,"t":1305097383.01405},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",3,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",17,19],["cp",21,20],["cp",17,21],["cp",23,22],["cp",24,23],["cp",10,24]],"x":1,"f":[["cp",7,6],["cp",8,7],["cp",14,13],["cp",7,14],["cp",16,15],["cp",7,16],["cp",18,17],["cp",7,18],["cp",17,19],["cp",7,20],["cp",17,21],["cp",7,22]],"t":1305097383.74},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",20,18],["cp",22,20],["cp",23,21],[22,0,51,"-rw-r--r-- 1 jiangxin staff 23 5 11 11:03 .git/HEAD"],[23,0,64,"-rw-r--r-- 1 jiangxin staff 41 5 11 14:11 .git/refs/heads/master"],["cp",20,24]],"x":11,"f":[["cp",6,4],["cp",7,5],["cp",5,6],["cp",13,11],["cp",15,13],["cp",17,15],["cp",5,21]],"t":1305097383.7489},{"y":25,"d":[[24,10,"c"]],"x":12,"t":1305097386.01201},{"y":25,"d":[[24,11,"a"]],"x":13,"t":1305097386.10005},{"y":25,"x":14,"t":1305097386.28409},{"y":25,"d":[[24,13,"."]],"x":15,"t":1305097386.47596},{"y":25,"d":[[24,14,"g"]],"x":16,"t":1305097386.59599},{"d":[["r","| committer Jiang Xin 1305084824 +0800 "],["r","| "],["r","| who does commit? "],["r","| "],["r","* commit 38690158d57ea02061e42ab88101ed3517a4292f "],["r"," tree 190d840dd3d8fa319bdec6b8112b0957be7ee769 "],["r"," author Jiang Xin 1305083008 +0800 "],["r"," committer Jiang Xin 1305083008 +0800 "],["a"," "],["r"," intialized. "],["r","bash-3.2$ git branch "],["r","* master "],["r","bash-3.2$ git status -s -b "],["r","## master "],["r","bash-3.2$ git log -1 HEAD --oneline "],["r","0e3a4c9 which version checked in? "],["r","bash-3.2$ git log -1 master --oneline "],["r","0e3a4c9 which version checked in? "],["r","bash-3.2$ git log -1 refs/heads/master --oneline "],["r","0e3a4c9 which version checked in? "],["r","bash-3.2$ "],["r","bash-3.2$ ls -l .git/HEAD .git/refs/heads/master "],["r","-rw-r--r-- 1 jiangxin staff 23 5 11 11:03 .git/HEAD "],["r","-rw-r--r-- 1 jiangxin staff 41 5 11 14:11 .git/refs/heads/master "],["r","bash-3.2$ ca . "]],"x":15,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","17777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d","d",["r","77333333333333333333333333333333333333333333333337777777777777777777777777777777"],["a","7"],"d","d","d","d","d",["r","77222222777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","77722222277777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305097386.94776,"i":1},{"y":25,"d":[[24,13," "]],"x":14,"t":1305097387.10782},{"y":25,"x":13,"t":1305097387.27588},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305097387.38813},{"y":25,"x":15,"t":1305097387.49194},{"y":25,"d":[[24,14,"."]],"x":16,"t":1305097387.55617},{"y":25,"d":[[24,15,"g"]],"x":17,"t":1305097387.70787},{"y":25,"d":[[24,16,"i"]],"x":18,"t":1305097387.77208},{"y":25,"d":[[24,17,18,"t/"]],"x":20,"t":1305097387.92587},{"y":25,"d":[[24,19,"h"]],"x":21,"t":1305097388.31576},{"y":25,"d":[[24,20,"e"]],"x":22,"t":1305097389.06787},{"y":25,"d":[[24,19,22,"HEAD"]],"x":25,"t":1305097389.28614},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",14,16],["cp",18,17],["cp",14,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",7,24]],"x":1,"f":[["cp",4,3],["cp",5,4],["cp",11,10],["cp",4,11],["cp",13,12],["cp",4,13],["cp",15,14],["cp",4,15],["cp",14,16],["cp",4,17],["cp",14,18],["cp",4,19]],"t":1305097390.10015},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",13,15],["cp",17,16],["cp",13,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,22,"ref: refs/heads/master "],["cp",18,24]],"x":11,"f":[["cp",3,2],["cp",4,3],["cp",10,9],["cp",3,10],["cp",12,11],["cp",3,12],["cp",14,13],["cp",3,14],["cp",13,15],["cp",3,16],["cp",13,17],["cp",3,18]],"t":1305097390.10496},{"y":25,"d":[[24,10,"c"]],"x":12,"t":1305097390.4039},{"y":25,"d":[[24,11,"a"]],"x":13,"t":1305097390.49183},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305097390.5721},{"y":25,"x":15,"t":1305097390.69974},{"y":25,"d":[[24,14,"."]],"x":16,"t":1305097390.90774},{"y":25,"d":[[24,15,"g"]],"x":17,"t":1305097391.05994},{"y":25,"d":[[24,16,"i"]],"x":18,"t":1305097391.1398},{"y":25,"d":[[24,17,18,"t/"]],"x":20,"t":1305097391.28468},{"y":25,"d":[[24,19,"r"]],"x":21,"t":1305097392.57983},{"y":25,"d":[[24,20,"e"]],"x":22,"t":1305097392.71564},{"y":25,"d":[[24,21,"f"]],"x":23,"t":1305097392.79562},{"y":25,"d":[[24,22,23,"s/"]],"x":25,"t":1305097393.01272},{"y":25,"d":[[24,24,"h"]],"x":26,"t":1305097393.25167},{"y":25,"d":[[24,25,29,"eads/"]],"x":31,"t":1305097393.34904},{"y":25,"d":[[24,30,"m"]],"x":32,"t":1305097393.77969},{"y":25,"d":[[24,31,"a"]],"x":33,"t":1305097393.8918},{"y":25,"d":[[24,32,35,"ster"]],"x":38,"t":1305097394.12427},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",12,14],["cp",16,15],["cp",12,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",5,24]],"x":1,"f":[["cp",2,1],["cp",3,2],["cp",9,8],["cp",2,9],["cp",11,10],["cp",2,11],["cp",13,12],["cp",2,13],["cp",12,14],["cp",2,15],["cp",12,16],["cp",2,17]],"t":1305097395.65988},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",11,13],["cp",15,14],["cp",11,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,39,"0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a"],["cp",16,24]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",8,7],["cp",1,8],["cp",10,9],["cp",1,10],["cp",12,11],["cp",1,12],["cp",11,13],["cp",1,14],["cp",11,15],["cp",1,16]],"t":1305097395.66355},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305097396.78767},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305097396.86764},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305097396.9957},{"y":25,"x":15,"t":1305097397.0755},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305097397.53964},{"y":25,"d":[[24,15,"a"]],"x":17,"t":1305097397.64348},{"y":25,"d":[[24,16,"t"]],"x":18,"t":1305097397.72343},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305097397.88415},{"y":25,"d":[[24,18,"f"]],"x":20,"t":1305097398.01933},{"y":25,"d":[[24,19,"i"]],"x":21,"t":1305097398.13154},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305097398.21956},{"y":25,"d":[[24,21,"e"]],"x":23,"t":1305097398.33148},{"y":25,"x":24,"t":1305097398.43549},{"y":25,"d":[[24,23,"-"]],"x":25,"t":1305097398.71557},{"y":25,"d":[[24,24,"t"]],"x":26,"t":1305097399.46756},{"y":25,"x":27,"t":1305097399.66733},{"y":25,"d":[[24,26,"0"]],"x":28,"t":1305097400.1715},{"y":25,"d":[[24,27,"e"]],"x":29,"t":1305097400.7154},{"y":25,"d":[[24,28,"3"]],"x":30,"t":1305097400.96349},{"y":25,"d":[[24,29,"a"]],"x":31,"t":1305097401.40356},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",10,12],["cp",14,13],["cp",10,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",3,24]],"x":1,"f":[["cp",1,0],["cp",7,6],["cp",0,7],["cp",9,8],["cp",0,9],["cp",11,10],["cp",0,11],["cp",10,12],["cp",0,13],["cp",10,14],["cp",0,15]],"t":1305097401.77928},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",9,11],["cp",13,12],["cp",9,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,29,"commit "],["cp",14,24]],"x":11,"f":[["cp",6,5],["cp",0,6],["cp",8,7],["cp",0,8],["cp",10,9],["cp",0,10],["cp",9,11],["cp",0,12],["cp",9,13],["cp",0,14]],"t":1305097401.78902},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305097402.44343},{"y":25,"x":15,"t":1305097402.6513},{"y":25,"x":18,"t":1305097402.85115},{"y":25,"x":19,"t":1305097403.03515},{"y":25,"x":24,"t":1305097403.21952},{"y":25,"x":25,"t":1305097403.40342},{"y":25,"d":[[24,24,"p"]],"x":25,"t":1305097403.85937},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",8,10],["cp",12,11],["cp",8,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",1,24]],"x":1,"f":[["cp",5,4],["cp",0,5],["cp",7,6],["cp",0,7],["cp",9,8],["cp",0,9],["cp",8,10],["cp",0,11],["cp",8,12],["cp",0,13]],"t":1305097404.0673},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",2,4],["cp",11,5],["cp",2,6],["cp",13,7],["cp",14,8],["cp",15,9],["cp",16,10],["cp",17,11],["cp",18,12],["cp",19,13],["cp",20,14],["cp",21,15],["cp",22,16],["cp",23,17],[18,0,44,"tree f58da9a820e3fd9d84ab2ca2f1b467ac265038f9"],[19,0,46,"parent 61b1516058bd2359f99437d28a6b9fd6e933b001"],[20,0,53,"author Jiang Xin 1305092115 +0800"],[21,0,56,"committer Jiang Xin 1305092115 +0800"],["cp",24,22],[23,0,29,"which version checked in? "],["cp",7,24]],"x":11,"f":[["cp",6,0],["cp",8,2],["cp",2,4],["cp",2,6],["cp",1,8],["cp",1,10],["cp",1,12]],"t":1305097404.07444},{"y":25,"d":[["cp",17,24]],"x":11,"t":1305097404.61136},{"y":25,"x":15,"t":1305097404.8511},{"y":25,"x":18,"t":1305097405.05113},{"y":25,"x":15,"t":1305097405.50842},{"y":25,"d":[[24,14,29,"-file -p 0e3a "]],"x":15,"t":1305097405.80319},{"y":25,"d":[[24,14,26,"file -p 0e3a "]],"x":15,"t":1305097406.09926},{"y":25,"d":[[24,14,25,"-p 0e3a "]],"x":15,"t":1305097406.39501},{"y":25,"d":[[24,14,20,"p 0e3a "]],"x":15,"t":1305097406.93894},{"y":25,"d":[[24,14,19," 0e3a "]],"x":15,"t":1305097407.13909},{"y":25,"d":[[24,14,19,"l 0e3a"]],"x":16,"t":1305097407.43528},{"y":25,"d":[[24,15,20,"o 0e3a"]],"x":17,"t":1305097407.60294},{"y":25,"d":[[24,16,21,"g 0e3a"]],"x":18,"t":1305097407.71523},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",5,4],["cp",1,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",21,24]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",1,3],["cp",0,4],["cp",1,5],["cp",0,6]],"t":1305097407.89095},{"y":25,"d":[["cp",17,0],["cp",18,1],["cp",19,2],["cp",20,3],["cp",21,4],["cp",22,5],["cp",23,6],[7,0,47,"commit 0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],[8,0,51,"Author: Jiang Xin "],[9,0,64,"Date: Wed May 11 13:35:15 2011 +0800 "],["cp",4,10],[11,0,28," which version checked in?"],["cp",4,12],[13,0,46,"commit 61b1516058bd2359f99437d28a6b9fd6e933b001"],["cp",8,14],[15,0,37,"Date: Wed May 11 11:33:44 2011 +0800"],["cp",4,16],[17,0,44," who does commit? "],["cp",4,18],[19,0,53,"commit 38690158d57ea02061e42ab88101ed3517a4292f "],["cp",8,20],[21,0,37,"Date: Wed May 11 11:03:28 2011 +0800"],["cp",4,22],[23,0,21," intialized. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,1],["cp",0,3],["cp",0,5],[7,0,46,["a","3"]],["cp",7,13],["cp",7,19]],"t":1305097407.90447},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305097412.10694},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305097412.18677},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305097412.31507},{"y":25,"x":15,"t":1305097412.37105},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305097412.58671},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305097412.74793},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305097412.92308},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305097413.09892},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305097413.36284},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305097413.4589},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305097413.57105},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305097413.73883},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305097413.8828},{"y":25,"x":25,"t":1305097414.01885},{"y":25,"d":[[24,24,"H"]],"x":26,"t":1305097414.69882},{"y":25,"d":[[24,25,"E"]],"x":27,"t":1305097414.77078},{"y":25,"d":[[24,26,"A"]],"x":28,"t":1305097414.92288},{"y":25,"d":[[24,27,"D"]],"x":29,"t":1305097415.01107},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",3,9],["cp",11,10],["cp",3,11],["cp",13,12],["cp",7,13],["cp",15,14],["cp",3,15],["cp",17,16],["cp",3,17],["cp",19,18],["cp",7,19],["cp",21,20],["cp",3,21],["cp",23,22],["cp",24,23],["cp",3,24]],"x":1,"f":[["cp",7,6],["cp",0,7],["cp",6,12],["cp",0,13],["cp",6,18],["cp",0,19]],"t":1305097415.49878},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",2,8],["cp",10,9],["cp",2,10],["cp",12,11],["cp",6,12],["cp",14,13],["cp",2,14],["cp",16,15],["cp",2,16],["cp",18,17],["cp",6,18],["cp",20,19],["cp",2,20],["cp",22,21],["cp",23,22],[23,0,39,"0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",6,5],["cp",0,6],["cp",5,11],["cp",0,12],["cp",5,17],["cp",0,18]],"t":1305097415.50565},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305097416.32292},{"y":25,"x":15,"t":1305097416.60262},{"d":[["r","author Jiang Xin 1305092115 +0800 "],["r","committer Jiang Xin 1305092115 +0800 "],["a"," "],["r","which version checked in? "],["r","bash-3.2$ git log 0e3a "],["r","commit 0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],["r","Author: Jiang Xin "],["r","Date: Wed May 11 13:35:15 2011 +0800 "],["a"," "],["r"," which version checked in? "],["a"," "],["r","commit 61b1516058bd2359f99437d28a6b9fd6e933b001 "],["r","Author: Jiang Xin "],["r","Date: Wed May 11 11:33:44 2011 +0800 "],["a"," "],["r"," who does commit? "],["a"," "],["r","commit 38690158d57ea02061e42ab88101ed3517a4292f "],["r","Author: Jiang Xin "],["r","Date: Wed May 11 11:03:28 2011 +0800 "],["a"," "],["r"," intialized. "],["r","bash-3.2$ git rev-parse HEAD "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],["r","bash-3.2$ git rev-parse HEAD "]],"x":18,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305097416.77057,"i":1},{"y":25,"x":19,"t":1305097416.93869},{"y":25,"x":25,"t":1305097417.11458},{"y":25,"x":28,"t":1305097417.30683},{"y":25,"x":25,"t":1305097417.7386},{"y":25,"d":[[24,24,27,["a"," "]]],"x":24,"t":1305097418.05846},{"y":25,"x":25,"t":1305097418.27463},{"y":25,"d":[[24,24,"m"]],"x":26,"t":1305097418.5948},{"y":25,"d":[[24,25,"a"]],"x":27,"t":1305097418.65075},{"y":25,"d":[[24,26,"s"]],"x":28,"t":1305097418.80273},{"y":25,"d":[[24,27,"t"]],"x":29,"t":1305097418.92265},{"y":25,"d":[[24,28,"e"]],"x":30,"t":1305097419.08244},{"y":25,"d":[[24,29,"r"]],"x":31,"t":1305097419.14655},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",1,7],["cp",9,8],["cp",1,9],["cp",11,10],["cp",5,11],["cp",13,12],["cp",1,13],["cp",15,14],["cp",1,15],["cp",17,16],["cp",5,17],["cp",19,18],["cp",1,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",1,24]],"x":1,"f":[["cp",5,4],["cp",0,5],["cp",4,10],["cp",0,11],["cp",4,16],["cp",0,17]],"t":1305097419.41867},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",8,7],["cp",0,8],["cp",10,9],["cp",4,10],["cp",12,11],["cp",0,12],["cp",14,13],["cp",0,14],["cp",16,15],["cp",4,16],["cp",18,17],["cp",0,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",21,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,3],["cp",0,4],["cp",3,9],["cp",0,10],["cp",3,15],["cp",0,16]],"t":1305097419.42597},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",5,7],["cp",9,8],["cp",3,9],["cp",11,10],["cp",5,11],["cp",13,12],["cp",5,13],["cp",15,14],["cp",3,15],["cp",17,16],["cp",5,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",20,22],[23,0,39,"bash-3.2$ exit "],["cp",5,24]],"x":1,"f":[["cp",3,2],["cp",0,3],["cp",2,8],["cp",0,9],["cp",2,14],["cp",0,15]],"t":1305097421.52284}]} \ No newline at end of file diff --git a/html/part2/ch06-02-sha1-hash.html b/html/part2/ch06-02-sha1-hash.html new file mode 100644 index 000000000..18295a99f --- /dev/null +++ b/html/part2/ch06-02-sha1-hash.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch06-02-sha1-hash +json_file: ch06-02-sha1-hash.json +--- diff --git a/html/part2/ch06-02-sha1-hash.json b/html/part2/ch06-02-sha1-hash.json new file mode 100644 index 000000000..ec5f5d91c --- /dev/null +++ b/html/part2/ch06-02-sha1-hash.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305097716.69578,"i":1},{"y":1,"d":[[0,10,"c"]],"x":12,"t":1305097717.84589},{"y":1,"d":[[0,11,"d"]],"x":13,"t":1305097718.03013},{"y":1,"x":14,"t":1305097718.08582},{"y":1,"d":[[0,13,"/"]],"x":15,"t":1305097718.21388},{"y":1,"d":[[0,14,"p"]],"x":16,"t":1305097718.42195},{"y":1,"d":[[0,15,"a"]],"x":17,"t":1305097718.50162},{"y":1,"d":[[0,16,"t"]],"x":18,"t":1305097718.62172},{"y":1,"d":[[0,17,"h"]],"x":19,"t":1305097718.65367},{"y":1,"d":[[0,18,"/"]],"x":20,"t":1305097718.83605},{"y":1,"d":[[0,19,"t"]],"x":21,"t":1305097719.18171},{"y":1,"d":[[0,20,"o"]],"x":22,"t":1305097719.25379},{"y":1,"d":[[0,21,"/"]],"x":23,"t":1305097719.40428},{"y":1,"d":[[0,22,"m"]],"x":24,"t":1305097719.59765},{"y":1,"d":[[0,23,"y"]],"x":25,"t":1305097719.78164},{"y":1,"d":[[0,24,"/"]],"x":26,"t":1305097719.86031},{"y":1,"d":[[0,25,"w"]],"x":27,"t":1305097720.09367},{"y":1,"d":[[0,26,"o"]],"x":28,"t":1305097720.1658},{"y":1,"d":[[0,27,34,"rkspace/"]],"x":36,"t":1305097720.31609},{"y":1,"d":[[0,35,"d"]],"x":37,"t":1305097720.75771},{"y":1,"d":[[0,36,"e"]],"x":38,"t":1305097720.91745},{"y":1,"d":[[0,37,"m"]],"x":39,"t":1305097721.01387},{"y":1,"d":[[0,38,"o"]],"x":40,"t":1305097721.14952},{"y":1,"d":[[0,39,"/"]],"x":41,"t":1305097721.18036},{"y":2,"x":1,"t":1305097721.59786},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305097721.59818},{"y":2,"d":[[1,10,"p"]],"x":12,"t":1305097723.74367},{"y":2,"d":[[1,11,"r"]],"x":13,"t":1305097723.81365},{"y":2,"d":[[1,12,"i"]],"x":14,"t":1305097723.91745},{"y":2,"d":[[1,13,"n"]],"x":15,"t":1305097724.04546},{"y":2,"d":[[1,14,"t"]],"x":16,"t":1305097724.0934},{"y":2,"d":[[1,15,"f"]],"x":17,"t":1305097724.58941},{"y":2,"x":18,"t":1305097724.76561},{"y":2,"d":[[1,17,"G"]],"x":19,"t":1305097725.12561},{"y":2,"d":[[1,18,"i"]],"x":20,"t":1305097725.26962},{"y":2,"d":[[1,19,"t"]],"x":21,"t":1305097725.3416},{"y":2,"x":22,"t":1305097725.61352},{"y":2,"d":[[1,21,"|"]],"x":23,"t":1305097725.8454},{"y":2,"x":24,"t":1305097726.17352},{"y":2,"d":[[1,23,"s"]],"x":25,"t":1305097726.80536},{"y":2,"d":[[1,24,"h"]],"x":26,"t":1305097726.9014},{"y":2,"d":[[1,25,"a"]],"x":27,"t":1305097727.00524},{"y":2,"d":[[1,26,"2"]],"x":28,"t":1305097727.23749},{"y":2,"d":[[1,27,"1"]],"x":29,"t":1305097727.24773},{"y":2,"d":[[1,27," "]],"x":28,"t":1305097727.76534},{"y":2,"d":[[1,26," "]],"x":27,"t":1305097727.92535},{"y":2,"d":[[1,26,"1"]],"x":28,"t":1305097727.9813},{"y":2,"d":[[1,27,"s"]],"x":29,"t":1305097728.24534},{"y":2,"d":[[1,28,"u"]],"x":30,"t":1305097728.34142},{"y":2,"d":[[1,29,"m"]],"x":32,"t":1305097728.48774},{"y":3,"x":1,"t":1305097728.90928},{"y":4,"d":[[2,0,42,"5819778898df55e3a762f0c5728b457970d72cae -"],[3,0,8,"bash-3.2$"]],"x":11,"t":1305097728.9161},{"y":4,"d":[[3,10,"g"]],"x":12,"t":1305097730.59752},{"y":4,"d":[[3,11,"i"]],"x":13,"t":1305097730.66112},{"y":4,"d":[[3,12,"t"]],"x":14,"t":1305097730.74939},{"y":4,"x":15,"t":1305097730.83753},{"y":4,"d":[[3,14,"r"]],"x":16,"t":1305097730.97335},{"y":4,"d":[[3,15,"e"]],"x":17,"t":1305097731.11733},{"y":4,"d":[[3,16,"v"]],"x":18,"t":1305097731.27746},{"y":4,"d":[[3,17,"-"]],"x":19,"t":1305097731.3893},{"y":4,"d":[[3,18,"p"]],"x":20,"t":1305097731.6452},{"y":4,"d":[[3,19,"a"]],"x":21,"t":1305097731.74114},{"y":4,"d":[[3,20,"r"]],"x":22,"t":1305097731.82148},{"y":4,"x":22,"t":1305097732.11245},{"y":4,"d":[[3,21,"s"]],"x":23,"t":1305097733.06142},{"y":4,"d":[[3,22,"e"]],"x":24,"t":1305097733.23729},{"y":4,"x":25,"t":1305097733.48512},{"y":4,"d":[[3,24,"H"]],"x":26,"t":1305097734.10919},{"y":4,"d":[[3,25,"E"]],"x":27,"t":1305097734.18917},{"y":4,"d":[[3,26,"A"]],"x":28,"t":1305097734.34097},{"y":4,"d":[[3,27,"D"]],"x":29,"t":1305097734.46898},{"y":5,"x":1,"t":1305097734.78891},{"y":6,"d":[[4,0,39,"0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a"],[5,0,8,"bash-3.2$"]],"x":11,"t":1305097734.79504},{"y":6,"d":[[5,10,"g"]],"x":12,"t":1305097736.05312},{"y":6,"d":[[5,11,"i"]],"x":13,"t":1305097736.19707},{"y":6,"d":[[5,12,"t"]],"x":14,"t":1305097736.27695},{"y":6,"x":15,"t":1305097736.36497},{"y":6,"d":[[5,14,"c"]],"x":16,"t":1305097736.549},{"y":6,"d":[[5,15,"a"]],"x":17,"t":1305097736.6769},{"y":6,"d":[[5,16,"t"]],"x":18,"t":1305097736.77291},{"y":6,"d":[[5,17,"-"]],"x":19,"t":1305097736.98082},{"y":6,"d":[[5,18,"f"]],"x":20,"t":1305097737.1651},{"y":6,"d":[[5,19,"i"]],"x":21,"t":1305097737.27689},{"y":6,"d":[[5,20,"l"]],"x":22,"t":1305097737.38897},{"y":6,"d":[[5,21,"e"]],"x":23,"t":1305097737.51698},{"y":6,"x":24,"t":1305097737.66892},{"y":6,"d":[[5,23,"c"]],"x":25,"t":1305097738.31698},{"y":6,"d":[[5,24,"o"]],"x":26,"t":1305097738.38101},{"y":6,"d":[[5,25,"m"]],"x":27,"t":1305097738.54099},{"y":6,"d":[[5,26,"m"]],"x":28,"t":1305097738.69297},{"y":6,"d":[[5,27,"i"]],"x":29,"t":1305097738.85296},{"y":6,"d":[[5,28,"t"]],"x":30,"t":1305097738.93277},{"y":6,"x":31,"t":1305097739.037},{"y":6,"d":[[5,30,"H"]],"x":32,"t":1305097739.68499},{"y":6,"d":[[5,31,"E"]],"x":33,"t":1305097739.74096},{"y":6,"d":[[5,32,"A"]],"x":34,"t":1305097739.90885},{"y":6,"d":[[5,33,"D"]],"x":35,"t":1305097740.00513},{"y":7,"x":1,"t":1305097740.4212},{"y":13,"d":[[6,0,44,"tree f58da9a820e3fd9d84ab2ca2f1b467ac265038f9"],[7,0,46,"parent 61b1516058bd2359f99437d28a6b9fd6e933b001"],[8,0,53,"author Jiang Xin 1305092115 +0800"],[9,0,56,"committer Jiang Xin 1305092115 +0800"],[11,0,24,"which version checked in?"],[12,0,8,"bash-3.2$"]],"x":11,"t":1305097740.42938},{"y":13,"d":[["cp",5,12]],"x":11,"t":1305097742.22072},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/demo/ "],["r","bash-3.2$ printf Git | sha1sum "],["r","5819778898df55e3a762f0c5728b457970d72cae - "],["r","bash-3.2$ git rev-parse HEAD "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],["r","bash-3.2$ git cat-file commit HEAD "],["r","tree f58da9a820e3fd9d84ab2ca2f1b467ac265038f9 "],["r","parent 61b1516058bd2359f99437d28a6b9fd6e933b001 "],["r","author Jiang Xin 1305092115 +0800 "],["r","committer Jiang Xin 1305092115 +0800 "],["a"," "],["r","which version checked in? "],["r","bash-3.2$ git cat-file commit HEAD "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d"],"x":34,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":13,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305097742.54905,"i":1},{"y":13,"x":35,"t":1305097742.74067},{"y":13,"x":36,"t":1305097742.99702},{"y":13,"d":[[12,35,"|"]],"x":37,"t":1305097743.24485},{"y":13,"x":38,"t":1305097743.4208},{"y":13,"d":[[12,37,"w"]],"x":39,"t":1305097743.58071},{"y":13,"d":[[12,38,"c"]],"x":40,"t":1305097744.12458},{"y":13,"x":41,"t":1305097744.33266},{"y":13,"d":[[12,40,"-"]],"x":42,"t":1305097745.29254},{"y":13,"d":[[12,41,"c"]],"x":43,"t":1305097745.40452},{"y":14,"x":1,"t":1305097745.70869},{"y":15,"d":[[13,5,7,"234"],[14,0,8,"bash-3.2$"]],"x":11,"t":1305097745.71886},{"y":15,"d":[[14,10,"("]],"x":12,"t":1305097748.09278},{"y":15,"d":[[14,11,"P"]],"x":13,"t":1305097748.48472},{"y":15,"d":[[14,12,"R"]],"x":14,"t":1305097748.65244},{"y":15,"d":[[14,13,"I"]],"x":15,"t":1305097748.70858},{"y":15,"d":[[14,14,"N"]],"x":16,"t":1305097748.84458},{"y":15,"d":[[14,15,"T"]],"x":17,"t":1305097748.96433},{"y":15,"d":[[14,15," "]],"x":16,"t":1305097749.27661},{"y":15,"d":[[14,14," "]],"x":15,"t":1305097749.44433},{"y":15,"d":[[14,13," "]],"x":14,"t":1305097749.60417},{"y":15,"d":[[14,12," "]],"x":13,"t":1305097749.75631},{"y":15,"d":[[14,11," "]],"x":12,"t":1305097749.92417},{"y":15,"d":[[14,11,"p"]],"x":13,"t":1305097750.29249},{"y":15,"d":[[14,12,"r"]],"x":14,"t":1305097750.45241},{"y":15,"d":[[14,13,"i"]],"x":15,"t":1305097750.54837},{"y":15,"d":[[14,14,"n"]],"x":16,"t":1305097750.67636},{"y":15,"d":[[14,15,"t"]],"x":17,"t":1305097750.78033},{"y":15,"d":[[14,16,"f"]],"x":18,"t":1305097751.71624},{"y":15,"x":19,"t":1305097751.86843},{"y":15,"d":[[14,18,"\""]],"x":20,"t":1305097752.58837},{"y":15,"d":[[14,19,"c"]],"x":21,"t":1305097753.21217},{"y":15,"d":[[14,20,"o"]],"x":22,"t":1305097753.26835},{"y":15,"d":[[14,21,"m"]],"x":23,"t":1305097753.42814},{"y":15,"d":[[14,22,"m"]],"x":24,"t":1305097753.58797},{"y":15,"d":[[14,23,"i"]],"x":25,"t":1305097753.74848},{"y":15,"d":[[14,24,"t"]],"x":26,"t":1305097753.85245},{"y":15,"x":27,"t":1305097755.084},{"y":15,"d":[[14,26,"2"]],"x":28,"t":1305097756.09989},{"y":15,"d":[[14,27,"3"]],"x":29,"t":1305097756.42805},{"y":15,"d":[[14,28,"4"]],"x":30,"t":1305097756.66805},{"y":15,"d":[[14,29,"\\"]],"x":31,"t":1305097757.38017},{"y":15,"d":[[14,30,"0"]],"x":32,"t":1305097758.21998},{"y":15,"d":[[14,31,"0"]],"x":33,"t":1305097758.40416},{"y":15,"d":[[14,32,"0"]],"x":34,"t":1305097758.56428},{"y":15,"d":[[14,33,"\""]],"x":35,"t":1305097759.10825},{"y":15,"d":[[14,34,";"]],"x":36,"t":1305097760.0039},{"y":15,"x":37,"t":1305097760.17211},{"y":15,"d":[[14,36,"g"]],"x":38,"t":1305097762.57222},{"y":15,"d":[[14,37,"i"]],"x":39,"t":1305097762.63562},{"y":15,"d":[[14,38,"t"]],"x":40,"t":1305097762.78806},{"y":15,"x":41,"t":1305097762.82807},{"y":15,"d":[[14,40,"c"]],"x":42,"t":1305097763.07575},{"y":15,"d":[[14,41,"a"]],"x":43,"t":1305097763.50772},{"y":15,"d":[[14,42,"t"]],"x":44,"t":1305097763.64408},{"y":15,"d":[[14,43,"-"]],"x":45,"t":1305097764.42779},{"y":15,"d":[[14,44,"f"]],"x":46,"t":1305097764.70769},{"y":15,"d":[[14,45,"i"]],"x":47,"t":1305097764.77188},{"y":15,"d":[[14,46,"l"]],"x":48,"t":1305097764.88381},{"y":15,"d":[[14,47,"e"]],"x":49,"t":1305097765.02779},{"y":15,"x":50,"t":1305097765.18771},{"y":15,"d":[[14,49,"c"]],"x":51,"t":1305097765.52394},{"y":15,"d":[[14,50,"o"]],"x":52,"t":1305097765.60381},{"y":15,"d":[[14,51,"m"]],"x":53,"t":1305097765.75709},{"y":15,"d":[[14,52,"m"]],"x":54,"t":1305097765.90765},{"y":15,"d":[[14,53,"i"]],"x":55,"t":1305097766.04372},{"y":15,"d":[[14,54,"t"]],"x":56,"t":1305097766.13959},{"y":15,"x":57,"t":1305097766.24356},{"y":15,"d":[[14,56,"H"]],"x":58,"t":1305097766.61973},{"y":15,"d":[[14,57,"E"]],"x":59,"t":1305097766.73154},{"y":15,"d":[[14,58,"A"]],"x":60,"t":1305097766.89964},{"y":15,"d":[[14,59,"D"]],"x":61,"t":1305097767.01193},{"y":15,"x":62,"t":1305097768.74775},{"y":15,"d":[[14,61,")"]],"x":63,"t":1305097769.72375},{"y":15,"x":64,"t":1305097770.85179},{"y":15,"d":[[14,63,"|"]],"x":65,"t":1305097771.17218},{"y":15,"x":66,"t":1305097771.57966},{"y":15,"d":[[14,65,"s"]],"x":67,"t":1305097771.75548},{"y":15,"d":[[14,66,"h"]],"x":68,"t":1305097771.83559},{"y":15,"d":[[14,67,"a"]],"x":69,"t":1305097771.93937},{"y":15,"d":[[14,68,"1"]],"x":70,"t":1305097772.18751},{"y":15,"d":[[14,69,"s"]],"x":71,"t":1305097772.55593},{"y":15,"d":[[14,70,"u"]],"x":72,"t":1305097772.65939},{"y":15,"d":[[14,71,"m"]],"x":73,"t":1305097772.8675},{"y":16,"x":1,"t":1305097773.06754},{"y":17,"d":[[15,0,42,"0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a -"],[16,0,8,"bash-3.2$"]],"x":11,"t":1305097773.08123},{"y":17,"d":[["cp",14,16]],"x":11,"t":1305097776.25932},{"y":17,"d":[[16,10,71,"/ "]],"x":12,"t":1305097776.47531},{"y":17,"d":[[16,11,"r"]],"x":13,"t":1305097776.65933},{"y":17,"d":[[16,12,"e"]],"x":14,"t":1305097776.81929},{"y":17,"d":[[16,13,"v"]],"x":15,"t":1305097777.01932},{"y":17,"d":[["cp",3,16]],"x":11,"t":1305097777.10725},{"y":18,"x":1,"t":1305097777.89122},{"y":19,"d":[["cp",4,17],[18,0,8,"bash-3.2$"]],"x":11,"t":1305097777.89777},{"y":19,"d":[[18,10,"g"]],"x":12,"t":1305097782.13098},{"y":19,"d":[[18,11,"i"]],"x":13,"t":1305097782.21898},{"y":19,"d":[[18,12,"t"]],"x":14,"t":1305097782.32289},{"y":19,"x":15,"t":1305097782.37913},{"y":19,"d":[[18,14,"c"]],"x":16,"t":1305097782.60308},{"y":19,"d":[[18,15,"a"]],"x":17,"t":1305097782.72314},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/demo/ "],["r","bash-3.2$ printf Git | sha1sum "],["r","5819778898df55e3a762f0c5728b457970d72cae - "],["r","bash-3.2$ git rev-parse HEAD "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],["r","bash-3.2$ git cat-file commit HEAD "],["r","tree f58da9a820e3fd9d84ab2ca2f1b467ac265038f9 "],["r","parent 61b1516058bd2359f99437d28a6b9fd6e933b001 "],["r","author Jiang Xin 1305092115 +0800 "],["r","committer Jiang Xin 1305092115 +0800 "],["a"," "],["r","which version checked in? "],["r","bash-3.2$ git cat-file commit HEAD | wc -c "],["r"," 234 "],["r","bash-3.2$ (printf \"commit 234\\000\"; git cat-file commit HEAD ) | sha1sum "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a - "],["r","bash-3.2$ git rev-parse HEAD "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],["r","bash-3.2$ git cat "],["a"," "],"d","d","d","d","d"],"x":18,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":19,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305097782.81884,"i":1},{"y":19,"d":[[18,17,"-"]],"x":19,"t":1305097782.98689},{"y":19,"d":[[18,18,"f"]],"x":20,"t":1305097783.17893},{"y":19,"d":[[18,19,"i"]],"x":21,"t":1305097783.2829},{"y":19,"d":[[18,20,"l"]],"x":22,"t":1305097783.36285},{"y":19,"d":[[18,21,"e"]],"x":23,"t":1305097783.49884},{"y":19,"x":24,"t":1305097783.73882},{"y":19,"d":[[18,23,"b"]],"x":25,"t":1305097784.11481},{"y":19,"d":[[18,24,"l"]],"x":26,"t":1305097784.19517},{"y":19,"d":[[18,25,"o"]],"x":27,"t":1305097784.34672},{"y":19,"d":[[18,26,"b"]],"x":28,"t":1305097784.44328},{"y":19,"x":29,"t":1305097784.98694},{"y":19,"d":[[18,28,"H"]],"x":30,"t":1305097785.30705},{"y":19,"d":[[18,29,"E"]],"x":31,"t":1305097785.37868},{"y":19,"d":[[18,30,"A"]],"x":32,"t":1305097785.53891},{"y":19,"d":[[18,31,"D"]],"x":33,"t":1305097785.64296},{"y":19,"d":[[18,32,":"]],"x":34,"t":1305097786.12303},{"y":19,"d":[[18,33,"w"]],"x":35,"t":1305097786.33104},{"y":19,"d":[[18,34,"e"]],"x":36,"t":1305097786.47496},{"y":19,"d":[[18,35,"l"]],"x":37,"t":1305097786.65071},{"y":19,"d":[[18,36,"c"]],"x":38,"t":1305097786.7949},{"y":19,"d":[[18,37,"o"]],"x":39,"t":1305097786.88257},{"y":19,"d":[[18,38,"m"]],"x":40,"t":1305097787.05085},{"y":19,"d":[[18,39,"e"]],"x":41,"t":1305097787.17874},{"y":19,"d":[[18,40,"."]],"x":42,"t":1305097787.36293},{"y":19,"d":[[18,41,"t"]],"x":43,"t":1305097787.47479},{"y":19,"d":[[18,42,"x"]],"x":44,"t":1305097787.62655},{"y":19,"d":[[18,43,"t"]],"x":45,"t":1305097787.72271},{"y":20,"x":1,"t":1305097788.50666},{"y":22,"d":[[19,0,5,"Hello."],[20,0,16,"Nice to meet you."],[21,0,8,"bash-3.2$"]],"x":11,"t":1305097788.51361},{"y":22,"d":[["cp",18,21]],"x":11,"t":1305097790.06658},{"y":22,"x":44,"t":1305097790.38686},{"y":22,"x":45,"t":1305097790.57084},{"y":22,"x":46,"t":1305097790.77871},{"y":22,"d":[[21,45,"|"]],"x":47,"t":1305097791.03496},{"y":22,"x":48,"t":1305097791.16281},{"y":22,"d":[[21,47,"w"]],"x":49,"t":1305097791.3704},{"y":22,"d":[[21,48,"c"]],"x":50,"t":1305097791.57864},{"y":22,"x":51,"t":1305097791.75481},{"y":22,"d":[[21,50,"-"]],"x":52,"t":1305097791.89861},{"y":22,"d":[[21,51,"c"]],"x":53,"t":1305097792.09856},{"y":23,"x":1,"t":1305097792.26667},{"y":24,"d":[[22,6,7,"25"],[23,0,8,"bash-3.2$"]],"x":11,"t":1305097792.27629},{"y":24,"d":[[23,10,"("]],"x":12,"t":1305097795.1625},{"y":24,"d":[[23,11,"p"]],"x":13,"t":1305097795.47453},{"y":24,"d":[[23,12,"r"]],"x":14,"t":1305097795.61041},{"y":24,"d":[[23,13,"i"]],"x":15,"t":1305097795.68229},{"y":24,"d":[[23,14,"n"]],"x":16,"t":1305097795.81855},{"y":24,"d":[[23,15,"t"]],"x":17,"t":1305097795.89038},{"y":24,"d":[[23,16,"f"]],"x":18,"t":1305097796.12239},{"y":24,"x":19,"t":1305097796.35433},{"y":24,"d":[[23,18,"\""]],"x":20,"t":1305097797.6984},{"y":24,"d":[[23,19,"b"]],"x":21,"t":1305097797.85819},{"y":24,"d":[[23,20,"l"]],"x":22,"t":1305097798.77076},{"y":24,"d":[[23,21,"o"]],"x":23,"t":1305097798.9384},{"y":24,"d":[[23,22,"b"]],"x":24,"t":1305097799.01838},{"y":24,"x":25,"t":1305097799.2342},{"y":24,"d":[[23,24,"2"]],"x":26,"t":1305097799.49059},{"y":24,"d":[[23,25,"5"]],"x":27,"t":1305097800.01177},{"y":24,"d":[[23,26,"\\"]],"x":28,"t":1305097800.4266},{"y":24,"d":[[23,27,"0"]],"x":29,"t":1305097801.45007},{"y":24,"d":[[23,28,"0"]],"x":30,"t":1305097801.63421},{"y":24,"d":[[23,29,"0"]],"x":31,"t":1305097801.81817},{"y":24,"d":[[23,30,"\""]],"x":32,"t":1305097802.53847},{"y":24,"d":[[23,31,";"]],"x":33,"t":1305097803.20207},{"y":24,"x":34,"t":1305097803.60202},{"y":24,"d":[[23,33,"g"]],"x":35,"t":1305097803.75523},{"y":24,"d":[[23,34,"i"]],"x":36,"t":1305097803.81006},{"y":24,"d":[[23,35,"t"]],"x":37,"t":1305097803.92197},{"y":24,"x":38,"t":1305097804.00202},{"y":24,"d":[[23,37,"c"]],"x":39,"t":1305097804.17804},{"y":24,"d":[[23,38,"a"]],"x":40,"t":1305097804.29804},{"y":24,"d":[[23,39,"t"]],"x":41,"t":1305097804.3699},{"y":24,"d":[[23,40,"-"]],"x":42,"t":1305097804.49814},{"y":24,"d":[[23,41,"f"]],"x":43,"t":1305097804.64981},{"y":24,"d":[[23,42,"i"]],"x":44,"t":1305097804.75424},{"y":24,"d":[[23,43,"l"]],"x":45,"t":1305097804.84981},{"y":24,"d":[[23,44,"e"]],"x":46,"t":1305097804.95387},{"y":24,"x":47,"t":1305097805.08205},{"y":24,"d":[[23,46,"b"]],"x":48,"t":1305097805.48235},{"y":24,"d":[[23,47,"l"]],"x":49,"t":1305097805.546},{"y":24,"d":[[23,48,"o"]],"x":50,"t":1305097805.71381},{"y":24,"d":[[23,49,"b"]],"x":51,"t":1305097805.7954},{"y":24,"x":52,"t":1305097805.97},{"y":24,"d":[[23,51,"H"]],"x":53,"t":1305097806.52279},{"y":24,"d":[[23,52,"E"]],"x":54,"t":1305097806.60986},{"y":24,"d":[[23,53,"A"]],"x":55,"t":1305097806.75388},{"y":24,"d":[[23,54,"D"]],"x":56,"t":1305097806.87402},{"y":24,"d":[[23,55,":"]],"x":57,"t":1305097807.72235},{"y":24,"d":[[23,56,"w"]],"x":58,"t":1305097807.88984},{"y":24,"d":[[23,57,"e"]],"x":59,"t":1305097808.01792},{"y":24,"d":[[23,58,"l"]],"x":60,"t":1305097808.17816},{"y":24,"d":[[23,59,"c"]],"x":61,"t":1305097808.33773},{"y":24,"d":[[23,60,"o"]],"x":62,"t":1305097808.40988},{"y":24,"d":[[23,61,"m"]],"x":63,"t":1305097808.58582},{"y":24,"d":[[23,62,"e"]],"x":64,"t":1305097808.72171},{"y":24,"d":[[23,63,"."]],"x":65,"t":1305097808.84195},{"y":24,"d":[[23,64,"t"]],"x":66,"t":1305097808.95368},{"y":24,"d":[[23,65,"x"]],"x":67,"t":1305097809.10582},{"y":24,"d":[[23,66,"t"]],"x":68,"t":1305097809.20996},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/demo/ "],["r","bash-3.2$ printf Git | sha1sum "],["r","5819778898df55e3a762f0c5728b457970d72cae - "],["r","bash-3.2$ git rev-parse HEAD "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],["r","bash-3.2$ git cat-file commit HEAD "],["r","tree f58da9a820e3fd9d84ab2ca2f1b467ac265038f9 "],["r","parent 61b1516058bd2359f99437d28a6b9fd6e933b001 "],["r","author Jiang Xin 1305092115 +0800 "],["r","committer Jiang Xin 1305092115 +0800 "],["a"," "],["r","which version checked in? "],["r","bash-3.2$ git cat-file commit HEAD | wc -c "],["r"," 234 "],["r","bash-3.2$ (printf \"commit 234\\000\"; git cat-file commit HEAD ) | sha1sum "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a - "],["r","bash-3.2$ git rev-parse HEAD "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],["r","bash-3.2$ git cat-file blob HEAD:welcome.txt "],["r","Hello. "],["r","Nice to meet you. "],["r","bash-3.2$ git cat-file blob HEAD:welcome.txt | wc -c "],["r"," 25 "],["r","bash-3.2$ (printf \"blob 25\\000\"; git cat-file blob HEAD:welcome.txt) "],["a"," "]],"x":69,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":24,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305097810.17803,"i":1},{"y":24,"x":70,"t":1305097811.21002},{"y":24,"d":[[23,69,"|"]],"x":71,"t":1305097811.45789},{"y":24,"x":72,"t":1305097811.70604},{"y":24,"d":[[23,71,"s"]],"x":73,"t":1305097812.05775},{"y":24,"d":[[23,72,"h"]],"x":74,"t":1305097812.14557},{"y":24,"d":[[23,73,"a"]],"x":75,"t":1305097812.24993},{"y":24,"d":[[23,74,"1"]],"x":76,"t":1305097812.48968},{"y":24,"d":[[23,75,"s"]],"x":77,"t":1305097812.80181},{"y":24,"d":[[23,76,"u"]],"x":78,"t":1305097812.92184},{"y":24,"d":[[23,77,"m"]],"x":1,"t":1305097813.12188},{"y":24,"d":[[22,77,"m"]],"x":1,"t":1305097813.35367},{"y":25,"d":[[23,0,42,"fd3c069c1de4f4bc9b15940f490aeb48852f3c42 -"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305097813.36354},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305097814.76957},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305097814.84952},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305097814.99339},{"y":25,"x":15,"t":1305097815.23355},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305097815.44159},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305097815.60986},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305097815.76144},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305097815.87339},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305097816.12184},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305097816.21747},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305097816.32154},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305097816.47366},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305097816.60954},{"y":25,"x":25,"t":1305097816.72977},{"y":25,"d":[[24,24,"b"]],"x":26,"t":1305097816.96149},{"y":25,"d":[[24,25,"l"]],"x":27,"t":1305097817.03344},{"y":25,"d":[[24,25," "]],"x":26,"t":1305097817.56143},{"y":25,"d":[[24,24," "]],"x":25,"t":1305097817.72947},{"y":25,"d":[[24,24,"H"]],"x":26,"t":1305097818.5853},{"y":25,"d":[[24,25,"E"]],"x":27,"t":1305097818.6813},{"y":25,"d":[[24,26,"A"]],"x":28,"t":1305097818.83358},{"y":25,"d":[["cp",3,24]],"x":29,"t":1305097818.91339},{"y":25,"x":30,"t":1305097819.56141},{"y":25,"x":29,"t":1305097820.04134},{"y":25,"d":[[24,28,":"]],"x":30,"t":1305097820.3777},{"y":25,"d":[[24,29,"w"]],"x":31,"t":1305097820.57022},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305097820.70527},{"y":25,"d":[[24,31,"l"]],"x":33,"t":1305097820.84971},{"y":25,"d":[[24,32,"c"]],"x":34,"t":1305097820.98535},{"y":25,"d":[[24,33,"o"]],"x":35,"t":1305097821.07339},{"y":25,"d":[[24,34,39,"me.txt"]],"x":41,"t":1305097821.40714},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",2,15],["cp",3,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",9,24]],"x":1,"t":1305097822.0575},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",1,14],["cp",2,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,39,"fd3c069c1de4f4bc9b15940f490aeb48852f3c42"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305097822.06482},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305097825.88911},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305097825.9611},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305097826.09699},{"y":25,"x":15,"t":1305097826.16896},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305097826.37708},{"y":25,"d":[[24,15,"a"]],"x":17,"t":1305097826.48102},{"y":25,"d":[[24,16,"t"]],"x":18,"t":1305097826.58506},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305097826.88923},{"y":25,"d":[[24,17," "]],"x":18,"t":1305097827.20901},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305097827.43308},{"y":25,"d":[[24,18,"f"]],"x":20,"t":1305097827.78512},{"y":25,"d":[[24,19,"i"]],"x":21,"t":1305097827.84914},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305097827.9612},{"y":25,"d":[[24,21,"e"]],"x":23,"t":1305097828.09713},{"y":25,"x":24,"t":1305097828.23322},{"y":25,"d":[[24,23,"t"]],"x":25,"t":1305097830.36098},{"y":25,"d":[[24,24,"r"]],"x":26,"t":1305097830.53706},{"y":25,"d":[[24,25,"e"]],"x":27,"t":1305097830.71496},{"y":25,"d":[[24,26,"e"]],"x":28,"t":1305097830.88885},{"y":25,"x":29,"t":1305097831.21683},{"y":25,"d":[[24,28,"H"]],"x":30,"t":1305097831.60891},{"y":25,"d":[[24,29,"E"]],"x":31,"t":1305097831.68908},{"y":25,"d":[[24,30,"A"]],"x":32,"t":1305097831.82465},{"y":25,"d":[[24,31,"D"]],"x":33,"t":1305097831.93684},{"y":25,"d":[[24,32,"%"]],"x":34,"t":1305097832.78492},{"y":25,"d":[[24,32," "]],"x":33,"t":1305097833.21686},{"y":25,"d":[[24,32,"^"]],"x":34,"t":1305097833.49708},{"y":25,"d":[[24,33,"{"]],"x":35,"t":1305097834.32086},{"y":25,"d":[[24,34,"g"]],"x":36,"t":1305097834.57701},{"y":25,"d":[[24,35,"t"]],"x":37,"t":1305097834.58465},{"y":25,"d":[[24,36,"r"]],"x":38,"t":1305097834.73673},{"y":25,"d":[[24,36," "]],"x":37,"t":1305097835.04863},{"y":25,"d":[[24,35," "]],"x":36,"t":1305097835.21663},{"y":25,"d":[[24,34," "]],"x":35,"t":1305097835.37679},{"y":25,"d":[[24,34,"t"]],"x":36,"t":1305097835.48886},{"y":25,"d":[[24,35,"r"]],"x":37,"t":1305097835.67288},{"y":25,"d":[[24,36,"e"]],"x":38,"t":1305097835.80864},{"y":25,"d":[[24,37,"e"]],"x":39,"t":1305097835.97688},{"y":25,"d":[[24,38,"}"]],"x":40,"t":1305097836.59268},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13],["cp",1,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",7,24]],"x":1,"t":1305097836.84998},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,38,"100644 welcome.txt 1305092115 +0800 "],["r","committer Jiang Xin 1305092115 +0800 "],["a"," "],["r","which version checked in? "],["r","bash-3.2$ git cat-file commit HEAD | wc -c "],["r"," 234 "],["r","bash-3.2$ (printf \"commit 234\\000\"; git cat-file commit HEAD ) | sha1sum "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a - "],["r","bash-3.2$ git rev-parse HEAD "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],["r","bash-3.2$ git cat-file blob HEAD:welcome.txt "],["r","Hello. "],["r","Nice to meet you. "],["r","bash-3.2$ git cat-file blob HEAD:welcome.txt | wc -c "],["r"," 25 m "],["r","fd3c069c1de4f4bc9b15940f490aeb48852f3c42 -le blob HEAD:welcome.txt) | sha1sum "],["r","bash-3.2$ git rev-parse HEAD:welcome.txt "],["r","fd3c069c1de4f4bc9b15940f490aeb48852f3c42 "],["r","bash-3.2$ git cat-file tree HEAD^{tree} "],["r","100644 welcome.txt 1305092115 +0800 "],["a"," "],["r","which version checked in? "],["r","bash-3.2$ git cat-file commit HEAD | wc -c "],["r"," 234 "],["r","bash-3.2$ (printf \"commit 234\\000\"; git cat-file commit HEAD ) | sha1sum "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a - "],["r","bash-3.2$ git rev-parse HEAD "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],["r","bash-3.2$ git cat-file blob HEAD:welcome.txt "],["r","Hello. "],["r","Nice to meet you. "],["r","bash-3.2$ git cat-file blob HEAD:welcome.txt | wc -c "],["r"," 25 m "],["r","fd3c069c1de4f4bc9b15940f490aeb48852f3c42 -le blob HEAD:welcome.txt) | sha1sum "],["r","bash-3.2$ git rev-parse HEAD:welcome.txt "],["r","fd3c069c1de4f4bc9b15940f490aeb48852f3c42 "],["r","bash-3.2$ git cat-file tree HEAD^{tree} "],["r","100644 welcome.txt"],[21,0,37,"Date: Wed May 11 11:03:28 2011 +0800"],["cp",24,22],[23,0,16," intialized. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",5,0],["cp",0,1],["cp",0,2],["cp",0,3],["cp",4,5],["cp",4,6],["cp",4,7],["cp",4,8],["cp",0,11],["cp",0,12],["cp",0,13],["cp",4,16],["cp",4,17],["cp",4,18],[19,0,46,["a","3"]]],"t":1305100605.91508},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",0,10],["cp",1,11],["cp",2,12],["cp",14,13],["cp",15,14],["cp",5,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,14,"bash-3.2$ exit "],["cp",21,24]],"x":1,"f":[["cp",4,3],["cp",0,10],["cp",3,13],["cp",19,18],["cp",3,19]],"t":1305100610.26871}]} \ No newline at end of file diff --git a/html/part2/ch07-02-reflog.html b/html/part2/ch07-02-reflog.html new file mode 100644 index 000000000..a0fd714cf --- /dev/null +++ b/html/part2/ch07-02-reflog.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch07-02-reflog +json_file: ch07-02-reflog.json +--- diff --git a/html/part2/ch07-02-reflog.json b/html/part2/ch07-02-reflog.json new file mode 100644 index 000000000..8a0a86b27 --- /dev/null +++ b/html/part2/ch07-02-reflog.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305100993.9739,"i":1},{"y":1,"d":[[0,10,39,"cd /path/to/my/workspace/demo/"]],"x":11,"t":1305100994.50439},{"y":2,"x":1,"t":1305100995.34449},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305100995.34481},{"y":2,"d":[[1,10,"l"]],"x":12,"t":1305100997.84828},{"y":2,"d":[[1,11,"s"]],"x":13,"t":1305100997.95237},{"y":3,"x":1,"t":1305100998.07221},{"y":4,"d":[[2,0,10,"welcome.txt"],[3,0,8,"bash-3.2$"]],"x":11,"t":1305100998.07821},{"y":4,"d":[[3,10,"g"]],"x":12,"t":1305100998.58402},{"y":4,"d":[[3,11,"i"]],"x":13,"t":1305100998.6403},{"y":4,"d":[[3,12,"t"]],"x":14,"t":1305100998.75237},{"y":4,"x":15,"t":1305100998.79238},{"y":4,"d":[[3,14,"l"]],"x":16,"t":1305100999.5857},{"y":4,"d":[[3,15,"o"]],"x":17,"t":1305100999.73618},{"y":4,"d":[[3,16,"g"]],"x":18,"t":1305100999.81634},{"y":4,"x":19,"t":1305100999.88057},{"y":4,"d":[[3,18,"-"]],"x":20,"t":1305101000.00822},{"y":4,"d":[[3,19,"-"]],"x":21,"t":1305101000.19213},{"y":4,"d":[[3,20,"o"]],"x":22,"t":1305101000.82414},{"y":4,"d":[[3,21,"n"]],"x":23,"t":1305101000.98421},{"y":4,"d":[[3,22,"e"]],"x":24,"t":1305101001.08812},{"y":4,"d":[[3,23,"l"]],"x":25,"t":1305101001.17624},{"y":4,"d":[[3,24,"i"]],"x":26,"t":1305101001.70419},{"y":4,"d":[[3,25,"n"]],"x":27,"t":1305101001.85608},{"y":4,"d":[[3,26,"e"]],"x":28,"t":1305101001.97972},{"y":4,"x":29,"t":1305101002.05621},{"y":4,"d":[[3,28,"-"]],"x":30,"t":1305101002.21604},{"y":4,"d":[[3,29,"-"]],"x":31,"t":1305101002.39215},{"y":4,"d":[[3,30,"g"]],"x":32,"t":1305101002.48005},{"y":4,"d":[[3,31,"r"]],"x":33,"t":1305101002.62411},{"y":4,"d":[[3,32,"a"]],"x":34,"t":1305101002.76004},{"y":4,"d":[[3,33,"p"]],"x":35,"t":1305101002.83228},{"y":4,"d":[[3,34,"h"]],"x":36,"t":1305101003.11193},{"y":5,"x":1,"t":1305101003.41613},{"y":6,"d":[[4,0,20,"* 3869015 intialized."],[5,0,8,"bash-3.2$"]],"x":11,"f":[[4,2,8,["a","3"]]],"t":1305101003.43233},{"y":6,"d":[[5,10,"g"]],"x":12,"t":1305101005.25613},{"y":6,"d":[[5,11,"i"]],"x":13,"t":1305101005.33609},{"y":6,"d":[[5,12,"t"]],"x":14,"t":1305101005.5217},{"y":6,"x":15,"t":1305101005.5438},{"y":6,"d":[[5,14,"c"]],"x":16,"t":1305101006.22381},{"y":6,"d":[[5,15,"o"]],"x":17,"t":1305101006.288},{"y":6,"d":[[5,16,"n"]],"x":18,"t":1305101006.40788},{"y":6,"d":[[5,17,"f"]],"x":19,"t":1305101006.42406},{"y":6,"d":[[5,18,"i"]],"x":20,"t":1305101006.58383},{"y":6,"d":[[5,19,"g"]],"x":21,"t":1305101006.6479},{"y":6,"x":22,"t":1305101006.87197},{"y":6,"d":[[5,21,"c"]],"x":23,"t":1305101007.58373},{"y":6,"d":[[5,22,"o"]],"x":24,"t":1305101007.66409},{"y":6,"d":[[5,23,"r"]],"x":25,"t":1305101007.75179},{"y":6,"d":[[5,24,"e"]],"x":26,"t":1305101007.87178},{"y":6,"d":[[5,25,"."]],"x":27,"t":1305101008.01573},{"y":6,"d":[[5,26,"l"]],"x":28,"t":1305101008.21576},{"y":6,"d":[[5,27,"o"]],"x":29,"t":1305101008.37595},{"y":6,"d":[[5,28,"g"]],"x":30,"t":1305101008.43988},{"y":6,"d":[[5,29,"a"]],"x":31,"t":1305101008.75187},{"y":6,"d":[[5,30,"l"]],"x":32,"t":1305101008.80787},{"y":6,"d":[[5,31,"l"]],"x":33,"t":1305101008.96792},{"y":6,"d":[[5,32,"r"]],"x":34,"t":1305101009.87157},{"y":6,"d":[[5,33,"e"]],"x":35,"t":1305101010.00765},{"y":6,"d":[[5,34,"f"]],"x":36,"t":1305101010.17666},{"y":6,"d":[[5,35,"u"]],"x":37,"t":1305101010.51958},{"y":6,"d":[[5,36,"p"]],"x":38,"t":1305101010.67191},{"y":6,"d":[[5,37,"d"]],"x":39,"t":1305101010.79162},{"y":6,"d":[[5,38,"a"]],"x":40,"t":1305101010.9115},{"y":6,"d":[[5,39,"t"]],"x":41,"t":1305101010.9837},{"y":6,"d":[[5,40,"e"]],"x":42,"t":1305101011.09565},{"y":6,"d":[[5,41,"s"]],"x":43,"t":1305101011.27677},{"y":7,"x":1,"t":1305101011.44778},{"y":8,"d":[[6,0,3,"true"],[7,0,8,"bash-3.2$"]],"x":11,"t":1305101011.45596},{"y":8,"d":[[7,10,"t"]],"x":12,"t":1305101014.35961},{"y":8,"d":[[7,11,"a"]],"x":13,"t":1305101014.52739},{"y":8,"d":[[7,12,"i"]],"x":14,"t":1305101014.63951},{"y":8,"d":[[7,13,"l"]],"x":15,"t":1305101014.75144},{"y":8,"x":16,"t":1305101014.98517},{"y":8,"d":[[7,15,"-"]],"x":17,"t":1305101015.21558},{"y":8,"d":[[7,16,"5"]],"x":18,"t":1305101015.98354},{"y":8,"x":19,"t":1305101016.17533},{"y":8,"d":[[7,18,"."]],"x":20,"t":1305101016.65531},{"y":8,"d":[[7,19,"g"]],"x":21,"t":1305101016.75967},{"y":8,"d":[[7,20,"i"]],"x":22,"t":1305101016.85538},{"y":8,"d":[[7,21,"t"]],"x":23,"t":1305101016.93558},{"y":8,"d":[[7,22,"/"]],"x":24,"t":1305101017.31145},{"y":8,"d":[[7,23,"l"]],"x":25,"t":1305101017.69524},{"y":8,"d":[[7,24,"o"]],"x":26,"t":1305101017.87132},{"y":8,"d":[[7,25,27,"gs/"]],"x":29,"t":1305101017.98838},{"y":8,"d":[[7,28,"r"]],"x":30,"t":1305101018.4235},{"y":8,"d":[[7,29,"e"]],"x":31,"t":1305101018.55913},{"y":8,"d":[[7,30,"f"]],"x":32,"t":1305101018.68734},{"y":8,"d":[[7,31,32,"s/"]],"x":34,"t":1305101018.92114},{"y":8,"d":[[7,33,"h"]],"x":35,"t":1305101019.17552},{"y":8,"d":[[7,34,38,"eads/"]],"x":40,"t":1305101019.26797},{"y":8,"d":[[7,39,"m"]],"x":41,"t":1305101019.60707},{"y":8,"d":[[7,40,"a"]],"x":42,"t":1305101019.8551},{"y":8,"d":[[7,41,44,"ster"]],"x":47,"t":1305101020.07263},{"y":9,"x":1,"t":1305101020.47152},{"y":22,"d":[[8,0,79,"ca0c91ccf55922867ac08bfe9246c773be3e2ddd 61b1516058bd2359f99437d28a6b9fd6e933b00"],[9,0,48,"1 Jiang Xin 1305084824 +0800"],[9,56,79,"commit (amend): who does"],[10,1,7,"commit?"],[11,0,79,"61b1516058bd2359f99437d28a6b9fd6e933b001 0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6"],[12,0,48,"a Jiang Xin 1305092115 +0800"],[12,56,79,"commit: which version ch"],[13,0,8,"ecked in?"],[14,0,79,"0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a 6af1352e5a38c4987c99bc9bc8c7213f48bfeea"],[15,0,48,"4 Jiang Xin 1305100544 +0800"],[15,56,79,"commit: does master foll"],[16,0,18,"ow this new commit?"],[17,0,79,"6af1352e5a38c4987c99bc9bc8c7213f48bfeea4 0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6"],[18,0,48,"a Jiang Xin 1305100576 +0800"],[18,56,75,"HEAD^: updating HEAD"],[19,0,79,"0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a 38690158d57ea02061e42ab88101ed3517a4292"],[20,0,48,"f Jiang Xin 1305100599 +0800"],[20,56,76,"HEAD^^: updating HEAD"],[21,0,8,"bash-3.2$"]],"x":11,"t":1305101020.48554},{"y":22,"d":[[21,10,"g"]],"x":12,"t":1305101022.91902},{"y":22,"d":[[21,11,"i"]],"x":13,"t":1305101023.01523},{"y":22,"d":[[21,12,"t"]],"x":14,"t":1305101023.13507},{"y":22,"x":15,"t":1305101023.17523},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/demo/ "],["r","bash-3.2$ ls "],["r","welcome.txt "],["r","bash-3.2$ git log --oneline --graph "],["r","* 3869015 intialized. "],["r","bash-3.2$ git config core.logallrefupdates "],["r","true "],["r","bash-3.2$ tail -5 .git/logs/refs/heads/master "],["r","ca0c91ccf55922867ac08bfe9246c773be3e2ddd 61b1516058bd2359f99437d28a6b9fd6e933b00"],["r","1 Jiang Xin 1305084824 +0800 commit (amend): who does"],["r"," commit? "],["r","61b1516058bd2359f99437d28a6b9fd6e933b001 0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6"],["r","a Jiang Xin 1305092115 +0800 commit: which version ch"],["r","ecked in? "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a 6af1352e5a38c4987c99bc9bc8c7213f48bfeea"],["r","4 Jiang Xin 1305100544 +0800 commit: does master foll"],["r","ow this new commit? "],["r","6af1352e5a38c4987c99bc9bc8c7213f48bfeea4 0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6"],["r","a Jiang Xin 1305100576 +0800 HEAD^: updating HEAD "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a 38690158d57ea02061e42ab88101ed3517a4292"],["r","f Jiang Xin 1305100599 +0800 HEAD^^: updating HEAD "],["r","bash-3.2$ git r "],["a"," "],"d","d"],"x":16,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":22,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d",["r","77333333377777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305101023.40695,"i":1},{"y":22,"d":[[21,15,"e"]],"x":17,"t":1305101023.57492},{"y":22,"d":[[21,16,"f"]],"x":18,"t":1305101023.72694},{"y":22,"d":[[21,17,"l"]],"x":19,"t":1305101023.88692},{"y":22,"d":[[21,18,"o"]],"x":20,"t":1305101024.04701},{"y":22,"d":[[21,19,"g"]],"x":21,"t":1305101024.14292},{"y":22,"x":22,"t":1305101024.279},{"y":22,"d":[[21,21,"s"]],"x":23,"t":1305101024.40707},{"y":22,"d":[[21,22,"h"]],"x":24,"t":1305101024.51101},{"y":22,"d":[[21,23,"o"]],"x":25,"t":1305101024.639},{"y":22,"d":[[21,24,"w"]],"x":26,"t":1305101024.73482},{"y":22,"x":27,"t":1305101024.82278},{"y":22,"d":[[21,26,"m"]],"x":28,"t":1305101025.24696},{"y":22,"d":[[21,27,"a"]],"x":29,"t":1305101025.40713},{"y":22,"d":[[21,28,"s"]],"x":30,"t":1305101025.52712},{"y":22,"d":[[21,29,"t"]],"x":31,"t":1305101025.67894},{"y":22,"d":[[21,30,"e"]],"x":32,"t":1305101025.83906},{"y":22,"d":[[21,31,"r"]],"x":33,"t":1305101025.90305},{"y":23,"x":1,"t":1305101026.14287},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",14,8],["cp",15,9],["cp",16,10],["cp",17,11],["cp",18,12],["cp",19,13],["cp",20,14],["cp",21,15],[16,0,40,"3869015 master@{0}: HEAD^^: updating HEAD"],[17,0,79,"0e3a4c9 master@{1}: HEAD^: updating HEAD "],[18,0,75,"6af1352 master@{2}: commit: does master follow this new commit? "],[19,7,79," master@{3}: commit: which version checked in? "],[20,0,51,"61b1516 master@{4}: commit (amend): who does commit?"],[20,56,76,["a"," "]],[21,0,51,"ca0c91c master@{5}: commit (amend): who does commit?"],[22,0,43,"c615828 master@{6}: commit: who does commit?"],[23,0,48,"3869015 master@{7}: commit (initial): intialized."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,4],[16,0,6,["a","3"]],["cp",16,17],["cp",16,18],["cp",16,19],["cp",16,20],["cp",16,21],["cp",16,22],["cp",16,23]],"t":1305101026.15762},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305101026.99133},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305101027.09517},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305101027.23091},{"y":25,"x":15,"t":1305101027.25606},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305101027.47879},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305101027.61487},{"y":25,"d":[[24,16,"s"]],"x":18,"t":1305101027.75881},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305101027.84684},{"y":25,"d":[[24,18,"t"]],"x":20,"t":1305101027.95083},{"y":25,"x":21,"t":1305101028.0387},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305101028.21498},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305101028.39915},{"y":25,"d":[[24,22,"h"]],"x":24,"t":1305101028.56663},{"y":25,"d":[[24,23,"a"]],"x":25,"t":1305101028.67058},{"y":25,"d":[[24,24,"r"]],"x":26,"t":1305101028.76711},{"y":25,"d":[[24,25,"d"]],"x":27,"t":1305101028.93533},{"y":25,"x":28,"t":1305101029.07863},{"y":25,"d":[[24,27,"m"]],"x":29,"t":1305101029.30267},{"y":25,"d":[[24,28,"a"]],"x":30,"t":1305101029.4069},{"y":25,"d":[[24,29,"s"]],"x":31,"t":1305101029.5428},{"y":25,"d":[[24,30,"t"]],"x":32,"t":1305101029.63888},{"y":25,"d":[[24,31,"e"]],"x":33,"t":1305101029.77481},{"y":25,"d":[[24,32,"r"]],"x":34,"t":1305101029.85563},{"y":25,"d":[[24,33,"@"]],"x":35,"t":1305101030.39092},{"y":25,"d":[[24,34,"{"]],"x":36,"t":1305101031.00735},{"y":25,"d":[[24,35,"2"]],"x":37,"t":1305101031.26844},{"y":25,"d":[[24,36,"}"]],"x":38,"t":1305101031.65484},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",16,15],["cp",0,23]],"t":1305101034.19859},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,57,"HEAD is now at 6af1352 does master follow this new commit?"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",15,14],["cp",0,22]],"t":1305101034.21154},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305101036.57436},{"y":25,"d":[[24,10,36,"/ "]],"x":12,"t":1305101036.73462},{"y":25,"d":[[24,11,"c"]],"x":13,"t":1305101036.8304},{"y":25,"d":[[24,12,"a"]],"x":14,"t":1305101036.97854},{"y":25,"d":[[24,13,"t"]],"x":15,"t":1305101037.0544},{"y":25,"d":[[24,10,35,"cat .git/refs/heads/master"]],"x":11,"t":1305101037.17437},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",14,13],["cp",0,21]],"t":1305101038.19033},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,39,"6af1352e5a38c4987c99bc9bc8c7213f48bfeea4"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",13,12],["cp",0,20]],"t":1305101038.1966},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305101039.45424},{"y":25,"d":[[24,10,35,"/ "]],"x":12,"t":1305101039.62228},{"y":25,"d":[[24,11,"o"]],"x":13,"t":1305101040.08637},{"y":25,"d":[[24,12,"n"]],"x":14,"t":1305101040.22227},{"y":25,"d":[[24,13,"e"]],"x":15,"t":1305101040.33434},{"y":25,"d":[[24,10,34,"git log --oneline --graph"]],"x":11,"t":1305101040.52606},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",12,11],["cp",0,19]],"t":1305101042.11},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",13,9],["cp",14,10],["cp",15,11],["cp",16,12],["cp",17,13],["cp",18,14],["cp",19,15],["cp",20,16],["cp",21,17],["cp",22,18],["cp",23,19],[20,0,57,"* 6af1352 does master follow this new commit? "],[21,0,35,"* 0e3a4c9 which version checked in? "],[22,0,39,"* 61b1516 who does commit? "],[23,0,34,"* 3869015 intialized. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",11,7],["cp",7,8],["cp",7,9],["cp",7,10],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],[20,2,8,["a","3"]],["cp",20,21],["cp",20,22],["cp",20,23]],"t":1305101042.12173},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305101046.12602},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305101046.23014},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",7,6],["cp",0,14],["cp",20,19],["cp",0,23]],"t":1305101046.34977},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,26,"new-commit.txt welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",6,5],["cp",0,13],["cp",19,18],["cp",0,22]],"t":1305101046.35612},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305101050.57406},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305101050.66951},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305101050.76575},{"y":25,"x":15,"t":1305101050.85385},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305101051.37366},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305101051.51765},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305101051.65376},{"y":25,"d":[[24,17,"l"]],"x":19,"t":1305101051.86965},{"y":25,"d":[[24,18,"o"]],"x":20,"t":1305101052.02167},{"y":25,"d":[[24,19,"g"]],"x":21,"t":1305101052.14953},{"y":25,"x":22,"t":1305101052.25382},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305101052.36592},{"y":25,"d":[[24,22,"h"]],"x":24,"t":1305101052.44577},{"y":25,"d":[[24,23,"o"]],"x":25,"t":1305101052.54177},{"y":25,"d":[[24,24,"w"]],"x":26,"t":1305101052.64546},{"y":25,"x":27,"t":1305101052.75749},{"y":25,"d":[[24,26,"m"]],"x":28,"t":1305101052.96574},{"y":25,"d":[[24,27,"a"]],"x":29,"t":1305101053.06152},{"y":25,"d":[[24,28,"s"]],"x":30,"t":1305101053.22954},{"y":25,"d":[[24,29,"t"]],"x":31,"t":1305101053.5816},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305101053.7415},{"y":25,"d":[["cp",4,24]],"x":33,"t":1305101053.81356},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",3,23],[24,["a"," "]]],"x":1,"f":[["cp",5,4],["cp",0,12],["cp",18,17],["cp",0,21]],"t":1305101053.9576},{"y":25,"d":[["cp",9,0],["cp",10,1],["cp",11,2],["cp",12,3],["cp",13,4],["cp",14,5],["cp",15,6],["cp",16,7],["cp",17,8],["cp",18,9],["cp",19,10],["cp",20,11],["cp",21,12],["cp",22,13],["cp",23,14],[15,7,44," master@{0}: master@{2}: updating HEAD"],[16,0,40,"3869015 master@{1}: HEAD^^: updating HEAD"],[17,0,44,"0e3a4c9 master@{2}: HEAD^: updating HEAD "],[18,0,62,"6af1352 master@{3}: commit: does master follow this new commit?"],[19,0,52,"0e3a4c9 master@{4}: commit: which version checked in?"],[20,0,51,"61b1516 master@{5}: commit (amend): who does commit?"],[21,0,51,"ca0c91c master@{6}: commit (amend): who does commit?"],[22,0,43,"c615828 master@{7}: commit: who does commit?"],[23,0,48,"3869015 master@{8}: commit (initial): intialized."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,0],["cp",0,1],["cp",0,2],["cp",3,4],["cp",3,5],["cp",3,6],["cp",3,7],["cp",17,8],["cp",8,9],["cp",8,10],["cp",8,11],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21],["cp",0,22],["cp",0,23]],"t":1305101053.97428},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,48,"bash-3.2$ exit "],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",8,7],["cp",2,11],["cp",0,14],["cp",2,23]],"t":1305101057.86967}]} \ No newline at end of file diff --git a/html/part2/ch08-01-checkout.html b/html/part2/ch08-01-checkout.html new file mode 100644 index 000000000..8fd90d635 --- /dev/null +++ b/html/part2/ch08-01-checkout.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch08-01-checkout +json_file: ch08-01-checkout.json +--- diff --git a/html/part2/ch08-01-checkout.json b/html/part2/ch08-01-checkout.json new file mode 100644 index 000000000..adfad608f --- /dev/null +++ b/html/part2/ch08-01-checkout.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305109920.93085,"i":1},{"y":1,"d":[[0,10,39,"cd /path/to/my/workspace/demo/"]],"x":11,"t":1305109921.46504},{"y":2,"x":1,"t":1305109921.75295},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305109921.75319},{"y":2,"d":[[1,10,"c"]],"x":12,"t":1305109922.87285},{"y":2,"d":[[1,11,"a"]],"x":13,"t":1305109922.96892},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305109923.0569},{"y":2,"x":15,"t":1305109923.1691},{"y":2,"d":[[1,14,"."]],"x":16,"t":1305109923.24084},{"y":2,"d":[[1,15,"g"]],"x":17,"t":1305109923.36096},{"y":2,"d":[[1,16,"i"]],"x":18,"t":1305109923.44094},{"y":2,"d":[[1,17,18,"t/"]],"x":20,"t":1305109923.56968},{"y":2,"d":[[1,19,"h"]],"x":21,"t":1305109923.92914},{"y":2,"d":[[1,20,"e"]],"x":22,"t":1305109924.04071},{"y":2,"d":[[1,19,22,"HEAD"]],"x":25,"t":1305109924.28165},{"y":3,"x":1,"t":1305109924.80867},{"y":4,"d":[[2,0,21,"ref: refs/heads/master"],[3,0,8,"bash-3.2$"]],"x":11,"t":1305109924.81418},{"y":4,"d":[[3,10,"g"]],"x":12,"t":1305109925.46475},{"y":4,"d":[[3,11,"i"]],"x":13,"t":1305109925.68867},{"y":4,"d":[[3,12,"t"]],"x":14,"t":1305109925.77673},{"y":4,"x":15,"t":1305109925.85665},{"y":4,"d":[[3,14,"b"]],"x":16,"t":1305109926.04878},{"y":4,"d":[[3,15,"r"]],"x":17,"t":1305109926.22482},{"y":4,"d":[[3,16,"a"]],"x":18,"t":1305109926.36063},{"y":4,"d":[[3,17,"n"]],"x":19,"t":1305109926.48848},{"y":4,"d":[[3,18,"c"]],"x":20,"t":1305109926.59261},{"y":4,"d":[[3,19,"h"]],"x":21,"t":1305109926.72849},{"y":5,"x":1,"t":1305109926.96049},{"y":6,"d":[[4,0,7,"* master"],[5,0,8,"bash-3.2$"]],"x":11,"f":[[4,2,7,["a","2"]]],"t":1305109926.96736},{"y":6,"d":[[5,10,"g"]],"x":12,"t":1305109927.70462},{"y":6,"d":[[5,11,"i"]],"x":13,"t":1305109927.80058},{"y":6,"d":[[5,12,"t"]],"x":14,"t":1305109927.88851},{"y":6,"x":15,"t":1305109927.96055},{"y":6,"d":[[5,14,"l"]],"x":16,"t":1305109928.06475},{"y":6,"d":[[5,15,"o"]],"x":17,"t":1305109928.24065},{"y":6,"d":[[5,16,"g"]],"x":18,"t":1305109928.35247},{"y":6,"x":19,"t":1305109928.44072},{"y":6,"d":[[5,18,"-"]],"x":20,"t":1305109928.74461},{"y":6,"d":[[5,19,"-"]],"x":21,"t":1305109928.92847},{"y":6,"d":[[5,20,"o"]],"x":22,"t":1305109929.12856},{"y":6,"d":[[5,21,"n"]],"x":23,"t":1305109929.26472},{"y":6,"d":[[5,22,"e"]],"x":24,"t":1305109929.32875},{"y":6,"d":[[5,23,"l"]],"x":25,"t":1305109929.43258},{"y":6,"d":[[5,24,"i"]],"x":26,"t":1305109929.56865},{"y":6,"d":[[5,25,"n"]],"x":27,"t":1305109929.69238},{"y":6,"d":[[5,26,"e"]],"x":28,"t":1305109929.75243},{"y":6,"x":29,"t":1305109929.8326},{"y":6,"d":[[5,28,"-"]],"x":30,"t":1305109929.97675},{"y":6,"d":[[5,29,"-"]],"x":31,"t":1305109930.16202},{"y":6,"d":[[5,30,"g"]],"x":32,"t":1305109930.22449},{"y":6,"d":[[5,31,"r"]],"x":33,"t":1305109930.37661},{"y":6,"d":[[5,32,"a"]],"x":34,"t":1305109930.4963},{"y":6,"d":[[5,33,"p"]],"x":35,"t":1305109930.5924},{"y":6,"d":[[5,34,"h"]],"x":36,"t":1305109930.75261},{"y":7,"x":1,"t":1305109931.22489},{"y":11,"d":[[6,0,44,"* 6af1352 does master follow this new commit?"],[7,0,34,"* 0e3a4c9 which version checked in?"],[8,0,25,"* 61b1516 who does commit?"],[9,0,20,"* 3869015 intialized."],[10,0,8,"bash-3.2$"]],"x":11,"f":[[6,2,8,["a","3"]],["cp",6,7],["cp",6,8],["cp",6,9]],"t":1305109931.23685},{"y":11,"d":[[10,10,"g"]],"x":12,"t":1305109934.0246},{"y":11,"d":[[10,11,"i"]],"x":13,"t":1305109934.10472},{"y":11,"d":[[10,12,"t"]],"x":14,"t":1305109934.20836},{"y":11,"x":15,"t":1305109934.25641},{"y":11,"d":[[10,14,"c"]],"x":16,"t":1305109934.64817},{"y":11,"d":[[10,15,"h"]],"x":17,"t":1305109934.74409},{"y":11,"d":[[10,16,"e"]],"x":18,"t":1305109934.85625},{"y":11,"d":[[10,17,"c"]],"x":19,"t":1305109935.04018},{"y":11,"d":[[10,18,"k"]],"x":20,"t":1305109935.09622},{"y":11,"d":[[10,19,"o"]],"x":21,"t":1305109935.24022},{"y":11,"d":[[10,20,"u"]],"x":22,"t":1305109935.35229},{"y":11,"d":[[10,21,"t"]],"x":23,"t":1305109935.46429},{"y":11,"x":24,"t":1305109935.56005},{"y":11,"d":[[10,23,"H"]],"x":25,"t":1305109936.46418},{"y":11,"d":[[10,24,"E"]],"x":26,"t":1305109936.54428},{"y":11,"d":[[10,25,"A"]],"x":27,"t":1305109936.70456},{"y":11,"d":[[10,26,"d"]],"x":28,"t":1305109938.064},{"y":11,"d":[[10,26," "]],"x":27,"t":1305109938.5522},{"y":11,"d":[[10,26,"D"]],"x":28,"t":1305109938.79219},{"y":11,"d":[[10,27,"^"]],"x":29,"t":1305109939.72809},{"y":12,"x":1,"t":1305109940.05626},{"y":24,"d":[[11,0,26,"Note: checking out 'HEAD^'."],[13,0,71,"You are in 'detached HEAD' state. You can look around, make experimental"],[14,0,72,"changes and commit them, and you can discard any commits you make in this"],[15,0,67,"state without impacting any branches by performing another checkout."],[17,0,71,"If you want to create a new branch to retain commits you create, you may"],[18,0,73,"do so (now or later) by using -b with the checkout command again. Example:"],[20,2,32,"git checkout -b new_branch_name"],[22,0,50,"HEAD is now at 0e3a4c9... which version checked in?"],[23,0,8,"bash-3.2$"]],"x":11,"t":1305109940.06672},{"y":24,"d":[["cp",10,23]],"x":11,"t":1305109943.5039},{"y":24,"d":[[23,10,27,"/ "]],"x":12,"t":1305109943.72779},{"y":24,"d":[[23,11,"l"]],"x":13,"t":1305109943.94389},{"y":24,"d":[[23,12,"o"]],"x":14,"t":1305109944.10363},{"y":24,"d":[[23,13,"g"]],"x":15,"t":1305109944.18392},{"y":24,"d":[["cp",5,23]],"x":11,"t":1305109944.30369},{"y":25,"x":1,"t":1305109945.16785},{"y":25,"d":[["cp",3,0],["cp",4,1],["cp",5,2],["cp",6,3],["cp",7,4],["cp",8,5],["cp",9,6],["cp",10,7],["cp",11,8],["cp",12,9],["cp",13,10],["cp",14,11],["cp",15,12],["cp",9,13],["cp",17,14],["cp",18,15],["cp",20,17],["cp",9,18],["cp",22,19],["cp",2,20],["cp",4,21],["cp",5,22],["cp",6,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,1],["cp",6,3],["cp",3,4],["cp",3,5],["cp",0,7],["cp",0,8],["cp",0,9],["cp",3,21],["cp",3,22],["cp",3,23]],"t":1305109945.18037},{"y":25,"d":[[24,10,"c"]],"x":12,"t":1305109947.07151},{"y":25,"d":[[24,11,"a"]],"x":13,"t":1305109947.16745},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305109947.24774},{"y":25,"x":15,"t":1305109947.32742},{"y":25,"d":[[24,14,"."]],"x":16,"t":1305109947.43155},{"y":25,"d":[[24,15,"g"]],"x":17,"t":1305109947.51956},{"y":25,"d":[[24,16,"i"]],"x":18,"t":1305109947.60748},{"y":25,"d":[[24,17,18,"t/"]],"x":20,"t":1305109947.75207},{"y":25,"d":[[24,19,"h"]],"x":21,"t":1305109948.31145},{"y":25,"d":[[24,20,"e"]],"x":22,"t":1305109948.40747},{"y":25,"d":[[24,19,22,"HEAD"]],"x":25,"t":1305109948.63973},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",8,12],["cp",14,13],["cp",15,14],["cp",8,15],["cp",17,16],["cp",8,17],["cp",19,18],["cp",1,19],["cp",3,20],["cp",4,21],["cp",5,22],["cp",24,23],["cp",8,24]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,6],["cp",2,20],["cp",1,23]],"t":1305109949.17551},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",7,11],["cp",13,12],["cp",14,13],["cp",7,14],["cp",16,15],["cp",7,16],["cp",18,17],["cp",0,18],["cp",2,19],["cp",3,20],["cp",4,21],["cp",23,22],[23,0,39,"0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",0,5],["cp",1,19],["cp",0,22]],"t":1305109949.18058},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305109950.24758},{"d":[["r","bash-3.2$ git log --oneline --graph "],["r","* 6af1352 does master follow this new commit? "],["r","* 0e3a4c9 which version checked in? "],["r","* 61b1516 who does commit? "],["r","* 3869015 intialized. "],["r","bash-3.2$ git checkout HEAD^ "],["r","Note: checking out 'HEAD^'. "],["a"," "],["r","You are in 'detached HEAD' state. You can look around, make experimental "],["r","changes and commit them, and you can discard any commits you make in this "],["r","state without impacting any branches by performing another checkout. "],["a"," "],["r","If you want to create a new branch to retain commits you create, you may "],["r","do so (now or later) by using -b with the checkout command again. Example: "],["a"," "],["r"," git checkout -b new_branch_name "],["a"," "],["r","HEAD is now at 0e3a4c9... which version checked in? "],["r","bash-3.2$ git log --oneline --graph "],["r","* 0e3a4c9 which version checked in? "],["r","* 61b1516 who does commit? "],["r","* 3869015 intialized. "],["r","bash-3.2$ cat .git/HEAD "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],["r","bash-3.2$ gi "]],"x":13,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],["r","77333333377777777777777777777777777777777777777777777777777777777777777777777777"],"d","d","d",["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d",["r","77333333377777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"],"d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305109950.34347,"i":1},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305109950.43147},{"y":25,"x":15,"t":1305109950.49556},{"y":25,"d":[[24,14,"b"]],"x":16,"t":1305109950.68732},{"y":25,"d":[[24,15,"r"]],"x":17,"t":1305109950.87123},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305109950.99137},{"y":25,"d":[[24,17,"n"]],"x":19,"t":1305109951.08773},{"y":25,"d":[[24,18,"c"]],"x":20,"t":1305109951.20755},{"y":25,"d":[[24,19,"h"]],"x":21,"t":1305109951.35127},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",6,10],["cp",12,11],["cp",13,12],["cp",6,13],["cp",15,14],["cp",6,15],["cp",17,16],["cp",18,17],["cp",1,18],["cp",2,19],["cp",3,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",6,24]],"x":1,"f":[["cp",1,0],["cp",5,4],["cp",0,18],["cp",4,21]],"t":1305109952.12755},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",4,8],["cp",11,9],["cp",12,10],["cp",4,11],["cp",14,12],["cp",16,14],["cp",17,15],["cp",18,16],["cp",0,17],["cp",1,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,39,"* (no branch) "],[23,0,19," master "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,2],["cp",2,3],["cp",0,16],["cp",0,17],["cp",2,19],["cp",2,20],[22,2,12,["a","2"]]],"t":1305109952.13519},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305109953.45627},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305109953.55139},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305109953.65558},{"y":25,"x":15,"t":1305109953.70326},{"y":25,"d":[[24,14,"b"]],"x":16,"t":1305109953.8792},{"y":25,"d":[[24,15,"r"]],"x":17,"t":1305109954.05523},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305109954.16746},{"y":25,"d":[[24,17,"n"]],"x":19,"t":1305109954.22324},{"y":25,"d":[[24,18,"c"]],"x":20,"t":1305109954.69512},{"y":25,"d":[["cp",21,24]],"x":21,"t":1305109954.77516},{"y":25,"x":22,"t":1305109954.91941},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305109955.07931},{"y":25,"d":[[24,22,"v"]],"x":24,"t":1305109955.2152},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",3,7],["cp",9,8],["cp",10,9],["cp",3,10],["cp",12,11],["cp",3,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",0,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",3,24]],"x":1,"f":[["cp",2,1],["cp",0,15],["cp",1,18],["cp",22,21],["cp",1,22]],"t":1305109955.33518},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",1,5],["cp",8,6],["cp",9,7],["cp",1,8],["cp",11,9],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,46,"* (no branch) 0e3a4c9 which version checked in?"],[23,0,56," master 6af1352 does master follow this new commit?"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",15,13],["cp",13,14],["cp",0,16],["cp",0,17],["cp",21,19],["cp",0,21],["cp",19,22]],"t":1305109955.34273},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305109957.04722},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305109957.11907},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305109957.22316},{"y":25,"x":15,"t":1305109957.27912},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305109957.49493},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305109957.64692},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305109957.80699},{"y":25,"d":[[24,17,"l"]],"x":19,"t":1305109957.94314},{"y":25,"d":[[24,18,"o"]],"x":20,"t":1305109958.09495},{"y":25,"d":[[24,19,"g"]],"x":21,"t":1305109958.17494},{"y":25,"x":22,"t":1305109958.28682},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305109958.42288},{"y":25,"d":[[24,22,"1"]],"x":24,"t":1305109958.69507},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",9,8],["cp",0,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",13,12],["cp",0,15],["cp",19,18],["cp",0,19],["cp",18,21],["cp",0,22]],"t":1305109958.97492},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",3,6],["cp",8,7],["cp",3,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,54,"0e3a4c9 HEAD@{0}: checkout: moving from master to HEAD^"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",12,11],["cp",0,14],["cp",18,17],["cp",0,18],["cp",17,20],["cp",0,21],[23,0,6,["a","3"]]],"t":1305109958.98703},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305109960.72687},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305109960.8068},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305109960.93495},{"y":25,"x":15,"t":1305109960.99892},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305109961.1831},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305109961.35075},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305109961.54305},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305109961.73492},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305109961.98289},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305109962.07094},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305109962.17481},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305109962.34287},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305109962.60674},{"y":25,"x":25,"t":1305109962.86273},{"y":25,"d":[[24,24,"H"]],"x":26,"t":1305109963.26278},{"y":25,"d":[[24,25,"E"]],"x":27,"t":1305109963.3429},{"y":25,"d":[[24,26,"A"]],"x":28,"t":1305109963.47894},{"y":25,"d":[[24,27,"D"]],"x":29,"t":1305109963.57476},{"y":25,"x":30,"t":1305109963.9428},{"y":25,"d":[[24,29,"m"]],"x":31,"t":1305109964.27063},{"y":25,"d":[[24,30,"a"]],"x":32,"t":1305109964.40679},{"y":25,"d":[[24,31,"s"]],"x":33,"t":1305109964.8787},{"y":25,"d":[[24,32,"t"]],"x":34,"t":1305109965.16686},{"y":25,"d":[[24,33,"e"]],"x":35,"t":1305109965.32711},{"y":25,"d":[[24,34,"r"]],"x":36,"t":1305109965.39844},{"y":25,"d":[[24,35,"^"]],"x":37,"t":1305109966.11074},{"y":25,"x":38,"t":1305109966.28655},{"y":25,"d":[[24,37,"m"]],"x":39,"t":1305109966.48661},{"y":25,"d":[[24,38,"a"]],"x":40,"t":1305109966.5746},{"y":25,"d":[[24,39,"s"]],"x":41,"t":1305109966.70242},{"y":25,"d":[[24,40,"t"]],"x":42,"t":1305109966.91048},{"y":25,"d":[[24,41,"e"]],"x":43,"t":1305109967.03048},{"y":25,"d":[[24,42,"r"]],"x":44,"t":1305109967.09451},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",2,5],["cp",7,6],["cp",2,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",2,24]],"x":1,"f":[["cp",11,10],["cp",0,13],["cp",17,16],["cp",0,17],["cp",16,19],["cp",0,20],["cp",23,22],["cp",0,23]],"t":1305109967.20651},{"y":25,"d":[["cp",3,0],["cp",4,1],["cp",6,3],["cp",2,4],["cp",8,5],["cp",9,6],["cp",10,7],["cp",11,8],["cp",12,9],["cp",13,10],["cp",14,11],["cp",15,12],["cp",16,13],["cp",17,14],["cp",18,15],["cp",19,16],["cp",20,17],["cp",21,18],["cp",22,19],["cp",23,20],["cp",11,21],["cp",11,22],[23,0,42,"6af1352e5a38c4987c99bc9bc8c7213f48bfeea4 "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",10,7],["cp",7,8],["cp",7,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",16,13],["cp",22,19],["cp",0,22]],"t":1305109967.21624},{"y":25,"d":[[24,10,"t"]],"x":12,"t":1305109969.3585},{"y":25,"d":[[24,11,"o"]],"x":13,"t":1305109969.47849},{"y":25,"d":[[24,12,"c"]],"x":14,"t":1305109969.5986},{"y":25,"d":[[24,12," "]],"x":13,"t":1305109970.71012},{"y":25,"d":[[24,12,"c"]],"x":14,"t":1305109971.15026},{"y":25,"d":[[24,13,"h"]],"x":15,"t":1305109971.21433},{"y":25,"d":[[24,13," "]],"x":14,"t":1305109971.51938},{"y":25,"d":[[24,12," "]],"x":13,"t":1305109971.68617},{"y":25,"d":[[24,12,"u"]],"x":14,"t":1305109971.87024},{"y":25,"d":[[24,13,"c"]],"x":15,"t":1305109972.00626},{"y":25,"d":[[24,14,"h"]],"x":16,"t":1305109972.08644},{"y":25,"x":17,"t":1305109972.28639},{"y":25,"d":[[24,16,"d"]],"x":18,"t":1305109973.02221},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305109973.18227},{"y":25,"d":[[24,18,"t"]],"x":20,"t":1305109973.31804},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305109973.47815},{"y":25,"d":[[24,20,"c"]],"x":22,"t":1305109973.62219},{"y":25,"d":[[24,21,"h"]],"x":23,"t":1305109973.71832},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305109973.81429},{"y":25,"d":[[24,23,"d"]],"x":25,"t":1305109973.96628},{"y":25,"d":[[24,24,"-"]],"x":26,"t":1305109974.42239},{"y":25,"d":[[24,25,"c"]],"x":27,"t":1305109974.77416},{"y":25,"d":[[24,26,"o"]],"x":28,"t":1305109974.85462},{"y":25,"d":[[24,27,"m"]],"x":29,"t":1305109975.01399},{"d":[["r","If you want to create a new branch to retain commits you create, you may "],["r","do so (now or later) by using -b with the checkout command again. Example: "],["a"," "],["r"," git checkout -b new_branch_name "],["a"," "],["r","HEAD is now at 0e3a4c9... which version checked in? "],["r","bash-3.2$ git log --oneline --graph "],["r","* 0e3a4c9 which version checked in? "],["r","* 61b1516 who does commit? "],["r","* 3869015 intialized. "],["r","bash-3.2$ cat .git/HEAD "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],["r","bash-3.2$ git branch "],["r","* (no branch) "],["r"," master "],["r","bash-3.2$ git branch -v "],["r","* (no branch) 0e3a4c9 which version checked in? "],["r"," master 6af1352 does master follow this new commit? "],["r","bash-3.2$ git reflog -1 "],["r","0e3a4c9 HEAD@{0}: checkout: moving from master to HEAD^ "],["r","bash-3.2$ git rev-parse HEAD master^ master "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],"d",["r","6af1352e5a38c4987c99bc9bc8c7213f48bfeea4 "],["r","bash-3.2$ touch detached-comm "]],"x":30,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d",["r","77333333377777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"],"d","d",["r","77222222222227777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","77222222222227777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305109975.17411,"i":1},{"y":25,"d":[[24,29,"i"]],"x":31,"t":1305109975.34195},{"y":25,"d":[[24,30,"t"]],"x":32,"t":1305109975.41416},{"y":25,"d":[[24,31,"."]],"x":33,"t":1305109976.55015},{"y":25,"d":[[24,32,"t"]],"x":34,"t":1305109976.67839},{"y":25,"d":[[24,33,"x"]],"x":35,"t":1305109976.80601},{"y":25,"d":[[24,34,"t"]],"x":36,"t":1305109976.90997},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",10,20],["cp",23,22],["cp",24,23],["cp",1,24]],"x":1,"f":[["cp",7,6],["cp",0,9],["cp",13,12],["cp",0,13],["cp",12,15],["cp",0,16],["cp",19,18],["cp",0,19]],"t":1305109977.07036},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305109977.07494},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305109977.48596},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305109977.56616},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305109977.65441},{"y":25,"x":15,"t":1305109977.72615},{"y":25,"d":[[24,14,"a"]],"x":16,"t":1305109977.81408},{"y":25,"d":[[24,15,"d"]],"x":17,"t":1305109977.98194},{"y":25,"d":[[24,16,"d"]],"x":18,"t":1305109978.15779},{"y":25,"x":19,"t":1305109978.23794},{"y":25,"d":[[24,18,"d"]],"x":20,"t":1305109978.38177},{"y":25,"d":[[24,19,"e"]],"x":21,"t":1305109978.54981},{"y":25,"d":[[24,20,"t"]],"x":22,"t":1305109978.6459},{"y":25,"d":[[24,21,36,"ached-commit.txt"]],"x":38,"t":1305109978.85958},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",9,19],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",6,5],["cp",0,8],["cp",12,11],["cp",0,12],["cp",11,14],["cp",0,15],["cp",18,17],["cp",0,18]],"t":1305109979.00802},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305109979.01387},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305109979.20596},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305109979.30977},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305109979.42982},{"y":25,"x":15,"t":1305109979.50985},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305109980.09402},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305109980.22209},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305109980.37386},{"y":25,"d":[[24,17,"m"]],"x":19,"t":1305109980.52566},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305109980.65376},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305109980.69366},{"y":25,"x":22,"t":1305109980.78204},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305109980.90157},{"y":25,"d":[[24,22,"m"]],"x":24,"t":1305109981.0937},{"y":25,"x":25,"t":1305109981.22972},{"y":25,"d":[[24,24,"\""]],"x":26,"t":1305109981.518},{"y":25,"d":[[24,25,"c"]],"x":27,"t":1305109981.71046},{"y":25,"d":[[24,26,"o"]],"x":28,"t":1305109981.81448},{"y":25,"d":[[24,27,"m"]],"x":29,"t":1305109981.98187},{"y":25,"d":[[24,28,"m"]],"x":30,"t":1305109982.11768},{"y":25,"d":[[24,29,"i"]],"x":31,"t":1305109982.27768},{"y":25,"d":[[24,30,"t"]],"x":32,"t":1305109982.35781},{"y":25,"x":33,"t":1305109982.5416},{"y":25,"d":[[24,32,"i"]],"x":34,"t":1305109982.66165},{"y":25,"d":[[24,33,"n"]],"x":35,"t":1305109982.79772},{"y":25,"x":36,"t":1305109982.92568},{"y":25,"d":[[24,35,"d"]],"x":37,"t":1305109983.10967},{"y":25,"d":[[24,36,"e"]],"x":38,"t":1305109983.27776},{"y":25,"d":[[24,37,"t"]],"x":39,"t":1305109983.40582},{"y":25,"d":[[24,38,"a"]],"x":40,"t":1305109983.56571},{"y":25,"d":[[24,39,"c"]],"x":41,"t":1305109983.69395},{"y":25,"d":[[24,40,"h"]],"x":42,"t":1305109983.77347},{"y":25,"d":[[24,41,"e"]],"x":43,"t":1305109983.88586},{"y":25,"d":[[24,42,"d"]],"x":44,"t":1305109984.06175},{"y":25,"x":45,"t":1305109984.76554},{"y":25,"d":[[24,44,"H"]],"x":46,"t":1305109985.03787},{"y":25,"d":[[24,45,"E"]],"x":47,"t":1305109985.12556},{"y":25,"d":[[24,46,"A"]],"x":48,"t":1305109985.3094},{"y":25,"d":[[24,47,"D"]],"x":49,"t":1305109985.38945},{"y":25,"x":50,"t":1305109985.72608},{"y":25,"d":[[24,49,"m"]],"x":51,"t":1305109985.88566},{"y":25,"d":[[24,50,"o"]],"x":52,"t":1305109986.01345},{"y":25,"d":[[24,51,"d"]],"x":53,"t":1305109986.07766},{"y":25,"d":[[24,52,"e"]],"x":54,"t":1305109986.23757},{"y":25,"d":[[24,53,"."]],"x":55,"t":1305109986.32539},{"y":25,"d":[[24,54,"\""]],"x":56,"t":1305109986.74964},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",8,18],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",1,24]],"x":1,"f":[["cp",5,4],["cp",0,7],["cp",11,10],["cp",0,11],["cp",10,13],["cp",0,14],["cp",17,16],["cp",0,17]],"t":1305109986.92574},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",7,17],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,54,"[detached HEAD 6630c7c] commit in detached HEAD mode. "]],"x":1,"f":[["cp",4,3],["cp",0,6],["cp",10,9],["cp",0,10],["cp",9,12],["cp",0,13],["cp",16,15],["cp",0,16]],"t":1305109987.20592},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",5,15],["cp",5,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,54," 0 files changed, 0 insertions(+), 0 deletions(-) "],[23,0,52," create mode 100644 detached-commit.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,1],["cp",1,2],["cp",0,4],["cp",0,5],["cp",9,7],["cp",0,9],["cp",7,10],["cp",0,12],["cp",15,13],["cp",0,15]],"t":1305109987.2075},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305109988.39077},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305109988.49336},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",4,14],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",4,3],["cp",7,6],["cp",3,7],["cp",6,9],["cp",3,10],["cp",13,12],["cp",3,13]],"t":1305109988.61323},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",3,13],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,31,"detached-commit.txt welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,2],["cp",6,5],["cp",2,6],["cp",5,8],["cp",2,9],["cp",12,11],["cp",2,12]],"t":1305109988.61967},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305109990.98921},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305109991.11771},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305109991.29332},{"y":25,"x":15,"t":1305109991.54106},{"y":25,"d":[[24,14,"b"]],"x":16,"t":1305109993.54931},{"y":25,"d":[[24,15,"r"]],"x":17,"t":1305109993.73304},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305109993.85304},{"y":25,"d":[[24,17,"n"]],"x":19,"t":1305109993.98906},{"y":25,"d":[[24,18,"c"]],"x":20,"t":1305109994.06113},{"y":25,"d":[["cp",4,24]],"x":21,"t":1305109994.20532},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",2,12],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",3,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",5,4],["cp",1,5],["cp",4,7],["cp",1,8],["cp",11,10],["cp",1,11]],"t":1305109994.40495},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",0,10],["cp",0,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",1,21],["cp",2,22],["cp",3,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",4,2],["cp",0,4],["cp",2,5],["cp",0,7],["cp",10,8],["cp",0,10],["cp",2,22]],"t":1305109994.41161},{"y":25,"d":[[24,10,"c"]],"x":12,"t":1305109995.63696},{"y":25,"d":[[24,11,"a"]],"x":13,"t":1305109995.74102},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305109995.78096},{"y":25,"x":15,"t":1305109995.89312},{"y":25,"d":[[24,14,"."]],"x":16,"t":1305109995.98901},{"y":25,"d":[[24,15,"g"]],"x":17,"t":1305109996.10071},{"y":25,"d":[[24,16,"i"]],"x":18,"t":1305109996.18898},{"y":25,"d":[[24,17,18,"t/"]],"x":20,"t":1305109996.33394},{"y":25,"d":[[24,19,"h"]],"x":21,"t":1305109996.95695},{"y":25,"d":[[24,20,"e"]],"x":22,"t":1305109997.03682},{"y":25,"d":[[24,21,"a"]],"x":23,"t":1305109997.19794},{"y":25,"d":[[24,19,22,"HEAD"]],"x":25,"t":1305109997.46929},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",0,20],["cp",1,21],["cp",2,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,2],["cp",1,4],["cp",0,5],["cp",8,7],["cp",0,8],["cp",1,21],["cp",0,22]],"t":1305109997.90098},{"d":[["r","* (no branch) "],["r"," master "],["r","bash-3.2$ git branch -v "],["r","* (no branch) 0e3a4c9 which version checked in? "],["r"," master 6af1352 does master follow this new commit? "],["r","bash-3.2$ git reflog -1 "],["r","0e3a4c9 HEAD@{0}: checkout: moving from master to HEAD^ "],["r","bash-3.2$ git rev-parse HEAD master^ master "],["r","0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],"d",["r","6af1352e5a38c4987c99bc9bc8c7213f48bfeea4 "],["r","bash-3.2$ touch detached-commit.txt "],["r","bash-3.2$ git add detached-commit.txt "],["r","bash-3.2$ git commit -m \"commit in detached HEAD mode.\" "],["r","[detached HEAD 6630c7c] commit in detached HEAD mode. "],["r"," 0 files changed, 0 insertions(+), 0 deletions(-) "],["r"," create mode 100644 detached-commit.txt "],["r","bash-3.2$ ls "],["r","detached-commit.txt welcome.txt "],["r","bash-3.2$ git branch "],["r","* (no branch) "],["r"," master "],["r","bash-3.2$ cat .git/HEAD "],["r","6630c7cedc697ae87e9907b7a2ce9f71f2e3222c "],["r","bash-3.2$ "]],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","77222222222227777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","77222222222227777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d",["r","77222222222227777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305109997.90601,"i":1},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305109998.72912},{"y":25,"d":[[24,10,22,"/ "]],"x":12,"t":1305109998.89279},{"y":25,"d":[[24,11,"l"]],"x":13,"t":1305109999.0691},{"y":25,"d":[[24,12,"o"]],"x":14,"t":1305109999.23674},{"y":25,"d":[[24,13,"g"]],"x":15,"t":1305109999.29291},{"y":25,"d":[["cp",5,24]],"x":11,"t":1305109999.42869},{"y":25,"d":[[24,14,34,"log --oneline --graph"]],"x":11,"t":1305109999.93303},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",0,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",3,2],["cp",0,3],["cp",6,5],["cp",0,6],["cp",2,19],["cp",0,20]],"t":1305110000.41267},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",3,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",13,9],["cp",14,10],["cp",15,11],["cp",16,12],["cp",17,13],["cp",18,14],["cp",19,15],["cp",20,16],["cp",21,17],["cp",22,18],["cp",23,19],[20,0,38,"* 6630c7c commit in detached HEAD mode."],[21,0,34,"* 0e3a4c9 which version checked in?"],[22,0,39,"* 61b1516 who does commit? "],[23,0,34,"* 3869015 intialized. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",5,1],["cp",0,2],["cp",0,5],["cp",19,15],["cp",0,19],[20,2,8,["a","3"]],["cp",20,21],["cp",20,22],["cp",20,23]],"t":1305110000.42562},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305110005.99626},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305110006.09239},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305110006.22826},{"y":25,"x":15,"t":1305110006.31639},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305110006.59627},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305110006.68472},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305110006.76431},{"y":25,"d":[[24,17,"c"]],"x":19,"t":1305110006.92432},{"y":25,"d":[[24,18,"k"]],"x":20,"t":1305110006.99677},{"y":25,"d":[[24,19,"o"]],"x":21,"t":1305110007.13251},{"y":25,"d":[[24,20,"u"]],"x":22,"t":1305110007.22037},{"y":25,"d":[[24,21,"t"]],"x":23,"t":1305110007.32446},{"y":25,"x":24,"t":1305110007.38843},{"y":25,"d":[[24,23,"m"]],"x":25,"t":1305110007.74034},{"y":25,"d":[[24,24,"a"]],"x":26,"t":1305110007.8443},{"y":25,"d":[[24,25,"s"]],"x":27,"t":1305110007.99619},{"y":25,"d":[[24,26,"t"]],"x":28,"t":1305110008.13259},{"y":25,"d":[[24,27,"e"]],"x":29,"t":1305110008.28423},{"y":25,"d":[[24,28,"r"]],"x":30,"t":1305110008.35616},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",15,14],["cp",1,15],["cp",20,19],["cp",1,23]],"t":1305110008.61239},{"y":25,"d":[["cp",11,0],["cp",12,1],["cp",13,2],["cp",14,3],["cp",15,4],["cp",16,5],["cp",17,6],["cp",18,7],["cp",19,8],["cp",20,9],["cp",21,10],["cp",22,11],["cp",23,12],[13,0,57,"Warning: you are leaving 1 commit behind, not connected to"],[14,0,20,"any of your branches:"],["cp",24,15],[16,0,38," 6630c7c commit in detached HEAD mode."],["cp",15,17],[18,0,73,"If you want to keep them by creating a new branch, this may be a good time"],[19,0,38,"to do so with: "],["cp",15,20],[21,0,67," git branch new_branch_name 6630c7cedc697ae87e9907b7a2ce9f71f2e3222c"],["cp",15,22],[23,0,28,"Switched to branch 'master' "]],"x":1,"f":[["cp",1,0],["cp",14,3],["cp",19,8],["cp",8,9],["cp",8,10],["cp",8,11],["cp",0,14],["cp",0,19],["cp",0,20],["cp",0,21],["cp",0,22]],"t":1305110008.62208},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305110008.89608},{"y":25,"d":[["cp",12,24]],"x":11,"t":1305110011.37213},{"y":25,"d":[[24,10,28,"/ "]],"x":12,"t":1305110011.56416},{"y":25,"d":[[24,11,"o"]],"x":13,"t":1305110011.79606},{"y":25,"d":[[24,12,"n"]],"x":14,"t":1305110011.94799},{"y":25,"d":[[24,13,"e"]],"x":15,"t":1305110012.03608},{"y":25,"d":[["cp",7,24]],"x":11,"t":1305110012.33229},{"y":25,"x":35,"t":1305110014.6041},{"y":25,"x":36,"t":1305110014.94831},{"y":25,"x":37,"t":1305110015.12393},{"y":25,"d":[[24,36,"-"]],"x":38,"t":1305110015.30788},{"y":25,"d":[[24,37,"-"]],"x":39,"t":1305110015.50799},{"y":25,"d":[[24,38,"d"]],"x":40,"t":1305110015.81204},{"y":25,"d":[[24,39,"e"]],"x":41,"t":1305110015.97177},{"y":25,"d":[[24,40,"c"]],"x":42,"t":1305110016.13984},{"y":25,"d":[[24,41,"o"]],"x":43,"t":1305110016.24404},{"y":25,"d":[[24,42,"r"]],"x":44,"t":1305110016.33981},{"y":25,"d":[[24,43,"a"]],"x":45,"t":1305110016.56387},{"y":25,"d":[[24,44,"t"]],"x":46,"t":1305110016.74777},{"y":25,"d":[[24,45,"e"]],"x":47,"t":1305110016.87581},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",14,16],["cp",18,17],["cp",19,18],["cp",14,19],["cp",21,20],["cp",14,21],["cp",23,22],["cp",24,23],["cp",14,24]],"x":1,"f":[["cp",3,2],["cp",0,3],["cp",8,7],["cp",0,11]],"t":1305110017.40373},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",13,9],["cp",14,10],["cp",15,11],["cp",10,12],["cp",17,13],["cp",18,14],["cp",10,15],["cp",20,16],["cp",10,17],["cp",22,18],["cp",23,19],[20,0,67,"* 6af1352 (HEAD, master) does master follow this new commit? "],["cp",4,21],["cp",5,22],["cp",6,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,2],["cp",7,3],["cp",3,4],["cp",3,5],["cp",3,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],[20,2,23,"3333333336666332222223"],["cp",3,21],["cp",3,22],["cp",3,23]],"B":[[20,11,22,"111100111111"]],"t":1305110017.41845},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305110021.69152},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305110021.76354},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305110021.88354},{"y":25,"x":15,"t":1305110021.93968},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305110022.08358},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305110022.17158},{"y":25,"d":[[24,16,"o"]],"x":18,"t":1305110022.2595},{"y":25,"d":[[24,17,"w"]],"x":19,"t":1305110022.3155},{"y":25,"x":20,"t":1305110022.48366},{"y":25,"d":[[24,19,20,["a","6"]]],"x":22,"t":1305110027.76407},{"y":25,"d":[[24,21,25,"30c7c"]],"x":27,"t":1305110027.76416},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",9,11],["cp",13,12],["cp",14,13],["cp",9,14],["cp",16,15],["cp",9,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",3,20],["cp",4,21],["cp",5,22],["cp",24,23],["cp",9,24]],"x":1,"f":[["cp",3,2],["cp",0,6],["cp",20,19],["cp",2,20],["cp",0,23]],"B":[["cp",20,19],["cp",0,20]],"t":1305110030.01954},{"y":25,"d":[["cp",9,0],["cp",10,1],["cp",0,2],["cp",12,3],["cp",13,4],["cp",0,5],["cp",15,6],["cp",0,7],["cp",17,8],["cp",18,9],["cp",19,10],["cp",20,11],["cp",21,12],["cp",22,13],["cp",23,14],[15,0,67,"commit 6630c7cedc697ae87e9907b7a2ce9f71f2e3222c "],[16,0,37,"Author: Jiang Xin "],[17,0,37,"Date: Wed May 11 18:33:06 2011 +0800"],["cp",0,18],[19,0,59," commit in detached HEAD mode. "],["cp",0,20],[21,0,53,"diff --git a/detached-commit.txt b/detached-commit.txt"],[22,0,20,"new file mode 100644 "],[23,0,25,"index 0000000..e69de29 "]],"x":1,"f":[["cp",0,2],["cp",0,3],["cp",0,4],["cp",0,5],["cp",19,10],["cp",20,11],["cp",11,12],["cp",11,13],[15,0,46,["a","3"]],["cp",0,19],["cp",0,20],["cp",0,21],["cp",0,22]],"B":[["cp",19,10],["cp",0,19],[21,0,53,["a","1"]],[22,0,19,["a","1"]],[23,0,21,["a","1"]]],"t":1305110030.03146},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305110030.09886},{"y":25,"d":[[24,10,"c"]],"x":12,"t":1305110034.14685},{"y":25,"d":[[24,11,"t"]],"x":13,"t":1305110034.34696},{"y":25,"x":14,"t":1305110034.40295},{"y":25,"x":13,"t":1305110034.95489},{"y":25,"d":[[24,11," "]],"x":12,"t":1305110035.13895},{"y":25,"d":[[24,11,"a"]],"x":13,"t":1305110035.20312},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305110035.315},{"y":25,"x":15,"t":1305110035.41085},{"y":25,"d":[[24,14,"."]],"x":16,"t":1305110035.53063},{"y":25,"d":[[24,15,"g"]],"x":17,"t":1305110035.69092},{"y":25,"d":[[24,16,18,"it/"]],"x":20,"t":1305110035.97352},{"y":25,"d":[[24,19,"h"]],"x":21,"t":1305110037.61891},{"y":25,"d":[[24,20,"e"]],"x":22,"t":1305110037.77074},{"y":25,"d":[[24,21,"a"]],"x":23,"t":1305110037.9468},{"y":25,"d":[[24,19,22,"HEAD"]],"x":25,"t":1305110038.18698},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",1,4],["cp",6,5],["cp",1,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",1,17],["cp",19,18],["cp",1,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",1,24]],"x":1,"f":[["cp",10,9],["cp",11,10],["cp",0,13],["cp",15,14],["cp",0,15]],"B":[["cp",10,9],["cp",0,10],["cp",21,20],["cp",22,21],["cp",23,22],["cp",0,23]],"t":1305110038.53091},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,3],["cp",5,4],["cp",0,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",0,16],["cp",18,17],["cp",0,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,22,"ref: refs/heads/master "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",9,8],["cp",10,9],["cp",0,12],["cp",14,13],["cp",0,14]],"B":[["cp",9,8],["cp",0,9],["cp",20,19],["cp",21,20],["cp",22,21],["cp",0,22]],"t":1305110038.53619},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305110038.81874},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305110038.93083},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305110039.01075},{"y":25,"x":15,"t":1305110039.08266},{"y":25,"d":[[24,14,"b"]],"x":16,"t":1305110039.25086},{"y":25,"d":[[24,15,"r"]],"x":17,"t":1305110039.41881},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305110039.55478},{"y":25,"d":[[24,17,"n"]],"x":19,"t":1305110039.6427},{"y":25,"d":[[24,18,"c"]],"x":20,"t":1305110039.79474},{"y":25,"d":[[24,19,"h"]],"x":21,"t":1305110039.95458},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",2,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",2,15],["cp",17,16],["cp",2,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",2,24]],"x":1,"f":[["cp",8,7],["cp",9,8],["cp",0,11],["cp",13,12],["cp",0,13]],"B":[["cp",8,7],["cp",0,8],["cp",19,18],["cp",20,19],["cp",21,20],["cp",0,21]],"t":1305110040.34672},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",1,14],["cp",16,15],["cp",1,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,19,"* master "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",7,6],["cp",8,7],["cp",0,10],["cp",12,11],["cp",0,12],[23,2,7,["a","2"]]],"B":[["cp",7,6],["cp",0,7],["cp",18,17],["cp",19,18],["cp",20,19],["cp",0,20]],"t":1305110040.35438},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305110041.14655},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305110041.23479},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305110041.33842},{"y":25,"x":15,"t":1305110041.37844},{"d":[["r","to do so with: "],["a"," "],["r"," git branch new_branch_name 6630c7cedc697ae87e9907b7a2ce9f71f2e3222c "],["a"," "],["r","Switched to branch 'master' "],["r","bash-3.2$ git log --oneline --graph --decorate "],["r","* 6af1352 (HEAD, master) does master follow this new commit? "],["r","* 0e3a4c9 which version checked in? "],["r","* 61b1516 who does commit? "],["r","* 3869015 intialized. "],["r","bash-3.2$ git show 6630c7c "],["r","commit 6630c7cedc697ae87e9907b7a2ce9f71f2e3222c "],["r","Author: Jiang Xin "],["r","Date: Wed May 11 18:33:06 2011 +0800 "],["a"," "],["r"," commit in detached HEAD mode. "],["a"," "],["r","diff --git a/detached-commit.txt b/detached-commit.txt "],["r","new file mode 100644 "],["r","index 0000000..e69de29 "],["r","bash-3.2$ cat .git/HEAD "],["r","ref: refs/heads/master "],["r","bash-3.2$ git branch "],["r","* master "],["r","bash-3.2$ git m "]],"x":16,"B":[["a","0"],"d","d","d","d","d",["r","00000000000111100111111000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d","d","d","d",["r","11111111111111111111111111111111111111111111111111111100000000000000000000000000"],["r","11111111111111111111000000000000000000000000000000000000000000000000000000000000"],["r","11111111111111111111110000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d",["r","77333333333666633222222377777777777777777777777777777777777777777777777777777777"],["r","77333333377777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"],["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d",["r","77222222777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305110042.02632,"i":1},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305110042.89044},{"y":25,"d":[[24,16,"r"]],"x":18,"t":1305110043.17836},{"y":25,"d":[[24,17,"g"]],"x":19,"t":1305110043.41042},{"y":25,"d":[[24,18,"e"]],"x":20,"t":1305110043.56235},{"y":25,"x":21,"t":1305110043.69044},{"y":25,"d":[[24,20,21,["a","6"]]],"x":23,"t":1305110044.40274},{"y":25,"d":[[24,22,26,"30c7c"]],"x":28,"t":1305110044.40281},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13],["cp",15,14],["cp",0,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",6,5],["cp",7,6],["cp",0,9],["cp",11,10],["cp",0,11],["cp",23,22],["cp",0,23]],"B":[["cp",6,5],["cp",0,6],["cp",17,16],["cp",18,17],["cp",19,18],["cp",0,19]],"t":1305110045.40266},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",1,12],["cp",14,13],["cp",1,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,26,"Merge made by recursive. "]],"x":1,"f":[["cp",5,4],["cp",6,5],["cp",0,8],["cp",10,9],["cp",0,10],["cp",22,21],["cp",0,22]],"B":[["cp",5,4],["cp",0,5],["cp",16,15],["cp",17,16],["cp",18,17],["cp",0,18]],"t":1305110045.68647},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,48," 0 files changed, 0 insertions(+), 0 deletions(-)"],[23,0,38," create mode 100644 detached-commit.txt"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,2],["cp",5,3],["cp",3,4],["cp",0,6],["cp",9,7],["cp",0,9],["cp",21,19],["cp",0,21]],"B":[["cp",4,2],["cp",0,4],["cp",15,13],["cp",16,14],["cp",17,15],["cp",0,16],["cp",0,17]],"t":1305110045.692},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305110048.28231},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305110048.38611},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",9,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",9,24]],"x":1,"f":[["cp",2,1],["cp",3,2],["cp",0,5],["cp",7,6],["cp",0,7],["cp",19,18],["cp",0,19]],"B":[["cp",2,1],["cp",0,2],["cp",13,12],["cp",14,13],["cp",15,14],["cp",0,15]],"t":1305110048.51463},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",8,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,47,"detached-commit.txt new-commit.txt welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",5,4],["cp",6,5],["cp",4,6],["cp",18,17],["cp",4,18]],"B":[["cp",1,0],["cp",2,1],["cp",12,11],["cp",13,12],["cp",14,13],["cp",1,14]],"t":1305110048.52053},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305110051.75432},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305110051.84207},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305110051.96996},{"y":25,"x":15,"t":1305110052.04991},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305110055.29003},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305110055.45784},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305110055.52184},{"y":25,"x":19,"t":1305110055.62689},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305110055.81},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305110055.99369},{"y":25,"d":[[24,20,"g"]],"x":22,"t":1305110056.12189},{"y":25,"d":[[24,21,"r"]],"x":23,"t":1305110056.28177},{"y":25,"d":[[24,22,"a"]],"x":24,"t":1305110056.41764},{"y":25,"d":[[24,23,"p"]],"x":25,"t":1305110056.5857},{"y":25,"d":[[24,24,"h"]],"x":26,"t":1305110056.72178},{"y":25,"x":27,"t":1305110056.88188},{"y":25,"d":[[24,26,"-"]],"x":28,"t":1305110057.03386},{"y":25,"d":[[24,27,"-"]],"x":29,"t":1305110057.20186},{"y":25,"d":[[24,28,"o"]],"x":30,"t":1305110057.40179},{"y":25,"d":[[24,29,"n"]],"x":31,"t":1305110057.52973},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305110057.64972},{"y":25,"d":[[24,31,"l"]],"x":33,"t":1305110057.72186},{"y":25,"d":[[24,32,"i"]],"x":34,"t":1305110057.88977},{"y":25,"d":[[24,33,"n"]],"x":35,"t":1305110057.99378},{"y":25,"d":[[24,34,"e"]],"x":36,"t":1305110058.0975},{"y":25,"x":37,"t":1305110058.30564},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",7,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",7,24]],"x":1,"f":[["cp",1,0],["cp",4,3],["cp",5,4],["cp",3,5],["cp",17,16],["cp",3,17]],"B":[["cp",1,0],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13]],"t":1305110058.77777},{"y":25,"d":[["cp",8,0],["cp",7,1],["cp",10,2],["cp",11,3],["cp",12,4],["cp",13,5],["cp",14,6],["cp",15,7],["cp",16,8],["cp",17,9],["cp",18,10],["cp",19,11],["cp",20,12],["cp",21,13],["cp",22,14],["cp",23,15],[16,2,33," 1086811 Merge commit '6630c7c'"],[17,0,26,"|\\ "],[18,0,40,"| * 6630c7c commit in detached HEAD mode."],[19,0,48,"* | 6af1352 does master follow this new commit? "],[20,0,38,"|/ "],[21,0,34,"* 0e3a4c9 which version checked in?"],[22,0,47,"* 61b1516 who does commit? "],[23,0,34,"* 3869015 intialized. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,0],["cp",0,1],["cp",0,2],["cp",0,4],["cp",16,8],[16,2,10,"773333333"],[17,0,1,"12"],[18,0,10,"17773333333"],[19,2,10,"273333333"],[20,0,1,["a","2"]],[21,2,8,["a","3"]],["cp",21,22],["cp",21,23]],"B":[["cp",10,2],["cp",11,3],["cp",12,4],["cp",0,10],["cp",0,11],["cp",0,12]],"t":1305110058.82647},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305110062.40962},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305110062.48146},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305110062.5933},{"y":25,"x":15,"t":1305110062.64977},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305110062.92928},{"y":25,"d":[[24,15,"a"]],"x":17,"t":1305110063.07336},{"y":25,"d":[[24,16,"t"]],"x":18,"t":1305110063.20943},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305110063.44145},{"y":25,"d":[[24,18,"f"]],"x":20,"t":1305110063.59328},{"y":25,"d":[[24,19,"i"]],"x":21,"t":1305110063.69715},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305110063.76939},{"y":25,"d":[[24,21,"e"]],"x":23,"t":1305110063.88142},{"y":25,"x":24,"t":1305110063.96114},{"y":25,"d":[[24,23,"-"]],"x":25,"t":1305110064.08941},{"y":25,"d":[[24,24,"p"]],"x":26,"t":1305110064.35336},{"y":25,"x":27,"t":1305110064.52939},{"y":25,"d":[[24,26,"H"]],"x":28,"t":1305110064.91353},{"y":25,"d":[[24,27,"E"]],"x":29,"t":1305110065.03317},{"y":25,"d":[[24,28,"A"]],"x":30,"t":1305110065.16128},{"y":25,"d":[[24,29,"D"]],"x":31,"t":1305110065.25742},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",8,7],["cp",0,8],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",0,23]],"B":[["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4]],"t":1305110065.59308},{"y":25,"d":[["cp",7,0],["cp",8,1],["cp",9,2],["cp",10,3],["cp",11,4],["cp",12,5],["cp",13,6],["cp",14,7],["cp",15,8],["cp",16,9],["cp",17,10],["cp",18,11],["cp",19,12],["cp",20,13],["cp",21,14],["cp",22,15],["cp",23,16],[17,0,44,"tree ab676f92936000457b01507e04f4058e855d4df0"],[18,0,46,"parent 6af1352e5a38c4987c99bc9bc8c7213f48bfeea4"],[19,0,46,"parent 6630c7cedc697ae87e9907b7a2ce9f71f2e3222c"],[20,0,53,"author Jiang Xin 1305110045 +0800"],[21,0,56,"committer Jiang Xin 1305110045 +0800"],["cp",24,22],[23,0,29,"Merge commit '6630c7c' "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",7,0],["cp",1,7],["cp",15,8],["cp",16,9],["cp",17,10],["cp",18,11],["cp",19,12],["cp",20,13],["cp",13,14],["cp",13,15],["cp",1,16],["cp",1,17],["cp",1,18],["cp",1,19],["cp",1,20],["cp",1,21],["cp",1,22]],"B":[["cp",0,1],["cp",0,2],["cp",0,3]],"t":1305110065.60301},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305110069.4731},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305110069.56093},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305110069.68117},{"y":25,"x":15,"t":1305110069.72098},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305110069.93688},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305110070.08914},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305110070.24129},{"y":25,"d":[[24,17,"l"]],"x":19,"t":1305110070.89696},{"y":25,"d":[[24,18,"o"]],"x":20,"t":1305110071.08093},{"y":25,"d":[[24,19,"g"]],"x":21,"t":1305110071.17715},{"y":25,"x":22,"t":1305110071.2811},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",21,24]],"x":1,"f":[["cp",1,0],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,15]],"t":1305110072.36875},{"y":25,"b":[[24,0,5,["a","7"]]],"d":[["cp",13,0],["cp",14,1],["cp",15,2],["cp",16,3],["cp",17,4],["cp",18,5],["cp",19,6],["cp",20,7],["cp",21,8],["cp",22,9],["cp",23,10],[11,0,56,"1086811 HEAD@{0}: merge 6630c7c: Merge made by recursive."],[12,0,77,"6af1352 HEAD@{1}: checkout: moving from 6630c7cedc697ae87e9907b7a2ce9f71f2e322"],[13,0,54,"6630c7c HEAD@{2}: commit: commit in detached HEAD mode."],[14,0,54,"0e3a4c9 HEAD@{3}: checkout: moving from master to HEAD^"],[15,0,42,"6af1352 HEAD@{4}: master@{2}: updating HEAD"],[16,0,44,"3869015 HEAD@{5}: HEAD^^: updating HEAD "],[17,0,46,"0e3a4c9 HEAD@{6}: HEAD^: updating HEAD "],[18,0,60,"6af1352 HEAD@{7}: commit: does master follow this new commit?"],[19,0,53,"0e3a4c9 HEAD@{8}: commit: which version checked in? "],[20,0,56,"61b1516 HEAD@{9}: commit (amend): who does commit? "],[21,0,50,"ca0c91c HEAD@{10}: commit (amend): who does commit?"],[22,0,42,"c615828 HEAD@{11}: commit: who does commit?"],[23,0,47,"3869015 HEAD@{12}: commit (initial): intialized."],[24,0,4,"(END)"]],"x":7,"f":[["cp",12,0],["cp",0,1],["cp",2,7],["cp",2,8],["cp",2,9],["cp",2,10],[11,0,6,["a","3"]],["cp",11,12],["cp",11,13],["cp",11,14],["cp",11,15],["cp",11,16],["cp",11,17],["cp",11,18],["cp",11,19],["cp",11,20],["cp",11,21],["cp",11,22],["cp",11,23],[24,0,5,["a","0"]]],"t":1305110072.3802},{"y":25,"b":[["cp",0,24]],"d":[["cp",8,24]],"x":1,"f":[["cp",2,24]],"t":1305110074.91291},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305110074.91445},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305110075.50479},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305110075.59256},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305110075.70479},{"y":25,"x":15,"t":1305110075.76077},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305110075.96072},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305110076.11281},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305110076.29678},{"y":25,"d":[[24,17,"l"]],"x":19,"t":1305110076.98467},{"y":25,"d":[[24,18,"o"]],"x":20,"t":1305110077.14457},{"y":25,"d":[["cp",10,24]],"x":21,"t":1305110077.23259},{"y":25,"x":22,"t":1305110077.31282},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305110077.76059},{"y":25,"d":[[24,22,"h"]],"x":24,"t":1305110077.85654},{"y":25,"d":[[24,23,"o"]],"x":25,"t":1305110077.95262},{"y":25,"d":[[24,24,"w"]],"x":26,"t":1305110078.02457},{"y":25,"x":27,"t":1305110078.31245},{"y":25,"d":[[24,26,"m"]],"x":28,"t":1305110078.52188},{"y":25,"d":[[24,27,"a"]],"x":29,"t":1305110078.60058},{"y":25,"d":[[24,28,"s"]],"x":30,"t":1305110078.73661},{"y":25,"d":[[24,29,"t"]],"x":31,"t":1305110078.88052},{"d":[["r","* 61b1516 who does commit? "],["r","* 3869015 intialized. "],["r","bash-3.2$ git cat-file -p HEAD "],["r","tree ab676f92936000457b01507e04f4058e855d4df0 "],["r","parent 6af1352e5a38c4987c99bc9bc8c7213f48bfeea4 "],["r","parent 6630c7cedc697ae87e9907b7a2ce9f71f2e3222c "],["r","author Jiang Xin 1305110045 +0800 "],["r","committer Jiang Xin 1305110045 +0800 "],["a"," "],["r","Merge commit '6630c7c' "],["r","bash-3.2$ git reflog "],["r","1086811 HEAD@{0}: merge 6630c7c: Merge made by recursive. "],["r","6af1352 HEAD@{1}: checkout: moving from 6630c7cedc697ae87e9907b7a2ce9f71f2e322 "],["r","6630c7c HEAD@{2}: commit: commit in detached HEAD mode. "],["r","0e3a4c9 HEAD@{3}: checkout: moving from master to HEAD^ "],["r","6af1352 HEAD@{4}: master@{2}: updating HEAD "],["r","3869015 HEAD@{5}: HEAD^^: updating HEAD "],["r","0e3a4c9 HEAD@{6}: HEAD^: updating HEAD "],["r","6af1352 HEAD@{7}: commit: does master follow this new commit? "],["r","0e3a4c9 HEAD@{8}: commit: which version checked in? "],["r","61b1516 HEAD@{9}: commit (amend): who does commit? "],["r","ca0c91c HEAD@{10}: commit (amend): who does commit? "],["r","c615828 HEAD@{11}: commit: who does commit? "],["r","3869015 HEAD@{12}: commit (initial): intialized. "],["r","bash-3.2$ git reflog show maste "]],"x":32,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","77333333377777777777777777777777777777777777777777777777777777777777777777777777"],"d",["a","7"],"d","d","d","d","d","d","d","d",["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d","d","d","d","d","d","d","d","d","d","d",["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305110079.04048,"i":1},{"y":25,"d":[[24,31,"r"]],"x":33,"t":1305110079.11252},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",7,24]],"x":1,"f":[["cp",2,1],["cp",11,10],["cp",1,23]],"t":1305110080.73631},{"y":25,"d":[["cp",10,0],["cp",11,1],["cp",12,2],["cp",13,3],["cp",14,4],["cp",15,5],["cp",16,6],["cp",17,7],["cp",18,8],["cp",19,9],["cp",20,10],["cp",21,11],["cp",22,12],["cp",23,13],[14,0,58,"1086811 master@{0}: merge 6630c7c: Merge made by recursive."],[15,0,44,"6af1352 master@{1}: master@{2}: updating HEAD"],[16,0,40,"3869015 master@{2}: HEAD^^: updating HEAD"],[17,0,60,"0e3a4c9 master@{3}: HEAD^: updating HEAD "],[18,0,62,"6af1352 master@{4}: commit: does master follow this new commit?"],[19,0,52,"0e3a4c9 master@{5}: commit: which version checked in?"],[20,0,51,"61b1516 master@{6}: commit (amend): who does commit?"],[21,1,51,"a0c91c master@{7}: commit (amend): who does commit?"],[22,0,47,"c615828 master@{8}: commit: who does commit? "],[23,0,48,"3869015 master@{9}: commit (initial): intialized."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",10,0],["cp",0,1],["cp",0,2],["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",23,13],["cp",0,23]],"t":1305110080.75018},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,48,"bash-3.2$ exit "],[24,["a"," "]]],"x":1,"f":[["cp",13,12],["cp",0,13],["cp",12,23]],"t":1305110083.59314}]} \ No newline at end of file diff --git a/html/part2/ch09-01-i-am-back.html b/html/part2/ch09-01-i-am-back.html new file mode 100644 index 000000000..2b4aec502 --- /dev/null +++ b/html/part2/ch09-01-i-am-back.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch09-01-i-am-back +json_file: ch09-01-i-am-back.json +--- diff --git a/html/part2/ch09-01-i-am-back.json b/html/part2/ch09-01-i-am-back.json new file mode 100644 index 000000000..c3625eb6e --- /dev/null +++ b/html/part2/ch09-01-i-am-back.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305111770.34188,"i":1},{"y":1,"d":[[0,10,39,"cd /path/to/my/workspace/demo/"]],"x":11,"t":1305111770.98285},{"y":2,"x":1,"t":1305111771.55074},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305111771.55099},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305111773.05516},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305111773.15891},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305111773.24702},{"y":2,"x":15,"t":1305111773.35214},{"y":2,"d":[[1,14,"s"]],"x":16,"t":1305111773.91879},{"y":2,"d":[[1,15,"t"]],"x":17,"t":1305111774.07077},{"y":2,"d":[[1,16,"a"]],"x":18,"t":1305111774.19876},{"y":2,"d":[[1,17,"t"]],"x":19,"t":1305111774.29475},{"y":2,"d":[[1,18,"u"]],"x":20,"t":1305111774.48688},{"y":2,"d":[[1,19,"s"]],"x":21,"t":1305111774.62318},{"y":2,"x":22,"t":1305111775.15232},{"y":2,"d":[[1,21,"-"]],"x":23,"t":1305111775.31078},{"y":2,"d":[[1,22,"s"]],"x":24,"t":1305111775.39872},{"y":2,"x":25,"t":1305111775.5028},{"y":2,"d":[[1,24,"-"]],"x":26,"t":1305111775.62266},{"y":2,"d":[[1,25,"b"]],"x":27,"t":1305111775.7427},{"y":3,"x":1,"t":1305111775.95077},{"y":4,"d":[[2,0,8,"## master"],[3,0,8,"bash-3.2$"]],"x":11,"f":[[2,3,8,["a","2"]]],"t":1305111775.96029},{"y":4,"d":[[3,10,"g"]],"x":12,"t":1305111778.26295},{"y":4,"d":[[3,11,"i"]],"x":13,"t":1305111778.35056},{"y":4,"d":[[3,12,"t"]],"x":14,"t":1305111778.47066},{"y":4,"x":15,"t":1305111778.56683},{"y":4,"d":[[3,14,"l"]],"x":16,"t":1305111779.31037},{"y":4,"d":[[3,15,"o"]],"x":17,"t":1305111779.49433},{"y":4,"d":[[3,16,"g"]],"x":18,"t":1305111779.57453},{"y":4,"x":19,"t":1305111779.65431},{"y":4,"d":[[3,18,"-"]],"x":20,"t":1305111779.79829},{"y":4,"d":[[3,19,"-"]],"x":21,"t":1305111779.98263},{"y":4,"d":[[3,20,"g"]],"x":22,"t":1305111780.04647},{"y":4,"d":[[3,21,"r"]],"x":23,"t":1305111780.20658},{"y":4,"d":[[3,22,"a"]],"x":24,"t":1305111780.31055},{"y":4,"d":[[3,23,"p"]],"x":25,"t":1305111780.41451},{"y":4,"d":[[3,24,"h"]],"x":26,"t":1305111780.57461},{"y":4,"x":27,"t":1305111781.11868},{"y":4,"d":[[3,26,"-"]],"x":28,"t":1305111781.27041},{"y":4,"d":[[3,27,"-"]],"x":29,"t":1305111781.46266},{"y":4,"d":[[3,28,"o"]],"x":30,"t":1305111781.97442},{"y":4,"d":[[3,29,"n"]],"x":31,"t":1305111782.14244},{"y":4,"d":[[3,30,"e"]],"x":32,"t":1305111782.22369},{"y":4,"d":[[3,31,"l"]],"x":33,"t":1305111782.31857},{"y":4,"d":[[3,32,"i"]],"x":34,"t":1305111782.44616},{"y":4,"d":[[3,33,"n"]],"x":35,"t":1305111782.57435},{"y":4,"d":[[3,34,"e"]],"x":36,"t":1305111782.73425},{"y":4,"x":37,"t":1305111783.2622},{"y":5,"x":1,"t":1305111783.99822},{"y":13,"d":[[4,0,33,"* 1086811 Merge commit '6630c7c'"],[5,0,1,"|\\"],[6,0,40,"| * 6630c7c commit in detached HEAD mode."],[7,0,46,"* | 6af1352 does master follow this new commit?"],[8,0,1,"|/"],[9,0,34,"* 0e3a4c9 which version checked in?"],[10,0,25,"* 61b1516 who does commit?"],[11,0,20,"* 3869015 intialized."],[12,0,8,"bash-3.2$"]],"x":11,"f":[[4,4,10,["a","3"]],[5,0,1,"12"],[6,0,10,"17773333333"],[7,2,10,"273333333"],[8,0,1,["a","2"]],[9,2,8,["a","3"]],["cp",9,10],["cp",9,11]],"t":1305111784.01278},{"y":13,"d":[[12,10,"g"]],"x":12,"t":1305111788.06217},{"y":13,"d":[[12,11,"i"]],"x":13,"t":1305111788.13425},{"y":13,"d":[[12,12,"t"]],"x":14,"t":1305111788.26203},{"y":13,"x":15,"t":1305111788.32665},{"y":13,"d":[[12,14,"s"]],"x":16,"t":1305111788.71018},{"y":13,"d":[[12,15,"t"]],"x":17,"t":1305111788.89504},{"y":13,"d":[[12,16,"a"]],"x":18,"t":1305111789.06196},{"y":13,"d":[[12,17,"s"]],"x":19,"t":1305111789.24594},{"y":13,"d":[[12,18,"h"]],"x":20,"t":1305111789.37413},{"y":13,"x":21,"t":1305111789.51808},{"y":13,"d":[[12,20,"l"]],"x":22,"t":1305111789.63808},{"y":13,"d":[[12,21,"i"]],"x":23,"t":1305111789.75789},{"y":13,"d":[[12,22,"s"]],"x":24,"t":1305111789.81414},{"y":13,"d":[[12,23,"t"]],"x":25,"t":1305111789.91799},{"y":14,"x":1,"t":1305111790.67805},{"y":14,"x":1,"t":1305111790.74501},{"y":15,"d":[[13,0,58,"stash@{0}: WIP on master: 0e3a4c9 which version checked in?"],[14,0,8,"bash-3.2$"]],"x":11,"t":1305111790.74946},{"y":15,"d":[[14,10,"g"]],"x":12,"t":1305111792.414},{"y":15,"d":[[14,11,"i"]],"x":13,"t":1305111792.494},{"y":15,"d":[[14,12,"t"]],"x":14,"t":1305111792.60654},{"y":15,"x":15,"t":1305111792.68607},{"y":15,"d":[[14,14,"r"]],"x":16,"t":1305111793.21388},{"y":15,"d":[[14,15,"e"]],"x":17,"t":1305111793.35768},{"y":15,"d":[[14,16,"f"]],"x":18,"t":1305111793.4858},{"y":15,"d":[[14,17,"l"]],"x":19,"t":1305111794.1577},{"y":15,"d":[[14,18,"o"]],"x":20,"t":1305111794.31771},{"y":15,"d":[[14,19,"g"]],"x":21,"t":1305111794.42176},{"y":15,"x":22,"t":1305111794.52584},{"y":15,"d":[[14,21,"s"]],"x":23,"t":1305111794.65374},{"y":15,"d":[[14,22,"h"]],"x":24,"t":1305111794.71791},{"y":15,"d":[[14,23,"o"]],"x":25,"t":1305111794.81387},{"y":15,"d":[[14,24,"w"]],"x":26,"t":1305111794.92586},{"y":15,"x":27,"t":1305111794.98969},{"y":15,"d":[[14,26,"m"]],"x":28,"t":1305111795.1896},{"y":15,"d":[[14,27,"a"]],"x":29,"t":1305111795.27777},{"y":15,"d":[[14,28,"s"]],"x":30,"t":1305111795.38991},{"y":15,"d":[[14,29,"t"]],"x":31,"t":1305111795.51763},{"y":15,"d":[[14,30,"e"]],"x":32,"t":1305111795.66986},{"y":15,"d":[[14,31,"r"]],"x":33,"t":1305111795.7419},{"y":15,"x":34,"t":1305111795.94248},{"y":15,"d":[[14,33,"-"]],"x":35,"t":1305111796.11755},{"y":15,"d":[[14,34,"1"]],"x":36,"t":1305111796.27776},{"y":16,"x":1,"t":1305111796.43754},{"y":17,"d":[[15,0,58,"1086811 master@{0}: merge 6630c7c: Merge made by recursive."],[16,0,8,"bash-3.2$"]],"x":11,"f":[[15,0,6,["a","3"]]],"t":1305111796.44879},{"y":17,"d":[[16,10,"g"]],"x":12,"t":1305111799.49349},{"y":17,"d":[[16,11,"i"]],"x":13,"t":1305111799.58148},{"y":17,"d":[[16,12,"t"]],"x":14,"t":1305111799.70135},{"y":17,"x":15,"t":1305111799.77347},{"y":17,"d":[[16,14,"s"]],"x":16,"t":1305111800.08543},{"y":17,"d":[[16,15,"t"]],"x":17,"t":1305111800.24555},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/demo/ "],["r","bash-3.2$ git status -s -b "],["r","## master "],["r","bash-3.2$ git log --graph --oneline "],["r","* 1086811 Merge commit '6630c7c' "],["r","|\\ "],["r","| * 6630c7c commit in detached HEAD mode. "],["r","* | 6af1352 does master follow this new commit? "],["r","|/ "],["r","* 0e3a4c9 which version checked in? "],["r","* 61b1516 who does commit? "],["r","* 3869015 intialized. "],["r","bash-3.2$ git stash list "],["r","stash@{0}: WIP on master: 0e3a4c9 which version checked in? "],["r","bash-3.2$ git reflog show master -1 "],["r","1086811 master@{0}: merge 6630c7c: Merge made by recursive. "],["r","bash-3.2$ git sta "],["a"," "],"d","d","d","d","d","d","d"],"x":18,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":17,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d",["r","77722222277777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","77773333333777777777777777777777777777777777777777777777777777777777777777777777"],["r","12777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","17773333333777777777777777777777777777777777777777777777777777777777777777777777"],["r","77273333333777777777777777777777777777777777777777777777777777777777777777777777"],["r","22777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","77333333377777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"],"d","d",["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305111800.39771,"i":1},{"y":17,"d":[[16,17,"s"]],"x":19,"t":1305111800.58171},{"y":17,"d":[[16,18,"h"]],"x":20,"t":1305111800.70955},{"y":17,"x":21,"t":1305111801.11765},{"y":17,"d":[[16,20,"p"]],"x":22,"t":1305111801.46939},{"y":17,"d":[[16,21,"o"]],"x":23,"t":1305111801.58151},{"y":17,"d":[[16,22,"p"]],"x":24,"t":1305111801.78151},{"y":18,"x":1,"t":1305111802.14932},{"y":19,"d":[[17,0,17,"# On branch master"]],"x":1,"t":1305111802.6486},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",14,8],["cp",15,9],["cp",16,10],["cp",17,11],[12,0,25,"# Changes to be committed:"],[13,0,58,"# (use \"git reset HEAD ...\" to unstage) "],[14,0,34,"# "],[15,0,58,"# new file: a/b/c/hello.txt "],["cp",14,16],[17,2,31,"Changes not staged for commit:"],[18,0,61,"# (use \"git add ...\" to update what will be committed)"],[19,0,76,"# (use \"git checkout -- ...\" to discard changes in working directory)"],["cp",14,20],[21,0,"#"],[21,8,30,"modified: welcome.txt"],["cp",14,22],[23,0,64,"Dropped refs/stash@{0} (f7ec48f2f00a23f5d265baa10c8b5f73ec97112a)"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",3,4],["cp",3,5],["cp",12,6],["cp",6,7],["cp",6,8],["cp",15,9],["cp",6,10],["cp",6,11],[15,0,34,"77777777222222222222222222222222222"],[21,8,30,["a","1"]]],"t":1305111802.67102},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111810.86132},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111810.96552},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111811.07699},{"y":25,"x":15,"t":1305111811.15694},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305111811.30887},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305111811.46888},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305111811.62911},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305111811.70899},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305111811.82098},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305111811.90093},{"y":25,"x":22,"t":1305111812.06897},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305111812.1887},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305111812.28473},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",13,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",13,19],["cp",21,20],["cp",13,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",6,5],["cp",9,8],["cp",5,9],["cp",15,14],["cp",5,15],["cp",21,20],["cp",5,21]],"t":1305111812.62318},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",16,14],["cp",17,15],["cp",18,16],["cp",11,17],["cp",20,18],["cp",22,20],["cp",23,21],[22,0,64,"A a/b/c/hello.txt "],[23,0,22," M welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",0,1],["cp",5,3],["cp",3,4],["cp",8,6],["cp",3,8],["cp",14,12],["cp",3,14],["cp",20,18],["cp",3,20],[22,0,"2"],[23,1,"1"]],"t":1305111812.62866},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111817.46866},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111817.58044},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111817.66898},{"y":25,"x":15,"t":1305111817.74872},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305111817.9244},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305111818.00447},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305111818.15652},{"y":25,"d":[[24,17,"m"]],"x":19,"t":1305111818.73245},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305111818.94055},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305111819.03674},{"y":25,"x":22,"t":1305111819.1405},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305111819.32459},{"y":25,"d":[[24,22,"m"]],"x":24,"t":1305111819.5805},{"y":25,"x":25,"t":1305111819.78065},{"y":25,"d":[[24,24,"\""]],"x":26,"t":1305111820.26983},{"y":25,"d":[[24,25,"a"]],"x":27,"t":1305111822.1807},{"y":25,"d":[[24,26,"d"]],"x":28,"t":1305111822.37293},{"y":25,"d":[[24,27,"d"]],"x":29,"t":1305111822.53231},{"y":25,"x":30,"t":1305111822.62855},{"y":25,"d":[[24,29,"n"]],"x":31,"t":1305111822.7325},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305111822.8283},{"y":25,"d":[[24,31,"w"]],"x":33,"t":1305111822.94877},{"y":25,"x":34,"t":1305111823.21232},{"y":25,"d":[[24,33,"f"]],"x":35,"t":1305111823.42034},{"y":25,"d":[[24,34,"i"]],"x":36,"t":1305111823.47649},{"y":25,"d":[[24,35,"l"]],"x":37,"t":1305111823.58817},{"y":25,"d":[[24,36,"e"]],"x":38,"t":1305111823.70828},{"y":25,"d":[[24,37,":"]],"x":39,"t":1305111825.26819},{"y":25,"x":40,"t":1305111825.44423},{"y":25,"d":[[24,39,"a"]],"x":41,"t":1305111825.8043},{"y":25,"d":[[24,40,"/"]],"x":42,"t":1305111825.9162},{"y":25,"d":[[24,41,"b"]],"x":43,"t":1305111826.08422},{"y":25,"d":[[24,42,"/"]],"x":44,"t":1305111826.16407},{"y":25,"d":[[24,43,"c"]],"x":45,"t":1305111826.36422},{"y":25,"d":[[24,44,"/"]],"x":46,"t":1305111826.78809},{"y":25,"d":[[24,45,"h"]],"x":47,"t":1305111827.88428},{"y":25,"d":[[24,46,"e"]],"x":48,"t":1305111827.9802},{"y":25,"d":[[24,47,"l"]],"x":49,"t":1305111828.08435},{"y":25,"d":[[24,48,"l"]],"x":50,"t":1305111828.24382},{"y":25,"d":[[24,49,"o"]],"x":51,"t":1305111828.39615},{"y":25,"d":[[24,50,"."]],"x":52,"t":1305111828.55591},{"y":25,"d":[[24,51,"t"]],"x":53,"t":1305111828.61202},{"y":25,"d":[[24,52,"x"]],"x":54,"t":1305111828.74008},{"y":25,"d":[[24,53,"t"]],"x":55,"t":1305111828.8521},{"y":25,"d":[[24,54,","]],"x":56,"t":1305111829.05211},{"y":25,"x":57,"t":1305111829.21196},{"y":25,"d":[[24,56,"b"]],"x":58,"t":1305111830.47601},{"y":25,"d":[[24,57,"u"]],"x":59,"t":1305111830.59607},{"y":25,"d":[[24,58,"t"]],"x":60,"t":1305111830.73975},{"y":25,"x":61,"t":1305111830.86791},{"y":25,"d":[[24,60,"l"]],"x":62,"t":1305111831.02781},{"y":25,"d":[[24,61,"i"]],"x":63,"t":1305111831.19628},{"y":25,"d":[[24,61," "]],"x":62,"t":1305111831.74765},{"y":25,"d":[[24,61,"e"]],"x":63,"t":1305111831.85982},{"y":25,"d":[[24,62,"a"]],"x":64,"t":1305111832.01169},{"y":25,"d":[[24,63,"v"]],"x":65,"t":1305111832.13984},{"y":25,"d":[[24,64,"e"]],"x":66,"t":1305111832.3158},{"y":25,"x":67,"t":1305111832.49974},{"y":25,"d":[[24,66,"w"]],"x":68,"t":1305111833.49183},{"y":25,"d":[[24,67,"e"]],"x":69,"t":1305111833.64384},{"y":25,"d":[[24,68,"l"]],"x":70,"t":1305111833.77967},{"y":25,"d":[[24,69,"c"]],"x":71,"t":1305111833.95577},{"y":25,"d":[[24,70,"o"]],"x":72,"t":1305111834.05192},{"y":25,"d":[[24,71,"m"]],"x":73,"t":1305111834.20373},{"y":25,"d":[[24,72,"e"]],"x":74,"t":1305111834.30791},{"y":25,"d":[[24,73,"."]],"x":75,"t":1305111834.43561},{"y":25,"d":[[24,74,"t"]],"x":76,"t":1305111834.53983},{"y":25,"d":[[24,75,"x"]],"x":77,"t":1305111834.67577},{"y":25,"d":[[24,76,"t"]],"x":78,"t":1305111834.77978},{"y":25,"x":1,"t":1305111834.9076},{"y":25,"d":[[24,0,"a"]],"x":2,"t":1305111835.0837},{"y":25,"d":[[24,1,"l"]],"x":3,"t":1305111835.1812},{"y":25,"d":[[24,2,"o"]],"x":4,"t":1305111835.34771},{"y":25,"d":[[24,3,"n"]],"x":5,"t":1305111835.46781},{"y":25,"d":[[24,4,"e"]],"x":6,"t":1305111835.56363},{"d":[["r","* 0e3a4c9 which version checked in? "],["r","* 61b1516 who does commit? "],["r","* 3869015 intialized. "],["r","bash-3.2$ git stash list "],["r","stash@{0}: WIP on master: 0e3a4c9 which version checked in? "],["r","bash-3.2$ git reflog show master -1 "],["r","1086811 master@{0}: merge 6630c7c: Merge made by recursive. "],["r","bash-3.2$ git stash pop "],["r","# On branch master "],["r","# Changes to be committed: "],["r","# (use \"git reset HEAD ...\" to unstage) "],["r","# "],["r","# new file: a/b/c/hello.txt "],["r","# "],["r","# Changes not staged for commit: "],["r","# (use \"git add ...\" to update what will be committed) "],["r","# (use \"git checkout -- ...\" to discard changes in working directory) "],["r","# "],["r","# modified: welcome.txt "],["r","# "],["r","Dropped refs/stash@{0} (f7ec48f2f00a23f5d265baa10c8b5f73ec97112a) "],["r","bash-3.2$ git status -s "],["r","A a/b/c/hello.txt "],["r"," M welcome.txt "],["r","alone..2$ git commit -m \"add new file: a/b/c/hello.txt, but leave welcome.txt "]],"x":7,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","77333333377777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"],"d","d",["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","77777777222222222222222222222222222777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","77777777111111111111111111111117777777777777777777777777777777777777777777777777"],["a","7"],"d","d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305111835.6917,"i":1},{"y":25,"d":[[24,6,"\""]],"x":8,"t":1305111836.14778},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",10,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",10,16],["cp",18,17],["cp",10,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",6,5],["cp",2,6],["cp",12,11],["cp",2,12],["cp",18,17],["cp",2,18],["cp",22,21],["cp",23,22],["cp",2,23]],"t":1305111836.32363},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",9,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",9,15],["cp",17,16],["cp",9,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,76,"[master 0b4861c] add new file: a/b/c/hello.txt, but leave welcome.txt alone. "]],"x":1,"f":[["cp",2,1],["cp",5,4],["cp",1,5],["cp",11,10],["cp",1,11],["cp",17,16],["cp",1,17],["cp",21,20],["cp",22,21],["cp",1,22]],"t":1305111836.63397},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",12,10],["cp",13,11],["cp",14,12],["cp",7,13],["cp",16,14],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,76," 1 files changed, 2 insertions(+), 0 deletions(-) "],[23,0,75," create mode 100644 a/b/c/hello.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",4,2],["cp",0,4],["cp",10,8],["cp",0,10],["cp",16,14],["cp",0,16],["cp",20,18],["cp",21,19],["cp",0,20],["cp",0,21]],"t":1305111836.63518},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111837.97161},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111838.05161},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111838.13173},{"y":25,"x":15,"t":1305111838.20346},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305111838.2916},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305111838.40345},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305111838.53164},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305111838.6036},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305111838.6834},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305111838.75538},{"y":25,"x":22,"t":1305111838.88353},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305111838.97146},{"y":25,"d":[["cp",17,24]],"x":24,"t":1305111839.07542},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",6,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",6,12],["cp",14,13],["cp",6,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",16,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,2],["cp",8,7],["cp",0,8],["cp",14,13],["cp",0,14],["cp",18,17],["cp",19,18],["cp",0,19]],"t":1305111839.17995},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",5,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",5,11],["cp",13,12],["cp",5,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",15,22],["cp",17,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",7,6],["cp",1,7],["cp",13,12],["cp",1,13],["cp",17,16],["cp",18,17],["cp",1,18],["cp",17,23]],"t":1305111839.19465},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111842.21937},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111842.30743},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111842.42742},{"y":25,"x":15,"t":1305111842.48331},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305111844.33938},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305111844.4673},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305111844.62731},{"y":25,"d":[[24,17,"s"]],"x":19,"t":1305111845.09932},{"y":25,"d":[[24,18,"h"]],"x":20,"t":1305111845.20315},{"y":25,"x":21,"t":1305111845.33139},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305111845.59499},{"y":25,"d":[[24,21,"i"]],"x":23,"t":1305111845.73122},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305111845.76319},{"y":25,"d":[[24,23,"t"]],"x":25,"t":1305111845.85919},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",4,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",4,10],["cp",12,11],["cp",4,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",14,21],["cp",16,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",6,5],["cp",0,6],["cp",12,11],["cp",0,12],["cp",16,15],["cp",17,16],["cp",0,17],["cp",16,22],["cp",0,23]],"t":1305111845.99514},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305111846.05468},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111846.78731},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111846.8674},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111846.98028},{"y":25,"x":15,"t":1305111847.07541},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305111850.05118},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305111850.20305},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305111850.33891},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305111850.47466},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305111850.64274},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305111850.73091},{"y":25,"x":22,"t":1305111850.90707},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305111851.10667},{"y":25,"d":[["cp",14,24]],"x":24,"t":1305111851.36288},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",3,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",3,9],["cp",11,10],["cp",3,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",13,20],["cp",15,21],["cp",23,22],["cp",13,23],[24,["a"," "]]],"x":1,"f":[["cp",5,4],["cp",0,5],["cp",11,10],["cp",0,11],["cp",15,14],["cp",16,15],["cp",0,16],["cp",15,21],["cp",0,22]],"t":1305111851.79482},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",2,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",2,8],["cp",10,9],["cp",2,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",12,19],["cp",14,20],["cp",22,21],["cp",12,22],["cp",14,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,3],["cp",0,4],["cp",10,9],["cp",0,10],["cp",14,13],["cp",15,14],["cp",0,15],["cp",14,20],["cp",0,21],["cp",14,23]],"t":1305111851.80355},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111852.54673},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111852.62688},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111852.77064},{"y":25,"x":15,"t":1305111852.82675},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305111854.01874},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305111854.17899},{"y":25,"d":[[24,16,"s"]],"x":18,"t":1305111854.31455},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305111854.39455},{"y":25,"d":[[24,18,"t"]],"x":20,"t":1305111854.4745},{"y":25,"x":21,"t":1305111854.58666},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305111854.74661},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305111854.93214},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305111855.05068},{"y":25,"d":[[24,23,"o"]],"x":25,"t":1305111855.16264},{"y":25,"d":[[24,24,"f"]],"x":26,"t":1305111855.60269},{"y":25,"d":[[24,25,"t"]],"x":27,"t":1305111855.87481},{"y":25,"x":28,"t":1305111855.99477},{"y":25,"d":[[24,27,"H"]],"x":29,"t":1305111856.29872},{"y":25,"d":[[24,28,"E"]],"x":30,"t":1305111856.41849},{"y":25,"d":[[24,29,"A"]],"x":31,"t":1305111856.57863},{"y":25,"d":[[24,30,"D"]],"x":32,"t":1305111856.68256},{"y":25,"d":[[24,31,"^"]],"x":33,"t":1305111857.84348},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",1,7],["cp",9,8],["cp",1,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",11,18],["cp",13,19],["cp",21,20],["cp",11,21],["cp",13,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",0,3],["cp",9,8],["cp",0,9],["cp",13,12],["cp",14,13],["cp",0,14],["cp",13,19],["cp",0,20],["cp",13,22],["cp",0,23]],"t":1305111859.39485},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305111859.406},{"y":25,"d":[["cp",23,24]],"x":11,"t":1305111862.81032},{"y":25,"d":[[24,10,31,"/ "]],"x":12,"t":1305111863.01028},{"y":25,"d":[[24,11,"l"]],"x":13,"t":1305111863.23443},{"y":25,"d":[[24,12,"o"]],"x":14,"t":1305111863.43418},{"y":25,"d":[[24,13,"g"]],"x":15,"t":1305111863.57013},{"y":25,"d":[[24,10,34,"git reflog show master -1"]],"x":11,"t":1305111863.6824},{"y":25,"d":[[24,14,34,"log --graph --oneline"]],"x":11,"t":1305111864.96218},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",8,7],["cp",0,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",10,17],["cp",12,18],["cp",20,19],["cp",10,20],["cp",12,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,2],["cp",8,7],["cp",0,8],["cp",12,11],["cp",13,12],["cp",0,13],["cp",12,18],["cp",0,19],["cp",12,21],["cp",0,22]],"t":1305111865.82599},{"y":25,"d":[["cp",9,1],["cp",10,2],["cp",11,3],["cp",12,4],["cp",13,5],["cp",14,6],["cp",15,7],["cp",16,8],["cp",2,9],["cp",4,10],["cp",19,11],["cp",2,12],["cp",4,13],["cp",22,14],["cp",23,15],[16,0,34,"* 1086811 Merge commit '6630c7c' "],[17,0,22,"|\\ "],[18,0,40,"| * 6630c7c commit in detached HEAD mode."],[19,0,46,"* | 6af1352 does master follow this new commit?"],[20,0,22,"|/ "],[21,0,34,"* 0e3a4c9 which version checked in?"],[22,0,31,"* 61b1516 who does commit? "],[23,0,34,"* 3869015 intialized. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,1],["cp",11,3],["cp",12,4],["cp",0,7],["cp",4,10],["cp",0,11],["cp",0,12],["cp",4,13],[16,4,10,["a","3"]],[17,0,1,"12"],[18,0,10,"17773333333"],[19,2,10,"273333333"],[20,0,1,["a","2"]],[21,1,8,"73333333"],["cp",21,22],["cp",21,23]],"t":1305111865.83848},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111870.3058},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111870.40185},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111870.53},{"y":25,"x":15,"t":1305111870.6098},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305111872.62607},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305111872.77779},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305111872.91379},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305111873.19364},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305111873.36966},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305111873.45083},{"y":25,"x":22,"t":1305111873.60167},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305111873.68986},{"y":25,"d":[["cp",2,24]],"x":24,"t":1305111873.80997},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",1,8],["cp",3,9],["cp",11,10],["cp",1,11],["cp",3,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",1,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",4,3],["cp",0,4],["cp",3,9],["cp",0,10],["cp",3,12],["cp",0,13],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",0,23]],"t":1305111873.96157},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",1,7],["cp",10,8],["cp",6,9],["cp",1,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",6,21],["cp",0,22],["cp",1,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",2,3],["cp",1,7],["cp",2,9],["cp",1,10],["cp",2,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",18,19],["cp",2,21],["cp",0,22],["cp",1,23]],"t":1305111873.97105},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111875.12175},{"d":[["r","A a/b/c/hello.txt "],["r"," M welcome.txt "],["r","alone.\"2$ git commit -m \"add new file: a/b/c/hello.txt, but leave welcome.txt "],["r","[master 0b4861c] add new file: a/b/c/hello.txt, but leave welcome.txt alone. "],["r"," 1 files changed, 2 insertions(+), 0 deletions(-) "],["r"," create mode 100644 a/b/c/hello.txt "],["r","bash-3.2$ git status -s "],["r"," M welcome.txt "],["r","bash-3.2$ git stash list "],["r","bash-3.2$ git status -s "],["r"," M welcome.txt "],["r","bash-3.2$ git reset --soft HEAD^ "],["r","bash-3.2$ git log --graph --oneline "],["r","* 1086811 Merge commit '6630c7c' "],["r","|\\ "],["r","| * 6630c7c commit in detached HEAD mode. "],["r","* | 6af1352 does master follow this new commit? "],["r","|/ "],["r","* 0e3a4c9 which version checked in? "],["r","* 61b1516 who does commit? "],["r","* 3869015 intialized. "],["r","bash-3.2$ git status -s "],["r","A a/b/c/hello.txt "],["r"," M welcome.txt "],["r","bash-3.2$ gi "]],"x":13,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","77773333333777777777777777777777777777777777777777777777777777777777777777777777"],["r","12777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","17773333333777777777777777777777777777777777777777777777777777777777777777777777"],["r","77273333333777777777777777777777777777777777777777777777777777777777777777777777"],["r","22777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","77333333377777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"],["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305111875.20173,"i":1},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111875.32984},{"y":25,"x":15,"t":1305111875.39348},{"y":25,"d":[[24,14,"a"]],"x":16,"t":1305111876.75358},{"y":25,"d":[[24,15,"d"]],"x":17,"t":1305111876.92162},{"y":25,"d":[[24,16,"d"]],"x":18,"t":1305111877.07368},{"y":25,"x":19,"t":1305111877.1615},{"y":25,"d":[[24,18,"w"]],"x":20,"t":1305111877.31362},{"y":25,"d":[[24,19,"e"]],"x":21,"t":1305111877.46564},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305111877.60154},{"y":25,"d":[[24,21,28,"come.txt"]],"x":30,"t":1305111877.74733},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",8,7],["cp",5,8],["cp",0,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",5,20],["cp",22,21],["cp",0,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",0,6],["cp",1,7],["cp",0,9],["cp",1,10],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",1,20],["cp",22,21],["cp",0,22],["cp",1,23]],"t":1305111878.24958},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305111878.26138},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111879.37745},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111879.47359},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111879.56171},{"y":25,"x":15,"t":1305111879.64951},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305111879.74553},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305111879.8424},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305111879.97741},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305111880.04155},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305111880.15362},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305111880.23334},{"y":25,"x":22,"t":1305111880.38545},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305111880.49749},{"y":25,"d":[["cp",5,24]],"x":24,"t":1305111880.61731},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",4,7],["cp",5,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",4,19],["cp",21,20],["cp",5,21],["cp",23,22],["cp",4,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",6,5],["cp",0,6],["cp",5,8],["cp",0,9],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",0,19],["cp",21,20],["cp",5,21],["cp",0,22]],"t":1305111880.75326},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",2,5],["cp",3,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",2,17],["cp",20,18],["cp",3,19],["cp",22,20],["cp",2,21],["cp",18,22],[23,0,22,"M welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",5,3],["cp",0,5],["cp",3,6],["cp",0,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",14,15],["cp",0,17],["cp",20,18],["cp",3,19],["cp",0,20],["cp",0,21],["cp",18,22],["cp",18,23]],"t":1305111880.76254},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111883.04931},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111883.12912},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111883.28157},{"y":25,"x":15,"t":1305111883.65743},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305111884.29713},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305111884.44916},{"y":25,"d":[[24,16,"s"]],"x":18,"t":1305111884.60115},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305111884.65736},{"y":25,"d":[[24,18,"t"]],"x":20,"t":1305111884.75303},{"y":25,"x":21,"t":1305111884.86511},{"y":25,"d":[[24,20,"H"]],"x":22,"t":1305111885.27354},{"y":25,"d":[[24,21,"E"]],"x":23,"t":1305111885.34515},{"y":25,"d":[[24,22,"A"]],"x":24,"t":1305111885.50508},{"y":25,"d":[[24,23,"D"]],"x":25,"t":1305111885.62538},{"y":25,"x":26,"t":1305111886.04923},{"y":25,"d":[[24,25,"-"]],"x":27,"t":1305111886.57719},{"y":25,"d":[[24,26,"-"]],"x":28,"t":1305111886.75302},{"y":25,"x":29,"t":1305111886.905},{"y":25,"d":[[24,28,"a"]],"x":30,"t":1305111888.28887},{"y":25,"d":[[24,29,"/"]],"x":31,"t":1305111888.84907},{"y":25,"d":[[24,30,"b"]],"x":32,"t":1305111888.96078},{"y":25,"d":[[24,31,"/"]],"x":33,"t":1305111889.06493},{"y":25,"d":[[24,32,"c"]],"x":34,"t":1305111889.21686},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",1,4],["cp",2,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",1,16],["cp",18,17],["cp",2,18],["cp",20,19],["cp",1,20],["cp",17,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",0,3],["cp",2,5],["cp",0,6],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",0,16],["cp",18,17],["cp",2,18],["cp",0,19],["cp",17,21],["cp",0,23]],"t":1305111889.44882},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305111889.45697},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111890.44876},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111890.52101},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111890.63303},{"y":25,"x":15,"t":1305111890.69678},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305111890.80107},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305111890.91448},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305111891.04875},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305111891.13732},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305111891.23306},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305111891.31276},{"y":25,"x":22,"t":1305111891.46499},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305111891.58472},{"y":25,"d":[["cp",1,24]],"x":24,"t":1305111891.69687},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,3],["cp",1,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",0,15],["cp",17,16],["cp",1,17],["cp",19,18],["cp",0,19],["cp",16,20],["cp",22,21],["cp",23,22],["cp",0,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,2],["cp",1,4],["cp",0,5],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,15],["cp",17,16],["cp",1,17],["cp",0,18],["cp",16,20],["cp",0,22]],"t":1305111891.87301},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",1,13],["cp",16,14],["cp",2,15],["cp",18,16],["cp",1,17],["cp",14,18],["cp",21,19],["cp",22,20],["cp",1,21],["cp",19,22],[23,0,22,"?? a/ "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,1],["cp",4,2],["cp",0,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",10,11],["cp",0,13],["cp",16,14],["cp",2,15],["cp",0,16],["cp",0,17],["cp",14,18],["cp",14,19],["cp",0,20],["cp",0,21],["cp",14,22],[23,0,1,["a","1"]]],"t":1305111891.88074},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111894.35269},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111894.44055},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111894.55261},{"y":25,"x":15,"t":1305111894.63277},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305111894.81662},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305111894.93676},{"y":25,"d":[[24,16,"s"]],"x":18,"t":1305111895.07273},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305111895.15297},{"y":25,"d":[[24,18,"t"]],"x":20,"t":1305111895.23251},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",0,12],["cp",14,13],["cp",1,14],["cp",16,15],["cp",0,16],["cp",13,17],["cp",19,18],["cp",20,19],["cp",0,20],["cp",18,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,2],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",0,12],["cp",14,13],["cp",1,14],["cp",0,15],["cp",13,17],["cp",0,19],["cp",13,21],["cp",23,22],["cp",0,23]],"t":1305111895.65639},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",10,14],["cp",11,15],["cp",18,16],["cp",19,17],["cp",10,18],["cp",16,19],["cp",22,20],["cp",23,21],[22,0,28,"Unstaged changes after reset:"],[23,0,17,"M welcome.tx"]],"x":1,"f":[["cp",0,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",7,8],["cp",0,10],["cp",13,11],["cp",14,12],["cp",0,13],["cp",0,14],["cp",11,15],["cp",11,16],["cp",0,17],["cp",0,18],["cp",11,19],["cp",22,20],["cp",0,21],["cp",0,22]],"t":1305111895.66501},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305111895.9362},{"y":25,"d":[["cp",21,24]],"x":11,"t":1305111896.58444},{"y":25,"d":[["cp",10,24]],"x":11,"t":1305111896.74466},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",9,13],["cp",10,14],["cp",16,15],["cp",17,16],["cp",9,17],["cp",15,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",9,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,9],["cp",11,10],["cp",12,11],["cp",0,12],["cp",10,14],["cp",0,16],["cp",10,18],["cp",20,19],["cp",0,20]],"t":1305111897.20844},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",7,11],["cp",8,12],["cp",15,13],["cp",16,14],["cp",7,15],["cp",13,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",7,21],["cp",9,22],["cp",17,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",4,5],["cp",9,7],["cp",10,8],["cp",11,9],["cp",7,10],["cp",7,11],["cp",8,12],["cp",8,13],["cp",7,14],["cp",7,15],["cp",8,16],["cp",19,17],["cp",7,18],["cp",7,19],["cp",9,22],["cp",17,23]],"t":1305111897.21775},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111900.36847},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111900.47254},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111900.58452},{"y":25,"x":15,"t":1305111900.66419},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305111900.84028},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305111900.92056},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305111901.04051},{"y":25,"d":[[24,17,"c"]],"x":19,"t":1305111901.19262},{"y":25,"d":[[24,18,"k"]],"x":20,"t":1305111901.24859},{"y":25,"d":[[24,19,"o"]],"x":21,"t":1305111901.38433},{"y":25,"d":[[24,20,"u"]],"x":22,"t":1305111901.48139},{"y":25,"d":[[24,21,"t"]],"x":23,"t":1305111901.5443},{"y":25,"x":24,"t":1305111901.6483},{"y":25,"d":[[24,23,"-"]],"x":25,"t":1305111902.04833},{"y":25,"d":[[24,24,"-"]],"x":26,"t":1305111902.21646},{"y":25,"x":27,"t":1305111902.34435},{"d":[["r","|\\ "],["r","| * 6630c7c commit in detached HEAD mode. "],["r","* | 6af1352 does master follow this new commit? "],["r","|/ "],["r","* 0e3a4c9 which version checked in? "],["r","* 61b1516 who does commit? "],["r","* 3869015 intialized. "],["r","bash-3.2$ git status -s "],["r","A a/b/c/hello.txt "],["r"," M welcome.txt "],["r","bash-3.2$ git add welcome.txt "],["r","bash-3.2$ git status -s "],["r","A a/b/c/hello.txt "],["r","M welcome.txt "],["r","bash-3.2$ git reset HEAD -- a/b/c "],["r","bash-3.2$ git status -s "],["r","M welcome.txt "],["r","?? a/ "],["r","bash-3.2$ git reset "],["r","Unstaged changes after reset: "],["r","M welcome.txt "],["r","bash-3.2$ git status -s "],["r"," M welcome.txt "],["r","?? a/ "],["r","bash-3.2$ git checkout -- w "]],"x":28,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","12777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","17773333333777777777777777777777777777777777777777777777777777777777777777777777"],["r","77273333333777777777777777777777777777777777777777777777777777777777777777777777"],["r","22777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","77333333377777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"],["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d",["a","7"],"d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d",["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305111902.59246,"i":1},{"y":25,"d":[[24,27,"e"]],"x":29,"t":1305111902.73621},{"y":25,"d":[[24,28,"l"]],"x":30,"t":1305111902.8322},{"y":25,"d":[[24,29,"c"]],"x":31,"t":1305111902.98415},{"y":25,"d":[[24,30,"o"]],"x":32,"t":1305111903.07223},{"y":25,"d":[[24,31,"m"]],"x":33,"t":1305111903.22425},{"y":25,"d":[[24,32,"e"]],"x":34,"t":1305111903.34445},{"y":25,"d":[[24,33,36,".txt"]],"x":38,"t":1305111903.56101},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",6,10],["cp",7,11],["cp",13,12],["cp",14,13],["cp",6,14],["cp",12,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",6,20],["cp",8,21],["cp",16,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",7,6],["cp",8,7],["cp",9,8],["cp",6,9],["cp",7,11],["cp",6,13],["cp",7,15],["cp",17,16],["cp",6,17],["cp",8,21],["cp",16,22],["cp",6,23]],"t":1305111904.0002},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305111904.00824},{"y":25,"d":[["cp",23,24]],"x":11,"t":1305111906.00818},{"y":25,"d":[[24,10,36,"/ "]],"x":12,"t":1305111906.22392},{"y":25,"d":[[24,11,"-"]],"x":13,"t":1305111906.60792},{"y":25,"d":[[24,12,"s"]],"x":14,"t":1305111906.72934},{"y":25,"d":[["cp",6,24]],"x":11,"t":1305111906.82393},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",5,9],["cp",6,10],["cp",12,11],["cp",13,12],["cp",5,13],["cp",11,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",5,19],["cp",7,20],["cp",15,21],["cp",23,22],["cp",5,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",6,5],["cp",7,6],["cp",8,7],["cp",5,8],["cp",6,10],["cp",5,12],["cp",6,14],["cp",16,15],["cp",5,16],["cp",7,20],["cp",15,21],["cp",5,22]],"t":1305111907.28002},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",4,8],["cp",5,9],["cp",11,10],["cp",12,11],["cp",4,12],["cp",10,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",4,18],["cp",6,19],["cp",14,20],["cp",22,21],["cp",4,22],["cp",14,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",5,4],["cp",6,5],["cp",7,6],["cp",4,7],["cp",5,9],["cp",4,11],["cp",5,13],["cp",15,14],["cp",4,15],["cp",6,19],["cp",14,20],["cp",4,21],["cp",14,23]],"t":1305111907.28817},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111910.99996},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111911.09591},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111911.18382},{"y":25,"x":15,"t":1305111911.25566},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305111911.40801},{"y":25,"d":[[24,15,"l"]],"x":17,"t":1305111911.48791},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305111911.58373},{"y":25,"d":[[24,17,"a"]],"x":19,"t":1305111911.71964},{"y":25,"d":[[24,18,"n"]],"x":20,"t":1305111911.76012},{"y":25,"x":21,"t":1305111911.89575},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305111912.05578},{"y":25,"d":[[24,21,"n"]],"x":23,"t":1305111912.27157},{"y":25,"d":[[24,22,"d"]],"x":24,"t":1305111912.46359},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",3,7],["cp",4,8],["cp",10,9],["cp",11,10],["cp",3,11],["cp",9,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",3,17],["cp",5,18],["cp",13,19],["cp",21,20],["cp",3,21],["cp",13,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",4,3],["cp",5,4],["cp",6,5],["cp",3,6],["cp",4,8],["cp",3,10],["cp",4,12],["cp",14,13],["cp",3,14],["cp",5,18],["cp",13,19],["cp",3,20],["cp",13,22],["cp",3,23]],"t":1305111912.5758},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",2,6],["cp",3,7],["cp",9,8],["cp",10,9],["cp",2,10],["cp",8,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",2,16],["cp",4,17],["cp",12,18],["cp",20,19],["cp",2,20],["cp",12,21],["cp",23,22],[23,0,22,"Would remove a/ "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,2],["cp",4,3],["cp",5,4],["cp",2,5],["cp",3,7],["cp",2,9],["cp",3,11],["cp",13,12],["cp",2,13],["cp",4,17],["cp",12,18],["cp",2,19],["cp",12,21],["cp",2,22]],"t":1305111912.58411},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111914.07953},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111914.14387},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111914.27206},{"y":25,"x":15,"t":1305111914.29583},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305111914.56769},{"y":25,"d":[[24,15,"l"]],"x":17,"t":1305111914.70355},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305111914.77567},{"y":25,"d":[[24,17,"a"]],"x":19,"t":1305111914.91148},{"y":25,"d":[[24,18,"n"]],"x":20,"t":1305111914.9679},{"y":25,"x":21,"t":1305111915.05568},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305111915.23967},{"y":25,"d":[[24,21,"f"]],"x":23,"t":1305111915.36793},{"y":25,"d":[[24,22,"d"]],"x":24,"t":1305111915.50344},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",1,5],["cp",2,6],["cp",8,7],["cp",9,8],["cp",1,9],["cp",7,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",1,15],["cp",3,16],["cp",11,17],["cp",19,18],["cp",1,19],["cp",11,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",3,2],["cp",4,3],["cp",1,4],["cp",2,6],["cp",1,8],["cp",2,10],["cp",12,11],["cp",1,12],["cp",3,16],["cp",11,17],["cp",1,18],["cp",11,20],["cp",1,21]],"t":1305111915.71141},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",1,5],["cp",7,6],["cp",8,7],["cp",0,8],["cp",6,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",0,14],["cp",2,15],["cp",10,16],["cp",18,17],["cp",0,18],["cp",10,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,22,"Removing a/ "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,3],["cp",1,5],["cp",0,7],["cp",1,9],["cp",11,10],["cp",0,11],["cp",2,15],["cp",10,16],["cp",0,17],["cp",10,19],["cp",0,20]],"t":1305111915.7264},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305111918.13565},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305111918.21559},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305111918.31953},{"y":25,"x":15,"t":1305111918.37525},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305111918.50342},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305111918.61535},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305111918.74354},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305111918.8319},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305111918.90331},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305111919.00733},{"y":25,"x":22,"t":1305111919.1755},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305111919.26319},{"y":25,"d":[["cp",0,24]],"x":24,"t":1305111919.40731},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",6,5],["cp",7,6],["cp",3,7],["cp",5,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",3,13],["cp",1,14],["cp",9,15],["cp",17,16],["cp",3,17],["cp",9,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",3,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,4],["cp",2,6],["cp",0,8],["cp",10,9],["cp",2,10],["cp",1,14],["cp",9,15],["cp",2,16],["cp",9,18],["cp",2,19]],"t":1305111919.48729},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305111919.49621},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",2,6],["cp",4,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",2,12],["cp",0,13],["cp",8,14],["cp",16,15],["cp",2,16],["cp",8,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",2,22],[23,10,22,"exit "],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",4,3],["cp",1,5],["cp",3,7],["cp",9,8],["cp",1,9],["cp",0,13],["cp",8,14],["cp",1,15],["cp",8,17],["cp",1,18]],"t":1305111926.08731}]} \ No newline at end of file diff --git a/html/part2/ch09-02-inside-stash.html b/html/part2/ch09-02-inside-stash.html new file mode 100644 index 000000000..0f37e9fac --- /dev/null +++ b/html/part2/ch09-02-inside-stash.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch09-02-inside-stash +json_file: ch09-02-inside-stash.json +--- diff --git a/html/part2/ch09-02-inside-stash.json b/html/part2/ch09-02-inside-stash.json new file mode 100644 index 000000000..e9d1556d9 --- /dev/null +++ b/html/part2/ch09-02-inside-stash.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305112776.36979,"i":1},{"y":1,"d":[[0,10,39,"cd /path/to/my/workspace/demo/"]],"x":11,"t":1305112777.14075},{"y":2,"x":1,"t":1305112777.58867},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305112777.58881},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305112778.20453},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305112778.30868},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305112778.41246},{"y":2,"x":15,"t":1305112778.49268},{"y":2,"d":[[1,14,"-"]],"x":16,"t":1305112778.76453},{"y":2,"d":[[1,15,"-"]],"x":17,"t":1305112778.97255},{"y":2,"d":[[1,16,"e"]],"x":18,"t":1305112779.09259},{"y":2,"d":[[1,17,"x"]],"x":19,"t":1305112779.27669},{"y":2,"d":[[1,18,"e"]],"x":20,"t":1305112779.43663},{"y":2,"d":[[1,19,"c"]],"x":21,"t":1305112779.61265},{"y":2,"d":[[1,20,"-"]],"x":22,"t":1305112779.74857},{"y":2,"d":[[1,21,"p"]],"x":23,"t":1305112779.96467},{"y":2,"d":[[1,22,"a"]],"x":24,"t":1305112780.05262},{"y":2,"d":[[1,23,"t"]],"x":25,"t":1305112780.17244},{"y":2,"d":[[1,24,"h"]],"x":26,"t":1305112780.25286},{"y":3,"x":1,"t":1305112780.50851},{"y":4,"d":[[2,0,31,"/opt/git/v1.7.5/libexec/git-core"],[3,0,8,"bash-3.2$"]],"x":11,"t":1305112780.51442},{"y":4,"d":[[3,10,"l"]],"x":12,"t":1305112781.62847},{"y":4,"d":[[3,11,"s"]],"x":13,"t":1305112781.71646},{"y":4,"x":14,"t":1305112781.80465},{"y":4,"d":[[3,13,"`"]],"x":15,"t":1305112782.02853},{"y":4,"d":[[3,14,"g"]],"x":16,"t":1305112782.33235},{"y":4,"d":[[3,15,"i"]],"x":17,"t":1305112782.39639},{"y":4,"d":[[3,16,"t"]],"x":18,"t":1305112782.53242},{"y":4,"x":19,"t":1305112783.10057},{"y":4,"d":[[3,18,"-"]],"x":20,"t":1305112783.24446},{"y":4,"d":[[3,19,"-"]],"x":21,"t":1305112783.42846},{"y":4,"d":[[3,20,"e"]],"x":22,"t":1305112783.63646},{"y":4,"d":[[3,21,"x"]],"x":23,"t":1305112783.82311},{"y":4,"d":[[3,22,"e"]],"x":24,"t":1305112783.94032},{"y":4,"d":[[3,23,"c"]],"x":25,"t":1305112784.14023},{"y":4,"d":[[3,24,"-"]],"x":26,"t":1305112784.23638},{"y":4,"d":[[3,25,"p"]],"x":27,"t":1305112784.46834},{"y":4,"d":[[3,26,"a"]],"x":28,"t":1305112784.55642},{"y":4,"d":[[3,27,"t"]],"x":29,"t":1305112784.7084},{"y":4,"d":[[3,28,"h"]],"x":30,"t":1305112784.74042},{"y":4,"d":[[3,29,"`"]],"x":31,"t":1305112785.16421},{"y":5,"x":1,"t":1305112786.16429},{"y":25,"d":[[0,0,39,"git-cvsimport git-merge-tree "],[0,48,56,"git-stage"],[1,0,35,"git-cvsserver git-mergetool"],[1,48,56,"git-stash"],[2,0,40,"git-daemon git-mergetool--lib"],[2,48,57,"git-status"],[3,0,31,"git-describe git-mktag"],[3,48,61,"git-stripspace"],[4,0,7,"git-diff"],[4,23,32,"git-mktree"],[4,48,60,"git-submodule"],[5,0,13,"git-diff-files"],[5,23,28,"git-mv"],[5,48,54,"git-svn"],[6,0,13,"git-diff-index"],[6,23,34,"git-name-rev"],[6,48,63,"git-symbolic-ref"],[7,0,12,"git-diff-tree"],[7,23,31,"git-notes"],[7,48,54,"git-tag"],[8,0,11,"git-difftool"],[8,23,38,"git-pack-objects"],[8,48,59,"git-tar-tree"],[9,0,40,"git-difftool--helper git-pack-redundant"],[9,48,62,"git-unpack-file"],[10,0,14,"git-fast-export"],[10,23,35,"git-pack-refs"],[10,48,65,"git-unpack-objects"],[11,0,14,"git-fast-import"],[11,23,38,"git-parse-remote"],[11,48,63,"git-update-index"],[12,0,8,"git-fetch"],[12,23,34,"git-patch-id"],[12,48,61,"git-update-ref"],[13,0,13,"git-fetch-pack"],[13,23,37,"git-peek-remote"],[13,48,69,"git-update-server-info"],[14,0,16,"git-filter-branch"],[14,23,31,"git-prune"],[14,48,65,"git-upload-archive"],[15,0,16,"git-fmt-merge-msg"],[15,23,38,"git-prune-packed"],[15,48,62,"git-upload-pack"],[16,0,15,"git-for-each-ref"],[16,23,30,"git-pull"],[16,48,54,"git-var"],[17,0,15,"git-format-patch"],[17,23,30,"git-push"],[17,48,62,"git-verify-pack"],[18,0,7,"git-fsck"],[18,23,37,"git-quiltimport"],[18,48,61,"git-verify-tag"],[19,0,15,"git-fsck-objects"],[19,23,35,"git-read-tree"],[19,48,62,"git-web--browse"],[20,0,5,"git-gc"],[20,23,32,"git-rebase"],[20,48,62,"git-whatchanged"],[21,0,61,"git-get-tar-commit-id git-rebase--interactive git-write-tree"],[22,0,7,"git-grep"],[22,23,38,"git-receive-pack"],[23,0,6,"git-gui"],[23,23,32,"git-reflog"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305112786.17718},{"y":25,"d":[[24,10,29,"ls `git --exec-path`"]],"x":11,"t":1305112787.42019},{"y":25,"x":30,"t":1305112787.75663},{"y":25,"x":31,"t":1305112787.94832},{"y":25,"x":32,"t":1305112788.10815},{"y":25,"d":[[24,31,"|"]],"x":33,"t":1305112788.52443},{"y":25,"x":34,"t":1305112788.63625},{"y":25,"d":[[24,33,"w"]],"x":35,"t":1305112788.85221},{"y":25,"d":[[24,34,"c"]],"x":36,"t":1305112789.06042},{"y":25,"x":37,"t":1305112789.23631},{"y":25,"d":[[24,36,"-"]],"x":38,"t":1305112789.33222},{"y":25,"d":[[24,37,"l"]],"x":39,"t":1305112789.56398},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305112789.78025},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,37," 154 "],[24,0,8,"bash-3.2$"]],"x":11,"t":1305112789.79473},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305112790.73244},{"y":25,"x":14,"t":1305112790.91609},{"y":25,"x":15,"t":1305112791.12417},{"y":25,"x":19,"t":1305112791.30803},{"y":25,"x":21,"t":1305112791.49208},{"y":25,"x":25,"t":1305112791.67586},{"y":25,"x":26,"t":1305112791.83597},{"y":25,"x":30,"t":1305112792.00404},{"y":25,"x":31,"t":1305112792.40391},{"y":25,"d":[[24,31,37,["a"," "]]],"x":30,"t":1305112792.71613},{"y":25,"x":31,"t":1305112792.86788},{"y":25,"d":[[24,30,"/"]],"x":32,"t":1305112793.06805},{"y":25,"d":[[24,31,"g"]],"x":33,"t":1305112793.49215},{"y":25,"d":[[24,32,"i"]],"x":34,"t":1305112793.56391},{"y":25,"d":[[24,33,"t"]],"x":35,"t":1305112793.65998},{"y":25,"d":[[24,34,"-"]],"x":36,"t":1305112793.82808},{"y":25,"d":[[24,35,"s"]],"x":37,"t":1305112793.94825},{"y":25,"d":[[24,36,"t"]],"x":38,"t":1305112794.13995},{"y":25,"d":[[24,37,"a"]],"x":39,"t":1305112794.34781},{"y":25,"d":[[24,38,"s"]],"x":40,"t":1305112794.53178},{"y":25,"d":[[24,39,"h"]],"x":41,"t":1305112794.61183},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305112794.83605},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,41,"/opt/git/v1.7.5/libexec/git-core/git-stash"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305112794.85282},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305112795.33969},{"y":25,"d":[[24,10,39,"s `git --exec-path`/git-stash "]],"x":11,"t":1305112795.58005},{"y":25,"d":[[24,10,38," `git --exec-path`/git-stash "]],"x":11,"t":1305112795.74787},{"y":25,"d":[[24,10,38,"f `git --exec-path`/git-stash"]],"x":12,"t":1305112795.96369},{"y":25,"d":[[24,11,39,"i `git --exec-path`/git-stash"]],"x":13,"t":1305112796.05244},{"y":25,"d":[[24,12,40,"l `git --exec-path`/git-stash"]],"x":14,"t":1305112796.13963},{"y":25,"d":[[24,13,41,"e `git --exec-path`/git-stash"]],"x":15,"t":1305112796.25182},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305112796.41969},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,31,"/opt/git/v1.7.5/libexec/git-core"],[23,42,77,": POSIX shell script text executable"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305112796.4303},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305112798.0839},{"y":25,"d":[[24,10,41,"`git --exec-path`/git-stash "]],"x":11,"t":1305112798.51589},{"y":25,"d":[[24,10,37,"h`git --exec-path`/git-stash"]],"x":12,"t":1305112798.77955},{"y":25,"d":[[24,11,38,"e`git --exec-path`/git-stash"]],"x":13,"t":1305112798.86822},{"y":25,"d":[[24,12,39,"a`git --exec-path`/git-stash"]],"x":14,"t":1305112799.0118},{"y":25,"d":[[24,13,40,"d`git --exec-path`/git-stash"]],"x":15,"t":1305112799.09959},{"y":25,"d":[[24,14,41," `git --exec-path`/git-stash"]],"x":16,"t":1305112799.25981},{"y":25,"d":[[24,15,42,"-`git --exec-path`/git-stash"]],"x":17,"t":1305112799.43586},{"y":25,"d":[[24,16,43,"2`git --exec-path`/git-stash"]],"x":18,"t":1305112799.61959},{"y":25,"d":[[24,17,44," `git --exec-path`/git-stash"]],"x":19,"t":1305112799.81172},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305112799.95581},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,77,"#!/bin/sh "],[23,0,44,"# Copyright (c) 2007, Nanako Shiraishi "],[24,0,8,"bash-3.2$"]],"x":11,"t":1305112799.96435},{"d":[["r","git-difftool--helper git-pack-redundant git-unpack-file "],["r","git-fast-export git-pack-refs git-unpack-objects "],["r","git-fast-import git-parse-remote git-update-index "],["r","git-fetch git-patch-id git-update-ref "],["r","git-fetch-pack git-peek-remote git-update-server-info "],["r","git-filter-branch git-prune git-upload-archive "],["r","git-fmt-merge-msg git-prune-packed git-upload-pack "],["r","git-for-each-ref git-pull git-var "],["r","git-format-patch git-push git-verify-pack "],["r","git-fsck git-quiltimport git-verify-tag "],["r","git-fsck-objects git-read-tree git-web--browse "],["r","git-gc git-rebase git-whatchanged "],["r","git-get-tar-commit-id git-rebase--interactive git-write-tree "],["r","git-grep git-receive-pack "],["r","git-gui git-reflog "],["r","bash-3.2$ ls `git --exec-path` | wc -l "],["r"," 154 "],["r","bash-3.2$ ls `git --exec-path`/git-stash "],["r","/opt/git/v1.7.5/libexec/git-core/git-stash "],["r","bash-3.2$ file `git --exec-path`/git-stash "],["r","/opt/git/v1.7.5/libexec/git-core/git-stash: POSIX shell script text executable "],["r","bash-3.2$ head -2 `git --exec-path`/git-stash "],["r","#!/bin/sh "],["r","# Copyright (c) 2007, Nanako Shiraishi "],["r","bash-3.2$ g "]],"x":12,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305112803.45956,"i":1},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112803.53161},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112803.61933},{"y":25,"x":15,"t":1305112803.65947},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305112803.90747},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305112804.11538},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305112804.29934},{"y":25,"d":[[24,17,"s"]],"x":19,"t":1305112804.51521},{"y":25,"d":[[24,18,"h"]],"x":20,"t":1305112804.64349},{"y":25,"x":21,"t":1305112804.8434},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305112805.42717},{"y":25,"d":[[24,21,"i"]],"x":23,"t":1305112805.54717},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305112805.67524},{"y":25,"d":[[24,23,"t"]],"x":25,"t":1305112805.80331},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305112807.25909},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305112807.62647},{"y":25,"d":[[24,10,"e"]],"x":12,"t":1305112810.26696},{"y":25,"d":[[24,11,"c"]],"x":13,"t":1305112810.47511},{"y":25,"d":[[24,12,"h"]],"x":14,"t":1305112810.55544},{"y":25,"d":[[24,13,"o"]],"x":15,"t":1305112810.691},{"y":25,"x":16,"t":1305112810.859},{"y":25,"d":[[24,15,"B"]],"x":17,"t":1305112811.37142},{"y":25,"d":[[24,16,"y"]],"x":18,"t":1305112811.54708},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305112811.65113},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305112812.38695},{"y":25,"d":[[24,19,"B"]],"x":21,"t":1305112812.77115},{"y":25,"d":[[24,20,"y"]],"x":22,"t":1305112812.92306},{"y":25,"d":[[24,21,"e"]],"x":23,"t":1305112813.05105},{"y":25,"d":[[24,22,"."]],"x":24,"t":1305112813.21115},{"y":25,"x":25,"t":1305112813.61088},{"y":25,"d":[[24,24,">"]],"x":26,"t":1305112814.25084},{"y":25,"d":[[24,25,">"]],"x":27,"t":1305112814.4029},{"y":25,"x":28,"t":1305112814.55482},{"y":25,"d":[[24,27,"w"]],"x":29,"t":1305112814.81994},{"y":25,"d":[[24,28,"e"]],"x":30,"t":1305112814.9792},{"y":25,"d":[[24,29,"l"]],"x":31,"t":1305112815.08284},{"y":25,"d":[[24,30,37,"come.txt"]],"x":40,"t":1305112815.27496},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305112815.83628},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305112815.83716},{"y":25,"d":[[24,10,"e"]],"x":12,"t":1305112817.91482},{"y":25,"d":[[24,11,"c"]],"x":13,"t":1305112818.11463},{"y":25,"d":[[24,12,"h"]],"x":14,"t":1305112818.17076},{"y":25,"d":[[24,13,"o"]],"x":15,"t":1305112818.28277},{"y":25,"x":16,"t":1305112818.37067},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305112818.51475},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305112818.58656},{"y":25,"d":[[24,17,"l"]],"x":19,"t":1305112818.70656},{"y":25,"d":[[24,18,"l"]],"x":20,"t":1305112818.87467},{"y":25,"d":[[24,19,"o"]],"x":21,"t":1305112819.03478},{"y":25,"d":[[24,20,"."]],"x":22,"t":1305112819.21887},{"y":25,"x":23,"t":1305112819.78663},{"y":25,"d":[[24,22,">"]],"x":24,"t":1305112820.09882},{"y":25,"x":25,"t":1305112820.25061},{"y":25,"d":[[24,24,"h"]],"x":26,"t":1305112820.54658},{"y":25,"d":[[24,25,"a"]],"x":27,"t":1305112820.83446},{"y":25,"d":[[24,26,"c"]],"x":28,"t":1305112821.00267},{"y":25,"d":[[24,27,"k"]],"x":29,"t":1305112821.09067},{"y":25,"d":[[24,28,"-"]],"x":30,"t":1305112821.34676},{"y":25,"d":[[24,29,"1"]],"x":31,"t":1305112821.49862},{"y":25,"d":[[24,30,"."]],"x":32,"t":1305112821.65864},{"y":25,"d":[[24,31,"t"]],"x":33,"t":1305112821.8105},{"y":25,"d":[[24,32,"x"]],"x":34,"t":1305112821.97065},{"y":25,"d":[[24,33,"t"]],"x":35,"t":1305112822.07454},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305112822.2106},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305112822.21139},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112822.51457},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112822.59458},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112822.68255},{"y":25,"x":15,"t":1305112822.7705},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305112822.94647},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305112823.11443},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305112823.27454},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305112823.35466},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305112823.45915},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305112823.53841},{"y":25,"x":22,"t":1305112823.69836},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305112823.79461},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305112823.89837},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305112824.05044},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,33," M welcome.txt "],[23,0,22,"?? hack-1.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[[22,1,"1"],[23,0,1,["a","1"]]],"t":1305112824.06189},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112826.01822},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112826.0903},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112826.19413},{"y":25,"x":15,"t":1305112826.31268},{"y":25,"d":[[24,14,"a"]],"x":16,"t":1305112826.40207},{"y":25,"d":[[24,15,"d"]],"x":17,"t":1305112826.57822},{"y":25,"d":[[24,16,"d"]],"x":18,"t":1305112826.73838},{"y":25,"x":19,"t":1305112826.84245},{"y":25,"d":[[24,18,"h"]],"x":20,"t":1305112827.22621},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305112827.55483},{"y":25,"d":[[24,20,27,"ck-1.txt"]],"x":29,"t":1305112827.79588},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",22,21],["cp",23,22],["cp",0,23]],"t":1305112828.42658},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305112828.43391},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112829.82636},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112829.90601},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112830.01008},{"y":25,"x":15,"t":1305112830.07432},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305112830.17795},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305112830.27426},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305112830.42631},{"d":[["r","git-for-each-ref git-pull git-var "],["r","git-format-patch git-push git-verify-pack "],["r","git-fsck git-quiltimport git-verify-tag "],["r","git-fsck-objects git-read-tree git-web--browse "],["r","git-gc git-rebase git-whatchanged "],["r","git-get-tar-commit-id git-rebase--interactive git-write-tree "],["r","git-grep git-receive-pack "],["r","git-gui git-reflog "],["r","bash-3.2$ ls `git --exec-path` | wc -l "],["r"," 154 "],["r","bash-3.2$ ls `git --exec-path`/git-stash "],["r","/opt/git/v1.7.5/libexec/git-core/git-stash "],["r","bash-3.2$ file `git --exec-path`/git-stash "],["r","/opt/git/v1.7.5/libexec/git-core/git-stash: POSIX shell script text executable "],["r","bash-3.2$ head -2 `git --exec-path`/git-stash "],["r","#!/bin/sh "],["r","# Copyright (c) 2007, Nanako Shiraishi "],["r","bash-3.2$ git stash list "],["r","bash-3.2$ echo Bye-Bye. >> welcome.txt "],["r","bash-3.2$ echo hello. > hack-1.txt "],["r","bash-3.2$ git status -s "],["r"," M welcome.txt "],["r","?? hack-1.txt "],["r","bash-3.2$ git add hack-1.txt "],["r","bash-3.2$ git stat "]],"x":19,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305112830.53019,"i":1},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305112830.65797},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305112830.73036},{"y":25,"x":22,"t":1305112830.86605},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305112830.97029},{"y":25,"d":[["cp",20,24]],"x":24,"t":1305112831.09022},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",19,23],[24,["a"," "]]],"x":1,"f":[["cp",21,20],["cp",22,21],["cp",0,22]],"t":1305112831.20198},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",17,21],[22,0,27,"A hack-1.txt "],["cp",18,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",20,18],["cp",21,19],["cp",0,20],["cp",0,21],[22,0,"2"],["cp",18,23]],"t":1305112831.21155},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112832.1302},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112832.21805},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112832.3301},{"y":25,"x":15,"t":1305112832.41012},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305112833.67394},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305112833.83426},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305112834.00202},{"y":25,"d":[[24,17,"s"]],"x":19,"t":1305112834.20979},{"y":25,"d":[[24,18,"h"]],"x":20,"t":1305112834.33781},{"y":25,"x":21,"t":1305112835.45779},{"y":25,"d":[[24,20,"s"]],"x":22,"t":1305112835.66599},{"y":25,"d":[[24,21,"a"]],"x":23,"t":1305112835.85006},{"y":25,"d":[[24,22,"v"]],"x":24,"t":1305112835.9621},{"y":25,"d":[[24,23,"e"]],"x":25,"t":1305112836.12976},{"y":25,"x":26,"t":1305112836.31379},{"y":25,"d":[[24,25,"\""]],"x":27,"t":1305112837.07472},{"y":25,"d":[[24,26,"h"]],"x":28,"t":1305112837.56163},{"y":25,"d":[[24,27,"a"]],"x":29,"t":1305112837.66583},{"y":25,"d":[[24,28,"c"]],"x":30,"t":1305112837.79377},{"y":25,"d":[[24,29,"k"]],"x":31,"t":1305112837.85801},{"y":25,"d":[[24,30,"-"]],"x":32,"t":1305112838.55463},{"y":25,"d":[[24,31,"1"]],"x":33,"t":1305112838.66577},{"y":25,"d":[[24,32,":"]],"x":34,"t":1305112839.03417},{"y":25,"x":35,"t":1305112839.72968},{"y":25,"d":[[24,34,"h"]],"x":36,"t":1305112840.40953},{"y":25,"d":[[24,35,"a"]],"x":37,"t":1305112840.47373},{"y":25,"d":[[24,36,"c"]],"x":38,"t":1305112840.63346},{"y":25,"d":[[24,37,"k"]],"x":39,"t":1305112840.68953},{"y":25,"d":[[24,38,"e"]],"x":40,"t":1305112840.81747},{"y":25,"d":[[24,39,"d"]],"x":41,"t":1305112840.97754},{"y":25,"x":42,"t":1305112841.14602},{"y":25,"d":[[24,41,"w"]],"x":43,"t":1305112841.36159},{"y":25,"d":[[24,42,"e"]],"x":44,"t":1305112841.48966},{"y":25,"d":[[24,43,"l"]],"x":45,"t":1305112841.62553},{"y":25,"d":[[24,44,"c"]],"x":46,"t":1305112841.72976},{"y":25,"d":[[24,45,"o"]],"x":47,"t":1305112841.83368},{"y":25,"d":[[24,46,"m"]],"x":48,"t":1305112841.99363},{"y":25,"d":[[24,47,"e"]],"x":49,"t":1305112842.07355},{"y":25,"d":[[24,48,"."]],"x":50,"t":1305112842.24139},{"y":25,"d":[[24,49,"t"]],"x":51,"t":1305112842.33738},{"y":25,"d":[[24,50,"x"]],"x":52,"t":1305112842.47363},{"y":25,"d":[[24,51,"t"]],"x":53,"t":1305112842.61758},{"y":25,"d":[[24,52,","]],"x":54,"t":1305112843.52266},{"y":25,"x":55,"t":1305112843.61743},{"y":25,"d":[[24,54,"n"]],"x":56,"t":1305112843.9214},{"y":25,"d":[[24,55,"e"]],"x":57,"t":1305112843.98569},{"y":25,"d":[[24,56,"w"]],"x":58,"t":1305112844.12941},{"y":25,"x":59,"t":1305112844.33772},{"y":25,"d":[[24,58,"f"]],"x":60,"t":1305112844.53758},{"y":25,"d":[[24,59,"i"]],"x":61,"t":1305112844.61759},{"y":25,"d":[[24,60,"l"]],"x":62,"t":1305112844.72123},{"y":25,"d":[[24,61,"e"]],"x":63,"t":1305112844.83335},{"y":25,"x":64,"t":1305112845.33098},{"y":25,"d":[[24,63,"h"]],"x":65,"t":1305112845.5215},{"y":25,"d":[[24,64,"a"]],"x":66,"t":1305112845.62558},{"y":25,"d":[[24,65,"c"]],"x":67,"t":1305112845.79346},{"y":25,"d":[[24,66,"k"]],"x":68,"t":1305112845.8655},{"y":25,"d":[[24,67,"-"]],"x":69,"t":1305112846.1453},{"y":25,"d":[[24,68,"1"]],"x":70,"t":1305112846.28935},{"y":25,"d":[[24,69,"."]],"x":71,"t":1305112846.47322},{"y":25,"d":[[24,70,"t"]],"x":72,"t":1305112846.66569},{"y":25,"d":[[24,71,"x"]],"x":73,"t":1305112846.81731},{"y":25,"d":[[24,72,"t"]],"x":74,"t":1305112846.92933},{"y":25,"d":[[24,73,"."]],"x":75,"t":1305112847.13791},{"y":25,"d":[[24,74,"\""]],"x":76,"t":1305112847.58557},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",16,20],["cp",22,21],["cp",17,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",18,17],["cp",19,18],["cp",0,19],["cp",22,21],["cp",17,22],["cp",0,23]],"t":1305112847.80126},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",14,18],["cp",21,19],["cp",15,20],["cp",23,21],[22,0,79,"Saved working directory and index state On master: hack-1: hacked welcome.txt, n"],[23,0,74,"ew file hack-1.txt. "]],"x":1,"f":[["cp",17,15],["cp",18,16],["cp",0,17],["cp",0,18],["cp",21,19],["cp",15,20],["cp",0,21],["cp",0,22]],"t":1305112848.0928},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",13,17],["cp",19,18],["cp",14,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,44,"HEAD is now at 1086811 Merge commit '6630c7c'"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",15,14],["cp",16,15],["cp",0,16],["cp",19,18],["cp",14,19],["cp",0,20]],"t":1305112848.10257},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112850.03323},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112850.10544},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112850.20107},{"y":25,"x":15,"t":1305112850.27324},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305112850.42515},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305112850.68916},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305112851.08116},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305112851.28151},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305112851.40937},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305112851.45714},{"y":25,"x":22,"t":1305112851.641},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305112851.75318},{"y":25,"d":[["cp",13,24]],"x":24,"t":1305112851.8492},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",12,16],["cp",18,17],["cp",13,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",12,23],[24,["a"," "]]],"x":1,"f":[["cp",14,13],["cp",15,14],["cp",0,15],["cp",18,17],["cp",13,18],["cp",0,19]],"t":1305112852.00895},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305112852.0172},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305112853.63296},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305112853.70539},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",11,15],["cp",17,16],["cp",12,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",11,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",13,12],["cp",14,13],["cp",0,14],["cp",17,16],["cp",12,17],["cp",0,18]],"t":1305112853.85713},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",10,14],["cp",16,15],["cp",11,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",10,21],["cp",23,22],[23,0,47,"detached-commit.txt new-commit.txt welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",12,11],["cp",13,12],["cp",0,13],["cp",16,15],["cp",11,16],["cp",0,17]],"t":1305112853.86303},{"y":25,"d":[[24,10,"e"]],"x":12,"t":1305112855.75297},{"y":25,"d":[[24,11,"c"]],"x":13,"t":1305112855.95311},{"y":25,"d":[[24,12,"h"]],"x":14,"t":1305112856.02508},{"y":25,"d":[[24,13,"o"]],"x":15,"t":1305112856.1369},{"y":25,"x":16,"t":1305112856.31273},{"d":[["r","bash-3.2$ ls `git --exec-path`/git-stash "],["r","/opt/git/v1.7.5/libexec/git-core/git-stash "],["r","bash-3.2$ file `git --exec-path`/git-stash "],["r","/opt/git/v1.7.5/libexec/git-core/git-stash: POSIX shell script text executable "],["r","bash-3.2$ head -2 `git --exec-path`/git-stash "],["r","#!/bin/sh "],["r","# Copyright (c) 2007, Nanako Shiraishi "],["r","bash-3.2$ git stash list "],["r","bash-3.2$ echo Bye-Bye. >> welcome.txt "],["r","bash-3.2$ echo hello. > hack-1.txt "],["r","bash-3.2$ git status -s "],["r"," M welcome.txt "],["r","?? hack-1.txt "],["r","bash-3.2$ git add hack-1.txt "],["r","bash-3.2$ git status -s "],["r","A hack-1.txt "],["r"," M welcome.txt "],["r","bash-3.2$ git stash save \"hack-1: hacked welcome.txt, new file hack-1.txt.\" "],["r","Saved working directory and index state On master: hack-1: hacked welcome.txt, n"],["r","ew file hack-1.txt. "],["r","HEAD is now at 1086811 Merge commit '6630c7c' "],["r","bash-3.2$ git status -s "],["r","bash-3.2$ ls "],["r","detached-commit.txt new-commit.txt welcome.txt "],["r","bash-3.2$ echo f "]],"x":17,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d",["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305112857.001,"i":1},{"y":25,"d":[[24,16,"i"]],"x":18,"t":1305112857.11291},{"y":25,"d":[[24,17,"x"]],"x":19,"t":1305112857.22498},{"y":25,"d":[[24,18,"."]],"x":20,"t":1305112858.03276},{"y":25,"x":21,"t":1305112858.25676},{"y":25,"d":[[24,20,">"]],"x":22,"t":1305112858.56135},{"y":25,"x":23,"t":1305112858.8648},{"y":25,"d":[[24,22,"h"]],"x":24,"t":1305112859.31266},{"y":25,"d":[[24,23,"a"]],"x":25,"t":1305112859.3688},{"y":25,"d":[[24,24,"c"]],"x":26,"t":1305112859.53806},{"y":25,"d":[[24,25,"k"]],"x":27,"t":1305112859.60898},{"y":25,"d":[[24,26,"2"]],"x":28,"t":1305112859.88881},{"y":25,"d":[[24,26," "]],"x":27,"t":1305112860.24083},{"y":25,"d":[[24,26,"-"]],"x":28,"t":1305112860.42461},{"y":25,"d":[[24,27,"="]],"x":29,"t":1305112860.43268},{"y":25,"d":[[24,28,"2"]],"x":30,"t":1305112860.54471},{"y":25,"d":[[24,28," "]],"x":29,"t":1305112860.94457},{"y":25,"d":[[24,27," "]],"x":28,"t":1305112861.10443},{"y":25,"d":[[24,27,"2"]],"x":29,"t":1305112861.18462},{"y":25,"d":[[24,28,"."]],"x":30,"t":1305112861.35248},{"y":25,"d":[[24,29,"t"]],"x":31,"t":1305112861.50484},{"y":25,"d":[[24,30,"x"]],"x":32,"t":1305112861.68074},{"y":25,"d":[[24,31,"t"]],"x":33,"t":1305112861.76854},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",9,13],["cp",15,14],["cp",10,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",9,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",11,10],["cp",12,11],["cp",0,12],["cp",15,14],["cp",10,15],["cp",0,16]],"t":1305112862.96062},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305112862.96107},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112864.5206},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112864.6006},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112864.70441},{"y":25,"x":15,"t":1305112864.76043},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305112864.92057},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305112865.1123},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305112865.28144},{"y":25,"d":[[24,17,"s"]],"x":19,"t":1305112865.48834},{"y":25,"d":[[24,18,"h"]],"x":20,"t":1305112865.62452},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",8,12],["cp",14,13],["cp",9,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",8,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",10,9],["cp",11,10],["cp",0,11],["cp",14,13],["cp",9,14],["cp",0,15]],"t":1305112865.84821},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",7,11],["cp",13,12],["cp",8,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",7,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,23,"No local changes to save"]],"x":1,"f":[["cp",9,8],["cp",10,9],["cp",0,10],["cp",13,12],["cp",8,13],["cp",0,14]],"t":1305112865.91395},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305112865.9175},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112867.73797},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112867.81638},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112867.91237},{"y":25,"x":15,"t":1305112867.97628},{"y":25,"d":[[24,14,"a"]],"x":16,"t":1305112868.08841},{"y":25,"d":[[24,15,"d"]],"x":17,"t":1305112868.26418},{"y":25,"d":[[24,16,"d"]],"x":18,"t":1305112868.4248},{"y":25,"x":19,"t":1305112868.52048},{"y":25,"d":[[24,18,"h"]],"x":20,"t":1305112868.74411},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305112868.85205},{"y":25,"d":[[24,20,"c"]],"x":22,"t":1305112869.06421},{"y":25,"d":[[24,21,27,"k-2.txt"]],"x":29,"t":1305112869.30605},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",6,10],["cp",12,11],["cp",7,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",6,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",8,7],["cp",9,8],["cp",0,9],["cp",12,11],["cp",7,12],["cp",0,13]],"t":1305112869.80813},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305112869.81584},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112870.27223},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112870.36022},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112870.47225},{"y":25,"x":15,"t":1305112870.52807},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305112870.68117},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305112870.87202},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305112871.04011},{"y":25,"d":[[24,17,"s"]],"x":19,"t":1305112871.248},{"y":25,"d":[["cp",21,24]],"x":20,"t":1305112871.37595},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",5,9],["cp",11,10],["cp",6,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",5,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",20,23],[24,["a"," "]]],"x":1,"f":[["cp",7,6],["cp",8,7],["cp",0,8],["cp",11,10],["cp",6,11],["cp",0,12]],"t":1305112871.63214},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",3,7],["cp",10,8],["cp",4,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",3,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",18,21],[22,0,79,"Saved working directory and index state WIP on master: 1086811 Merge commit '663"],[23,0,18,"0c7c' "]],"x":1,"f":[["cp",6,4],["cp",7,5],["cp",0,6],["cp",0,7],["cp",10,8],["cp",4,9],["cp",0,10],["cp",0,11]],"t":1305112872.02888},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",2,6],["cp",8,7],["cp",3,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",2,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",17,20],["cp",22,21],["cp",23,22],["cp",12,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,3],["cp",5,4],["cp",0,5],["cp",8,7],["cp",3,8],["cp",0,9]],"t":1305112872.03858},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112874.56796},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112874.64815},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112874.73594},{"y":25,"x":15,"t":1305112874.81586},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305112875.01605},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305112875.17595},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305112875.3523},{"y":25,"d":[[24,17,"s"]],"x":19,"t":1305112875.53624},{"y":25,"d":[["cp",17,24]],"x":20,"t":1305112875.78384},{"y":25,"x":21,"t":1305112875.95177},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305112876.09596},{"y":25,"d":[[24,21,"i"]],"x":23,"t":1305112876.21593},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305112876.29599},{"y":25,"d":[[24,23,"t"]],"x":25,"t":1305112876.40803},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",1,5],["cp",7,6],["cp",2,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",1,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",16,19],["cp",21,20],["cp",22,21],["cp",11,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",4,3],["cp",0,4],["cp",7,6],["cp",2,7],["cp",0,8]],"t":1305112876.60777},{"y":25,"x":1,"t":1305112876.67332},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",0,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",3,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",14,17],["cp",20,18],["cp",21,19],["cp",9,20],["cp",23,21],[22,0,55,"stash@{0}: WIP on master: 1086811 Merge commit '6630c7c'"],[23,0,69,"stash@{1}: On master: hack-1: hacked welcome.txt, new file hack-1.txt."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",2,3],["cp",6,4],["cp",0,5],["cp",2,6],["cp",2,7]],"t":1305112876.67751},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112882.19979},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112882.25571},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112882.40088},{"y":25,"x":15,"t":1305112882.85541},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305112883.51957},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305112883.66336},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305112883.77556},{"y":25,"d":[[24,17,"l"]],"x":19,"t":1305112883.96772},{"y":25,"d":[[24,18,"o"]],"x":20,"t":1305112884.12745},{"y":25,"d":[[24,19,"g"]],"x":21,"t":1305112884.23152},{"y":25,"x":22,"t":1305112884.34354},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305112884.83946},{"y":25,"d":[[24,22,"h"]],"x":24,"t":1305112884.91942},{"y":25,"d":[[24,23,"o"]],"x":25,"t":1305112885.03158},{"y":25,"d":[[24,24,"w"]],"x":26,"t":1305112885.11146},{"y":25,"x":27,"t":1305112885.25553},{"y":25,"d":[[24,26,"m"]],"x":28,"t":1305112885.41534},{"y":25,"d":[[24,27,"a"]],"x":29,"t":1305112885.50331},{"y":25,"d":[[24,28,"s"]],"x":30,"t":1305112885.69541},{"y":25,"d":[[24,29,"t"]],"x":31,"t":1305112885.7522},{"d":[["r"," M welcome.txt "],["r","?? hack-1.txt "],["r","bash-3.2$ git add hack-1.txt "],["r","bash-3.2$ git status -s "],["r","A hack-1.txt "],["r"," M welcome.txt "],["r","bash-3.2$ git stash save \"hack-1: hacked welcome.txt, new file hack-1.txt.\" "],["r","Saved working directory and index state On master: hack-1: hacked welcome.txt, n"],["r","ew file hack-1.txt. "],["r","HEAD is now at 1086811 Merge commit '6630c7c' "],["r","bash-3.2$ git status -s "],["r","bash-3.2$ ls "],["r","detached-commit.txt new-commit.txt welcome.txt "],["r","bash-3.2$ echo fix. > hack-2.txt "],["r","bash-3.2$ git stash "],["r","No local changes to save "],["r","bash-3.2$ git add hack-2.txt "],["r","bash-3.2$ git stash "],["r","Saved working directory and index state WIP on master: 1086811 Merge commit '663"],["r","0c7c' "],["r","HEAD is now at 1086811 Merge commit '6630c7c' "],["r","bash-3.2$ git stash list "],["r","stash@{0}: WIP on master: 1086811 Merge commit '6630c7c' "],["r","stash@{1}: On master: hack-1: hacked welcome.txt, new file hack-1.txt. "],["r","bash-3.2$ git reflog show maste "]],"x":32,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305112885.94325,"i":1},{"y":25,"d":[[24,31,"r"]],"x":33,"t":1305112886.00057},{"y":25,"x":34,"t":1305112886.19134},{"y":25,"d":[[24,33,"-"]],"x":35,"t":1305112887.26359},{"y":25,"d":[[24,34,"2"]],"x":36,"t":1305112887.41532},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",2,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",13,16],["cp",18,17],["cp",19,18],["cp",8,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",4,3],["cp",5,4],["cp",1,5]],"t":1305112888.05531},{"y":25,"b":[[24,0,5,["a","7"]]],"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",0,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",11,14],["cp",17,15],["cp",18,16],["cp",6,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,69,"1086811 master@{0}: HEAD^: updating HEAD "],[23,0,77,"0b4861c master@{1}: commit: add new file: a/b/c/hello.txt, but leave welcome.t"],[24,0,4,"(END)"]],"x":7,"f":[["cp",1,0],["cp",3,1],["cp",4,2],["cp",0,3],["cp",0,4],[22,0,6,["a","3"]],["cp",22,23],[24,0,5,["a","0"]]],"t":1305112888.06755},{"y":25,"b":[["cp",0,24]],"d":[[24,["a"," "]]],"x":1,"f":[["cp",0,24]],"t":1305112891.00738},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305112891.00928},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305112893.11894},{"y":25,"d":[["cp",8,24]],"x":13,"t":1305112893.18341},{"y":25,"x":14,"t":1305112893.31123},{"y":25,"d":[[24,13,"-"]],"x":15,"t":1305112893.67097},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305112893.9029},{"y":25,"x":17,"t":1305112894.11104},{"y":25,"d":[[24,16,"."]],"x":18,"t":1305112895.21496},{"y":25,"d":[[24,17,"g"]],"x":19,"t":1305112895.31897},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305112895.40708},{"y":25,"d":[[24,19,20,"t/"]],"x":22,"t":1305112895.58372},{"y":25,"d":[[24,21,"r"]],"x":23,"t":1305112895.99087},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305112896.15869},{"y":25,"d":[[24,23,"f"]],"x":25,"t":1305112896.26272},{"y":25,"d":[[24,24,25,"s/"]],"x":27,"t":1305112896.54398},{"y":25,"d":[[24,26,"s"]],"x":28,"t":1305112897.60694},{"y":25,"d":[[24,27,"t"]],"x":29,"t":1305112897.74283},{"y":25,"d":[[24,28,30,"ash"]],"x":33,"t":1305112897.9845},{"y":25,"d":[[24,32,"."]],"x":34,"t":1305112898.66287},{"y":25,"d":[[24,33,"g"]],"x":35,"t":1305112898.75891},{"y":25,"d":[[24,34,"i"]],"x":36,"t":1305112898.8388},{"y":25,"d":[[24,35,36,"t/"]],"x":38,"t":1305112898.99205},{"y":25,"d":[[24,37,"l"]],"x":39,"t":1305112899.48668},{"y":25,"d":[[24,38,41,"ogs/"]],"x":43,"t":1305112899.84805},{"y":25,"d":[[24,42,"r"]],"x":44,"t":1305112900.39879},{"y":25,"d":[[24,43,"e"]],"x":45,"t":1305112900.55183},{"y":25,"d":[[24,44,46,"fs/"]],"x":48,"t":1305112900.79223},{"y":25,"d":[[24,47,"s"]],"x":49,"t":1305112901.14262},{"y":25,"d":[[24,48,"t"]],"x":50,"t":1305112901.34253},{"y":25,"d":[[24,49,51,"ash"]],"x":54,"t":1305112901.53687},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",10,13],["cp",15,14],["cp",16,15],["cp",5,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",22,21],["cp",2,23]],"t":1305112902.38249},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",8,11],["cp",14,12],["cp",15,13],["cp",3,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,77,"-rw-r--r-- 1 jiangxin staff 366 5 11 19:21 .git/logs/refs/stash "],[23,0,58,"-rw-r--r-- 1 jiangxin staff 41 5 11 19:21 .git/refs/stash"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",0,1],["cp",21,19],["cp",19,20],["cp",0,21],["cp",0,22]],"t":1305112902.39535},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112904.87834},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112904.96667},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112905.14374},{"y":25,"x":15,"t":1305112905.2542},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305112907.75029},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305112907.90227},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305112908.0704},{"y":25,"d":[[24,17,"l"]],"x":19,"t":1305112908.23062},{"y":25,"d":[[24,18,"o"]],"x":20,"t":1305112908.38234},{"y":25,"d":[[24,19,"g"]],"x":21,"t":1305112908.47048},{"y":25,"x":22,"t":1305112908.56635},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305112908.76634},{"y":25,"d":[[24,22,"h"]],"x":24,"t":1305112908.85432},{"y":25,"d":[[24,23,"o"]],"x":25,"t":1305112908.9662},{"y":25,"d":[[24,24,"w"]],"x":26,"t":1305112909.06217},{"y":25,"x":27,"t":1305112909.17399},{"y":25,"d":[[24,26,"r"]],"x":28,"t":1305112909.81436},{"y":25,"d":[[24,27,"e"]],"x":29,"t":1305112910.00627},{"y":25,"d":[[24,28,"f"]],"x":30,"t":1305112910.22232},{"y":25,"d":[[24,29,"s"]],"x":31,"t":1305112910.43016},{"y":25,"d":[[24,30,"/"]],"x":32,"t":1305112910.65432},{"y":25,"d":[[24,31,"s"]],"x":33,"t":1305112910.8703},{"y":25,"d":[[24,32,"t"]],"x":34,"t":1305112911.02232},{"y":25,"d":[[24,33,"a"]],"x":35,"t":1305112911.19824},{"y":25,"d":[[24,34,"s"]],"x":36,"t":1305112911.40618},{"y":25,"d":[[24,35,"h"]],"x":37,"t":1305112911.51833},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",7,10],["cp",12,11],["cp",13,12],["cp",2,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",19,18],["cp",0,20]],"t":1305112912.38193},{"y":25,"b":[[24,0,5,["a","7"]]],"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",5,8],["cp",11,9],["cp",12,10],["cp",0,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,68,"795fa5e refs/stash@{0}: WIP on master: 1086811 Merge commit '6630c7c'"],[23,0,77,"48a65dc refs/stash@{1}: On master: hack-1: hacked welcome.txt, new file hack-1"],[24,0,4,"(END)"]],"x":7,"f":[["cp",18,16],["cp",16,17],["cp",0,18],["cp",0,19],["cp",16,22],["cp",16,23],[24,0,5,["a","0"]]],"t":1305112912.39233},{"y":25,"b":[["cp",0,24]],"d":[[24,["a"," "]]],"x":1,"f":[["cp",0,24]],"t":1305112916.07783},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305112916.07922},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112917.31},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112917.39791},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112917.50183},{"y":25,"x":15,"t":1305112917.54976},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305112917.70982},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305112917.83784},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305112918.02179},{"y":25,"d":[[24,17,"s"]],"x":19,"t":1305112918.18968},{"y":25,"d":[["cp",5,24]],"x":20,"t":1305112918.29405},{"y":25,"x":21,"t":1305112918.46996},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305112918.61384},{"y":25,"d":[[24,21,"i"]],"x":23,"t":1305112918.73382},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305112918.82199},{"y":25,"d":[["cp",12,24]],"x":25,"t":1305112918.88588},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",4,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",11,23],[24,["a"," "]]],"x":1,"f":[["cp",16,15],["cp",0,17],["cp",15,21],["cp",0,23]],"t":1305112919.22186},{"y":25,"x":1,"t":1305112919.28651},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",2,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",9,21],["cp",10,22],["cp",11,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",15,13],["cp",13,14],["cp",0,15],["cp",0,16],["cp",13,19],["cp",13,20],["cp",0,21],["cp",0,22]],"t":1305112919.29061},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112921.48583},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112921.57376},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112921.68547},{"y":25,"x":15,"t":1305112921.76606},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305112921.9176},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305112922.07769},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305112922.16605},{"y":25,"x":19,"t":1305112922.26169},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305112923.01354},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305112923.18957},{"y":25,"d":[[24,20,"g"]],"x":22,"t":1305112923.27777},{"y":25,"d":[[24,21,"r"]],"x":23,"t":1305112923.45356},{"y":25,"d":[[24,22,"a"]],"x":24,"t":1305112923.59756},{"d":[["r","detached-commit.txt new-commit.txt welcome.txt "],["r","bash-3.2$ echo fix. > hack-2.txt "],["r","bash-3.2$ git stash "],["r","No local changes to save "],["r","bash-3.2$ git add hack-2.txt "],["r","bash-3.2$ git stash "],["r","Saved working directory and index state WIP on master: 1086811 Merge commit '663"],["r","0c7c' "],["r","HEAD is now at 1086811 Merge commit '6630c7c' "],["r","bash-3.2$ git stash list "],["r","stash@{0}: WIP on master: 1086811 Merge commit '6630c7c' "],["r","stash@{1}: On master: hack-1: hacked welcome.txt, new file hack-1.txt. "],["r","bash-3.2$ git reflog show master -2 "],["r","1086811 master@{0}: HEAD^: updating HEAD "],["r","0b4861c master@{1}: commit: add new file: a/b/c/hello.txt, but leave welcome.t "],["r","bash-3.2$ ls -l .git/refs/stash .git/logs/refs/stash "],["r","-rw-r--r-- 1 jiangxin staff 366 5 11 19:21 .git/logs/refs/stash "],["r","-rw-r--r-- 1 jiangxin staff 41 5 11 19:21 .git/refs/stash "],["r","bash-3.2$ git reflog show refs/stash "],["r","795fa5e refs/stash@{0}: WIP on master: 1086811 Merge commit '6630c7c' "],["r","48a65dc refs/stash@{1}: On master: hack-1: hacked welcome.txt, new file hack-1 "],["r","bash-3.2$ git stash list "],["r","stash@{0}: WIP on master: 1086811 Merge commit '6630c7c' "],["r","stash@{1}: On master: hack-1: hacked welcome.txt, new file hack-1.txt. "],["r","bash-3.2$ git log --grap "]],"x":25,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d",["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],"d",["a","7"],"d","d","d",["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],"d",["a","7"],"d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305112923.73389,"i":1},{"y":25,"d":[[24,24,"h"]],"x":26,"t":1305112923.90969},{"y":25,"x":27,"t":1305112924.3014},{"y":25,"d":[[24,26,"-"]],"x":28,"t":1305112924.78978},{"y":25,"d":[[24,27,"-"]],"x":29,"t":1305112924.97365},{"y":25,"d":[[24,28,"p"]],"x":30,"t":1305112925.26947},{"y":25,"d":[[24,29,"r"]],"x":31,"t":1305112925.40536},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305112925.55747},{"y":25,"d":[[24,31,"t"]],"x":33,"t":1305112925.73357},{"y":25,"d":[[24,32,"t"]],"x":34,"t":1305112925.91734},{"y":25,"d":[[24,33,"y"]],"x":35,"t":1305112926.02161},{"y":25,"d":[[24,34,"="]],"x":36,"t":1305112926.59735},{"y":25,"d":[[24,35,"r"]],"x":37,"t":1305112926.82132},{"y":25,"d":[[24,36,"a"]],"x":38,"t":1305112927.03744},{"y":25,"d":[[24,37,"w"]],"x":39,"t":1305112927.29355},{"y":25,"x":40,"t":1305112928.02151},{"y":25,"d":[[24,39,"r"]],"x":41,"t":1305112928.62114},{"y":25,"d":[[24,40,"e"]],"x":42,"t":1305112928.76533},{"y":25,"d":[[24,41,"f"]],"x":43,"t":1305112928.92531},{"y":25,"d":[[24,42,"s"]],"x":44,"t":1305112929.10916},{"y":25,"d":[[24,43,"/"]],"x":45,"t":1305112929.7986},{"y":25,"d":[[24,44,"s"]],"x":46,"t":1305112930.41325},{"y":25,"d":[[24,45,"t"]],"x":47,"t":1305112930.54923},{"y":25,"d":[[24,46,"a"]],"x":48,"t":1305112930.7573},{"y":25,"d":[[24,47,"s"]],"x":49,"t":1305112930.9332},{"y":25,"d":[[24,48,"h"]],"x":50,"t":1305112931.04542},{"y":25,"x":51,"t":1305112931.22099},{"y":25,"d":[[24,50,"-"]],"x":52,"t":1305112932.05317},{"y":25,"d":[[24,51,"2"]],"x":53,"t":1305112932.13305},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",1,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",8,20],["cp",9,21],["cp",10,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",13,12],["cp",0,14],["cp",12,18],["cp",0,20]],"t":1305112932.63725},{"y":25,"d":[["cp",16,0],["cp",17,1],["cp",18,2],["cp",19,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",23,7],[8,0,50,"* commit 795fa5ee371a7e912b79b397457747cbcf39b898"],[9,0,55,"|\\ tree 780c22449b7ff67e2820e09a6332c360ddc80578 "],[10,0,69,"| | parent 1086811364a9bc20b1e780e6b32651ff37393673 "],[11,0,50,"| | parent 460a7b7c5fded08abc909a6d31add92489ff8b01"],[12,0,57,"| | author Jiang Xin 1305112872 +0800"],[13,0,77,"| | committer Jiang Xin 1305112872 +0800 "],[14,0,51,"| | "],[15,0,63,"| | WIP on master: 1086811 Merge commit '6630c7c' "],["cp",14,16],[17,0,50,"| * commit 460a7b7c5fded08abc909a6d31add92489ff8b01"],[18,0,68,"|/ tree 780c22449b7ff67e2820e09a6332c360ddc80578 "],[19,0,77,"| parent 1086811364a9bc20b1e780e6b32651ff37393673 "],[20,0,57,"| author Jiang Xin 1305112871 +0800"],[21,0,60,"| committer Jiang Xin 1305112871 +0800"],[22,0,69,"| "],[23,0,54,"| index on master: 1086811 Merge commit '6630c7c'"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",12,2],["cp",2,3],[8,4,50,["a","3"]],[9,0,1,"12"],[10,0,2,"172"],["cp",10,11],["cp",10,12],["cp",10,13],["cp",10,14],["cp",10,15],["cp",10,16],[17,0,50,"177733333333333333333333333333333333333333333333333"],[18,0,6,"1177777"],[19,0,6,"1777777"],["cp",19,20],["cp",19,21],["cp",19,22],["cp",19,23]],"t":1305112932.64897},{"y":25,"d":[[24,10,"q"]],"x":12,"t":1305112940.33308},{"y":25,"x":11,"t":1305112942.82873},{"y":25,"d":[["cp",7,24]],"x":11,"t":1305112942.94863},{"y":25,"x":15,"t":1305112943.4367},{"y":25,"x":19,"t":1305112943.61246},{"y":25,"x":21,"t":1305112943.79656},{"y":25,"x":27,"t":1305112943.97259},{"y":25,"x":29,"t":1305112944.15676},{"y":25,"x":35,"t":1305112944.34054},{"y":25,"x":36,"t":1305112944.51665},{"y":25,"x":40,"t":1305112944.68447},{"y":25,"x":44,"t":1305112944.85249},{"y":25,"x":40,"t":1305112945.32466},{"y":25,"d":[[24,39,51,"/stash -2 "]],"x":40,"t":1305112945.65254},{"y":25,"d":[[24,39,47,"stash -2 "]],"x":40,"t":1305112945.92479},{"y":25,"x":46,"t":1305112946.3408},{"y":25,"x":47,"t":1305112946.50066},{"y":25,"x":46,"t":1305112946.8365},{"y":25,"x":45,"t":1305112947.03639},{"y":25,"x":44,"t":1305112947.21248},{"y":25,"x":44,"t":1305112948.06047},{"y":25,"x":45,"t":1305112948.42028},{"y":25,"d":[[24,44,47,"@ -2"]],"x":46,"t":1305112949.04461},{"y":25,"d":[[24,45,48,"{ -2"]],"x":47,"t":1305112949.89258},{"y":25,"d":[[24,46,49,"1 -2"]],"x":48,"t":1305112950.14017},{"y":25,"d":[[24,47,50,"} -2"]],"x":49,"t":1305112950.58859},{"y":25,"x":48,"t":1305112950.98839},{"y":25,"x":51,"t":1305112952.54846},{"y":25,"d":[[24,50,"3"]],"x":51,"t":1305112953.69208},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",13,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,3],["cp",8,7],["cp",9,8],["cp",10,9],["cp",17,16],["cp",18,17],["cp",19,18],["cp",0,23]],"t":1305112954.02808},{"y":25,"d":[["cp",22,0],["cp",23,1],[2,0,77,"* commit 48a65dc3eb45609d0d01ee647600179da65a2fbc "],[3,0,48,"|\\ tree 7250f186c6aa3e2d1456d7fa915e529601f21d71"],["cp",9,4],[5,0,69,"| | parent fce6cc80372f1097b561e33eb4fa810be777ff45 "],[6,0,57,"| | author Jiang Xin 1305112848 +0800"],[7,0,2,"| |"],[7,10,60,"ter Jiang Xin 1305112848 +0800"],["cp",13,8],[9,4,66," On master: hack-1: hacked welcome.txt, new file hack-1.txt."],["cp",8,10],[11,2,57,"* commit fce6cc80372f1097b561e33eb4fa810be777ff45 "],[12,1,60,"/ tree 5d4dd328187e119448c9171f99cf2e507e91a6c6 "],["cp",18,13],[14,2,57," author Jiang Xin 1305112848 +0800"],[15,2,60," committer Jiang Xin 1305112848 +0800"],["cp",21,16],["cp",0,17],["cp",16,18],[19,0,57,"* commit 1086811364a9bc20b1e780e6b32651ff37393673 "],[20,1,60,"\\ tree ab676f92936000457b01507e04f4058e855d4df0 "],[21,2,50,"| parent 6af1352e5a38c4987c99bc9bc8c7213f48bfeea4"],[22,2,54,"| parent 6630c7cedc697ae87e9907b7a2ce9f71f2e3222c "],[23,0,57,"| | author Jiang Xin 1305110045 +0800"],[24,0,":"]],"x":2,"f":[["cp",18,0],["cp",3,1],["cp",7,2],["cp",8,3],["cp",9,4],["cp",4,5],["cp",4,6],["cp",4,7],["cp",4,8],["cp",16,11],["cp",17,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",2,19],[20,0,1,"34"],[21,0,2,"374"],["cp",21,22],["cp",21,23]],"t":1305112954.04206},{"y":25,"x":2,"t":1305112958.09988},{"y":25,"d":[[24,["a"," "]]],"x":1,"t":1305112959.95582},{"y":25,"b":[[24,0,5,["a","7"]]],"d":[["cp",3,0],["cp",4,1],["cp",5,2],["cp",6,3],["cp",7,4],["cp",8,5],["cp",9,6],["cp",5,7],["cp",11,8],["cp",12,9],["cp",13,10],["cp",14,11],["cp",15,12],["cp",16,13],["cp",17,14],["cp",13,15],["cp",19,16],["cp",20,17],["cp",21,18],["cp",22,19],["cp",23,20],[21,4,60,"committer Jiang Xin 1305110045 +0800"],["cp",5,22],[23,4,57," Merge commit '6630c7c' "],[24,0,4,"(END)"]],"x":7,"f":[["cp",3,0],["cp",4,1],["cp",1,2],["cp",1,3],["cp",11,8],["cp",12,9],["cp",13,10],["cp",10,11],["cp",10,12],["cp",19,16],["cp",20,17],["cp",21,18],["cp",18,19],["cp",18,20],[24,0,5,["a","0"]]],"t":1305112959.95592},{"y":25,"b":[["cp",0,24]],"d":[[24,["a"," "]]],"x":1,"f":[[24,["a","7"]]],"t":1305112962.21174},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305112962.21327},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112970.74734},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112970.83539},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112970.92312},{"y":25,"x":15,"t":1305112971.01932},{"y":25,"d":[[24,14,"d"]],"x":16,"t":1305112972.41113},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305112972.5234},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305112972.67539},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305112972.88308},{"y":25,"x":20,"t":1305112973.59524},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305112974.17095},{"y":25,"d":[[24,20,"t"]],"x":22,"t":1305112974.31516},{"y":25,"d":[[24,21,"a"]],"x":23,"t":1305112974.49107},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305112974.67503},{"y":25,"d":[[24,23,"h"]],"x":25,"t":1305112974.78707},{"y":25,"d":[[24,24,"@"]],"x":26,"t":1305112975.23517},{"y":25,"d":[[24,25,"{"]],"x":27,"t":1305112976.57932},{"y":25,"d":[[24,26,"1"]],"x":28,"t":1305112976.79517},{"y":25,"d":[[24,27,"}"]],"x":29,"t":1305112977.89927},{"y":25,"d":[[24,28,"^"]],"x":30,"t":1305112979.06691},{"y":25,"d":[[24,29,"2"]],"x":31,"t":1305112979.57921},{"y":25,"d":[[24,30,"^"]],"x":32,"t":1305112981.09899},{"y":25,"x":33,"t":1305112981.52298},{"y":25,"d":[[24,32,"s"]],"x":34,"t":1305112982.00288},{"y":25,"d":[[24,33,"t"]],"x":35,"t":1305112982.13863},{"y":25,"d":[[24,34,"a"]],"x":36,"t":1305112982.3068},{"y":25,"d":[[24,35,"s"]],"x":37,"t":1305112982.47469},{"y":25,"d":[[24,36,"h"]],"x":38,"t":1305112982.5708},{"y":25,"d":[[24,37,"@"]],"x":39,"t":1305112983.1629},{"y":25,"d":[[24,38,"{"]],"x":40,"t":1305112984.0426},{"y":25,"d":[[24,39,"1"]],"x":41,"t":1305112984.2426},{"y":25,"d":[[24,40,"}"]],"x":42,"t":1305112984.71483},{"y":25,"d":[[24,41,"^"]],"x":43,"t":1305112986.19464},{"y":25,"d":[[24,42,"2"]],"x":44,"t":1305112986.59455},{"d":[["r","| | parent 1086811364a9bc20b1e780e6b32651ff37393673 "],["r","| | parent fce6cc80372f1097b561e33eb4fa810be777ff45 "],["r","| | author Jiang Xin 1305112848 +0800 "],["r","| | committer Jiang Xin 1305112848 +0800 "],["r","| | "],["r","| | On master: hack-1: hacked welcome.txt, new file hack-1.txt. "],["r","| | "],["r","| * commit fce6cc80372f1097b561e33eb4fa810be777ff45 "],["r","|/ tree 5d4dd328187e119448c9171f99cf2e507e91a6c6 "],["r","| parent 1086811364a9bc20b1e780e6b32651ff37393673 "],["r","| author Jiang Xin 1305112848 +0800 "],["r","| committer Jiang Xin 1305112848 +0800 "],["r","| "],["r","| index on master: 1086811 Merge commit '6630c7c' "],["r","| "],["r","* commit 1086811364a9bc20b1e780e6b32651ff37393673 "],["r","|\\ tree ab676f92936000457b01507e04f4058e855d4df0 "],["r","| | parent 6af1352e5a38c4987c99bc9bc8c7213f48bfeea4 "],["r","| | parent 6630c7cedc697ae87e9907b7a2ce9f71f2e3222c "],["r","| | author Jiang Xin 1305110045 +0800 "],["r","| | committer Jiang Xin 1305110045 +0800 "],["r","| | "],["r","| | Merge commit '6630c7c' "],["r","bash-3.2$ git diff stash@{1}^2^ stash@{1}^2 "],["a"," "]],"x":1,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","17277777777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d","d","d","d","d",["r","17773333333333333333333333333333333333333333333333377777777777777777777777777777"],["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","17777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d","d","d","d",["r","77773333333333333333333333333333333333333333333333377777777777777777777777777777"],["r","34777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","37477777777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d","d","d","d",["a","7"],"d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305112987.04265,"i":1},{"y":25,"d":[["cp",7,0],["cp",8,1],["cp",9,2],["cp",10,3],["cp",11,4],["cp",12,5],["cp",13,6],["cp",5,7],["cp",15,8],["cp",16,9],["cp",17,10],["cp",18,11],["cp",19,12],["cp",20,13],["cp",21,14],["cp",22,15],["cp",23,16],[17,0,50,"diff --git a/hack-1.txt b/hack-1.txt "],[18,0,50,"new file mode 100644 "],[19,0,57,"index 0000000..25735f5 "],[20,0,60,"--- /dev/null "],[21,0,15,"+++ b/hack-1.txt"],[22,0,29,"@@ -0,0 +1 @@ "],[23,0,42,"+hello. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",7,0],["cp",8,1],["cp",9,2],["cp",2,3],["cp",2,4],["cp",2,5],["cp",2,6],["cp",2,7],["cp",15,8],["cp",16,9],["cp",17,10],["cp",10,11],["cp",10,12],["cp",10,13],["cp",10,14],["cp",10,15],["cp",23,16],["cp",16,17],["cp",16,18],["cp",16,19],["cp",16,20],["cp",16,21],[22,0,12,["a","6"]],[23,0,6,["a","2"]]],"B":[[17,0,35,["a","1"]],[18,0,19,["a","1"]],[19,0,21,["a","1"]],[20,0,12,["a","1"]],[21,0,15,["a","1"]]],"t":1305112987.07041},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305112991.85847},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305112991.95433},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305112992.05813},{"y":25,"x":15,"t":1305112992.12225},{"y":25,"d":[[24,14,"d"]],"x":16,"t":1305112992.27423},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305112992.34609},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305112992.45832},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305112992.63415},{"y":25,"x":20,"t":1305112992.79434},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305112993.22606},{"y":25,"d":[[24,20,"t"]],"x":22,"t":1305112993.38609},{"y":25,"d":[[24,21,"a"]],"x":23,"t":1305112993.56217},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305112993.74614},{"y":25,"d":[[24,23,"h"]],"x":25,"t":1305112993.85823},{"y":25,"d":[[24,24,"@"]],"x":26,"t":1305112994.34641},{"y":25,"d":[[24,25,"{"]],"x":27,"t":1305112995.59425},{"y":25,"d":[[24,26,"1"]],"x":28,"t":1305112995.85009},{"y":25,"d":[[24,27,"}"]],"x":29,"t":1305112996.77023},{"y":25,"d":[[24,28,"^"]],"x":30,"t":1305112998.45042},{"y":25,"d":[[24,29,"2"]],"x":31,"t":1305112998.90613},{"y":25,"x":32,"t":1305112999.63393},{"y":25,"d":[[24,31,"s"]],"x":33,"t":1305113000.19402},{"y":25,"d":[[24,32,"t"]],"x":34,"t":1305113000.32971},{"y":25,"d":[[24,33,"a"]],"x":35,"t":1305113000.85799},{"y":25,"d":[[24,34,"s"]],"x":36,"t":1305113001.03391},{"y":25,"d":[[24,35,"h"]],"x":37,"t":1305113001.14592},{"y":25,"d":[[24,36,"@"]],"x":38,"t":1305113002.79382},{"y":25,"d":[[24,37,"{"]],"x":39,"t":1305113003.36181},{"y":25,"d":[[24,38,"1"]],"x":40,"t":1305113003.83476},{"y":25,"d":[[24,39,"}"]],"x":41,"t":1305113004.14586},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",4,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",8,7],["cp",9,8],["cp",10,9],["cp",16,15],["cp",22,21],["cp",23,22],["cp",15,23]],"B":[["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",0,21]],"t":1305113005.10547},{"y":25,"d":[["cp",8,0],["cp",9,1],["cp",10,2],["cp",11,3],["cp",12,4],["cp",13,5],["cp",14,6],["cp",15,7],["cp",16,8],["cp",17,9],["cp",18,10],["cp",19,11],["cp",20,12],["cp",21,13],["cp",22,14],["cp",23,15],[16,13,37,"welcome.txt b/welcome.txt"],[17,0,28,"index fd3c069..51dbfd2 100644"],[18,0,21,"--- a/welcome.txt "],[19,0,16,"+++ b/welcome.txt"],[20,0,15,"@@ -1,2 +1,3 @@ "],[21,0,12," Hello. "],[22,0,17," Nice to meet you."],[23,0,39,"+Bye-Bye. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",8,0],["cp",9,1],["cp",1,2],["cp",1,3],["cp",1,4],["cp",1,5],["cp",1,6],["cp",15,7],["cp",7,8],["cp",7,9],["cp",7,10],["cp",7,11],["cp",7,12],["cp",21,13],["cp",22,14],[20,0,14,["a","6"]],["cp",7,21],["cp",7,22],[23,0,8,["a","2"]]],"B":[["cp",16,8],["cp",17,9],["cp",18,10],["cp",19,11],["cp",20,12],[16,36,37,["a","1"]],[17,20,28,["a","1"]],[18,17,21,["a","0"]],["cp",18,19],["cp",0,20]],"t":1305113005.11989},{"y":25,"d":[["cp",15,24]],"x":11,"t":1305113009.47355},{"y":25,"x":15,"t":1305113010.61732},{"y":25,"x":20,"t":1305113010.80147},{"y":25,"x":25,"t":1305113010.9774},{"y":25,"x":27,"t":1305113011.15331},{"y":25,"x":28,"t":1305113011.42517},{"y":25,"x":29,"t":1305113011.92537},{"y":25,"x":30,"t":1305113012.00883},{"y":25,"x":31,"t":1305113012.14521},{"y":25,"x":30,"t":1305113012.59333},{"y":25,"d":[[24,29,"1"]],"x":30,"t":1305113012.95352},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",7,6],["cp",13,12],["cp",14,13],["cp",6,14],["cp",20,19],["cp",6,20],["cp",23,22],["cp",6,23]],"B":[["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",0,12],["cp",16,15],["cp",17,16],["cp",18,17],["cp",0,19]],"t":1305113014.28895},{"y":25,"d":[["cp",15,0],["cp",16,1],["cp",17,2],["cp",18,3],["cp",19,4],["cp",20,5],["cp",21,6],["cp",22,7],["cp",23,8],[9,0,35,"diff --git a/hack-1.txt b/hack-1.txt"],[10,0,19,"new file mode 100644"],[11,0,21,"index 0000000..25735f5"],[12,0,12,"--- /dev/null"],[13,1,15,"++ b/hack-1.txt"],[14,0,39,"@@ -0,0 +1 @@ "],[15,0,37,"+hello. "],["cp",0,16],["cp",1,17],["cp",2,18],["cp",3,19],["cp",4,20],["cp",5,21],["cp",6,22],["cp",7,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",6,0],["cp",0,1],["cp",0,2],["cp",0,3],["cp",19,4],["cp",0,5],["cp",22,7],["cp",0,12],["cp",0,13],[14,0,12,["a","6"]],[15,0,6,["a","2"]],["cp",0,19],["cp",4,20],["cp",0,22],["cp",7,23]],"B":[["cp",15,0],["cp",16,1],["cp",17,2],["cp",2,3],["cp",4,7],["cp",4,8],[9,22,35,["a","1"]],[10,13,19,["a","1"]],[11,16,21,["a","1"]],[12,0,12,["a","1"]],[13,0,15,["a","1"]],["cp",4,15],["cp",0,16],["cp",1,17],["cp",2,19]],"t":1305113014.3017},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305113020.69698},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305113020.80079},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305113020.88894},{"y":25,"x":15,"t":1305113020.96108},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305113021.16873},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305113021.51291},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305113021.73667},{"y":25,"d":[[24,17,"s"]],"x":19,"t":1305113021.89693},{"y":25,"d":[[24,18,"h"]],"x":20,"t":1305113022.00067},{"y":25,"x":21,"t":1305113022.40071},{"y":25,"d":[[24,20,"a"]],"x":22,"t":1305113022.96089},{"y":25,"d":[[24,21,"p"]],"x":23,"t":1305113023.09672},{"y":25,"d":[[24,22,"p"]],"x":24,"t":1305113023.22475},{"y":25,"d":[[24,23,"l"]],"x":25,"t":1305113023.38467},{"y":25,"d":[[24,24,"y"]],"x":26,"t":1305113023.56865},{"y":25,"x":27,"t":1305113023.72877},{"y":25,"d":[[24,26,"s"]],"x":28,"t":1305113023.95262},{"y":25,"d":[[24,27,"t"]],"x":29,"t":1305113024.10454},{"y":25,"d":[[24,28,"a"]],"x":30,"t":1305113024.25658},{"y":25,"d":[[24,29,"s"]],"x":31,"t":1305113024.43268},{"y":25,"d":[[24,30,"h"]],"x":32,"t":1305113024.56059},{"y":25,"d":[[24,31,"@"]],"x":33,"t":1305113025.90489},{"y":25,"d":[[24,32,"{"]],"x":34,"t":1305113026.80874},{"y":25,"d":[[24,33,"1"]],"x":35,"t":1305113027.04076},{"y":25,"d":[[24,34,"}"]],"x":36,"t":1305113027.40861},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",0,16],["cp",1,17],["cp",2,18],["cp",3,19],["cp",4,20],["cp",5,21],["cp",6,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",4,3],["cp",0,4],["cp",7,6],["cp",0,7],["cp",14,13],["cp",15,14],["cp",0,15],["cp",3,19],["cp",0,20],["cp",6,22],["cp",0,23]],"B":[["cp",1,0],["cp",2,1],["cp",4,3],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",3,13],["cp",16,15],["cp",0,16],["cp",1,17],["cp",3,19]],"t":1305113028.21645},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",0,16],["cp",1,17],["cp",2,18],["cp",3,19],["cp",4,20],["cp",5,21],["cp",23,22],[23,0,34,"# On branch master "]],"x":1,"f":[["cp",3,2],["cp",0,3],["cp",6,5],["cp",0,6],["cp",13,12],["cp",14,13],["cp",0,14],["cp",2,18],["cp",0,19],["cp",5,21],["cp",0,22]],"B":[["cp",1,0],["cp",3,2],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",2,12],["cp",15,14],["cp",16,15],["cp",0,16],["cp",2,18]],"t":1305113028.61425},{"y":25,"d":[["cp",11,0],["cp",12,1],["cp",13,2],["cp",14,3],["cp",15,4],["cp",16,5],["cp",17,6],["cp",18,7],["cp",19,8],["cp",20,9],["cp",21,10],["cp",22,11],["cp",23,12],[13,0,25,"# Changes to be committed:"],[14,0,46,"# (use \"git reset HEAD ...\" to unstage)"],[15,0,28,"# "],[16,0,29,"# new file: hack-1.txt"],["cp",15,17],[18,0,31,"# Changes not staged for commit:"],[19,0,61,"# (use \"git add ...\" to update what will be committed)"],[20,0,76,"# (use \"git checkout -- ...\" to discard changes in working directory)"],["cp",15,21],[22,0,34,"# modified: welcome.txt "],["cp",15,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",12,1],["cp",13,2],["cp",0,5],["cp",18,7],["cp",21,10],["cp",0,12],["cp",0,13],[16,8,29,["a","2"]],["cp",0,18],["cp",0,21],[22,8,30,["a","1"]]],"B":[["cp",11,0],["cp",2,1],["cp",14,3],["cp",15,4],["cp",16,5],["cp",5,6],["cp",1,7],["cp",1,8],["cp",1,9],["cp",1,10],["cp",1,11],["cp",1,14],["cp",1,15],["cp",1,16],["cp",1,17]],"t":1305113028.61867},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305113031.99226},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305113032.06443},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305113032.15247},{"y":25,"d":[[24,13,"s"]],"x":15,"t":1305113032.35237},{"y":25,"d":[[24,13," "]],"x":14,"t":1305113032.8001},{"y":25,"x":15,"t":1305113032.8962},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305113033.04017},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305113033.21617},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305113033.32048},{"y":25,"d":[[24,17,"s"]],"x":19,"t":1305113033.50419},{"y":25,"d":[[24,18,"h"]],"x":20,"t":1305113033.60017},{"y":25,"x":21,"t":1305113033.73627},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305113033.81603},{"y":25,"d":[[24,21,"i"]],"x":23,"t":1305113033.93615},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305113033.99227},{"y":25,"d":[[24,23,"t"]],"x":25,"t":1305113034.08822},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",14,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",14,20],["cp",22,21],["cp",14,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",7,6],["cp",2,7],["cp",10,9],["cp",2,10],["cp",16,15],["cp",2,16],["cp",22,21],["cp",2,22]],"B":[["cp",1,0],["cp",3,2],["cp",4,3],["cp",5,4],["cp",0,6]],"t":1305113034.2164},{"y":25,"x":1,"t":1305113034.27941},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",17,15],["cp",18,16],["cp",19,17],["cp",12,18],["cp",21,19],["cp",23,21],[22,0,55,"stash@{0}: WIP on master: 1086811 Merge commit '6630c7c'"],[23,0,69,"stash@{1}: On master: hack-1: hacked welcome.txt, new file hack-1.txt."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",0,1],["cp",6,4],["cp",0,6],["cp",9,7],["cp",0,9],["cp",15,13],["cp",0,15],["cp",21,19],["cp",0,21]],"B":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",2,3],["cp",6,4],["cp",4,5]],"t":1305113034.28364},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305113036.55197},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305113036.63224},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305113036.74427},{"y":25,"x":15,"t":1305113036.80826},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305113036.97603},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305113037.11202},{"d":[["r","diff --git a/welcome.txt b/welcome.txt "],["r","index fd3c069..51dbfd2 100644 "],["r","--- a/welcome.txt "],["r","+++ b/welcome.txt "],["r","@@ -1,2 +1,3 @@ "],["r"," Hello. "],["r"," Nice to meet you. "],["r","+Bye-Bye. "],["r","bash-3.2$ git stash apply stash@{1} "],["r","# On branch master "],["r","# Changes to be committed: "],["r","# (use \"git reset HEAD ...\" to unstage) "],["r","# "],["r","# new file: hack-1.txt "],["r","# "],["r","# Changes not staged for commit: "],["r","# (use \"git add ...\" to update what will be committed) "],["r","# (use \"git checkout -- ...\" to discard changes in working directory) "],["r","# "],["r","# modified: welcome.txt "],["r","# "],["r","bash-3.2$ git stash list "],["r","stash@{0}: WIP on master: 1086811 Merge commit '6630c7c' "],["r","stash@{1}: On master: hack-1: hacked welcome.txt, new file hack-1.txt. "],["r","bash-3.2$ git sta "]],"x":18,"B":[["r","11111111111111111111111111111111111111000000000000000000000000000000000000000000"],["r","11111111111111111111111111111000000000000000000000000000000000000000000000000000"],["r","11111111111111111000000000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d",["r","66666666666666677777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","22222222277777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","77777777222222222222222222222277777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","77777777111111111111111111111117777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305113037.27993,"i":1},{"y":25,"d":[[24,17,"s"]],"x":19,"t":1305113037.43198},{"y":25,"d":[[24,18,"h"]],"x":20,"t":1305113037.50414},{"y":25,"x":21,"t":1305113037.66407},{"y":25,"d":[[24,20,"c"]],"x":22,"t":1305113038.60834},{"y":25,"d":[[24,21,"l"]],"x":23,"t":1305113038.70408},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305113038.82528},{"y":25,"d":[[24,23,"a"]],"x":25,"t":1305113038.98393},{"y":25,"d":[[24,24,"r"]],"x":26,"t":1305113039.08795},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",11,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",11,17],["cp",19,18],["cp",11,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",4,3],["cp",0,4],["cp",7,6],["cp",0,7],["cp",13,12],["cp",0,13],["cp",19,18],["cp",0,19]],"B":[["cp",1,0],["cp",2,1],["cp",4,3]],"t":1305113039.35181},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305113039.41628},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305113041.26395},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305113041.33606},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305113041.43976},{"y":25,"x":15,"t":1305113041.53031},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305113041.65572},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305113041.80774},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305113041.97594},{"y":25,"d":[[24,17,"s"]],"x":19,"t":1305113042.23221},{"y":25,"d":[[24,18,"h"]],"x":20,"t":1305113042.56777},{"y":25,"x":21,"t":1305113042.69567},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305113042.79979},{"y":25,"d":[[24,21,"i"]],"x":23,"t":1305113042.89585},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305113042.97599},{"y":25,"d":[["cp",20,24]],"x":25,"t":1305113043.07965},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",10,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",10,16],["cp",18,17],["cp",10,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",19,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",0,3],["cp",6,5],["cp",0,6],["cp",12,11],["cp",0,12],["cp",18,17],["cp",0,18]],"B":[["cp",1,0],["cp",3,2]],"t":1305113043.38383},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305113043.44302},{"y":25,"d":[["cp",19,24]],"x":11,"t":1305113044.6397},{"y":25,"d":[[24,10,23,"/ "]],"x":12,"t":1305113044.81584},{"y":25,"d":[[24,11,"l"]],"x":13,"t":1305113044.97563},{"y":25,"d":[[24,12,"s"]],"x":14,"t":1305113045.06378},{"y":25,"d":[[24,10,51,"ls -l .git/refs/stash .git/logs/refs/stash"]],"x":11,"t":1305113045.19152},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",9,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",9,15],["cp",17,16],["cp",9,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",18,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,2],["cp",5,4],["cp",0,5],["cp",11,10],["cp",0,11],["cp",17,16],["cp",0,17]],"B":[["cp",2,1]],"t":1305113046.00755},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",12,10],["cp",13,11],["cp",14,12],["cp",7,13],["cp",16,14],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",16,20],["cp",23,21],[22,0,59,"ls: cannot access .git/refs/stash: No such file or directory"],[23,0,64,"ls: cannot access .git/logs/refs/stash: No such file or directory"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,1],["cp",4,2],["cp",0,4],["cp",10,8],["cp",0,10],["cp",16,14],["cp",0,16]],"B":[["cp",1,0]],"t":1305113046.01382},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",6,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",6,12],["cp",14,13],["cp",6,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",15,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,64,"bash-3.2$ exit "],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,2],["cp",8,7],["cp",0,8],["cp",14,13],["cp",0,14]],"t":1305113049.30365}]} \ No newline at end of file diff --git a/html/part2/ch10-01-tag.html b/html/part2/ch10-01-tag.html new file mode 100644 index 000000000..ea19ffaca --- /dev/null +++ b/html/part2/ch10-01-tag.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch10-01-tag +json_file: ch10-01-tag.json +--- diff --git a/html/part2/ch10-01-tag.json b/html/part2/ch10-01-tag.json new file mode 100644 index 000000000..2cd5aa6a3 --- /dev/null +++ b/html/part2/ch10-01-tag.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305113688.34882,"i":1},{"y":1,"d":[[0,10,39,"cd /path/to/my/workspace/demo/"]],"x":11,"t":1305113688.87325},{"y":2,"x":1,"t":1305113689.45698},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305113689.45722},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305113690.47307},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305113690.56089},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305113690.64914},{"y":2,"x":15,"t":1305113690.72128},{"y":2,"d":[[1,14,"t"]],"x":16,"t":1305113690.88899},{"y":2,"d":[[1,15,"a"]],"x":17,"t":1305113691.03305},{"y":2,"d":[[1,16,"g"]],"x":18,"t":1305113691.16075},{"y":2,"x":19,"t":1305113691.36894},{"y":2,"d":[[1,18,"-"]],"x":20,"t":1305113691.64912},{"y":2,"d":[[1,19,"m"]],"x":21,"t":1305113691.90501},{"y":2,"x":22,"t":1305113692.03307},{"y":2,"d":[[1,21,"\""]],"x":23,"t":1305113692.36897},{"y":2,"d":[[1,22,"S"]],"x":24,"t":1305113693.03304},{"y":2,"d":[[1,23,"a"]],"x":25,"t":1305113693.20898},{"y":2,"d":[[1,24,"y"]],"x":26,"t":1305113693.35282},{"y":2,"x":27,"t":1305113693.94472},{"y":2,"d":[[1,26,"b"]],"x":28,"t":1305113694.08877},{"y":2,"d":[[1,27,"y"]],"x":29,"t":1305113694.17684},{"y":2,"d":[[1,28,"e"]],"x":30,"t":1305113694.32907},{"y":2,"d":[[1,29,"b"]],"x":31,"t":1305113694.68176},{"y":2,"d":[[1,29," "]],"x":30,"t":1305113695.02489},{"y":2,"d":[[1,29,"="]],"x":31,"t":1305113695.23269},{"y":2,"d":[[1,29," "]],"x":30,"t":1305113695.68871},{"y":2,"d":[[1,29,"-"]],"x":31,"t":1305113696.42473},{"y":2,"d":[[1,30,"b"]],"x":32,"t":1305113696.53678},{"y":2,"d":[[1,31,"y"]],"x":33,"t":1305113696.66474},{"y":2,"d":[[1,32,"e"]],"x":34,"t":1305113696.80065},{"y":2,"x":35,"t":1305113696.97688},{"y":2,"d":[[1,34,"t"]],"x":36,"t":1305113697.18473},{"y":2,"d":[[1,35,"o"]],"x":37,"t":1305113697.28863},{"y":2,"x":38,"t":1305113697.74459},{"y":2,"d":[[1,37,"a"]],"x":39,"t":1305113697.96879},{"y":2,"d":[[1,38,"l"]],"x":40,"t":1305113698.04068},{"y":2,"d":[[1,39,"l"]],"x":41,"t":1305113698.2007},{"y":2,"x":42,"t":1305113698.28864},{"y":2,"d":[[1,41,"p"]],"x":43,"t":1305113698.54461},{"y":2,"d":[[1,42,"r"]],"x":44,"t":1305113698.61658},{"y":2,"d":[[1,43,"e"]],"x":45,"t":1305113698.7447},{"y":2,"d":[[1,44,"v"]],"x":46,"t":1305113698.97662},{"y":2,"d":[[1,45,"i"]],"x":47,"t":1305113699.15247},{"y":2,"d":[[1,46,"o"]],"x":48,"t":1305113699.34479},{"y":2,"d":[[1,47,"u"]],"x":49,"t":1305113699.44873},{"y":2,"d":[[1,48,"s"]],"x":50,"t":1305113699.55274},{"y":2,"x":51,"t":1305113699.68078},{"y":2,"d":[[1,50,"p"]],"x":52,"t":1305113700.37669},{"y":2,"d":[[1,51,"r"]],"x":53,"t":1305113700.51258},{"y":2,"d":[[1,52,"a"]],"x":54,"t":1305113700.62456},{"y":2,"d":[[1,53,"c"]],"x":55,"t":1305113700.82456},{"y":2,"d":[[1,54,"t"]],"x":56,"t":1305113701.00861},{"y":2,"d":[[1,55,"i"]],"x":57,"t":1305113701.14444},{"y":2,"d":[[1,56,"c"]],"x":58,"t":1305113701.2886},{"y":2,"d":[[1,57,"e"]],"x":59,"t":1305113701.46448},{"y":2,"d":[[1,58,"."]],"x":60,"t":1305113701.76055},{"y":2,"d":[[1,59,"\""]],"x":61,"t":1305113702.16854},{"y":2,"x":62,"t":1305113702.40034},{"y":2,"d":[[1,61,"o"]],"x":63,"t":1305113702.66435},{"y":2,"d":[[1,62,"l"]],"x":64,"t":1305113702.83242},{"y":2,"d":[[1,63,"d"]],"x":65,"t":1305113702.92053},{"y":2,"d":[[1,64,"_"]],"x":66,"t":1305113703.72059},{"y":2,"d":[[1,65,"p"]],"x":67,"t":1305113704.03251},{"y":2,"d":[[1,66,"r"]],"x":68,"t":1305113704.16831},{"y":2,"d":[[1,67,"a"]],"x":69,"t":1305113704.52057},{"y":2,"d":[[1,68,"c"]],"x":70,"t":1305113704.72063},{"y":2,"d":[[1,69,"t"]],"x":71,"t":1305113704.92853},{"y":2,"d":[[1,70,"i"]],"x":72,"t":1305113705.06431},{"y":2,"d":[[1,71,"c"]],"x":73,"t":1305113705.16019},{"y":2,"d":[[1,72,"e"]],"x":74,"t":1305113705.3444},{"y":3,"x":1,"t":1305113705.45613},{"y":3,"d":[[2,0,8,"bash-3.2$"]],"x":11,"t":1305113705.74272},{"y":3,"d":[[2,10,"g"]],"x":12,"t":1305113707.20034},{"y":3,"d":[[2,11,"i"]],"x":13,"t":1305113707.28827},{"y":3,"d":[[2,12,"t"]],"x":14,"t":1305113707.41644},{"y":3,"x":15,"t":1305113707.5041},{"y":3,"d":[[2,14,"s"]],"x":16,"t":1305113708.4161},{"y":3,"d":[[2,15,"t"]],"x":17,"t":1305113708.57628},{"y":3,"d":[[2,15," "]],"x":16,"t":1305113709.36801},{"y":3,"d":[[2,14," "]],"x":15,"t":1305113709.56797},{"y":3,"d":[[2,14,"d"]],"x":16,"t":1305113710.17619},{"y":3,"d":[[2,15,"e"]],"x":17,"t":1305113710.33605},{"y":3,"d":[[2,16,"s"]],"x":18,"t":1305113710.496},{"y":3,"d":[[2,17,"c"]],"x":19,"t":1305113710.70413},{"y":3,"d":[[2,18,"r"]],"x":20,"t":1305113711.09601},{"y":3,"d":[[2,19,"i"]],"x":21,"t":1305113711.24018},{"y":3,"d":[[2,20,"b"]],"x":22,"t":1305113711.35184},{"y":3,"d":[[2,21,"e"]],"x":23,"t":1305113711.51209},{"y":4,"x":1,"t":1305113711.64819},{"y":5,"d":[[3,0,11,"old_practice"],[4,0,8,"bash-3.2$"]],"x":11,"t":1305113711.65647},{"y":5,"d":[[4,10,"g"]],"x":12,"t":1305113712.22419},{"y":5,"d":[[4,11,"i"]],"x":13,"t":1305113712.33614},{"y":5,"d":[[4,12,"t"]],"x":14,"t":1305113712.40821},{"y":5,"x":15,"t":1305113712.49623},{"y":5,"d":[[4,14,"l"]],"x":16,"t":1305113712.55989},{"y":5,"d":[[4,15,"o"]],"x":17,"t":1305113712.75993},{"y":5,"d":[[4,16,"g"]],"x":18,"t":1305113712.86453},{"y":5,"x":19,"t":1305113712.99206},{"y":5,"d":[[4,18,"-"]],"x":20,"t":1305113713.16788},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/demo/ "],["r","bash-3.2$ git tag -m \"Say bye-bye to all previous practice.\" old_practice "],["r","bash-3.2$ git describe "],["r","old_practice "],["r","bash-3.2$ git log -- "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":21,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":5,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305113713.35987,"i":1},{"y":5,"d":[[4,20,"o"]],"x":22,"t":1305113713.62396},{"y":5,"d":[[4,21,"n"]],"x":23,"t":1305113713.76792},{"y":5,"d":[[4,22,"e"]],"x":24,"t":1305113713.87193},{"y":5,"d":[[4,23,"l"]],"x":25,"t":1305113713.95205},{"y":5,"d":[[4,24,"i"]],"x":26,"t":1305113714.08002},{"y":5,"d":[[4,25,"e"]],"x":27,"t":1305113714.19977},{"y":5,"d":[[4,26,"n"]],"x":28,"t":1305113714.23997},{"y":5,"x":29,"t":1305113714.45587},{"y":5,"x":28,"t":1305113714.94397},{"y":5,"d":[[4,26," "]],"x":27,"t":1305113715.11984},{"y":5,"d":[[4,25," "]],"x":26,"t":1305113715.27187},{"y":5,"d":[[4,25,"n"]],"x":27,"t":1305113715.472},{"y":5,"d":[[4,26,"e"]],"x":28,"t":1305113715.51969},{"y":5,"x":29,"t":1305113715.60771},{"y":5,"d":[[4,28,"-"]],"x":30,"t":1305113715.75182},{"y":5,"d":[[4,29,"-"]],"x":31,"t":1305113715.92778},{"y":5,"d":[[4,30,"g"]],"x":32,"t":1305113716.00792},{"y":5,"d":[[4,31,"r"]],"x":33,"t":1305113716.15972},{"y":5,"d":[[4,32,"a"]],"x":34,"t":1305113716.28911},{"y":5,"d":[[4,33,"p"]],"x":35,"t":1305113716.4397},{"y":5,"d":[[4,34,"h"]],"x":36,"t":1305113716.55987},{"y":5,"x":37,"t":1305113716.75186},{"y":5,"d":[[4,36,"-"]],"x":38,"t":1305113716.90395},{"y":5,"d":[[4,37,"-"]],"x":39,"t":1305113717.07982},{"y":5,"d":[[4,38,"d"]],"x":40,"t":1305113717.15987},{"y":5,"d":[[4,39,"e"]],"x":41,"t":1305113717.35962},{"y":5,"d":[[4,40,"c"]],"x":42,"t":1305113717.48778},{"y":5,"d":[[4,41,"o"]],"x":43,"t":1305113717.55974},{"y":5,"d":[[4,42,"r"]],"x":44,"t":1305113717.73574},{"y":5,"d":[[4,43,"a"]],"x":45,"t":1305113717.91174},{"y":5,"d":[[4,44,"t"]],"x":46,"t":1305113718.07191},{"y":5,"d":[[4,45,"e"]],"x":47,"t":1305113718.20777},{"y":6,"x":1,"t":1305113718.27965},{"y":14,"d":[[5,0,67,"* 1086811 (HEAD, tag: old_practice, master) Merge commit '6630c7c'"],[6,0,1,"|\\"],[7,0,40,"| * 6630c7c commit in detached HEAD mode."],[8,0,46,"* | 6af1352 does master follow this new commit?"],[9,0,1,"|/"],[10,0,34,"* 0e3a4c9 which version checked in?"],[11,0,25,"* 61b1516 who does commit?"],[12,0,20,"* 3869015 intialized."],[13,0,8,"bash-3.2$"]],"x":11,"f":[[5,4,44,"33333333366663333333333333333333332222223"],[6,0,1,"12"],[7,0,10,"17773333333"],[8,2,10,"273333333"],[9,0,1,["a","2"]],[10,2,8,["a","3"]],["cp",10,11],["cp",10,12]],"B":[[5,13,43,"1111001111111111111111100111111"]],"t":1305113718.29337},{"y":14,"d":[[13,10,"g"]],"x":12,"t":1305113719.63975},{"y":14,"d":[[13,11,"i"]],"x":13,"t":1305113719.73556},{"y":14,"d":[[13,12,"t"]],"x":14,"t":1305113719.82357},{"y":14,"x":15,"t":1305113719.91168},{"y":14,"d":[[13,14,"s"]],"x":16,"t":1305113720.07187},{"y":14,"d":[[13,15,"t"]],"x":17,"t":1305113720.19975},{"y":14,"d":[[13,16,"a"]],"x":18,"t":1305113720.35173},{"y":14,"d":[[13,17,"t"]],"x":19,"t":1305113720.43159},{"y":14,"d":[[13,18,"u"]],"x":20,"t":1305113720.54361},{"y":14,"d":[[13,19,"s"]],"x":21,"t":1305113720.63963},{"y":14,"x":22,"t":1305113720.83955},{"y":14,"d":[[13,21,"-"]],"x":23,"t":1305113720.9275},{"y":14,"d":[[13,22,"s"]],"x":24,"t":1305113721.00761},{"y":15,"x":1,"t":1305113721.19146},{"y":17,"d":[[14,0,12,"A hack-1.txt"],[15,1,13,"M welcome.txt"],[16,0,8,"bash-3.2$"]],"x":11,"f":[[14,0,"2"],[15,1,"1"]],"t":1305113721.19997},{"y":17,"d":[[16,10,"g"]],"x":12,"t":1305113726.54333},{"y":17,"d":[[16,11,"i"]],"x":13,"t":1305113726.63165},{"y":17,"d":[[16,12,"t"]],"x":14,"t":1305113726.71145},{"y":17,"x":15,"t":1305113726.79121},{"y":17,"d":[[16,14,"s"]],"x":16,"t":1305113726.9914},{"y":17,"d":[[16,15,"t"]],"x":17,"t":1305113727.14327},{"y":17,"d":[[16,16,"a"]],"x":18,"t":1305113727.34328},{"y":17,"d":[[16,17,"s"]],"x":19,"t":1305113727.49571},{"y":17,"d":[[16,18,"h"]],"x":20,"t":1305113727.64738},{"y":18,"x":1,"t":1305113729.13512},{"y":20,"d":[[17,0,79,"Saved working directory and index state WIP on master: 1086811 Merge commit '663"],[18,0,4,"0c7c'"]],"x":1,"t":1305113729.54773},{"y":21,"d":[[19,0,44,"HEAD is now at 1086811 Merge commit '6630c7c'"],[20,0,8,"bash-3.2$"]],"x":11,"t":1305113729.55742},{"y":21,"d":[[20,10,"g"]],"x":12,"t":1305113730.25526},{"y":21,"d":[[20,11,"i"]],"x":13,"t":1305113730.32738},{"y":21,"d":[[20,12,"t"]],"x":14,"t":1305113730.42303},{"y":21,"x":15,"t":1305113730.51122},{"y":21,"d":[[20,14,"s"]],"x":16,"t":1305113731.07104},{"y":21,"d":[[20,15,"t"]],"x":17,"t":1305113731.20704},{"y":21,"d":[[20,16,"a"]],"x":18,"t":1305113731.36704},{"y":21,"d":[[20,17,"s"]],"x":19,"t":1305113731.52713},{"y":21,"d":[["cp",16,20]],"x":20,"t":1305113731.6231},{"y":21,"x":21,"t":1305113731.74295},{"y":21,"d":[[20,20,"a"]],"x":22,"t":1305113732.247},{"y":21,"d":[[20,21,"p"]],"x":23,"t":1305113732.43118},{"y":21,"d":[[20,22,"p"]],"x":24,"t":1305113732.58385},{"y":21,"d":[[20,23,"l"]],"x":25,"t":1305113732.74299},{"y":21,"d":[[20,24,"y"]],"x":26,"t":1305113732.95899},{"y":22,"x":1,"t":1305113733.18323},{"y":22,"d":[[21,0,"g"]],"x":2,"t":1305113733.55884},{"y":25,"d":[["cp",9,0],["cp",10,1],["cp",11,2],["cp",12,3],["cp",13,4],["cp",14,5],["cp",15,6],["cp",16,7],["cp",17,8],["cp",18,9],["cp",19,10],["cp",20,11],[12,0,20,"g# On branch master "],[13,0,25,"# Changes to be committed:"],[14,0,46,"# (use \"git reset HEAD ...\" to unstage)"],[15,0,13,"# "],[16,0,29,"# new file: hack-1.txt"],["cp",15,17],[18,0,31,"# Changes not staged for commit:"],[19,0,61,"# (use \"git add ...\" to update what will be committed)"],[20,0,9,"# (use \""],[20,14,76,"checkout -- ...\" to discard changes in working directory)"],["cp",15,21],[22,0,"#"],[22,8,30,"modified: welcome.txt"],["cp",15,23],[24,0,10,"bash-3.2$ g"]],"x":12,"f":[["cp",9,0],["cp",10,1],["cp",1,2],["cp",1,3],["cp",14,5],["cp",15,6],["cp",4,7],["cp",4,8],["cp",4,9],["cp",4,10],["cp",4,11],["cp",4,12],["cp",4,14],["cp",4,15],[16,8,29,["a","2"]],[22,8,30,["a","1"]]],"B":[["cp",0,5]],"t":1305113733.5848},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305113733.66301},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305113733.72691},{"y":25,"x":15,"t":1305113733.8631},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305113734.09491},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305113734.25488},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305113734.42289},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305113734.52494},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305113734.68708},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305113734.86318},{"y":25,"x":22,"t":1305113735.0071},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305113735.16682},{"y":25,"d":[["cp",4,24]],"x":24,"t":1305113735.32689},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",14,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",14,20],["cp",22,21],["cp",14,22],["cp",3,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",4,3],["cp",5,4],["cp",6,5],["cp",3,6],["cp",16,15],["cp",3,16],["cp",22,21],["cp",3,22]],"t":1305113735.44801},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",17,15],["cp",18,16],["cp",19,17],["cp",12,18],["cp",21,19],["cp",1,21],["cp",2,22],["cp",3,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,1],["cp",4,2],["cp",5,3],["cp",1,4],["cp",1,5],["cp",15,13],["cp",1,15],["cp",21,19],["cp",1,21],["cp",2,22],["cp",3,23]],"t":1305113735.46006},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",11,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",11,17],["cp",19,18],["cp",11,19],["cp",0,20],["cp",1,21],["cp",2,22],[23,0,12,"bash-3.2$ exi"],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,3],["cp",13,12],["cp",0,13],["cp",19,18],["cp",0,19],["cp",1,21],["cp",2,22],["cp",0,23]],"t":1305113736.23107}]} \ No newline at end of file diff --git a/html/part2/ch10-02-rm1.html b/html/part2/ch10-02-rm1.html new file mode 100644 index 000000000..165f7681f --- /dev/null +++ b/html/part2/ch10-02-rm1.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch10-02-rm1 +json_file: ch10-02-rm1.json +--- diff --git a/html/part2/ch10-02-rm1.json b/html/part2/ch10-02-rm1.json new file mode 100644 index 000000000..d78623e95 --- /dev/null +++ b/html/part2/ch10-02-rm1.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305113956.73137,"i":1},{"y":1,"d":[[0,10,39,"cd /path/to/my/workspace/demo/"]],"x":11,"t":1305113957.2207},{"y":2,"x":1,"t":1305113957.66853},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305113957.66876},{"y":2,"d":[[1,10,"l"]],"x":12,"t":1305113958.25264},{"y":2,"d":[[1,11,"s"]],"x":13,"t":1305113958.32597},{"y":3,"x":1,"t":1305113958.78243},{"y":4,"d":[[2,0,59,"detached-commit.txt hack-1.txt new-commit.txt welcome.txt"],[3,0,8,"bash-3.2$"]],"x":11,"t":1305113958.78619},{"y":4,"d":[[3,10,"g"]],"x":12,"t":1305113959.31663},{"y":4,"d":[[3,11,"i"]],"x":13,"t":1305113959.40436},{"y":4,"d":[[3,12,"t"]],"x":14,"t":1305113959.5003},{"y":4,"x":15,"t":1305113959.55665},{"y":4,"d":[[3,14,"s"]],"x":16,"t":1305113959.67657},{"y":4,"d":[[3,15,"t"]],"x":17,"t":1305113959.82124},{"y":4,"d":[[3,16,"a"]],"x":18,"t":1305113959.98864},{"y":4,"d":[[3,17,"t"]],"x":19,"t":1305113960.24444},{"y":4,"d":[[3,18,"u"]],"x":20,"t":1305113960.3484},{"y":4,"d":[[3,19,"s"]],"x":21,"t":1305113960.43661},{"y":4,"x":22,"t":1305113960.62041},{"y":4,"d":[[3,21,"-"]],"x":23,"t":1305113960.73238},{"y":4,"d":[[3,22,"s"]],"x":24,"t":1305113960.81246},{"y":5,"x":1,"t":1305113960.94855},{"y":7,"d":[[4,0,12,"A hack-1.txt"],[5,1,13,"M welcome.txt"],[6,0,8,"bash-3.2$"]],"x":11,"f":[[4,0,"2"],[5,1,"1"]],"t":1305113960.95829},{"y":7,"d":[[6,10,"r"]],"x":12,"t":1305113962.88482},{"y":7,"d":[[6,11,"m"]],"x":13,"t":1305113962.98846},{"y":7,"x":14,"t":1305113963.08449},{"y":7,"d":[[6,13,"*"]],"x":15,"t":1305113963.3086},{"y":7,"d":[[6,14,"t"]],"x":16,"t":1305113963.6924},{"y":7,"d":[[6,15,"x"]],"x":17,"t":1305113963.83646},{"y":7,"d":[[6,15," "]],"x":16,"t":1305113964.12422},{"y":7,"d":[[6,14," "]],"x":15,"t":1305113964.3004},{"y":7,"d":[[6,14,"."]],"x":16,"t":1305113964.4845},{"y":7,"d":[[6,15,"t"]],"x":17,"t":1305113964.54822},{"y":7,"d":[[6,16,"x"]],"x":18,"t":1305113964.69224},{"y":7,"d":[[6,17,"t"]],"x":19,"t":1305113964.8042},{"y":8,"x":1,"t":1305113964.92438},{"y":8,"d":[[7,0,8,"bash-3.2$"]],"x":11,"t":1305113964.92834},{"y":8,"d":[[7,10,"g"]],"x":12,"t":1305113965.33254},{"y":8,"d":[[7,11,"i"]],"x":13,"t":1305113965.40429},{"y":8,"d":[[7,12,"t"]],"x":14,"t":1305113965.51616},{"y":8,"x":15,"t":1305113965.58818},{"y":8,"d":[[7,14,"s"]],"x":16,"t":1305113965.78827},{"y":8,"d":[[7,15,"t"]],"x":17,"t":1305113965.89218},{"y":8,"d":[[7,16,"a"]],"x":18,"t":1305113966.06011},{"y":8,"d":[[7,17,"t"]],"x":19,"t":1305113966.15623},{"y":8,"d":[[7,18,"u"]],"x":20,"t":1305113966.26808},{"y":8,"d":[[7,19,"s"]],"x":21,"t":1305113966.33223},{"y":8,"x":22,"t":1305113966.47604},{"y":8,"d":[[7,21,"-"]],"x":23,"t":1305113966.54816},{"y":8,"d":[["cp",3,7]],"x":24,"t":1305113966.65209},{"y":9,"x":1,"t":1305113966.76417},{"y":13,"d":[[8,1,21,"D detached-commit.txt"],[9,0,12,"AD hack-1.txt"],[10,1,16,"D new-commit.txt"],[11,1,13,"D welcome.txt"],[12,0,8,"bash-3.2$"]],"x":11,"f":[["cp",5,8],[9,0,1,"21"],["cp",5,10],["cp",5,11]],"t":1305113966.77196},{"y":13,"d":[[12,10,"g"]],"x":12,"t":1305113967.51627},{"y":13,"d":[[12,11,"i"]],"x":13,"t":1305113967.60424},{"y":13,"d":[[12,12,"t"]],"x":14,"t":1305113967.71627},{"y":13,"x":15,"t":1305113967.78002},{"y":13,"d":[[12,14,"s"]],"x":16,"t":1305113967.94812},{"y":13,"d":[[12,15,"t"]],"x":17,"t":1305113968.0602},{"y":13,"d":[[12,16,"a"]],"x":18,"t":1305113968.22031},{"y":13,"d":[[12,17,"t"]],"x":19,"t":1305113968.33227},{"y":13,"d":[[12,18,"u"]],"x":20,"t":1305113968.47603},{"y":13,"d":[[12,19,"s"]],"x":21,"t":1305113968.54017},{"y":14,"x":1,"t":1305113969.13192},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],[9,0,17,"# On branch master"],[10,0,25,"# Changes to be committed:"],[11,0,46,"# (use \"git reset HEAD ...\" to unstage)"],[12,0,19,"# "],[13,0,"#"],[13,8,29,"new file: hack-1.txt"],["cp",12,14],[15,0,31,"# Changes not staged for commit:"],[16,0,64,"# (use \"git add/rm ...\" to update what will be committed)"],[17,0,76,"# (use \"git checkout -- ...\" to discard changes in working directory)"],["cp",12,18],[19,0,"#"],[19,8,15,"deleted:"],[19,20,38,"detached-commit.txt"],[20,0,"#"],[20,8,15,"deleted:"],[20,20,29,"hack-1.txt"],[21,0,"#"],[21,8,15,"deleted:"],[21,20,33,"new-commit.txt"],[22,0,"#"],[22,8,15,"deleted:"],[22,20,30,"welcome.txt"],["cp",12,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,0],["cp",5,1],["cp",1,4],["cp",9,5],["cp",1,6],["cp",1,7],["cp",2,8],["cp",2,9],["cp",2,10],["cp",2,11],[13,8,29,["a","2"]],[19,8,38,["a","1"]],[20,8,29,["a","1"]],[21,8,33,["a","1"]],[22,8,30,["a","1"]]],"t":1305113969.14736},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305113970.23607},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305113970.32408},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305113970.43617},{"y":25,"x":15,"t":1305113970.49197},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305113970.74791},{"y":25,"d":[[24,15,"s"]],"x":17,"t":1305113970.8761},{"y":25,"d":[[24,16,"-"]],"x":18,"t":1305113971.09989},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305113971.25205},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305113971.34808},{"y":25,"d":[[24,19,"l"]],"x":21,"t":1305113971.42795},{"y":25,"d":[[24,20,"e"]],"x":22,"t":1305113971.48459},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305113971.62004},{"y":25,"x":24,"t":1305113971.77992},{"y":25,"d":[[24,23,"-"]],"x":25,"t":1305113971.93197},{"y":25,"d":[[24,24,"s"]],"x":26,"t":1305113972.11613},{"y":25,"x":27,"t":1305113973.86781},{"y":25,"d":[[24,26,"-"]],"x":28,"t":1305113974.13968},{"y":25,"d":[[24,27,"v"]],"x":29,"t":1305113974.24377},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",11,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",11,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",11,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",0,3],["cp",5,4],["cp",0,5],["cp",1,7],["cp",13,12],["cp",1,13],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",1,22]],"t":1305113974.44381},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",7,9],["cp",14,10],["cp",15,11],["cp",16,12],["cp",18,14],["cp",19,15],["cp",20,16],["cp",21,17],["cp",7,18],["cp",23,19],[20,0,50,"H 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0"],[20,56,74,"detached-commit.txt"],[21,0,50,"H 100644 25735f595470e0e6894159694a4238a3ee8a3df0 0"],[21,56,65,"hack-1.txt"],[22,0,50,"H 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0"],[22,56,69,"new-commit.txt"],[23,0,50,"H 100644 fd3c069c1de4f4bc9b15940f490aeb48852f3c42 0"],[23,56,66,"welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,0],["cp",3,1],["cp",1,2],["cp",7,3],["cp",3,4],["cp",3,5],["cp",3,6],["cp",12,8],["cp",3,12],["cp",18,14],["cp",19,15],["cp",20,16],["cp",21,17],["cp",3,18],["cp",3,19],["cp",3,20],["cp",3,21]],"t":1305113974.45129},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305113986.66735},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305113986.80313},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305113986.87519},{"y":25,"x":15,"t":1305113986.97918},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305113987.43512},{"y":25,"d":[[24,15,"m"]],"x":17,"t":1305113987.66713},{"y":25,"x":18,"t":1305113987.86823},{"y":25,"d":[[24,17,"d"]],"x":19,"t":1305113988.64319},{"y":25,"d":[[24,18,"e"]],"x":20,"t":1305113988.82731},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305113989.05109},{"y":25,"x":21,"t":1305113989.71655},{"y":25,"d":[[24,20,"a"]],"x":22,"t":1305113991.36324},{"y":25,"d":[[24,21,"c"]],"x":23,"t":1305113991.60294},{"y":25,"x":23,"t":1305113991.89244},{"y":25,"d":[[24,22,"h"]],"x":24,"t":1305113992.30695},{"y":25,"d":[[24,23,"e"]],"x":25,"t":1305113992.59502},{"d":[["r","AD hack-1.txt "],["r"," D new-commit.txt "],["r"," D welcome.txt "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","# Changes to be committed: "],["r","# (use \"git reset HEAD ...\" to unstage) "],["r","# "],["r","# new file: hack-1.txt "],["r","# "],["r","# Changes not staged for commit: "],["r","# (use \"git add/rm ...\" to update what will be committed) "],["r","# (use \"git checkout -- ...\" to discard changes in working directory) "],["r","# "],["r","# deleted: detached-commit.txt "],["r","# deleted: hack-1.txt "],["r","# deleted: new-commit.txt "],["r","# deleted: welcome.txt "],["r","# "],["r","bash-3.2$ git ls-files -s -v "],["r","H 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 detached-commit.txt "],["r","H 100644 25735f595470e0e6894159694a4238a3ee8a3df0 0 hack-1.txt "],["r","H 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 new-commit.txt "],["r","H 100644 fd3c069c1de4f4bc9b15940f490aeb48852f3c42 0 welcome.txt "],["r","bash-3.2$ git rm detached "]],"x":26,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","21777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d",["a","7"],"d","d","d","d",["r","77777777222222222222222222222277777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","77777777111111111111111111111111111111177777777777777777777777777777777777777777"],["r","77777777111111111111111111111177777777777777777777777777777777777777777777777777"],["r","77777777111111111111111111111111117777777777777777777777777777777777777777777777"],["r","77777777111111111111111111111117777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305113992.77079,"i":1},{"y":25,"d":[[24,25,"-"]],"x":27,"t":1305113992.97884},{"y":25,"d":[[24,26,"c"]],"x":28,"t":1305113993.21887},{"y":25,"d":[[24,27,"o"]],"x":29,"t":1305113993.30698},{"y":25,"d":[[24,28,"m"]],"x":30,"t":1305113993.47502},{"y":25,"d":[[24,29,"m"]],"x":31,"t":1305113993.651},{"y":25,"d":[[24,30,"i"]],"x":32,"t":1305113993.79493},{"y":25,"d":[[24,31,"t"]],"x":33,"t":1305113993.85907},{"y":25,"d":[[24,32,"."]],"x":34,"t":1305113994.01902},{"y":25,"d":[[24,33,"t"]],"x":35,"t":1305113994.16303},{"y":25,"d":[[24,34,"x"]],"x":36,"t":1305113994.31478},{"y":25,"d":[[24,35,"t"]],"x":37,"t":1305113994.40304},{"y":25,"x":38,"t":1305113994.54714},{"y":25,"d":[[24,37,"h"]],"x":39,"t":1305113996.65894},{"y":25,"d":[[24,38,"a"]],"x":40,"t":1305113996.73094},{"y":25,"d":[[24,39,"c"]],"x":41,"t":1305113996.88305},{"y":25,"d":[[24,40,"k"]],"x":42,"t":1305113996.97073},{"y":25,"d":[[24,41,"-"]],"x":43,"t":1305113997.30691},{"y":25,"d":[[24,42,"1"]],"x":44,"t":1305113997.49067},{"y":25,"d":[[24,43,"."]],"x":45,"t":1305113997.71457},{"y":25,"d":[[24,44,"t"]],"x":46,"t":1305113997.85877},{"y":25,"d":[[24,45,"x"]],"x":47,"t":1305113998.02792},{"y":25,"d":[[24,46,"t"]],"x":48,"t":1305113998.13067},{"y":25,"x":49,"t":1305113998.31511},{"y":25,"d":[[24,48,"n"]],"x":50,"t":1305113999.30689},{"y":25,"d":[[24,49,"e"]],"x":51,"t":1305113999.37872},{"y":25,"d":[[24,50,"w"]],"x":52,"t":1305113999.50666},{"y":25,"d":[[24,51,"-"]],"x":53,"t":1305113999.74796},{"y":25,"d":[[24,52,"c"]],"x":54,"t":1305113999.97867},{"y":25,"d":[[24,53,"o"]],"x":55,"t":1305114000.03464},{"y":25,"d":[[24,54,"m"]],"x":56,"t":1305114000.20275},{"y":25,"d":[[24,55,"m"]],"x":57,"t":1305114000.3706},{"y":25,"d":[[24,56,"i"]],"x":58,"t":1305114000.53049},{"y":25,"d":[[24,57,"t"]],"x":59,"t":1305114000.62648},{"y":25,"d":[[24,58,"."]],"x":60,"t":1305114001.13052},{"y":25,"d":[[24,59,"t"]],"x":61,"t":1305114001.27459},{"y":25,"d":[[24,60,"x"]],"x":62,"t":1305114001.40253},{"y":25,"d":[[24,61,"t"]],"x":63,"t":1305114001.50639},{"y":25,"x":64,"t":1305114001.61843},{"y":25,"d":[[24,63,"w"]],"x":65,"t":1305114001.85046},{"y":25,"d":[[24,64,"e"]],"x":66,"t":1305114001.98666},{"y":25,"d":[[24,65,"l"]],"x":67,"t":1305114002.09856},{"y":25,"d":[[24,66,"c"]],"x":68,"t":1305114002.23463},{"y":25,"d":[[24,67,"o"]],"x":69,"t":1305114002.30644},{"y":25,"d":[[24,68,"m"]],"x":70,"t":1305114002.47467},{"y":25,"d":[[24,69,"e"]],"x":71,"t":1305114002.57066},{"y":25,"d":[[24,70,"."]],"x":72,"t":1305114002.72248},{"y":25,"d":[[24,71,"t"]],"x":73,"t":1305114002.82649},{"y":25,"d":[[24,72,"x"]],"x":74,"t":1305114002.96266},{"y":25,"d":[[24,73,"t"]],"x":75,"t":1305114003.06654},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",6,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",6,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",6,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",3,2],["cp",8,7],["cp",2,8],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",2,17]],"t":1305114003.18641},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",2,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",13,9],["cp",14,10],["cp",15,11],["cp",16,12],["cp",2,13],["cp",18,14],["cp",19,15],["cp",20,16],["cp",21,17],["cp",22,18],["cp",23,19],[20,0,50,"rm 'detached-commit.txt' "],[20,56,65,["a"," "]],[21,0,50,"rm 'hack-1.txt' "],[21,56,69,["a"," "]],[22,0,50,"rm 'new-commit.txt' "],[22,56,66,["a"," "]],[23,0,73,"rm 'welcome.txt' "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",0,1],["cp",7,3],["cp",0,7],["cp",13,9],["cp",14,10],["cp",15,11],["cp",16,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16]],"t":1305114003.19556},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114004.21048},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114004.29866},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114004.3798},{"y":25,"x":15,"t":1305114004.44237},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305114004.59432},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305114004.71462},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305114004.85835},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305114004.96349},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305114005.02622},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305114005.11439},{"y":25,"x":22,"t":1305114005.40244},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",1,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",1,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",0,3],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",0,12]],"t":1305114006.69862},{"y":25,"d":[["cp",8,0],["cp",9,1],["cp",10,2],["cp",11,3],["cp",7,4],["cp",13,5],["cp",14,6],["cp",15,7],["cp",16,8],["cp",17,9],["cp",18,10],["cp",19,11],["cp",20,12],["cp",21,13],["cp",22,14],["cp",23,15],[16,0,50,"# On branch master "],[16,56,69,["a"," "]],[17,0,50,"# Changes to be committed: "],[17,56,66,["a"," "]],[18,0,9,"# (use \""],[18,15,73,"eset HEAD ...\" to unstage) "],["cp",4,19],["cp",0,20],["cp",2,21],["cp",3,22],["cp",4,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",8,0],["cp",9,1],["cp",10,2],["cp",11,3],["cp",4,8],["cp",4,9],["cp",4,10],["cp",4,11],[20,8,38,["a","2"]],[21,8,33,["a","2"]],[22,8,30,["a","2"]]],"t":1305114006.70654},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114010.45023},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114010.59438},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114010.67415},{"y":25,"x":15,"t":1305114010.7706},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305114010.91407},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305114010.97827},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305114011.13014},{"y":25,"d":[[24,17,"m"]],"x":19,"t":1305114011.29849},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305114011.4501},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305114011.48207},{"y":25,"x":22,"t":1305114011.58605},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305114011.72998},{"y":25,"d":[[24,22,"m"]],"x":24,"t":1305114011.9542},{"y":25,"x":25,"t":1305114012.05809},{"y":25,"d":[[24,24,"\""]],"x":26,"t":1305114012.37816},{"y":25,"d":[[24,25,"d"]],"x":27,"t":1305114012.56214},{"y":25,"d":[[24,26,"e"]],"x":28,"t":1305114012.72201},{"y":25,"d":[[24,27,"l"]],"x":29,"t":1305114012.88208},{"y":25,"d":[[24,28,"e"]],"x":30,"t":1305114012.96989},{"y":25,"d":[[24,29,"t"]],"x":31,"t":1305114013.13794},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305114013.30598},{"y":25,"x":33,"t":1305114013.76208},{"y":25,"d":[[24,32,"t"]],"x":34,"t":1305114014.20994},{"y":25,"d":[[24,33,"r"]],"x":35,"t":1305114014.74587},{"y":25,"d":[[24,34,"a"]],"x":36,"t":1305114014.90609},{"y":25,"d":[[24,35,"s"]],"x":37,"t":1305114015.10598},{"y":25,"d":[[24,36,"h"]],"x":38,"t":1305114015.18587},{"y":25,"x":39,"t":1305114015.34587},{"y":25,"d":[[24,38,"f"]],"x":40,"t":1305114015.50638},{"y":25,"d":[[24,39,"i"]],"x":41,"t":1305114015.56977},{"y":25,"d":[[24,40,"l"]],"x":42,"t":1305114015.6819},{"y":25,"d":[[24,41,"e"]],"x":43,"t":1305114015.78596},{"y":25,"d":[[24,42,"s"]],"x":44,"t":1305114015.92992},{"y":25,"d":[[24,43,"."]],"x":45,"t":1305114016.3619},{"y":25,"x":46,"t":1305114017.13878},{"d":[["r","# deleted: detached-commit.txt "],["r","# deleted: hack-1.txt "],["r","# deleted: new-commit.txt "],["r","# deleted: welcome.txt "],["r","# "],["r","bash-3.2$ git ls-files -s -v "],["r","H 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 detached-commit.txt "],["r","H 100644 25735f595470e0e6894159694a4238a3ee8a3df0 0 hack-1.txt "],["r","H 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 new-commit.txt "],["r","H 100644 fd3c069c1de4f4bc9b15940f490aeb48852f3c42 0 welcome.txt "],["r","bash-3.2$ git rm detached-commit.txt hack-1.txt new-commit.txt welcome.txt "],["r","rm 'detached-commit.txt' "],["r","rm 'hack-1.txt' "],["r","rm 'new-commit.txt' "],["r","rm 'welcome.txt' "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","# Changes to be committed: "],["r","# (use \"git reset HEAD ...\" to unstage) "],["r","# "],["r","# deleted: detached-commit.txt "],["r","# deleted: new-commit.txt "],["r","# deleted: welcome.txt "],["r","# "],["r","bash-3.2$ git commit -m \"delete trash files. ( "]],"x":47,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","77777777111111111111111111111111111111177777777777777777777777777777777777777777"],["r","77777777111111111111111111111177777777777777777777777777777777777777777777777777"],["r","77777777111111111111111111111111117777777777777777777777777777777777777777777777"],["r","77777777111111111111111111111117777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["r","77777777222222222222222222222222222222277777777777777777777777777777777777777777"],["r","77777777222222222222222222222222227777777777777777777777777777777777777777777777"],["r","77777777222222222222222222222227777777777777777777777777777777777777777777777777"],["a","7"],"d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305114017.38585,"i":1},{"y":25,"d":[[24,46,"u"]],"x":48,"t":1305114017.906},{"y":25,"d":[[24,47,"s"]],"x":49,"t":1305114018.02598},{"y":25,"d":[[24,48,"i"]],"x":50,"t":1305114018.08977},{"y":25,"d":[[24,49,"n"]],"x":51,"t":1305114018.22572},{"y":25,"d":[[24,50,"g"]],"x":52,"t":1305114018.32982},{"y":25,"x":53,"t":1305114018.54564},{"y":25,"d":[[24,52,"g"]],"x":54,"t":1305114019.24168},{"y":25,"d":[[24,53,"i"]],"x":55,"t":1305114019.30572},{"y":25,"d":[[24,54,"t"]],"x":56,"t":1305114019.44169},{"y":25,"x":57,"t":1305114019.50599},{"y":25,"d":[[24,56,"r"]],"x":58,"t":1305114019.68179},{"y":25,"d":[[24,57,"m"]],"x":59,"t":1305114019.8179},{"y":25,"d":[[24,58,")"]],"x":60,"t":1305114020.54577},{"y":25,"d":[[24,59,"\""]],"x":61,"t":1305114021.37774},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",3,18],["cp",20,19],["cp",1,20],["cp",2,21],["cp",3,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",20,19],["cp",21,20],["cp",22,21],["cp",3,22]],"t":1305114022.59367},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",2,17],["cp",19,18],["cp",0,19],["cp",1,20],["cp",2,21],["cp",23,22],[23,0,59,"[master 0518edb] delete trash files. (using git rm) "]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",19,18],["cp",20,19],["cp",21,20],["cp",2,21]],"t":1305114022.89546},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",13,9],["cp",14,10],["cp",15,11],["cp",16,12],["cp",17,13],["cp",18,14],["cp",19,15],["cp",20,16],["cp",22,18],["cp",23,19],[20,0,48," 1 files changed, 0 insertions(+), 2 deletions(-)"],[21,0,38," delete mode 100644 detached-commit.txt"],[22,0,59," delete mode 100644 new-commit.txt "],[23,0,50," delete mode 100644 welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",0,1],["cp",18,14],["cp",19,15],["cp",20,16],["cp",0,18],["cp",0,19],["cp",0,20]],"t":1305114022.8968},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114024.21764},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114024.2814},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114024.42546},{"y":25,"x":15,"t":1305114024.48146},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305114025.39343},{"y":25,"d":[[24,15,"s"]],"x":17,"t":1305114025.45768},{"y":25,"d":[[24,16,"-"]],"x":18,"t":1305114025.68944},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305114025.87343},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305114025.96142},{"y":25,"d":[[24,19,"l"]],"x":21,"t":1305114026.0572},{"y":25,"d":[[24,20,"e"]],"x":22,"t":1305114026.09754},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305114026.21752},{"y":25,"x":24,"t":1305114027.08926},{"y":25,"d":[[24,23,"-"]],"x":25,"t":1305114027.34582},{"y":25,"d":[[24,24,"s"]],"x":26,"t":1305114027.4413},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",12,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",14,13],["cp",15,14],["cp",16,15],["cp",0,16]],"t":1305114027.59328},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305114027.59924},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114028.39342},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114028.4736},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114028.60143},{"y":25,"x":15,"t":1305114028.66555},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305114029.05755},{"y":25,"d":[[24,15,"s"]],"x":17,"t":1305114029.19328},{"y":25,"d":[[24,16,"-"]],"x":18,"t":1305114030.09741},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305114030.24109},{"y":25,"d":[[24,18,"r"]],"x":20,"t":1305114030.40932},{"y":25,"d":[[24,19,"e"]],"x":21,"t":1305114030.56132},{"y":25,"d":[[24,20,"e"]],"x":22,"t":1305114030.76922},{"y":25,"x":23,"t":1305114031.28916},{"y":25,"d":[[24,22,"-"]],"x":24,"t":1305114031.86619},{"y":25,"d":[[24,23,"l"]],"x":25,"t":1305114032.07326},{"y":25,"x":26,"t":1305114032.18513},{"y":25,"d":[[24,25,"H"]],"x":27,"t":1305114032.68919},{"y":25,"d":[[24,26,"E"]],"x":28,"t":1305114032.77714},{"y":25,"d":[[24,27,"A"]],"x":29,"t":1305114032.92926},{"y":25,"d":[[24,28,"D"]],"x":30,"t":1305114033.00117},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",11,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",13,12],["cp",14,13],["cp",15,14],["cp",0,15]],"t":1305114033.26485},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305114033.27228},{"y":25,"d":[["cp",23,24]],"x":30,"t":1305114033.94505},{"y":25,"d":[[24,29,"^"]],"x":31,"t":1305114034.74518},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",10,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",12,11],["cp",13,12],["cp",14,13],["cp",0,14]],"t":1305114034.97702},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",13,9],["cp",15,11],["cp",16,12],["cp",17,13],["cp",18,14],["cp",19,15],["cp",20,16],["cp",21,17],["cp",22,18],["cp",23,19],[20,0,51,"100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"],[20,59,"0"],[20,64,79,"detached-commit."],[21,0,24,"txt "],[22,0,51,"100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"],[22,59,"0"],[22,64,77,"new-commit.txt"],[23,0,51,"100644 blob fd3c069c1de4f4bc9b15940f490aeb48852f3c42"],[23,58,59,"25"],[23,64,74,"welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",11,7],["cp",12,8],["cp",13,9],["cp",0,11],["cp",0,12],["cp",0,13]],"t":1305114034.98609},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114041.04069},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114041.11278},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114041.19293},{"y":25,"x":15,"t":1305114041.28093},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305114041.46463},{"y":25,"d":[[24,15,"a"]],"x":17,"t":1305114041.59261},{"y":25,"d":[[24,16,"t"]],"x":18,"t":1305114041.66485},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305114041.86528},{"y":25,"d":[[24,18,"f"]],"x":20,"t":1305114041.99257},{"y":25,"d":[[24,19,"l"]],"x":21,"t":1305114042.15274},{"y":25,"d":[[24,19," "]],"x":20,"t":1305114042.8247},{"y":25,"d":[[24,19,"i"]],"x":21,"t":1305114043.0248},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305114043.16884},{"y":25,"d":[[24,21,"e"]],"x":23,"t":1305114043.29653},{"y":25,"x":24,"t":1305114043.41688},{"y":25,"d":[[24,23,"-"]],"x":25,"t":1305114043.72881},{"y":25,"d":[[24,24,"p"]],"x":26,"t":1305114044.04855},{"y":25,"x":27,"t":1305114044.23249},{"y":25,"d":[[24,26,"H"]],"x":28,"t":1305114044.63275},{"y":25,"d":[[24,27,"E"]],"x":29,"t":1305114044.71257},{"y":25,"d":[[24,28,"A"]],"x":30,"t":1305114044.84866},{"y":25,"d":[[24,29,"D"]],"x":31,"t":1305114044.95277},{"y":25,"d":[[24,30,"^"]],"x":32,"t":1305114045.79291},{"y":25,"d":[[24,31,":"]],"x":33,"t":1305114046.28059},{"y":25,"d":[[24,32,"w"]],"x":34,"t":1305114047.36842},{"y":25,"d":[[24,33,"e"]],"x":35,"t":1305114047.50444},{"y":25,"d":[[24,34,"l"]],"x":36,"t":1305114047.64082},{"y":25,"d":[[24,35,"c"]],"x":37,"t":1305114047.76042},{"y":25,"d":[[24,36,"o"]],"x":38,"t":1305114047.84834},{"y":25,"d":[[24,37,"m"]],"x":39,"t":1305114048.00039},{"y":25,"d":[[24,38,"e"]],"x":40,"t":1305114048.10452},{"y":25,"d":[[24,39,"."]],"x":41,"t":1305114048.23252},{"y":25,"d":[[24,40,"t"]],"x":42,"t":1305114048.32839},{"y":25,"d":[[24,41,"x"]],"x":43,"t":1305114048.48839},{"y":25,"d":[[24,42,"t"]],"x":44,"t":1305114048.58446},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",5,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",7,6],["cp",8,7],["cp",9,8],["cp",0,9]],"t":1305114048.68041},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",3,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,51,"Hello. "],[22,58,59,["a"," "]],[22,64,74,["a"," "]],[23,0,42,"Nice to meet you. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",6,4],["cp",7,5],["cp",8,6],["cp",0,7],["cp",0,8]],"t":1305114048.68792},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",2,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,16,"bash-3.2$ exit "],[24,["a"," "]]],"x":1,"f":[["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6]],"t":1305114052.72888}]} \ No newline at end of file diff --git a/html/part2/ch10-03-rm2.html b/html/part2/ch10-03-rm2.html new file mode 100644 index 000000000..113a26b17 --- /dev/null +++ b/html/part2/ch10-03-rm2.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch10-03-rm2 +json_file: ch10-03-rm2.json +--- diff --git a/html/part2/ch10-03-rm2.json b/html/part2/ch10-03-rm2.json new file mode 100644 index 000000000..af356a1a7 --- /dev/null +++ b/html/part2/ch10-03-rm2.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305114128.59503,"i":1},{"y":1,"d":[[0,10,39,"cd /path/to/my/workspace/demo/"]],"x":11,"t":1305114129.0128},{"y":2,"x":1,"t":1305114129.26057},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305114129.26083},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305114131.16478},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305114131.26055},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305114131.39648},{"y":2,"x":15,"t":1305114131.45255},{"y":2,"d":[[1,14,"l"]],"x":16,"t":1305114132.94839},{"y":2,"d":[[1,15,"o"]],"x":17,"t":1305114133.13274},{"y":2,"d":[[1,16,"g"]],"x":18,"t":1305114133.21256},{"y":2,"x":19,"t":1305114133.76451},{"y":2,"d":[[1,18,"-"]],"x":20,"t":1305114133.93271},{"y":2,"d":[[1,19,"-"]],"x":21,"t":1305114134.1083},{"y":2,"d":[[1,20,"o"]],"x":22,"t":1305114134.28434},{"y":2,"d":[[1,21,"n"]],"x":23,"t":1305114134.4126},{"y":2,"d":[[1,22,"e"]],"x":24,"t":1305114134.49219},{"y":2,"d":[[1,23,"l"]],"x":25,"t":1305114134.60434},{"y":2,"d":[[1,24,"i"]],"x":26,"t":1305114134.78039},{"y":2,"d":[[1,25,"n"]],"x":27,"t":1305114134.9006},{"y":2,"d":[[1,26,"e"]],"x":28,"t":1305114134.94044},{"y":2,"x":29,"t":1305114135.02831},{"y":2,"d":[[1,28,"-"]],"x":30,"t":1305114135.1404},{"y":2,"d":[[1,29,"-"]],"x":31,"t":1305114135.30034},{"y":2,"d":[[1,30,"g"]],"x":32,"t":1305114135.34047},{"y":2,"d":[[1,31,"r"]],"x":33,"t":1305114135.50019},{"y":2,"d":[[1,32,"a"]],"x":34,"t":1305114135.64443},{"y":2,"d":[[1,33,"p"]],"x":35,"t":1305114135.79612},{"y":2,"d":[[1,34,"h"]],"x":36,"t":1305114135.93223},{"y":3,"x":1,"t":1305114136.50126},{"y":12,"d":[[2,0,43,"* 0518edb delete trash files. (using git rm)"],[3,0,33,"* 1086811 Merge commit '6630c7c'"],[4,0,1,"|\\"],[5,0,40,"| * 6630c7c commit in detached HEAD mode."],[6,0,46,"* | 6af1352 does master follow this new commit?"],[7,0,1,"|/"],[8,0,34,"* 0e3a4c9 which version checked in?"],[9,0,25,"* 61b1516 who does commit?"],[10,0,20,"* 3869015 intialized."],[11,0,8,"bash-3.2$"]],"x":11,"f":[[2,2,8,["a","3"]],[3,4,10,["a","3"]],[4,0,1,"23"],[5,0,10,"27773333333"],[6,2,10,"373333333"],[7,0,1,["a","3"]],["cp",2,8],["cp",2,9],["cp",2,10]],"t":1305114136.51381},{"y":12,"d":[[11,10,"g"]],"x":12,"t":1305114138.1082},{"y":12,"d":[[11,11,"i"]],"x":13,"t":1305114138.20422},{"y":12,"d":[[11,12,"t"]],"x":14,"t":1305114138.30841},{"y":12,"x":15,"t":1305114138.36426},{"y":12,"d":[[11,14,"r"]],"x":16,"t":1305114138.56448},{"y":12,"d":[[11,15,"e"]],"x":17,"t":1305114138.70036},{"y":12,"d":[[11,16,"s"]],"x":18,"t":1305114138.86826},{"y":12,"d":[[11,17,"e"]],"x":19,"t":1305114138.91651},{"y":12,"d":[[11,18,"t"]],"x":20,"t":1305114139.21245},{"y":12,"x":21,"t":1305114139.46803},{"y":12,"d":[[11,20,"-"]],"x":22,"t":1305114139.70795},{"y":12,"d":[[11,21,"-"]],"x":23,"t":1305114139.89202},{"y":12,"d":[[11,22,"h"]],"x":24,"t":1305114140.14843},{"y":12,"d":[[11,23,"a"]],"x":25,"t":1305114140.21344},{"y":12,"d":[[11,24,"r"]],"x":26,"t":1305114140.33233},{"y":12,"d":[[11,25,"d"]],"x":27,"t":1305114140.50007},{"y":12,"x":28,"t":1305114140.64417},{"y":12,"d":[[11,27,"H"]],"x":29,"t":1305114140.88411},{"y":12,"d":[[11,28,"E"]],"x":30,"t":1305114140.95608},{"y":12,"d":[[11,29,"A"]],"x":31,"t":1305114141.11604},{"y":12,"d":[[11,30,"D"]],"x":32,"t":1305114141.196},{"y":12,"d":[[11,31,"^"]],"x":33,"t":1305114141.92409},{"y":13,"x":1,"t":1305114142.14823},{"y":14,"d":[[12,0,44,"HEAD is now at 1086811 Merge commit '6630c7c'"],[13,0,8,"bash-3.2$"]],"x":11,"t":1305114142.16126},{"y":14,"d":[["cp",11,13]],"x":11,"t":1305114143.65207},{"y":14,"d":[["cp",1,13]],"x":11,"t":1305114143.80433},{"y":15,"x":1,"t":1305114144.25202},{"y":23,"d":[["cp",3,14],["cp",4,15],["cp",5,16],["cp",6,17],["cp",7,18],["cp",8,19],["cp",9,20],["cp",10,21],[22,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,14],[15,0,1,"12"],[16,0,10,"17773333333"],[17,2,10,"273333333"],[18,0,1,["a","2"]],["cp",2,19],["cp",2,20],["cp",2,21]],"t":1305114144.2656},{"y":23,"d":[[22,10,"g"]],"x":12,"t":1305114145.49183},{"y":23,"d":[[22,11,"i"]],"x":13,"t":1305114145.59588},{"y":23,"d":[[22,12,"t"]],"x":14,"t":1305114145.69187},{"y":23,"x":15,"t":1305114145.75571},{"y":23,"d":[[22,14,"s"]],"x":16,"t":1305114145.89181},{"y":23,"d":[[22,15,"t"]],"x":17,"t":1305114146.02799},{"y":23,"d":[[22,16,"a"]],"x":18,"t":1305114146.19571},{"y":23,"d":[[22,17,"s"]],"x":19,"t":1305114146.32396},{"y":23,"d":[[22,18,"h"]],"x":20,"t":1305114146.42792},{"y":23,"x":21,"t":1305114146.65189},{"y":23,"d":[[22,20,"a"]],"x":22,"t":1305114147.18789},{"y":23,"d":[[22,21,"p"]],"x":23,"t":1305114147.31594},{"y":23,"d":[[22,22,"p"]],"x":24,"t":1305114147.46003},{"y":23,"d":[[22,23,"l"]],"x":25,"t":1305114147.6199},{"y":23,"d":[[22,24,"y"]],"x":26,"t":1305114147.83564},{"y":23,"x":27,"t":1305114149.19563},{"y":24,"x":1,"t":1305114149.34767},{"y":25,"d":[[23,0,17,"# On branch master"]],"x":1,"t":1305114149.75185},{"y":25,"d":[["cp",11,0],["cp",12,1],["cp",13,2],["cp",22,11],["cp",23,12],[13,0,34,"# Changes to be committed: "],[14,0,46,"# (use \"git reset HEAD ...\" to unstage)"],[15,0,1,"# "],[16,0,40,"# new file: hack-1.txt "],["cp",15,17],[18,0,31,"# Changes not staged for commit:"],[19,0,61,"# (use \"git add ...\" to update what will be committed)"],[20,0,76,"# (use \"git checkout -- ...\" to discard changes in working directory)"],["cp",15,21],[22,0,30,"# modified: welcome.txt"],["cp",15,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,2],["cp",15,4],["cp",16,5],["cp",17,6],["cp",18,7],["cp",0,14],["cp",0,15],[16,0,29,"777777772222222222222222222222"],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21],[22,8,30,["a","1"]]],"t":1305114149.75652},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114150.38},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114150.48357},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114150.58769},{"y":25,"x":15,"t":1305114150.6437},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305114150.76368},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305114150.88372},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305114151.03568},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305114151.1397},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305114151.27587},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305114151.33959},{"y":25,"x":22,"t":1305114151.5077},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305114151.58741},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305114151.69958},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",14,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",14,20],["cp",22,21],["cp",14,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",0,10],["cp",16,15],["cp",0,16],["cp",22,21],["cp",0,22]],"t":1305114151.81946},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",17,15],["cp",18,16],["cp",19,17],["cp",12,18],["cp",21,19],["cp",23,21],[22,0,12,"A hack-1.txt"],[23,0,22," M welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",5,6],["cp",10,8],["cp",8,9],["cp",15,13],["cp",8,15],["cp",21,19],["cp",8,21],[22,0,"2"],[23,1,"1"]],"t":1305114151.83128},{"y":25,"d":[[24,10,"r"]],"x":12,"t":1305114154.74779},{"y":25,"d":[[24,11,"m"]],"x":13,"t":1305114154.87538},{"y":25,"x":14,"t":1305114154.92346},{"y":25,"d":[[24,13,"*"]],"x":15,"t":1305114155.17953},{"y":25,"d":[[24,14,"."]],"x":16,"t":1305114155.53941},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305114155.67552},{"y":25,"d":[[24,16,"x"]],"x":18,"t":1305114155.82748},{"d":[["r","* 1086811 Merge commit '6630c7c' "],["r","|\\ "],["r","| * 6630c7c commit in detached HEAD mode. "],["r","* | 6af1352 does master follow this new commit? "],["r","|/ "],["r","* 0e3a4c9 which version checked in? "],["r","* 61b1516 who does commit? "],["r","* 3869015 intialized. "],["r","bash-3.2$ git stash apply "],["r","# On branch master "],["r","# Changes to be committed: "],["r","# (use \"git reset HEAD ...\" to unstage) "],["r","# "],["r","# new file: hack-1.txt "],["r","# "],["r","# Changes not staged for commit: "],["r","# (use \"git add ...\" to update what will be committed) "],["r","# (use \"git checkout -- ...\" to discard changes in working directory) "],["r","# "],["r","# modified: welcome.txt "],["r","# "],["r","bash-3.2$ git status -s "],["r","A hack-1.txt "],["r"," M welcome.txt "],["r","bash-3.2$ rm *.txt "]],"x":19,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","77773333333777777777777777777777777777777777777777777777777777777777777777777777"],["r","12777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","17773333333777777777777777777777777777777777777777777777777777777777777777777777"],["r","77273333333777777777777777777777777777777777777777777777777777777777777777777777"],["r","22777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","77333333377777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"],"d","d","d","d",["r","77777777222222222222222222222277777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","77777777111111111111111111111117777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305114155.93944,"i":1},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",11,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",11,17],["cp",19,18],["cp",11,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",8,7],["cp",13,12],["cp",7,13],["cp",19,18],["cp",7,19],["cp",22,21],["cp",23,22],["cp",7,23]],"t":1305114156.97132},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305114156.97505},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114157.37129},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114157.44352},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114157.55543},{"y":25,"x":15,"t":1305114157.60322},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305114157.73922},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305114157.85123},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305114158.0035},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305114158.09125},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305114158.24318},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305114158.33127},{"y":25,"x":22,"t":1305114158.5474},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305114158.64334},{"y":25,"d":[["cp",20,24]],"x":24,"t":1305114158.74718},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",10,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",10,16],["cp",18,17],["cp",10,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",19,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",7,6],["cp",12,11],["cp",6,12],["cp",18,17],["cp",6,18],["cp",21,20],["cp",22,21],["cp",6,22]],"t":1305114158.88325},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",6,8],["cp",13,9],["cp",14,10],["cp",15,11],["cp",17,13],["cp",6,14],["cp",19,15],["cp",20,16],["cp",21,17],["cp",22,18],[20,0,21," D detached-commit.txt"],[21,0,13,"AD hack-1.txt "],[22,0,17," D new-commit.txt "],[23,0,22," D welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,0],["cp",0,1],["cp",6,2],["cp",2,3],["cp",2,4],["cp",2,5],["cp",11,7],["cp",2,11],["cp",17,13],["cp",20,16],["cp",21,17],["cp",17,20],[21,0,"2"],["cp",17,22],["cp",17,23]],"t":1305114158.89186},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114160.63542},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114160.71549},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114160.82711},{"y":25,"x":15,"t":1305114160.89111},{"y":25,"d":[[24,14,"a"]],"x":16,"t":1305114161.01926},{"y":25,"d":[[24,15,"d"]],"x":17,"t":1305114161.19501},{"y":25,"d":[[24,16,"d"]],"x":18,"t":1305114161.34714},{"y":25,"x":19,"t":1305114161.43503},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305114161.52305},{"y":25,"d":[[24,19,"u"]],"x":21,"t":1305114161.77926},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",5,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",5,11],["cp",13,12],["cp",5,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",14,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",7,6],["cp",1,7],["cp",13,12],["cp",1,13],["cp",16,15],["cp",17,16],["cp",1,17],["cp",16,19],["cp",21,20],["cp",16,21],["cp",1,23]],"t":1305114162.64298},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305114162.64959},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114163.23498},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114163.31496},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114163.42689},{"y":25,"x":15,"t":1305114163.48291},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305114163.6191},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305114163.75515},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305114163.92317},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305114164.01116},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305114164.12287},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305114164.19508},{"y":25,"x":22,"t":1305114164.35491},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305114164.45898},{"y":25,"d":[["cp",14,24]],"x":24,"t":1305114164.56297},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",4,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",4,10],["cp",12,11],["cp",4,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",13,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",13,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",6,5],["cp",0,6],["cp",12,11],["cp",0,12],["cp",15,14],["cp",16,15],["cp",0,16],["cp",15,18],["cp",20,19],["cp",15,20],["cp",0,22]],"t":1305114164.71507},{"y":25,"d":[["cp",3,0],["cp",4,1],["cp",5,2],["cp",1,3],["cp",7,4],["cp",8,5],["cp",9,6],["cp",1,7],["cp",11,8],["cp",1,9],["cp",13,10],["cp",14,11],["cp",15,12],["cp",16,13],["cp",10,14],["cp",18,15],["cp",19,16],["cp",20,17],["cp",21,18],["cp",22,19],["cp",10,20],[21,0,21,"D detached-commit.txt"],[22,0,19,"D new-commit.txt "],[23,0,22,"D welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",5,2],["cp",0,5],["cp",11,8],["cp",14,11],["cp",15,12],["cp",0,14],["cp",19,16],["cp",12,17],["cp",0,19],["cp",0,20],["cp",11,21],["cp",11,22],["cp",11,23]],"t":1305114164.72344},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114167.35501},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114167.43484},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114167.55496},{"y":25,"x":15,"t":1305114167.61104},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305114168.21873},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305114168.37069},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305114168.53092},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305114168.61893},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305114168.73078},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305114168.7867},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",8,7],["cp",0,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",9,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",9,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,2],["cp",8,7],["cp",0,8],["cp",11,10],["cp",12,11],["cp",0,12],["cp",11,14],["cp",16,15],["cp",11,16],["cp",0,18],["cp",10,20],["cp",0,23]],"t":1305114168.93884},{"y":25,"d":[["cp",9,1],["cp",10,2],["cp",11,3],["cp",12,4],["cp",1,5],["cp",14,6],["cp",15,7],["cp",16,8],["cp",17,9],["cp",18,10],["cp",1,11],["cp",20,12],["cp",21,13],["cp",22,14],["cp",23,15],[16,0,17,"# On branch master"],[17,0,25,"# Changes to be committed:"],[18,0,9,"# (use \""],[18,14,46,"reset HEAD ...\" to unstage)"],["cp",0,19],[20,0,38,"# deleted: detached-commit.txt"],[21,0,33,"# deleted: new-commit.txt"],[22,0,15,"# deleted:"],[22,20,30,"welcome.txt"],["cp",0,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,1],["cp",10,2],["cp",11,3],["cp",3,6],["cp",15,7],["cp",3,8],["cp",3,9],["cp",0,10],["cp",0,11],["cp",2,12],["cp",2,13],["cp",2,14],["cp",0,15],["cp",0,16],["cp",0,17],[20,0,"7"],[20,8,38,["a","2"]],[21,0,"7"],[21,8,33,["a","2"]],[22,0,"7"],[22,8,30,["a","2"]]],"t":1305114168.94782},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114169.49086},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114169.56278},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114169.6668},{"y":25,"x":15,"t":1305114169.73072},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305114169.87478},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305114169.96278},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305114170.13079},{"y":25,"d":[[24,17,"m"]],"x":19,"t":1305114170.29872},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305114170.45884},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305114170.57083},{"y":25,"x":22,"t":1305114170.67481},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305114171.29067},{"y":25,"d":[[24,22,"m"]],"x":24,"t":1305114171.6189},{"y":25,"x":25,"t":1305114171.77861},{"y":25,"d":[[24,24,"\""]],"x":26,"t":1305114172.0828},{"y":25,"d":[[24,25,"d"]],"x":27,"t":1305114172.25072},{"y":25,"d":[[24,26,"e"]],"x":28,"t":1305114172.41044},{"y":25,"d":[[24,27,"l"]],"x":29,"t":1305114172.57052},{"y":25,"d":[[24,28,"e"]],"x":30,"t":1305114172.71472},{"y":25,"d":[[24,29,"t"]],"x":31,"t":1305114172.90685},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305114173.07472},{"y":25,"x":33,"t":1305114173.18669},{"y":25,"d":[[24,32,"t"]],"x":34,"t":1305114173.42679},{"y":25,"d":[[24,33,"r"]],"x":35,"t":1305114173.435},{"y":25,"d":[[24,34,"a"]],"x":36,"t":1305114174.54653},{"y":25,"d":[[24,35,"c"]],"x":37,"t":1305114174.77049},{"y":25,"d":[[24,36,"h"]],"x":38,"t":1305114174.87454},{"y":25,"d":[[24,36," "]],"x":37,"t":1305114175.21863},{"y":25,"d":[[24,35," "]],"x":36,"t":1305114175.44248},{"y":25,"d":[[24,35,"s"]],"x":37,"t":1305114175.58644},{"y":25,"d":[[24,36,"h"]],"x":38,"t":1305114175.68247},{"y":25,"x":39,"t":1305114175.81033},{"y":25,"d":[[24,38,"f"]],"x":40,"t":1305114176.00254},{"y":25,"d":[[24,39,"i"]],"x":41,"t":1305114176.09853},{"y":25,"d":[[24,40,"l"]],"x":42,"t":1305114176.18652},{"y":25,"d":[[24,41,"e"]],"x":43,"t":1305114176.22679},{"y":25,"d":[[24,42,"s"]],"x":44,"t":1305114176.3783},{"y":25,"x":45,"t":1305114177.22637},{"y":25,"d":[[24,44,"("]],"x":46,"t":1305114177.9385},{"y":25,"d":[[24,45,"s"]],"x":47,"t":1305114178.13835},{"y":25,"d":[[24,46,"i"]],"x":48,"t":1305114178.19435},{"y":25,"d":[[24,46," "]],"x":47,"t":1305114178.60238},{"y":25,"d":[[24,45," "]],"x":46,"t":1305114178.75422},{"d":[["r","# "],["r","bash-3.2$ git status -s "],["r","A hack-1.txt "],["r"," M welcome.txt "],["r","bash-3.2$ rm *.txt "],["r","bash-3.2$ git status -s "],["r"," D detached-commit.txt "],["r","AD hack-1.txt "],["r"," D new-commit.txt "],["r"," D welcome.txt "],["r","bash-3.2$ git add -u "],["r","bash-3.2$ git status -s "],["r","D detached-commit.txt "],["r","D new-commit.txt "],["r","D welcome.txt "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","# Changes to be committed: "],["r","# (use \"git reset HEAD ...\" to unstage) "],["r","# "],["r","# deleted: detached-commit.txt "],["r","# deleted: new-commit.txt "],["r","# deleted: welcome.txt "],["r","# "],["r","bash-3.2$ git commit -m \"delete trash files (u "]],"x":47,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","21777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d",["a","7"],"d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"],"d","d","d","d",["r","77777777222222222222222222222222222222277777777777777777777777777777777777777777"],["r","77777777222222222222222222222222227777777777777777777777777777777777777777777777"],["r","77777777222222222222222222222227777777777777777777777777777777777777777777777777"],["a","7"],"d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305114178.97832,"i":1},{"y":25,"d":[[24,46,"s"]],"x":48,"t":1305114179.13855},{"y":25,"d":[[24,47,"i"]],"x":49,"t":1305114179.57026},{"y":25,"d":[[24,48,"n"]],"x":50,"t":1305114179.73017},{"y":25,"d":[[24,49,"g"]],"x":51,"t":1305114179.81023},{"y":25,"x":52,"t":1305114179.91429},{"y":25,"d":[[24,51,"g"]],"x":53,"t":1305114180.62015},{"y":25,"d":[[24,52,"i"]],"x":54,"t":1305114180.68215},{"y":25,"d":[[24,53,"t"]],"x":55,"t":1305114180.79407},{"y":25,"x":56,"t":1305114180.85816},{"y":25,"d":[[24,55,"a"]],"x":57,"t":1305114181.04226},{"y":25,"d":[[24,56,"d"]],"x":58,"t":1305114181.20228},{"y":25,"d":[[24,57,"d"]],"x":59,"t":1305114181.37007},{"y":25,"x":60,"t":1305114181.43434},{"y":25,"d":[[24,59,"-"]],"x":61,"t":1305114181.57009},{"y":25,"d":[[24,60,"u"]],"x":62,"t":1305114181.79419},{"y":25,"d":[[24,61,")"]],"x":63,"t":1305114182.73037},{"y":25,"d":[[24,62,"\""]],"x":64,"t":1305114183.2264},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",0,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",18,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",3,2],["cp",0,3],["cp",2,5],["cp",7,6],["cp",2,7],["cp",0,9],["cp",1,11],["cp",0,14],["cp",20,19],["cp",21,20],["cp",22,21],["cp",0,22]],"t":1305114183.44206},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",3,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",17,21],["cp",23,22],[23,0,62,"[master 8ad2496] delete trash files (using git add -u) "]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,4],["cp",6,5],["cp",1,6],["cp",2,8],["cp",0,10],["cp",2,13],["cp",19,18],["cp",20,19],["cp",21,20],["cp",2,21]],"t":1305114183.73447},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",13,9],["cp",14,10],["cp",15,11],["cp",16,12],["cp",17,13],["cp",18,14],["cp",19,15],["cp",20,16],["cp",22,18],["cp",23,19],[20,0,48," 1 files changed, 0 insertions(+), 2 deletions(-)"],[21,0,38," delete mode 100644 detached-commit.txt"],[22,0,62," delete mode 100644 new-commit.txt "],[23,0,53," delete mode 100644 welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",5,1],["cp",0,2],["cp",0,3],["cp",8,4],["cp",4,5],["cp",10,6],["cp",6,7],["cp",6,8],["cp",4,10],["cp",4,11],["cp",4,12],["cp",18,14],["cp",19,15],["cp",20,16],["cp",4,18],["cp",4,19],["cp",4,20]],"t":1305114183.7358},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114187.92995},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114188.00189},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114188.10609},{"y":25,"x":15,"t":1305114188.23394},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305114188.91405},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305114189.05782},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305114189.20198},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305114189.46573},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305114189.61806},{"y":25,"d":[["cp",9,24]],"x":21,"t":1305114189.70615},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",12,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",8,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",4,3],["cp",6,5],["cp",3,8],["cp",14,13],["cp",15,14],["cp",16,15],["cp",3,16]],"t":1305114190.01},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",10,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",6,21],["cp",7,22],[23,0,42,"nothing to commit (working directory clean)"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",3,1],["cp",1,2],["cp",5,3],["cp",3,4],["cp",1,6],["cp",1,7],["cp",13,11],["cp",14,12],["cp",15,13],["cp",1,14],["cp",1,15]],"t":1305114190.01801},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305114190.65768},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305114190.77913},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",9,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",5,20],["cp",6,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",3,2],["cp",0,5],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13]],"t":1305114190.88208},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305114190.88916},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114191.42588},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114191.5137},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114191.6098},{"y":25,"x":15,"t":1305114191.64972},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305114192.12952},{"y":25,"d":[[24,15,"s"]],"x":17,"t":1305114192.20983},{"y":25,"d":[[24,16,"-"]],"x":18,"t":1305114192.68972},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305114192.86561},{"y":25,"d":[[24,18,"r"]],"x":20,"t":1305114193.04968},{"y":25,"d":[[24,19,"e"]],"x":21,"t":1305114193.20956},{"y":25,"d":[[24,20,"e"]],"x":22,"t":1305114193.38569},{"y":25,"x":23,"t":1305114193.64951},{"y":25,"d":[[24,22,"H"]],"x":24,"t":1305114193.95373},{"y":25,"d":[[24,23,"E"]],"x":25,"t":1305114194.03363},{"y":25,"d":[[24,24,"A"]],"x":26,"t":1305114194.21775},{"y":25,"d":[[24,25,"D"]],"x":27,"t":1305114194.32159},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",8,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",4,19],["cp",5,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,4],["cp",10,9],["cp",11,10],["cp",12,11],["cp",0,12]],"t":1305114194.60158},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305114194.60798},{"y":25,"d":[["cp",23,24]],"x":11,"t":1305114195.38569},{"y":25,"x":15,"t":1305114196.1297},{"y":25,"x":26,"t":1305114196.67362},{"y":25,"x":27,"t":1305114197.0976},{"y":25,"d":[[24,26,"^"]],"x":28,"t":1305114197.87345},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",7,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",3,18],["cp",4,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",4,3],["cp",9,8],["cp",10,9],["cp",11,10],["cp",3,11]],"t":1305114198.13733},{"y":25,"d":[["cp",3,0],["cp",4,1],["cp",5,2],["cp",6,3],["cp",7,4],["cp",8,5],["cp",9,6],["cp",10,7],["cp",4,8],["cp",12,9],["cp",13,10],["cp",14,11],["cp",15,12],["cp",16,13],["cp",17,14],["cp",0,15],["cp",1,16],["cp",20,17],["cp",21,18],["cp",22,19],["cp",23,20],[21,0,51,"100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"],[21,56,74,"detached-commit.txt"],[22,0,51,"100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"],[22,56,69,"new-commit.txt"],[23,0,51,"100644 blob fd3c069c1de4f4bc9b15940f490aeb48852f3c42"],[23,56,66,"welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,0],["cp",0,1],["cp",0,2],["cp",8,5],["cp",9,6],["cp",10,7],["cp",0,8],["cp",0,9],["cp",0,10]],"t":1305114198.14605},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",3,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",0,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,51,"bash-3.2$ exit "],[23,56,66,["a"," "]],[24,["a"," "]]],"x":1,"f":[["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,7]],"t":1305114199.74539}]} \ No newline at end of file diff --git a/html/part2/ch10-04-undelete.html b/html/part2/ch10-04-undelete.html new file mode 100644 index 000000000..d5ec16908 --- /dev/null +++ b/html/part2/ch10-04-undelete.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch10-04-undelete +json_file: ch10-04-undelete.json +--- diff --git a/html/part2/ch10-04-undelete.json b/html/part2/ch10-04-undelete.json new file mode 100644 index 000000000..3cdbfa6ce --- /dev/null +++ b/html/part2/ch10-04-undelete.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305114368.07614,"i":1},{"y":1,"d":[[0,10,39,"cd /path/to/my/workspace/demo/"]],"x":11,"t":1305114368.53761},{"y":2,"x":1,"t":1305114369.40154},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305114369.40177},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305114370.08959},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305114370.20138},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305114370.2973},{"y":2,"x":15,"t":1305114370.45743},{"y":2,"d":[[1,14,"l"]],"x":16,"t":1305114371.11313},{"y":2,"d":[[1,15,"o"]],"x":17,"t":1305114371.31321},{"y":2,"d":[[1,16,"g"]],"x":18,"t":1305114371.41728},{"y":2,"x":19,"t":1305114371.52925},{"y":2,"d":[[1,18,"-"]],"x":20,"t":1305114371.68137},{"y":2,"d":[[1,19,"-"]],"x":21,"t":1305114371.90523},{"y":2,"d":[[1,20,"o"]],"x":22,"t":1305114372.0576},{"y":2,"d":[[1,21,"n"]],"x":23,"t":1305114372.23355},{"y":2,"d":[[1,22,"e"]],"x":24,"t":1305114372.37748},{"y":2,"d":[[1,23,"l"]],"x":25,"t":1305114372.44932},{"y":2,"d":[[1,24,"i"]],"x":26,"t":1305114372.58524},{"y":2,"d":[[1,25,"n"]],"x":27,"t":1305114372.72139},{"y":2,"d":[[1,26,"e"]],"x":28,"t":1305114372.80937},{"y":2,"x":29,"t":1305114372.92131},{"y":2,"d":[[1,28,"-"]],"x":30,"t":1305114373.10512},{"y":2,"d":[[1,29,"-"]],"x":31,"t":1305114373.56139},{"y":2,"d":[[1,30,"p"]],"x":32,"t":1305114373.81716},{"y":2,"d":[[1,31,"r"]],"x":33,"t":1305114374.21719},{"y":2,"d":[[1,32,"e"]],"x":34,"t":1305114374.37746},{"y":2,"d":[[1,33,"t"]],"x":35,"t":1305114374.53743},{"y":2,"d":[[1,34,"t"]],"x":36,"t":1305114374.71331},{"y":2,"d":[[1,35,"y"]],"x":37,"t":1305114374.8971},{"y":2,"d":[[1,35," "]],"x":36,"t":1305114375.83336},{"y":2,"d":[[1,34," "]],"x":35,"t":1305114376.00888},{"y":2,"d":[[1,33," "]],"x":34,"t":1305114376.16897},{"y":2,"d":[[1,32," "]],"x":33,"t":1305114376.32109},{"y":2,"d":[[1,31," "]],"x":32,"t":1305114376.48152},{"y":2,"d":[[1,30," "]],"x":31,"t":1305114376.64926},{"y":2,"d":[[1,30,"g"]],"x":32,"t":1305114376.80122},{"y":2,"d":[[1,31,"a"]],"x":33,"t":1305114377.40134},{"y":2,"d":[[1,31," "]],"x":32,"t":1305114377.78496},{"y":2,"d":[[1,31,"r"]],"x":33,"t":1305114377.84124},{"y":2,"d":[[1,32,"a"]],"x":34,"t":1305114377.99289},{"y":2,"d":[[1,33,"p"]],"x":35,"t":1305114378.14491},{"y":2,"d":[[1,34,"h"]],"x":36,"t":1305114378.27297},{"y":3,"x":1,"t":1305114378.74506},{"y":12,"d":[[2,0,46,"* 8ad2496 delete trash files (using git add -u)"],[3,0,33,"* 1086811 Merge commit '6630c7c'"],[4,0,1,"|\\"],[5,0,40,"| * 6630c7c commit in detached HEAD mode."],[6,0,46,"* | 6af1352 does master follow this new commit?"],[7,0,1,"|/"],[8,0,34,"* 0e3a4c9 which version checked in?"],[9,0,25,"* 61b1516 who does commit?"],[10,0,20,"* 3869015 intialized."],[11,0,8,"bash-3.2$"]],"x":11,"f":[[2,2,8,["a","3"]],[3,4,10,["a","3"]],[4,0,1,"23"],[5,0,10,"27773333333"],[6,2,10,"373333333"],[7,0,1,["a","3"]],["cp",2,8],["cp",2,9],["cp",2,10]],"t":1305114378.75803},{"y":12,"d":[[11,10,"l"]],"x":12,"t":1305114380.20896},{"y":12,"d":[[11,11,"s"]],"x":13,"t":1305114380.33703},{"y":13,"x":1,"t":1305114380.45699},{"y":13,"d":[[12,0,8,"bash-3.2$"]],"x":11,"t":1305114380.46208},{"y":13,"d":[[12,10,"g"]],"x":12,"t":1305114381.74504},{"y":13,"d":[[12,11,"i"]],"x":13,"t":1305114381.83291},{"y":13,"d":[[12,12,"t"]],"x":14,"t":1305114381.94515},{"y":13,"x":15,"t":1305114382.01685},{"y":13,"d":[[12,14,"c"]],"x":16,"t":1305114382.24934},{"y":13,"d":[[12,15,"a"]],"x":17,"t":1305114382.35279},{"y":13,"d":[[12,16,"t"]],"x":18,"t":1305114382.74482},{"y":13,"d":[[12,17,"-"]],"x":19,"t":1305114383.02495},{"y":13,"d":[[12,18,"f"]],"x":20,"t":1305114383.17698},{"y":13,"d":[[12,19,"i"]],"x":21,"t":1305114383.28074},{"y":13,"d":[[12,20,"l"]],"x":22,"t":1305114383.36894},{"y":13,"d":[[12,21,"e"]],"x":23,"t":1305114383.46596},{"y":13,"x":24,"t":1305114383.59269},{"y":13,"d":[[12,23,"-"]],"x":25,"t":1305114383.7769},{"y":13,"d":[[12,24,"p"]],"x":26,"t":1305114384.017},{"y":13,"x":27,"t":1305114384.20087},{"y":13,"d":[[12,26,"H"]],"x":28,"t":1305114385.48864},{"y":13,"d":[[12,27,"E"]],"x":29,"t":1305114385.54482},{"y":13,"d":[[12,28,"A"]],"x":30,"t":1305114385.68069},{"y":13,"d":[[12,29,"D"]],"x":31,"t":1305114385.78451},{"y":13,"d":[[12,30,"~"]],"x":32,"t":1305114386.25687},{"y":13,"d":[[12,31,"`"]],"x":33,"t":1305114386.56081},{"y":13,"d":[[12,31," "]],"x":32,"t":1305114387.00877},{"y":13,"d":[[12,31,"1"]],"x":33,"t":1305114387.08889},{"y":13,"d":[[12,32,":"]],"x":34,"t":1305114387.96873},{"y":13,"d":[[12,33,"w"]],"x":35,"t":1305114388.29808},{"y":13,"d":[[12,34,"e"]],"x":36,"t":1305114388.43261},{"y":13,"d":[[12,35,"l"]],"x":37,"t":1305114388.57662},{"y":13,"d":[[12,36,"c"]],"x":38,"t":1305114388.68871},{"y":13,"d":[[12,37,"o"]],"x":39,"t":1305114388.76864},{"y":13,"d":[[12,38,"m"]],"x":40,"t":1305114388.92089},{"y":13,"d":[[12,39,"e"]],"x":41,"t":1305114389.04884},{"y":13,"d":[[12,40,"."]],"x":42,"t":1305114389.36057},{"y":13,"d":[[12,41,"t"]],"x":43,"t":1305114389.44072},{"y":13,"d":[[12,42,"x"]],"x":44,"t":1305114389.60866},{"y":13,"d":[[12,43,"t"]],"x":45,"t":1305114390.20066},{"y":14,"x":1,"t":1305114390.31257},{"y":16,"d":[[13,0,5,"Hello."],[14,0,16,"Nice to meet you."],[15,0,8,"bash-3.2$"]],"x":11,"t":1305114390.32104},{"y":16,"d":[["cp",12,15]],"x":45,"t":1305114391.1047},{"y":16,"x":46,"t":1305114391.40076},{"y":16,"d":[[15,45,">"]],"x":47,"t":1305114391.69683},{"y":16,"x":48,"t":1305114391.8324},{"y":16,"d":[[15,47,"w"]],"x":49,"t":1305114392.01654},{"y":16,"d":[[15,48,"e"]],"x":50,"t":1305114392.1763},{"y":16,"d":[[15,49,"l"]],"x":51,"t":1305114392.32055},{"y":16,"d":[[15,50,"c"]],"x":52,"t":1305114392.44049},{"y":16,"d":[[15,51,"o"]],"x":53,"t":1305114392.53626},{"y":16,"d":[[15,52,"m"]],"x":54,"t":1305114392.68037},{"y":16,"d":[[15,53,"e"]],"x":55,"t":1305114392.81643},{"y":16,"d":[[15,54,"."]],"x":56,"t":1305114392.98435},{"y":16,"d":[[15,55,"t"]],"x":57,"t":1305114393.08045},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/demo/ "],["r","bash-3.2$ git log --oneline --graph "],["r","* 8ad2496 delete trash files (using git add -u) "],["r","* 1086811 Merge commit '6630c7c' "],["r","|\\ "],["r","| * 6630c7c commit in detached HEAD mode. "],["r","* | 6af1352 does master follow this new commit? "],["r","|/ "],["r","* 0e3a4c9 which version checked in? "],["r","* 61b1516 who does commit? "],["r","* 3869015 intialized. "],["r","bash-3.2$ ls "],["r","bash-3.2$ git cat-file -p HEAD~1:welcome.txt "],["r","Hello. "],["r","Nice to meet you. "],["r","bash-3.2$ git cat-file -p HEAD~1:welcome.txt > welcome.tx "],["a"," "],"d","d","d","d","d","d","d","d"],"x":58,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":16,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d",["r","77333333377777777777777777777777777777777777777777777777777777777777777777777777"],["r","77773333333777777777777777777777777777777777777777777777777777777777777777777777"],["r","23777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","27773333333777777777777777777777777777777777777777777777777777777777777777777777"],["r","77373333333777777777777777777777777777777777777777777777777777777777777777777777"],["r","33777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","77333333377777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305114393.21656,"i":1},{"y":16,"d":[[15,57,"t"]],"x":59,"t":1305114393.32829},{"y":17,"x":1,"t":1305114393.43254},{"y":17,"d":[[16,0,8,"bash-3.2$"]],"x":11,"t":1305114393.44082},{"y":17,"d":[[16,10,"g"]],"x":12,"t":1305114393.80027},{"y":17,"d":[[16,11,"i"]],"x":13,"t":1305114393.88022},{"y":17,"d":[[16,12,"t"]],"x":14,"t":1305114393.97759},{"y":17,"x":15,"t":1305114394.03246},{"y":17,"d":[[16,14,"s"]],"x":16,"t":1305114394.15241},{"y":17,"d":[[16,15,"t"]],"x":17,"t":1305114394.31255},{"y":17,"d":[[16,16,"a"]],"x":18,"t":1305114394.4802},{"y":17,"d":[[16,17,"t"]],"x":19,"t":1305114394.68838},{"y":17,"d":[[16,18,"u"]],"x":20,"t":1305114394.80817},{"y":17,"d":[[16,19,"s"]],"x":21,"t":1305114394.88095},{"y":17,"x":22,"t":1305114395.13622},{"y":17,"d":[[16,21,"-"]],"x":23,"t":1305114395.41661},{"y":17,"d":[[16,21," "]],"x":22,"t":1305114396.01617},{"y":17,"d":[[16,21,"-"]],"x":23,"t":1305114396.61608},{"y":17,"d":[[16,22,"s"]],"x":24,"t":1305114396.71213},{"y":18,"x":1,"t":1305114396.99228},{"y":19,"d":[[17,0,13,"?? welcome.txt"],[18,0,8,"bash-3.2$"]],"x":11,"f":[[17,0,1,["a","1"]]],"t":1305114396.99972},{"y":19,"d":[[18,10,"g"]],"x":12,"t":1305114397.75226},{"y":19,"d":[[18,11,"i"]],"x":13,"t":1305114397.84025},{"y":19,"d":[[18,12,"t"]],"x":14,"t":1305114397.93621},{"y":19,"x":15,"t":1305114398.01609},{"y":19,"d":[[18,14,"a"]],"x":16,"t":1305114398.16803},{"y":19,"d":[[18,15,"d"]],"x":17,"t":1305114398.34425},{"y":19,"d":[[18,16,"d"]],"x":18,"t":1305114398.49743},{"y":19,"x":19,"t":1305114398.53622},{"y":19,"d":[[18,18,"-"]],"x":20,"t":1305114398.65625},{"y":19,"d":[[18,19,"A"]],"x":21,"t":1305114398.95207},{"y":20,"x":1,"t":1305114399.12001},{"y":20,"d":[[19,0,8,"bash-3.2$"]],"x":11,"t":1305114399.14116},{"y":20,"d":[[19,10,"g"]],"x":12,"t":1305114399.69605},{"y":20,"d":[[19,11,"i"]],"x":13,"t":1305114399.7679},{"y":20,"x":12,"t":1305114400.28007},{"y":20,"d":[["cp",18,19]],"x":11,"t":1305114400.33622},{"y":20,"d":[["cp",16,19]],"x":11,"t":1305114400.93597},{"y":21,"x":1,"t":1305114401.2961},{"y":22,"d":[[20,0,13,"A welcome.txt"],[21,0,8,"bash-3.2$"]],"x":11,"f":[[20,0,"2"]],"t":1305114401.30502},{"y":22,"d":[[21,10,"g"]],"x":12,"t":1305114403.55187},{"y":22,"d":[[21,11,"i"]],"x":13,"t":1305114403.64778},{"y":22,"d":[[21,12,"t"]],"x":14,"t":1305114403.76777},{"y":22,"x":15,"t":1305114403.83188},{"y":22,"d":[[21,14,"c"]],"x":16,"t":1305114403.99181},{"y":22,"d":[[21,15,"o"]],"x":17,"t":1305114404.07184},{"y":22,"d":[[21,16,"m"]],"x":18,"t":1305114404.21606},{"y":22,"d":[[21,17,"m"]],"x":19,"t":1305114404.77636},{"y":22,"d":[[21,18,"i"]],"x":20,"t":1305114404.96955},{"y":22,"d":[[21,19,"t"]],"x":21,"t":1305114405.04779},{"y":22,"x":22,"t":1305114405.16782},{"y":22,"d":[[21,21,"-"]],"x":23,"t":1305114405.32906},{"y":22,"d":[[21,22,"m"]],"x":24,"t":1305114405.54383},{"y":22,"x":25,"t":1305114405.67199},{"y":22,"d":[[21,24,"\""]],"x":26,"t":1305114406.00786},{"y":22,"d":[[21,25,"r"]],"x":27,"t":1305114406.67169},{"y":22,"d":[[21,26,"e"]],"x":28,"t":1305114406.81557},{"y":22,"d":[[21,27,"s"]],"x":29,"t":1305114406.9677},{"y":22,"d":[[21,28,"t"]],"x":30,"t":1305114407.07978},{"y":22,"d":[[21,29,"o"]],"x":31,"t":1305114407.23959},{"y":22,"d":[[21,30,"r"]],"x":32,"t":1305114407.3518},{"y":22,"d":[[21,31,"e"]],"x":33,"t":1305114407.95179},{"y":22,"x":34,"t":1305114408.2318},{"y":22,"d":[[21,33,"f"]],"x":35,"t":1305114408.51958},{"y":22,"d":[[21,34,"i"]],"x":36,"t":1305114408.58388},{"y":22,"d":[[21,35,"l"]],"x":37,"t":1305114408.6875},{"y":22,"d":[[21,36,"e"]],"x":38,"t":1305114408.76766},{"y":22,"d":[[21,37,":"]],"x":39,"t":1305114409.12775},{"y":22,"x":40,"t":1305114409.27169},{"y":22,"d":[[21,39,"w"]],"x":41,"t":1305114409.43966},{"y":22,"d":[[21,40,"e"]],"x":42,"t":1305114409.57584},{"y":22,"d":[[21,41,"l"]],"x":43,"t":1305114409.71957},{"y":22,"d":[[21,42,"c"]],"x":44,"t":1305114409.86365},{"y":22,"d":[[21,43,"o"]],"x":45,"t":1305114409.92793},{"y":22,"d":[[21,44,"m"]],"x":46,"t":1305114410.07149},{"y":22,"d":[[21,45,"e"]],"x":47,"t":1305114410.17576},{"y":22,"d":[[21,46,"."]],"x":48,"t":1305114410.29565},{"y":22,"d":[[21,47,"t"]],"x":49,"t":1305114410.38335},{"y":22,"d":[[21,48,"x"]],"x":50,"t":1305114410.52764},{"y":22,"d":[[21,49,"t"]],"x":51,"t":1305114410.63143},{"y":22,"d":[[21,50,"\""]],"x":52,"t":1305114410.85598},{"y":23,"x":1,"t":1305114411.0638},{"y":24,"d":[[22,0,41,"[master cb5775e] restore file: welcome.txt"]],"x":1,"t":1305114411.35472},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",15,18],["cp",20,19],["cp",21,20],["cp",22,21],[22,0,48," 1 files changed, 2 insertions(+), 0 deletions(-)"],[23,1,30,"create mode 100644 welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",1,7],["cp",0,10],["cp",17,16],["cp",0,17],["cp",20,19],["cp",0,20]],"t":1305114411.35603},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114413.71129},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114413.79945},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114413.89544},{"y":25,"x":15,"t":1305114413.95948},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305114414.06435},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305114414.2313},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305114414.32736},{"y":25,"x":19,"t":1305114414.43937},{"y":25,"d":[[24,18,"w"]],"x":20,"t":1305114414.67947},{"y":25,"d":[[24,19,"e"]],"x":21,"t":1305114414.83143},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305114414.96837},{"y":25,"d":[[24,21,"c"]],"x":23,"t":1305114415.11122},{"y":25,"d":[[24,22,"o"]],"x":24,"t":1305114415.1993},{"y":25,"d":[[24,23,"m"]],"x":25,"t":1305114415.38334},{"y":25,"d":[[24,24,28,"e.txt"]],"x":30,"t":1305114415.5404},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",14,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",10,9],["cp",16,15],["cp",9,16],["cp",19,18],["cp",9,19]],"t":1305114416.09519},{"d":[["r"," create mode 100644 welcome.txt "],["r","bash-3.2$ git log welcome.txt "],["r","commit cb5775e1599111662b4a1b1539606960ef68fe30 "],["r","Author: Jiang Xin "],["r","Date: Wed May 11 19:46:51 2011 +0800 "],["a"," "],["r"," restore file: welcome.txt "],["a"," "],["r","commit 8ad249649e58d6d7a48a74f00b98d19f2be6c847 "],["r","Author: Jiang Xin "],["r","Date: Wed May 11 19:43:03 2011 +0800 "],["a"," "],["r"," delete trash files (using git add -u) "],["a"," "],["r","commit 0e3a4c98cf736cf3e98e2a64e6bd98dd935bdb6a "],["r","Author: Jiang Xin "],["r","Date: Wed May 11 13:35:15 2011 +0800 "],["a"," "],["r"," which version checked in? "],["a"," "],["r","commit 38690158d57ea02061e42ab88101ed3517a4292f "],["r","Author: Jiang Xin "],["r","Date: Wed May 11 11:03:28 2011 +0800 "],["a"," "],["r",": "]],"x":2,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305114416.10703,"i":1},{"y":25,"b":[[24,0,5,["a","7"]]],"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",4,6],["cp",8,7],["cp",2,8],["cp",10,9],["cp",4,10],["cp",12,11],["cp",4,12],["cp",14,13],["cp",2,14],["cp",16,15],["cp",4,16],["cp",18,17],["cp",4,18],["cp",20,19],["cp",2,20],["cp",22,21],["cp",4,22],[23,4,14,"intialized."],[24,0,4,"(END)"]],"x":7,"f":[["cp",2,1],["cp",0,2],["cp",1,7],["cp",0,8],["cp",1,13],["cp",0,14],["cp",1,19],["cp",0,20],[24,0,5,["a","0"]]],"t":1305114417.57541},{"y":25,"b":[["cp",0,24]],"d":[["cp",4,24]],"x":1,"f":[["cp",0,24]],"t":1305114418.31113},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305114418.31273},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",3,5],["cp",7,6],["cp",1,7],["cp",9,8],["cp",3,9],["cp",11,10],["cp",3,11],["cp",13,12],["cp",1,13],["cp",15,14],["cp",3,15],["cp",17,16],["cp",3,17],["cp",19,18],["cp",1,19],["cp",21,20],["cp",3,21],["cp",23,22],[23,0,14,"bash-3.2$ exit "],["cp",3,24]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",0,6],["cp",1,7],["cp",0,12],["cp",1,13],["cp",0,18],["cp",1,19]],"t":1305114421.73539}]} \ No newline at end of file diff --git a/html/part2/ch10-05-mv.html b/html/part2/ch10-05-mv.html new file mode 100644 index 000000000..7a062f8a9 --- /dev/null +++ b/html/part2/ch10-05-mv.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch10-05-mv +json_file: ch10-05-mv.json +--- diff --git a/html/part2/ch10-05-mv.json b/html/part2/ch10-05-mv.json new file mode 100644 index 000000000..0711a0ab5 --- /dev/null +++ b/html/part2/ch10-05-mv.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305114492.0062,"i":1},{"y":1,"d":[[0,10,39,"cd /path/to/my/workspace/demo/"]],"x":11,"t":1305114492.43587},{"y":2,"x":1,"t":1305114492.68364},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305114492.68389},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305114493.17179},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305114493.23559},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305114493.35559},{"y":2,"x":15,"t":1305114493.41174},{"y":2,"d":[[1,14,"s"]],"x":16,"t":1305114493.53152},{"y":2,"d":[[1,15,"t"]],"x":17,"t":1305114493.70751},{"y":2,"d":[[1,16,"a"]],"x":18,"t":1305114493.88377},{"y":2,"d":[[1,17,"t"]],"x":19,"t":1305114494.09945},{"y":2,"d":[[1,18,"u"]],"x":20,"t":1305114494.24382},{"y":2,"d":[[1,19,"s"]],"x":21,"t":1305114494.30788},{"y":2,"x":22,"t":1305114494.62754},{"y":2,"d":[[1,21,"-"]],"x":23,"t":1305114494.77148},{"y":2,"d":[[1,22,"s"]],"x":24,"t":1305114494.83565},{"y":3,"x":1,"t":1305114495.00366},{"y":3,"d":[[2,0,8,"bash-3.2$"]],"x":11,"t":1305114495.01344},{"y":3,"d":[[2,10,"l"]],"x":12,"t":1305114496.62756},{"y":3,"d":[[2,11,"s"]],"x":13,"t":1305114496.71562},{"y":4,"x":1,"t":1305114496.84368},{"y":5,"d":[[3,0,10,"welcome.txt"],[4,0,8,"bash-3.2$"]],"x":11,"t":1305114496.85034},{"y":5,"d":[[4,10,"g"]],"x":12,"t":1305114497.41144},{"y":5,"d":[[4,11,"i"]],"x":13,"t":1305114497.49128},{"y":5,"d":[[4,12,"t"]],"x":14,"t":1305114497.59558},{"y":5,"x":15,"t":1305114497.65162},{"y":5,"d":[[4,14,"m"]],"x":16,"t":1305114497.86762},{"y":5,"d":[[4,15,"v"]],"x":17,"t":1305114497.93947},{"y":5,"x":18,"t":1305114498.08348},{"y":5,"d":[[4,17,"w"]],"x":19,"t":1305114498.27558},{"y":5,"d":[[4,18,"e"]],"x":20,"t":1305114498.43554},{"y":5,"d":[[4,19,27,"lcome.txt"]],"x":29,"t":1305114498.64985},{"y":5,"x":30,"t":1305114499.6835},{"y":5,"d":[[4,29,"R"]],"x":31,"t":1305114500.56323},{"y":5,"d":[[4,30,"E"]],"x":32,"t":1305114500.96319},{"y":5,"d":[[4,31,"A"]],"x":33,"t":1305114501.14723},{"y":5,"d":[[4,32,"D"]],"x":34,"t":1305114501.31516},{"y":5,"d":[[4,33,"M"]],"x":35,"t":1305114501.5314},{"y":5,"d":[[4,34,"E"]],"x":36,"t":1305114501.61119},{"y":6,"x":1,"t":1305114502.0112},{"y":6,"d":[[5,0,8,"bash-3.2$"]],"x":11,"t":1305114502.01827},{"y":6,"d":[[5,10,"g"]],"x":12,"t":1305114502.85966},{"y":6,"d":[[5,11,"i"]],"x":13,"t":1305114502.94717},{"y":6,"d":[[5,12,"t"]],"x":14,"t":1305114503.04317},{"y":6,"x":15,"t":1305114503.09114},{"y":6,"d":[[5,14,"s"]],"x":16,"t":1305114503.27551},{"y":6,"d":[[5,15,"t"]],"x":17,"t":1305114503.37932},{"y":6,"d":[[5,16,"a"]],"x":18,"t":1305114503.5232},{"y":6,"d":[[5,17,"t"]],"x":19,"t":1305114503.65117},{"y":6,"d":[[5,18,"u"]],"x":20,"t":1305114503.79535},{"y":6,"d":[[5,19,"s"]],"x":21,"t":1305114503.85132},{"y":7,"x":1,"t":1305114504.00317},{"y":13,"d":[[6,0,17,"# On branch master"],[7,0,25,"# Changes to be committed:"],[8,0,46,"# (use \"git reset HEAD ...\" to unstage)"],[9,0,"#"],[10,0,"#"],[10,8,15,"renamed:"],[10,20,40,"welcome.txt -> README"],["cp",9,11],[12,0,8,"bash-3.2$"]],"x":11,"f":[[10,8,40,["a","2"]]],"t":1305114504.01442},{"y":13,"d":[[12,10,"g"]],"x":12,"t":1305114505.84327},{"y":13,"d":[[12,11,"i"]],"x":13,"t":1305114505.92299},{"y":13,"d":[[12,12,"t"]],"x":14,"t":1305114506.01923},{"y":13,"x":15,"t":1305114506.13108},{"y":13,"d":[[12,14,"c"]],"x":16,"t":1305114506.2441},{"y":13,"d":[[12,15,"o"]],"x":17,"t":1305114506.2989},{"y":13,"d":[[12,16,"m"]],"x":18,"t":1305114506.46708},{"y":13,"d":[[12,17,"m"]],"x":19,"t":1305114506.62693},{"y":13,"d":[[12,18,"i"]],"x":20,"t":1305114506.81914},{"y":13,"d":[[12,19,"t"]],"x":21,"t":1305114506.92347},{"y":13,"x":22,"t":1305114507.01903},{"y":13,"d":[[12,21,"-"]],"x":23,"t":1305114507.25913},{"y":13,"d":[[12,22,"m"]],"x":24,"t":1305114507.49232},{"y":13,"x":25,"t":1305114507.61917},{"y":13,"d":[[12,24,"\""]],"x":26,"t":1305114507.9233},{"y":13,"d":[[12,25,"r"]],"x":27,"t":1305114508.43486},{"y":13,"d":[[12,26,"e"]],"x":28,"t":1305114508.60295},{"y":13,"d":[[12,27,"n"]],"x":29,"t":1305114508.73885},{"y":13,"d":[[12,28,"a"]],"x":30,"t":1305114508.85114},{"y":13,"d":[[12,29,"m"]],"x":31,"t":1305114509.12279},{"y":13,"d":[[12,30,"e"]],"x":32,"t":1305114509.25876},{"y":13,"x":33,"t":1305114509.41887},{"y":13,"d":[[12,32,"t"]],"x":34,"t":1305114509.72434},{"y":13,"d":[[12,33,"e"]],"x":35,"t":1305114509.88296},{"y":13,"d":[[12,34,"s"]],"x":36,"t":1305114509.97094},{"y":13,"d":[[12,35,"t"]],"x":37,"t":1305114510.123},{"y":13,"d":[[12,36,"."]],"x":38,"t":1305114510.36286},{"y":13,"d":[[12,37,"\""]],"x":39,"t":1305114510.76301},{"y":14,"x":1,"t":1305114510.92268},{"y":15,"d":[[13,0,28,"[master ad8fdb1] rename test."]],"x":1,"t":1305114511.22687},{"y":17,"d":[[14,1,48,"1 files changed, 0 insertions(+), 0 deletions(-)"],[15,1,35,"rename welcome.txt => README (100%)"],[16,0,8,"bash-3.2$"]],"x":11,"t":1305114511.22832},{"y":17,"d":[[16,10,"g"]],"x":12,"t":1305114513.38705},{"y":17,"d":[[16,11,"i"]],"x":13,"t":1305114513.49067},{"y":17,"d":[[16,12,"t"]],"x":14,"t":1305114513.60279},{"y":17,"x":15,"t":1305114513.65083},{"y":17,"d":[[16,14,"s"]],"x":16,"t":1305114515.0905},{"y":17,"d":[[16,15,"t"]],"x":17,"t":1305114515.23453},{"y":17,"d":[[16,16,"a"]],"x":18,"t":1305114515.36272},{"y":17,"d":[[16,17,"t"]],"x":19,"t":1305114515.52264},{"y":17,"d":[[16,18,"u"]],"x":20,"t":1305114515.65876},{"y":17,"d":[["cp",5,16]],"x":21,"t":1305114515.75466},{"y":18,"x":1,"t":1305114515.97836},{"y":20,"d":[["cp",6,17],[18,0,42,"nothing to commit (working directory clean)"],[19,0,8,"bash-3.2$"]],"x":11,"t":1305114515.9875},{"y":20,"d":[[19,10,"l"]],"x":12,"t":1305114516.37052},{"y":20,"d":[["cp",2,19]],"x":13,"t":1305114516.43465},{"y":21,"x":1,"t":1305114516.59438},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/demo/ "],["r","bash-3.2$ git status -s "],["r","bash-3.2$ ls "],["r","welcome.txt "],["r","bash-3.2$ git mv welcome.txt README "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","# Changes to be committed: "],["r","# (use \"git reset HEAD ...\" to unstage) "],["r","# "],["r","# renamed: welcome.txt -> README "],["r","# "],["r","bash-3.2$ git commit -m \"rename test.\" "],["r","[master ad8fdb1] rename test. "],["r"," 1 files changed, 0 insertions(+), 0 deletions(-) "],["r"," rename welcome.txt => README (100%) "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","nothing to commit (working directory clean) "],["r","bash-3.2$ ls "],["r","README "],["r","bash-3.2$ "],["a"," "],"d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":22,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d",["r","77777777222222222222222222222222222222222777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305114516.59948,"i":1},{"y":22,"d":[[21,10,"g"]],"x":12,"t":1305114518.65844},{"y":22,"d":[[21,11,"i"]],"x":13,"t":1305114518.75441},{"y":22,"d":[[21,12,"t"]],"x":14,"t":1305114518.83463},{"y":22,"x":15,"t":1305114518.89046},{"y":22,"d":[[21,14,"s"]],"x":16,"t":1305114519.60249},{"y":22,"d":[[21,15,"h"]],"x":17,"t":1305114519.69028},{"y":22,"d":[[21,16,"o"]],"x":18,"t":1305114519.78639},{"y":22,"d":[[21,17,"w"]],"x":19,"t":1305114519.84248},{"y":22,"x":20,"t":1305114519.97052},{"y":22,"d":[[21,19,"H"]],"x":21,"t":1305114520.21398},{"y":22,"d":[[21,20,"E"]],"x":22,"t":1305114520.30663},{"y":22,"d":[[21,21,"A"]],"x":23,"t":1305114520.49047},{"y":22,"d":[[21,22,"D"]],"x":24,"t":1305114520.54652},{"y":23,"x":1,"t":1305114520.86628},{"y":25,"d":[["cp",20,0],["cp",21,1],[2,0,46,"commit ad8fdb133f9006c197b37d9e434451bbd6ee0284"],[3,0,37,"Author: Jiang Xin "],[4,0,37,"Date: Wed May 11 19:48:30 2011 +0800"],["cp",22,5],[6,0,17," rename test. "],["cp",5,7],[8,0,46,"diff --git a/README b/README "],[9,0,19,"new file mode 100644"],[10,0,40,"index 0000000..fd3c069 "],[11,0,12,"--- /dev/null"],[12,0,37,"+++ b/README "],[13,0,28,"@@ -0,0 +1,2 @@ "],[14,0,48,"+Hello. "],[15,0,35,"+Nice to meet you. "],[16,0,37,"diff --git a/welcome.txt b/welcome.txt"],[17,0,23,"deleted file mode 100644"],[18,0,42,"index fd3c069..0000000 "],[19,0,16,"--- a/welcome.txt"],[20,0,12,"+++ /dev/null"],[21,0,22,"@@ -1,2 +0,0 @@ "],[22,0,6,"-Hello."],[23,0,17,"-Nice to meet you."],[24,0,":"]],"x":2,"f":[[2,0,46,["a","3"]],["cp",0,10],[13,0,14,["a","6"]],[14,0,6,["a","2"]],[15,0,17,["a","2"]],["cp",13,21],[22,0,6,["a","1"]],[23,0,17,["a","1"]]],"B":[[8,0,27,["a","1"]],[9,0,19,["a","1"]],[10,0,21,["a","1"]],[11,0,12,["a","1"]],[12,0,11,["a","1"]],[16,0,37,["a","1"]],[17,0,23,["a","1"]],["cp",10,18],[19,0,16,["a","1"]],["cp",11,20]],"t":1305114520.87898},{"y":25,"b":[[24,0,5,["a","7"]]],"d":[[24,0,4,"(END)"]],"x":7,"f":[[24,0,5,["a","0"]]],"t":1305114522.98646},{"y":25,"b":[["cp",0,24]],"d":[["cp",5,24]],"x":1,"f":[["cp",0,24]],"t":1305114523.63415},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305114523.63594},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114526.89835},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114526.9942},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114527.10603},{"y":25,"x":15,"t":1305114527.15405},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305114528.40212},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305114528.51396},{"y":25,"d":[[24,16,"s"]],"x":18,"t":1305114528.67414},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305114528.73001},{"y":25,"d":[[24,18,"t"]],"x":20,"t":1305114528.82609},{"y":25,"x":21,"t":1305114528.9139},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305114529.10576},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305114529.28212},{"y":25,"d":[[24,22,"h"]],"x":24,"t":1305114529.48331},{"y":25,"d":[[24,23,"a"]],"x":25,"t":1305114529.54609},{"y":25,"d":[[24,24,"r"]],"x":26,"t":1305114529.64191},{"y":25,"d":[[24,25,"d"]],"x":27,"t":1305114529.79397},{"y":25,"x":28,"t":1305114529.97001},{"y":25,"d":[[24,27,"H"]],"x":29,"t":1305114530.242},{"y":25,"d":[[24,28,"E"]],"x":30,"t":1305114530.32192},{"y":25,"d":[[24,29,"A"]],"x":31,"t":1305114530.49799},{"y":25,"d":[[24,30,"D"]],"x":32,"t":1305114530.57001},{"y":25,"d":[[24,31,"^"]],"x":33,"t":1305114531.394},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",4,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",4,24]],"x":1,"f":[["cp",2,1],["cp",0,2],["cp",13,12],["cp",14,13],["cp",15,14],["cp",0,15],["cp",12,20],["cp",22,21],["cp",23,22],["cp",0,23]],"B":[["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",0,12],["cp",16,15],["cp",17,16],["cp",9,17],["cp",19,18],["cp",10,19],["cp",0,20]],"t":1305114532.85781},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",3,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,47,"HEAD is now at cb5775e restore file: welcome.txt"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",12,11],["cp",13,12],["cp",14,13],["cp",1,14],["cp",11,19],["cp",21,20],["cp",22,21],["cp",1,22]],"B":[["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",0,11],["cp",15,14],["cp",16,15],["cp",8,16],["cp",18,17],["cp",9,18],["cp",0,19]],"t":1305114532.86771},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114534.69773},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114534.78574},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114534.88978},{"y":25,"x":15,"t":1305114534.94564},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305114535.07393},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305114535.18565},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305114535.34561},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305114535.49769},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305114535.71482},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305114535.79368},{"y":25,"x":22,"t":1305114535.95386},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305114536.04976},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305114536.17765},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",2,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",2,24]],"x":1,"f":[["cp",1,0],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13],["cp",10,18],["cp",20,19],["cp",21,20],["cp",0,21]],"B":[["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",0,10],["cp",14,13],["cp",15,14],["cp",7,15],["cp",17,16],["cp",8,17],["cp",0,18]],"t":1305114536.2977},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305114536.3078},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305114536.67378},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305114536.76157},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",1,24]],"x":1,"f":[["cp",10,9],["cp",11,10],["cp",12,11],["cp",0,12],["cp",9,17],["cp",19,18],["cp",20,19],["cp",0,20]],"B":[["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",0,9],["cp",13,12],["cp",14,13],["cp",6,14],["cp",16,15],["cp",7,16],["cp",0,17]],"t":1305114536.8818},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,11,"welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",9,8],["cp",10,9],["cp",11,10],["cp",0,11],["cp",8,16],["cp",18,17],["cp",19,18],["cp",0,19]],"B":[["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",0,8],["cp",12,11],["cp",13,12],["cp",5,13],["cp",15,14],["cp",6,15],["cp",0,16]],"t":1305114536.88957},{"y":25,"d":[[24,10,"m"]],"x":12,"t":1305114544.47334},{"y":25,"d":[[24,11,"v"]],"x":13,"t":1305114544.48958},{"y":25,"x":14,"t":1305114544.64932},{"y":25,"d":[[24,13,"w"]],"x":15,"t":1305114544.88922},{"y":25,"d":[[24,14,"e"]],"x":16,"t":1305114545.0492},{"y":25,"d":[[24,15,23,"lcome.txt"]],"x":26,"t":1305114545.28166},{"y":25,"d":[[24,25,"R"]],"x":27,"t":1305114546.38519},{"y":25,"d":[[24,26,"E"]],"x":28,"t":1305114546.57707},{"y":25,"d":[[24,27,"A"]],"x":29,"t":1305114546.73716},{"y":25,"d":[[24,28,"D"]],"x":30,"t":1305114546.87334},{"y":25,"d":[[24,29,"M"]],"x":31,"t":1305114547.02533},{"y":25,"d":[[24,30,"E"]],"x":32,"t":1305114547.11309},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",1,24]],"x":1,"f":[["cp",8,7],["cp",9,8],["cp",10,9],["cp",0,10],["cp",7,15],["cp",17,16],["cp",18,17],["cp",0,18]],"B":[["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",11,10],["cp",12,11],["cp",4,12],["cp",14,13],["cp",5,14],["cp",0,15]],"t":1305114548.48997},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305114548.49337},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114549.13707},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114549.20088},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114549.31306},{"y":25,"x":15,"t":1305114549.39304},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305114549.56101},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305114549.72126},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305114549.84111},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305114550.02496},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305114550.16898},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305114550.2172},{"y":25,"x":22,"t":1305114550.37699},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305114550.47297},{"y":25,"d":[["cp",20,24]],"x":24,"t":1305114550.60104},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",19,23],["cp",0,24]],"x":1,"f":[["cp",7,6],["cp",8,7],["cp",9,8],["cp",0,9],["cp",6,14],["cp",16,15],["cp",17,16],["cp",0,17]],"B":[["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",10,9],["cp",11,10],["cp",3,11],["cp",13,12],["cp",4,13],["cp",0,14]],"t":1305114550.72084},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",17,21],[22,0,30," D welcome.txt "],[23,0,22,"?? README "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",6,4],["cp",7,5],["cp",8,6],["cp",0,7],["cp",0,8],["cp",4,12],["cp",15,13],["cp",16,14],["cp",0,15],["cp",0,16],[22,1,"1"],[23,0,1,["a","1"]]],"B":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",4,5],["cp",9,7],["cp",10,8],["cp",1,9],["cp",12,10],["cp",2,11],["cp",4,12],["cp",4,13]],"t":1305114550.73078},{"y":25,"d":[[24,10,"e"]],"x":12,"t":1305114553.45679},{"y":25,"d":[[24,11,"c"]],"x":13,"t":1305114553.65684},{"y":25,"d":[[24,12,"h"]],"x":14,"t":1305114553.75289},{"y":25,"d":[[24,13,"o"]],"x":15,"t":1305114553.85694},{"y":25,"x":16,"t":1305114553.94517},{"y":25,"d":[[24,15,"B"]],"x":17,"t":1305114554.35305},{"y":25,"d":[[24,16,"y"]],"x":18,"t":1305114554.53685},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305114554.63291},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305114555.97677},{"d":[["r","new file mode 100644 "],["r","index 0000000..fd3c069 "],["r","--- /dev/null "],["r","+++ b/README "],["r","@@ -0,0 +1,2 @@ "],["r","+Hello. "],["r","+Nice to meet you. "],["r","diff --git a/welcome.txt b/welcome.txt "],["r","deleted file mode 100644 "],["r","index fd3c069..0000000 "],["r","--- a/welcome.txt "],["r","+++ /dev/null "],["r","@@ -1,2 +0,0 @@ "],["r","-Hello. "],["r","-Nice to meet you. "],["r","bash-3.2$ git reset --hard HEAD^ "],["r","HEAD is now at cb5775e restore file: welcome.txt "],["r","bash-3.2$ git status -s "],["r","bash-3.2$ ls "],["r","welcome.txt "],["r","bash-3.2$ mv welcome.txt README "],["r","bash-3.2$ git status -s "],["r"," D welcome.txt "],["r","?? README "],["r","bash-3.2$ echo Bye-B "]],"x":21,"B":[["r","11111111111111111111000000000000000000000000000000000000000000000000000000000000"],["r","11111111111111111111110000000000000000000000000000000000000000000000000000000000"],["r","11111111111110000000000000000000000000000000000000000000000000000000000000000000"],["r","11111111111100000000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d",["r","11111111111111111111111111111111111111000000000000000000000000000000000000000000"],["r","11111111111111111111111100000000000000000000000000000000000000000000000000000000"],["r","11111111111111111111110000000000000000000000000000000000000000000000000000000000"],["r","11111111111111111000000000000000000000000000000000000000000000000000000000000000"],["r","11111111111110000000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d",["r","66666666666666677777777777777777777777777777777777777777777777777777777777777777"],["r","22222227777777777777777777777777777777777777777777777777777777777777777777777777"],["r","22222222222222222277777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","66666666666666677777777777777777777777777777777777777777777777777777777777777777"],["r","11111117777777777777777777777777777777777777777777777777777777777777777777777777"],["r","11111111111111111177777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d",["r","71777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305114556.24891,"i":1},{"y":25,"d":[[24,20,"y"]],"x":22,"t":1305114556.441},{"y":25,"d":[[24,21,"e"]],"x":23,"t":1305114556.5686},{"y":25,"d":[[24,22,"."]],"x":24,"t":1305114556.94466},{"y":25,"x":25,"t":1305114557.16884},{"y":25,"d":[[24,24,">"]],"x":26,"t":1305114557.50496},{"y":25,"d":[[24,25,">"]],"x":27,"t":1305114557.69664},{"y":25,"x":28,"t":1305114557.92061},{"y":25,"d":[[24,27,"w"]],"x":29,"t":1305114558.44061},{"y":25,"d":[[24,28,"e"]],"x":30,"t":1305114558.59306},{"y":25,"x":30,"t":1305114558.82469},{"y":25,"d":[[24,28," "]],"x":29,"t":1305114559.46435},{"y":25,"d":[[24,27," "]],"x":28,"t":1305114559.61658},{"y":25,"d":[[24,27,"r"]],"x":29,"t":1305114559.86474},{"y":25,"d":[[24,28,"e"]],"x":30,"t":1305114560.02447},{"y":25,"d":[[24,27,32,"README"]],"x":35,"t":1305114560.22483},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",16,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",3,11],["cp",13,12],["cp",14,13],["cp",0,14],["cp",22,21],["cp",23,22],["cp",0,23]],"B":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",7,6],["cp",8,7],["cp",0,8],["cp",10,9],["cp",1,10],["cp",3,11]],"t":1305114560.96036},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305114560.96075},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114562.99254},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114563.08832},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114563.19251},{"y":25,"x":15,"t":1305114563.32038},{"y":25,"d":[[24,14,"a"]],"x":16,"t":1305114563.52837},{"y":25,"d":[[24,15,"d"]],"x":17,"t":1305114563.70451},{"y":25,"d":[[24,16,"d"]],"x":18,"t":1305114563.8645},{"y":25,"x":19,"t":1305114563.92841},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305114564.02449},{"y":25,"d":[[24,19,"A"]],"x":21,"t":1305114564.32872},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",15,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",4,3],["cp",5,4],["cp",0,5],["cp",2,10],["cp",12,11],["cp",13,12],["cp",0,13],["cp",21,20],["cp",22,21],["cp",0,22]],"B":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",0,9],["cp",2,10]],"t":1305114564.49629},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305114564.63459},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114564.90417},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114565.0006},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114565.09623},{"y":25,"x":15,"t":1305114565.15228},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305114565.27234},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305114565.42431},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305114565.56042},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305114565.6885},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305114565.80023},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305114565.88011},{"y":25,"x":22,"t":1305114566.02429},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305114566.09625},{"y":25,"d":[["cp",15,24]],"x":24,"t":1305114566.25625},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",14,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",14,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",1,9],["cp",11,10],["cp",12,11],["cp",0,12],["cp",20,19],["cp",21,20],["cp",0,21]],"B":[["cp",1,0],["cp",2,1],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",1,9]],"t":1305114566.39227},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",13,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",13,22],[23,0,23,"R welcome.txt -> README"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,8],["cp",10,9],["cp",11,10],["cp",3,11],["cp",19,18],["cp",20,19],["cp",3,20],[23,0,"2"]],"B":[["cp",1,0],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",0,8]],"t":1305114566.40204},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305114571.69598},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305114571.80019},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305114571.90431},{"y":25,"x":15,"t":1305114572.00017},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305114572.20816},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305114572.30409},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305114572.46398},{"y":25,"d":[[24,17,"m"]],"x":19,"t":1305114572.97594},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305114573.18392},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305114573.26404},{"y":25,"x":22,"t":1305114573.36787},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305114573.60792},{"y":25,"d":[[24,22,"m"]],"x":24,"t":1305114573.92774},{"y":25,"x":25,"t":1305114574.1278},{"y":25,"d":[[24,24,"\""]],"x":26,"t":1305114574.56798},{"y":25,"d":[[24,25,"R"]],"x":27,"t":1305114575.76117},{"y":25,"d":[[24,26,"e"]],"x":28,"t":1305114575.93587},{"y":25,"d":[[24,27,"a"]],"x":29,"t":1305114576.11172},{"y":25,"d":[[24,28,"d"]],"x":30,"t":1305114576.25569},{"y":25,"d":[[24,28," "]],"x":29,"t":1305114576.74362},{"y":25,"d":[[24,27," "]],"x":28,"t":1305114576.90358},{"y":25,"d":[[24,26," "]],"x":27,"t":1305114577.07963},{"y":25,"d":[[24,26,"E"]],"x":28,"t":1305114577.38387},{"y":25,"d":[[24,27,"A"]],"x":29,"t":1305114577.56781},{"y":25,"d":[[24,28,"D"]],"x":30,"t":1305114577.71164},{"y":25,"d":[[24,29,"M"]],"x":31,"t":1305114577.88794},{"y":25,"d":[[24,30,"E"]],"x":32,"t":1305114577.99166},{"y":25,"x":33,"t":1305114578.35981},{"y":25,"d":[[24,32,"i"]],"x":34,"t":1305114578.50379},{"y":25,"d":[[24,33,"s"]],"x":35,"t":1305114578.62361},{"y":25,"x":36,"t":1305114578.75177},{"y":25,"d":[[24,35,"f"]],"x":37,"t":1305114578.93561},{"y":25,"d":[[24,36,"r"]],"x":38,"t":1305114579.11155},{"y":25,"d":[[24,37,"o"]],"x":39,"t":1305114579.18376},{"y":25,"d":[[24,38,"m"]],"x":40,"t":1305114579.31162},{"y":25,"x":41,"t":1305114579.41582},{"y":25,"d":[[24,40,"w"]],"x":42,"t":1305114579.57562},{"y":25,"d":[[24,41,"l"]],"x":43,"t":1305114579.88775},{"y":25,"d":[[24,41," "]],"x":42,"t":1305114580.33553},{"y":25,"d":[[24,41,"e"]],"x":43,"t":1305114580.42368},{"y":25,"d":[[24,42,"l"]],"x":44,"t":1305114580.55949},{"y":25,"d":[[24,43,"c"]],"x":45,"t":1305114580.71937},{"y":25,"d":[[24,44,"o"]],"x":46,"t":1305114580.84758},{"y":25,"d":[[24,45,"m"]],"x":47,"t":1305114581.00747},{"y":25,"d":[[24,46,"e"]],"x":48,"t":1305114581.30359},{"y":25,"d":[[24,47,"."]],"x":49,"t":1305114581.45545},{"y":25,"d":[[24,48,"t"]],"x":50,"t":1305114581.5754},{"y":25,"d":[[24,49,"x"]],"x":51,"t":1305114581.72758},{"y":25,"d":[[24,50,"t"]],"x":52,"t":1305114581.83144},{"y":25,"d":[[24,51,"\""]],"x":53,"t":1305114582.2877},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",12,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",12,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",8,7],["cp",9,8],["cp",10,9],["cp",2,10],["cp",18,17],["cp",19,18],["cp",2,19],["cp",23,22],["cp",2,23]],"B":[["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,7]],"t":1305114583.94348},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",11,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",11,20],["cp",22,21],["cp",23,22],[23,0,51,"[master 8be895d] README is from welcome.txt "]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",7,6],["cp",8,7],["cp",9,8],["cp",1,9],["cp",17,16],["cp",18,17],["cp",1,18],["cp",22,21],["cp",1,22]],"B":[["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6]],"t":1305114584.25338},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",9,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",9,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,51," 1 files changed, 1 insertions(+), 0 deletions(-) "],[23,0,42," rename welcome.txt => README (73%) "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",6,4],["cp",7,5],["cp",8,6],["cp",0,7],["cp",0,8],["cp",16,14],["cp",17,15],["cp",0,16],["cp",0,17],["cp",21,19],["cp",0,21]],"B":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",4,5]],"t":1305114584.25463},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",8,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",8,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,34,"bash-3.2$ exit "],[24,["a"," "]]],"x":1,"f":[["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",14,13],["cp",15,14],["cp",0,15],["cp",19,18],["cp",0,19]],"B":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3]],"t":1305114587.19962}]} \ No newline at end of file diff --git a/html/part2/ch10-06-hello-world.html b/html/part2/ch10-06-hello-world.html new file mode 100644 index 000000000..9b44464b3 --- /dev/null +++ b/html/part2/ch10-06-hello-world.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch10-06-hello-world +json_file: ch10-06-hello-world.json +--- diff --git a/html/part2/ch10-06-hello-world.json b/html/part2/ch10-06-hello-world.json new file mode 100644 index 000000000..e13333e5a --- /dev/null +++ b/html/part2/ch10-06-hello-world.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305114828.28894,"i":1},{"y":1,"d":[[0,10,39,"cd /path/to/my/workspace/demo/"]],"x":11,"t":1305114828.76382},{"y":2,"x":1,"t":1305114829.17981},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305114829.18004},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305114830.76377},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305114830.86015},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305114830.94014},{"y":2,"x":15,"t":1305114831.02782},{"y":2,"d":[[1,14,"d"]],"x":16,"t":1305114831.19581},{"y":2,"d":[[1,15,"e"]],"x":17,"t":1305114831.37339},{"y":2,"d":[[1,16,"s"]],"x":18,"t":1305114831.57228},{"y":2,"d":[[1,17,"c"]],"x":19,"t":1305114831.80418},{"y":2,"d":[[1,18,"r"]],"x":20,"t":1305114832.08394},{"y":2,"d":[[1,19,"i"]],"x":21,"t":1305114832.21191},{"y":2,"d":[[1,20,"b"]],"x":22,"t":1305114832.34803},{"y":2,"d":[[1,21,"e"]],"x":23,"t":1305114832.49976},{"y":3,"x":1,"t":1305114832.72379},{"y":4,"d":[[2,0,22,"old_practice-3-g8be895d"],[3,0,8,"bash-3.2$"]],"x":11,"t":1305114832.73228},{"y":4,"d":[[3,10,"g"]],"x":12,"t":1305114834.21175},{"y":4,"d":[[3,11,"i"]],"x":13,"t":1305114834.29178},{"y":4,"d":[[3,12,"t"]],"x":14,"t":1305114834.39584},{"y":4,"x":15,"t":1305114834.46016},{"y":4,"d":[[3,14,"l"]],"x":16,"t":1305114834.56377},{"y":4,"d":[[3,15,"o"]],"x":17,"t":1305114834.73165},{"y":4,"d":[[3,16,"g"]],"x":18,"t":1305114834.8117},{"y":4,"x":19,"t":1305114834.87585},{"y":4,"d":[[3,18,"-"]],"x":20,"t":1305114835.04391},{"y":4,"d":[[3,19,"-"]],"x":21,"t":1305114835.21992},{"y":4,"d":[[3,20,"o"]],"x":22,"t":1305114835.41958},{"y":4,"d":[[3,21,"n"]],"x":23,"t":1305114835.53164},{"y":4,"d":[[3,22,"e"]],"x":24,"t":1305114835.58781},{"y":4,"d":[[3,23,"l"]],"x":25,"t":1305114835.70759},{"y":4,"d":[[3,24,"i"]],"x":26,"t":1305114835.83567},{"y":4,"d":[[3,25,"n"]],"x":27,"t":1305114835.97161},{"y":4,"d":[[3,26,"e"]],"x":28,"t":1305114836.07588},{"y":4,"x":29,"t":1305114836.16515},{"y":4,"d":[[3,28,"-"]],"x":30,"t":1305114836.50769},{"y":4,"d":[[3,29,"-"]],"x":31,"t":1305114836.69153},{"y":4,"d":[[3,30,"d"]],"x":32,"t":1305114836.83557},{"y":4,"d":[[3,31,"e"]],"x":33,"t":1305114836.99561},{"y":4,"d":[[3,32,"c"]],"x":34,"t":1305114837.16357},{"y":4,"d":[[3,33,"o"]],"x":35,"t":1305114837.23571},{"y":4,"d":[[3,34,"r"]],"x":36,"t":1305114837.34772},{"y":4,"d":[[3,35,"a"]],"x":37,"t":1305114837.5476},{"y":4,"d":[[3,36,"t"]],"x":38,"t":1305114837.65971},{"y":4,"d":[[3,37,"e"]],"x":39,"t":1305114837.77172},{"y":4,"x":40,"t":1305114837.89142},{"y":4,"d":[[3,39,"-"]],"x":41,"t":1305114837.97944},{"y":4,"d":[[3,40,"4"]],"x":42,"t":1305114838.58772},{"y":5,"x":1,"t":1305114838.69132},{"y":9,"d":[[4,0,48,"8be895d (HEAD, master) README is from welcome.txt"],[5,0,32,"cb5775e restore file: welcome.txt"],[6,0,44,"8ad2496 delete trash files (using git add -u)"],[7,0,49,"1086811 (tag: old_practice) Merge commit '6630c7c'"],[8,0,8,"bash-3.2$"]],"x":11,"f":[[4,0,21,"3333333336666332222223"],[5,0,6,["a","3"]],["cp",5,6],[7,0,26,["a","3"]]],"B":[[4,9,20,"111100111111"],[7,9,25,["a","1"]]],"t":1305114838.70469},{"y":9,"d":[[8,10,"v"]],"x":12,"t":1305114842.1155},{"y":9,"d":[[8,11,"i"]],"x":13,"t":1305114842.20359},{"y":9,"x":14,"t":1305114842.29944},{"y":9,"d":[[8,13,"s"]],"x":15,"t":1305114842.53133},{"y":9,"d":[[8,14,"r"]],"x":16,"t":1305114842.68325},{"y":9,"d":[[8,15,"c"]],"x":17,"t":1305114842.88342},{"y":9,"d":[[8,16,"/"]],"x":18,"t":1305114842.98733},{"y":9,"d":[[8,17,"m"]],"x":19,"t":1305114843.22716},{"y":9,"d":[[8,18,"a"]],"x":20,"t":1305114843.35515},{"y":9,"d":[[8,19,"i"]],"x":21,"t":1305114843.45938},{"y":9,"d":[[8,20,"n"]],"x":22,"t":1305114843.60337},{"y":9,"d":[[8,21,"."]],"x":23,"t":1305114844.1793},{"y":9,"d":[[8,22,"c"]],"x":24,"t":1305114844.25924},{"y":10,"x":1,"t":1305114844.48331},{"y":23,"d":[["cp",9,0],["cp",0,1],["cp",0,2],["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],[22,0,21,"\"src/main.c\" 10L, 145C"]],"x":23,"f":[["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,7]],"B":[["cp",0,4],["cp",0,7]],"t":1305114844.53173},{"y":1,"d":[[0,0,19,"#include \"version.h\""],[1,0,17,"#include "],[3,0,2,"int"],[4,0,5,"main()"],[5,0,"{"],[6,4,31,"printf( \"Hello, world.\\n\" );"],[7,4,40,"printf( \"version: %s.\\n\", _VERSION );"],[8,4,12,"return 0;"],[9,0,"}"],[10,0,"~"],["cp",10,11],["cp",10,12],["cp",10,13],["cp",10,14],["cp",10,15],["cp",10,16],["cp",10,17],["cp",10,18],["cp",10,19],["cp",10,20],["cp",10,21],[22,22,"c"]],"x":1,"f":[[0,0,19,"55555555511111111111"],[1,0,17,"555555555111111111"],[3,0,2,["a","2"]],[6,12,28,"11111111111111551"],[7,12,27,"1111111111551551"],[8,4,11,"33333371"],[10,0,77,["a","4"]],["cp",10,11],["cp",10,12],["cp",10,13],["cp",10,14],["cp",10,15],["cp",10,16],["cp",10,17],["cp",10,18],["cp",10,19],["cp",10,20],["cp",10,21]],"B":[[10,0,77,["a","1"]],["cp",10,11],["cp",10,12],["cp",10,13],["cp",10,14],["cp",10,15],["cp",10,16],["cp",10,17],["cp",10,18],["cp",10,19],["cp",10,20],["cp",10,21]],"t":1305114844.53755},{"y":2,"x":1,"t":1305114845.54757},{"y":3,"x":1,"t":1305114846.04752},{"y":4,"x":1,"t":1305114846.13101},{"y":5,"x":1,"t":1305114846.21433},{"y":6,"b":[[5,0,"6"],["cp",5,9]],"x":1,"t":1305114846.29877},{"y":7,"b":[["cp",0,5],["cp",0,9]],"x":1,"t":1305114846.38176},{"y":8,"x":1,"t":1305114846.46505},{"y":9,"x":1,"t":1305114846.5484},{"y":10,"b":[[5,0,"6"],["cp",5,9]],"x":1,"t":1305114846.63286},{"y":10,"x":1,"t":1305114846.71515},{"y":10,"x":1,"t":1305114846.79852},{"y":10,"x":1,"t":1305114846.882},{"y":10,"x":1,"t":1305114846.96561},{"y":10,"x":1,"t":1305114847.04895},{"y":23,"d":[[22,0,22,": "]],"x":2,"t":1305114848.5554},{"y":23,"d":[[22,1,"w"]],"x":3,"t":1305114849.57906},{"y":23,"d":[[22,2,"q"]],"x":4,"t":1305114849.76303},{"y":23,"x":1,"t":1305114849.97115},{"y":23,"d":[[22,0,11,"\"src/main.c\""]],"x":13,"t":1305114849.97136},{"y":10,"b":[["cp",0,5],["cp",0,9]],"d":[["cp",2,0],["cp",0,1],["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21],["cp",0,22]],"x":1,"f":[["cp",2,0],["cp",0,1],["cp",0,3],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"B":[["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"t":1305114850.24944},{"y":10,"d":[[9,0,8,"bash-3.2$"]],"x":11,"t":1305114850.25187},{"y":10,"d":[[9,10,"v"]],"x":12,"t":1305114851.09105},{"y":10,"d":[[9,11,"i"]],"x":13,"t":1305114851.18684},{"y":10,"x":14,"t":1305114851.29103},{"y":10,"d":[[9,13,"s"]],"x":15,"t":1305114852.45105},{"y":10,"d":[[9,14,"r"]],"x":16,"t":1305114852.59482},{"y":10,"d":[[9,15,"c"]],"x":17,"t":1305114852.78685},{"y":10,"d":[[9,16,"/"]],"x":18,"t":1305114852.89086},{"y":10,"d":[[9,17,"v"]],"x":19,"t":1305114853.07482},{"y":10,"d":[[9,18,28,"ersion.h.in"]],"x":31,"t":1305114853.35293},{"y":11,"x":1,"t":1305114854.74652},{"y":23,"d":[["cp",0,9],[22,0,25,"\"src/version.h.in\" 6L, 98C"]],"x":27,"t":1305114854.79213},{"y":1,"d":[[0,0,28,"#ifndef HELLO_WORLD_VERSION_H"],[1,0,28,"#define HELLO_WORLD_VERSION_H"],[3,0,27,"#define _VERSION \"\""],[5,0,5,"#endif"],[6,0,"~"],["cp",6,7],["cp",6,8],["cp",6,9],["cp",6,10],["cp",6,11],["cp",6,12],["cp",6,13],["cp",6,14],["cp",6,15],["cp",6,16],["cp",6,17],["cp",6,18],["cp",6,19],["cp",6,20],["cp",6,21],[22,26,"c"]],"x":1,"f":[[0,0,28,["a","5"]],["cp",0,1],[3,0,27,"5555555555555555511111111111"],[5,0,5,["a","5"]],[6,0,77,["a","4"]],["cp",6,7],["cp",6,8],["cp",6,9],["cp",6,10],["cp",6,11],["cp",6,12],["cp",6,13],["cp",6,14],["cp",6,15],["cp",6,16],["cp",6,17],["cp",6,18],["cp",6,19],["cp",6,20],["cp",6,21]],"B":[[6,0,77,["a","1"]],["cp",6,7],["cp",6,8],["cp",6,9],["cp",6,10],["cp",6,11],["cp",6,12],["cp",6,13],["cp",6,14],["cp",6,15],["cp",6,16],["cp",6,17],["cp",6,18],["cp",6,19],["cp",6,20],["cp",6,21]],"t":1305114854.79924},{"d":[["r","#ifndef HELLO_WORLD_VERSION_H "],["r","#define HELLO_WORLD_VERSION_H "],["a"," "],["r","#define _VERSION \"\" "],["a"," "],["r","#endif "],["r","~ "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["r","\"src/version.h.in\" 6L, 98Cc "],["a"," "],"d"],"x":1,"B":[["a","0"],"d","d","d","d","d",["r","11111111111111111111111111111111111111111111111111111111111111111111111111111100"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["a","0"],"d","d"],"y":2,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","55555555555555555555555555555777777777777777777777777777777777777777777777777777"],"d",["a","7"],["r","55555555555555555111111111117777777777777777777777777777777777777777777777777777"],["a","7"],["r","55555577777777777777777777777777777777777777777777777777777777777777777777777777"],["r","44444444444444444444444444444444444444444444444444444444444444444444444444444477"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["a","7"],"d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305114855.48288,"i":1},{"y":3,"x":1,"t":1305114855.66676},{"y":4,"x":1,"t":1305114856.16721},{"y":5,"x":1,"t":1305114856.25042},{"y":6,"x":1,"t":1305114856.33369},{"y":6,"x":1,"t":1305114856.417},{"y":6,"x":1,"t":1305114856.50052},{"y":6,"x":1,"t":1305114856.584},{"y":23,"d":[[22,0,26,": "]],"x":2,"t":1305114857.17099},{"y":23,"d":[[22,1,"w"]],"x":3,"t":1305114857.57066},{"y":23,"d":[[22,2,"q"]],"x":4,"t":1305114857.89076},{"y":23,"x":1,"t":1305114859.45867},{"y":23,"d":[[22,0,17,"\"src/version.h.in\""]],"x":19,"t":1305114859.45889},{"y":23,"d":[[22,19,33,"6L, 98C written"]],"x":35,"t":1305114859.73876},{"y":11,"d":[["cp",2,0],["cp",0,1],["cp",0,3],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],[9,0,28,"bash-3.2$ vi src/version.h.in"],[10,0,8,"bash-3.2$"],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21],["cp",0,22]],"x":11,"f":[["cp",2,0],["cp",0,1],["cp",0,3],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"B":[["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"t":1305114859.74144},{"y":11,"d":[[10,10,"v"]],"x":12,"t":1305114863.13825},{"y":11,"d":[[10,11,"i"]],"x":13,"t":1305114863.21042},{"y":11,"x":14,"t":1305114863.32246},{"y":11,"d":[[10,13,"s"]],"x":15,"t":1305114863.7623},{"y":11,"d":[[10,14,"r"]],"x":16,"t":1305114863.91428},{"y":11,"d":[[10,15,16,"c/"]],"x":18,"t":1305114864.39136},{"y":11,"d":[[10,17,"M"]],"x":19,"t":1305114865.17847},{"y":11,"d":[[10,18,"a"]],"x":20,"t":1305114865.33025},{"y":11,"d":[[10,19,"k"]],"x":21,"t":1305114865.47492},{"y":11,"d":[[10,20,"e"]],"x":22,"t":1305114865.67413},{"y":11,"d":[[10,21,"f"]],"x":23,"t":1305114865.89866},{"y":11,"d":[[10,22,"i"]],"x":24,"t":1305114865.97028},{"y":11,"d":[[10,23,24,"le"]],"x":27,"t":1305114866.17586},{"y":12,"x":1,"t":1305114866.8263},{"y":1,"d":[[0,0,15,"OBJECTS = main.o"],[1,0,13,"TARGET = hello"],[3,0,13,"all: $(TARGET)"],[5,0,20,"$(TARGET): $(OBJECTS)"],[6,2,15,"$(CC) -o $@ $^"],[8,0,16,"main.o: version.h"],["cp",2,9],[10,0,24,"version.h: new_header "],[12,0,10,"new_header:"],[13,2,72,"@sed -e \"s//$$(git describe)/g\" < version.h.in > version.h.tmp"],[14,2,60,"@if diff -q version.h.tmp version.h >/dev/null 2>&1; then \\"],[15,4,22,"rm version.h.tmp; \\"],[16,2,7,"else \\"],[17,4,39,"echo \"version.h.in => version.h\" ; \\"],[18,4,32,"mv version.h.tmp version.h; \\"],[19,2,3,"fi"],[21,0,5,"clean:"],[22,0,24,"\"src/Makefile\" 27L, 459Cc"]],"x":1,"f":[[0,0,7,["a","6"]],[1,0,6,["a","6"]],[3,0,13,"66667666666666"],[5,0,20,"666666666676666666666"],[6,0,15,"1166666111166166"],["cp",1,8],[10,0,9,["a","6"]],[12,0,10,["a","6"]],[13,0,72,"5551111111111111111111166111111111111111111111111111111111111111111111111"],[14,0,60,"5551111111111111111111111111111111111111111111111111111111115"],[15,0,22,"11111111111111111111115"],[16,0,7,"11111115"],[17,0,39,"1111111111111111111111111111111111111115"],[18,0,32,"111111111111111111111111111111115"],[19,0,3,["a","1"]],[21,0,5,["a","6"]]],"t":1305114866.87567},{"y":2,"x":1,"t":1305114867.93844},{"y":3,"x":1,"t":1305114868.39439},{"y":4,"x":1,"t":1305114868.89453},{"y":5,"x":1,"t":1305114868.97797},{"y":6,"x":1,"t":1305114869.06134},{"y":7,"x":2,"t":1305114869.14478},{"y":8,"x":1,"t":1305114869.22796},{"y":9,"x":1,"t":1305114869.31159},{"y":10,"x":1,"t":1305114869.39522},{"y":11,"x":1,"t":1305114869.47866},{"y":12,"x":1,"t":1305114869.56182},{"y":13,"x":1,"t":1305114869.64532},{"y":14,"x":2,"t":1305114869.72854},{"y":15,"x":2,"t":1305114869.81205},{"y":16,"x":2,"t":1305114869.89552},{"y":17,"x":2,"t":1305114869.97898},{"y":18,"x":2,"t":1305114870.06233},{"y":19,"x":2,"t":1305114870.1459},{"y":20,"x":2,"t":1305114870.22931},{"y":21,"x":1,"t":1305114870.31259},{"y":22,"x":1,"t":1305114870.39628},{"y":22,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",5,4],["cp",6,5],["cp",1,6],["cp",8,7],["cp",1,8],["cp",10,9],["cp",1,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",1,19],["cp",21,20],[21,0,37," rm -f $(TARGET) $(OBJECTS) version.h"],["cp",1,22]],"x":2,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",5,4],["cp",6,5],["cp",1,6],["cp",0,7],["cp",1,8],["cp",10,9],["cp",1,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",1,19],["cp",21,20],[21,0,37,"11111111666666666166666666661111111111"]],"t":1305114870.47976},{"y":22,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",0,5],["cp",7,6],["cp",0,7],["cp",9,8],["cp",0,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",0,18],["cp",20,19],["cp",21,20],["cp",0,21]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",0,5],["cp",7,6],["cp",0,7],["cp",9,8],["cp",0,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",0,18],["cp",20,19],["cp",21,20],["cp",0,21]],"t":1305114870.5631},{"y":22,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",1,4],["cp",6,5],["cp",1,6],["cp",8,7],["cp",1,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",1,17],["cp",19,18],["cp",20,19],["cp",1,20],[21,0,16,".PHONY: all clean"]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",1,4],["cp",6,5],["cp",1,6],["cp",8,7],["cp",1,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",1,17],["cp",19,18],["cp",20,19],["cp",1,20],[21,0,6,["a","3"]]],"t":1305114870.90643},{"y":22,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,3],["cp",5,4],["cp",0,5],["cp",7,6],["cp",0,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",0,16],["cp",18,17],["cp",19,18],["cp",0,19],["cp",21,20],["cp",0,21]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,3],["cp",5,4],["cp",0,5],["cp",7,6],["cp",0,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",0,16],["cp",18,17],["cp",19,18],["cp",0,19],["cp",21,20],["cp",0,21]],"t":1305114871.40657},{"y":22,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",2,4],["cp",6,5],["cp",2,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",2,15],["cp",17,16],["cp",18,17],["cp",2,18],["cp",20,19],["cp",2,20],[21,0,10,"# vim: noet"]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",2,4],["cp",6,5],["cp",2,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",2,15],["cp",17,16],["cp",18,17],["cp",2,18],["cp",20,19],["cp",2,20],[21,0,10,["a","4"]]],"t":1305114871.48997},{"y":22,"x":1,"t":1305114871.57328},{"y":22,"x":1,"t":1305114871.65675},{"y":22,"x":1,"t":1305114871.74018},{"y":22,"x":1,"t":1305114871.82361},{"y":22,"x":1,"t":1305114871.90725},{"y":22,"x":1,"t":1305114871.99072},{"y":23,"d":[[22,0,":"]],"x":2,"t":1305114873.39395},{"y":23,"d":[[22,1,"w"]],"x":3,"t":1305114873.50608},{"y":23,"d":[[22,2,"q"]],"x":4,"t":1305114873.72996},{"y":23,"x":1,"t":1305114874.00182},{"y":12,"d":[["cp",2,0],["cp",0,1],["cp",0,3],["cp",0,5],["cp",0,7],["cp",0,8],[9,0,60,"bash-3.2$ vi src/version.h.in "],[10,0,24,"bash-3.2$ vi src/Makefile"],[11,0,8,"bash-3.2$"],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,16],["cp",0,17],["cp",0,19],["cp",0,21],["cp",0,22]],"x":11,"f":[["cp",2,0],["cp",0,1],["cp",0,3],["cp",0,5],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,16],["cp",0,17],["cp",0,19],["cp",0,21]],"t":1305114874.00664},{"y":12,"d":[[11,10,"c"]],"x":12,"t":1305114878.44964},{"y":12,"d":[[11,11,"d"]],"x":13,"t":1305114878.62563},{"y":12,"x":14,"t":1305114878.68973},{"y":12,"d":[[11,13,"s"]],"x":15,"t":1305114878.88962},{"y":12,"d":[[11,14,"r"]],"x":16,"t":1305114879.00964},{"y":12,"d":[[11,15,"c"]],"x":17,"t":1305114879.23372},{"y":13,"x":1,"t":1305114879.74573},{"y":13,"d":[[12,0,8,"bash-3.2$"]],"x":11,"t":1305114879.74594},{"y":13,"d":[[12,10,"l"]],"x":12,"t":1305114880.16155},{"y":13,"d":[[12,11,"s"]],"x":13,"t":1305114880.24951},{"y":14,"x":1,"t":1305114880.38544},{"y":15,"d":[[13,0,29,"Makefile main.c version.h.in"],[14,0,8,"bash-3.2$"]],"x":11,"t":1305114880.39088},{"y":15,"d":[[14,10,"m"]],"x":12,"t":1305114882.4896},{"y":15,"d":[[14,11,"a"]],"x":13,"t":1305114882.56176},{"y":15,"d":[[14,12,"k"]],"x":14,"t":1305114882.65747},{"y":15,"d":[[14,13,"e"]],"x":15,"t":1305114882.72956},{"y":16,"x":1,"t":1305114883.38548},{"y":18,"d":[[15,0,24,"version.h.in => version.h"],[16,0,1,["a","c"]],[16,6,24,"-c -o main.o main.c"]],"x":1,"t":1305114883.41632},{"y":19,"d":[[17,0,17,"cc -o hello main.o"]],"x":1,"t":1305114883.70679},{"y":19,"d":[[18,0,8,"bash-3.2$"]],"x":11,"t":1305114883.72235},{"y":19,"d":[[18,10,"."]],"x":12,"t":1305114884.52935},{"y":19,"d":[[18,11,"/"]],"x":13,"t":1305114884.70546},{"y":19,"d":[[18,12,"h"]],"x":14,"t":1305114884.96936},{"y":19,"d":[[18,13,"e"]],"x":15,"t":1305114885.06525},{"y":19,"d":[[18,14,"l"]],"x":16,"t":1305114885.17736},{"y":19,"d":[[18,15,"l"]],"x":17,"t":1305114885.35331},{"y":19,"d":[[18,16,"o"]],"x":18,"t":1305114885.5533},{"y":20,"x":1,"t":1305114885.99339},{"y":22,"d":[[19,0,12,"Hello, world."],[20,0,32,"version: old_practice-3-g8be895d."],[21,0,8,"bash-3.2$"]],"x":11,"t":1305114885.99891},{"y":23,"d":[[21,10,13,"exit"]],"x":1,"t":1305114890.85736}]} \ No newline at end of file diff --git a/html/part2/ch10-07-add-i.html b/html/part2/ch10-07-add-i.html new file mode 100644 index 000000000..d074dc92d --- /dev/null +++ b/html/part2/ch10-07-add-i.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch10-07-add-i +json_file: ch10-07-add-i.json +--- diff --git a/html/part2/ch10-07-add-i.json b/html/part2/ch10-07-add-i.json new file mode 100644 index 000000000..9cf099a3f --- /dev/null +++ b/html/part2/ch10-07-add-i.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305115299.76219,"i":1},{"y":1,"d":[[0,10,39,"cd /path/to/my/workspace/demo/"]],"x":11,"t":1305115300.3259},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305115300.74992},{"y":2,"d":[[1,10,"l"]],"x":12,"t":1305115302.3739},{"y":2,"d":[[1,11,"s"]],"x":13,"t":1305115302.51085},{"y":2,"x":14,"t":1305115302.76681},{"y":2,"d":[[1,13,"s"]],"x":15,"t":1305115302.94167},{"y":2,"d":[[1,14,"r"]],"x":16,"t":1305115303.03766},{"y":2,"d":[[1,15,"c"]],"x":17,"t":1305115303.23764},{"y":3,"x":1,"t":1305115303.31759},{"y":4,"d":[[2,0,55,"Makefile hello main.c main.o version.h version.h.in"],[3,0,8,"bash-3.2$"]],"x":11,"t":1305115303.32365},{"y":4,"d":[[3,10,"c"]],"x":12,"t":1305115304.80568},{"y":4,"d":[[3,11,"d"]],"x":13,"t":1305115304.98158},{"y":4,"x":14,"t":1305115305.05349},{"y":4,"x":13,"t":1305115305.69371},{"y":4,"d":[[3,11," "]],"x":12,"t":1305115305.86941},{"y":4,"d":[[3,10," "]],"x":11,"t":1305115306.02165},{"y":4,"d":[[3,10,"g"]],"x":12,"t":1305115306.18179},{"y":4,"d":[[3,11,"i"]],"x":13,"t":1305115306.28558},{"y":4,"d":[[3,12,"t"]],"x":14,"t":1305115306.36559},{"y":4,"x":15,"t":1305115306.42162},{"y":4,"d":[[3,14,"a"]],"x":16,"t":1305115306.83085},{"y":4,"d":[[3,15,"d"]],"x":17,"t":1305115306.98202},{"y":4,"d":[[3,16,"d"]],"x":18,"t":1305115307.14964},{"y":4,"x":19,"t":1305115307.22168},{"y":4,"d":[[3,18,"-"]],"x":20,"t":1305115307.35797},{"y":4,"d":[[3,19,"i"]],"x":21,"t":1305115307.59758},{"y":5,"x":1,"t":1305115307.91744},{"y":7,"d":[[4,11,16,"staged"],[4,22,34,"unstaged path"]],"x":1,"B":[[4,5,34,["a","1"]]],"t":1305115308.07783},{"y":11,"d":[[7,0,15,"*** Commands ***"],[8,2,10,"1: status"],[8,18,26,"2: update"],[8,34,42,"3: revert"],[8,50,65,"4: add untracked"],[9,2,9,"5: patch"],[9,18,24,"6: diff"],[9,34,40,"7: quit"],[9,50,56,"8: help"],[10,0,8,"What now>"]],"x":11,"f":[[8,5,"4"],[8,21,"4"],[8,37,"4"],[8,53,"4"],["cp",8,9],[10,0,7,["a","4"]]],"B":[[7,0,15,["a","1"]],[8,5,"1"],[8,21,"1"],[8,37,"1"],[8,53,"1"],["cp",8,9],[10,0,7,["a","1"]]],"t":1305115308.07852},{"y":11,"d":[[10,10,"1"]],"x":12,"t":1305115310.56557},{"y":12,"x":1,"t":1305115311.01426},{"y":18,"d":[["cp",4,11],["cp",7,14],["cp",8,15],["cp",9,16],[17,0,8,"What now>"]],"x":11,"f":[["cp",8,15],["cp",8,16],["cp",10,17]],"B":[["cp",4,11],["cp",7,14],["cp",8,15],["cp",8,16],["cp",10,17]],"t":1305115311.02659},{"y":18,"d":[[17,10,"4"]],"x":12,"t":1305115312.73595},{"y":19,"x":1,"t":1305115313.27729},{"y":25,"d":[[18,2,16,"1: src/Makefile"],[19,2,13,"2: src/hello"],[20,2,14,"3: src/main.c"],[21,2,14,"4: src/main.o"],[22,2,17,"5: src/version.h"],[23,2,20,"6: src/version.h.in"],[24,0,14,"Add untracked>>"]],"x":17,"f":[[24,0,12,["a","4"]]],"B":[[24,0,12,["a","1"]]],"t":1305115313.28471},{"y":25,"d":[[24,16,"1"]],"x":18,"t":1305115314.66132},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",3,10],["cp",4,11],["cp",6,13],["cp",7,14],["cp",8,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",4,24]],"x":1,"f":[["cp",8,7],["cp",10,9],["cp",0,10],["cp",7,14],["cp",9,16],["cp",0,17],["cp",24,23],["cp",0,24]],"B":[["cp",4,3],["cp",0,4],["cp",7,6],["cp",8,7],["cp",10,9],["cp",3,10],["cp",0,11],["cp",6,13],["cp",7,14],["cp",9,16],["cp",0,17],["cp",24,23],["cp",0,24]],"t":1305115314.82918},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",5,6],["cp",0,7],["cp",1,8],["cp",2,9],["cp",16,10],["cp",17,11],["cp",18,12],["cp",19,13],["cp",20,14],["cp",21,15],["cp",22,16],["cp",23,17],[18,0,2,"* 1"],[18,9,16,"Makefile"],["cp",12,19],["cp",13,20],["cp",14,21],["cp",15,22],["cp",16,23],[24,0,14,"Add untracked>>"]],"x":17,"f":[["cp",7,1],["cp",1,2],["cp",9,3],["cp",0,7],["cp",1,9],["cp",3,10],["cp",0,14],["cp",0,15],["cp",0,16],["cp",23,17],["cp",0,23],["cp",17,24]],"B":[["cp",6,0],["cp",7,1],["cp",1,2],["cp",9,3],["cp",10,4],["cp",5,6],["cp",0,7],["cp",1,9],["cp",3,10],["cp",5,13],["cp",5,14],["cp",5,15],["cp",5,16],["cp",23,17],["cp",5,23],["cp",17,24]],"t":1305115314.82968},{"y":25,"d":[[24,16,"3"]],"x":18,"t":1305115316.72526},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",7,6],["cp",0,7],["cp",1,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",11,18],["cp",12,19],["cp",13,20],["cp",14,21],["cp",15,22],["cp",24,23],["cp",4,24]],"x":1,"f":[["cp",1,0],["cp",3,2],["cp",4,3],["cp",0,7],["cp",2,9],["cp",3,10],["cp",17,16],["cp",3,17],["cp",16,23],["cp",3,24]],"B":[["cp",1,0],["cp",3,2],["cp",4,3],["cp",5,4],["cp",7,6],["cp",0,7],["cp",2,9],["cp",4,10],["cp",17,16],["cp",4,17],["cp",16,23],["cp",4,24]],"t":1305115316.9331},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",14,8],["cp",15,9],["cp",16,10],["cp",17,11],["cp",5,12],["cp",6,13],["cp",7,14],["cp",8,15],["cp",9,16],["cp",23,17],["cp",11,18],["cp",5,19],[20,0,2,"* 3"],[20,14,"c"],["cp",7,21],["cp",8,22],["cp",9,23],[24,0,14,"Add untracked>>"]],"x":17,"f":[["cp",3,0],["cp",1,2],["cp",9,3],["cp",0,7],["cp",0,8],["cp",0,9],["cp",16,10],["cp",0,16],["cp",10,17],["cp",0,23],["cp",10,24]],"B":[["cp",6,0],["cp",1,2],["cp",9,3],["cp",4,6],["cp",4,7],["cp",4,8],["cp",4,9],["cp",16,10],["cp",4,16],["cp",10,17],["cp",4,23],["cp",10,24]],"t":1305115316.9334},{"y":25,"d":[[24,16,"6"]],"x":18,"t":1305115318.39711},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",4,11],["cp",5,12],["cp",6,13],["cp",7,14],["cp",8,15],["cp",17,16],["cp",10,17],["cp",4,18],["cp",20,19],["cp",6,20],["cp",7,21],["cp",8,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",3,2],["cp",4,3],["cp",10,9],["cp",3,10],["cp",9,16],["cp",3,17],["cp",9,23],["cp",3,24]],"B":[["cp",1,0],["cp",3,2],["cp",4,3],["cp",10,9],["cp",3,10],["cp",9,16],["cp",3,17],["cp",9,23],["cp",3,24]],"t":1305115318.74919},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",0,7],["cp",1,8],["cp",2,9],["cp",16,10],["cp",4,11],["cp",5,12],["cp",19,13],["cp",0,14],["cp",1,15],["cp",2,16],["cp",23,17],["cp",4,18],["cp",5,19],["cp",13,20],["cp",0,21],["cp",1,22],[23,0,20,"* 6: src/version.h.in"],[24,0,14,"Add untracked>>"]],"x":17,"f":[["cp",3,0],["cp",0,1],["cp",0,2],["cp",9,3],["cp",0,9],["cp",3,10],["cp",0,16],["cp",3,17],["cp",0,23],["cp",3,24]],"B":[["cp",3,0],["cp",0,1],["cp",0,2],["cp",9,3],["cp",0,9],["cp",3,10],["cp",0,16],["cp",3,17],["cp",0,23],["cp",3,24]],"t":1305115318.74959},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",1,8],["cp",10,9],["cp",3,10],["cp",4,11],["cp",13,12],["cp",6,13],["cp",0,14],["cp",1,15],["cp",17,16],["cp",3,17],["cp",4,18],["cp",12,19],["cp",6,20],["cp",0,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",0,3],["cp",2,9],["cp",0,10],["cp",2,16],["cp",0,17],["cp",2,23],["cp",0,24]],"B":[["cp",3,2],["cp",0,3],["cp",2,9],["cp",0,10],["cp",2,16],["cp",0,17],["cp",2,23],["cp",0,24]],"t":1305115319.96491},{"y":25,"d":[["cp",5,0],["cp",6,1],["cp",7,2],["cp",8,3],["cp",9,4],["cp",10,5],["cp",11,6],["cp",12,7],["cp",1,8],["cp",2,9],["cp",3,10],["cp",16,11],["cp",5,12],["cp",6,13],["cp",7,14],["cp",1,15],["cp",2,16],["cp",22,17],["cp",23,18],[19,0,14,"added 3 paths "],["cp",24,20],[21,0,17,"*** Commands *** "],[22,0,26," 1: status 2: update"],[22,34,42,"3: revert"],[22,50,65,"4: add untracked"],[23,0,24," 5: patch 6: diff"],[23,34,40,"7: quit"],[23,50,56,"8: help"],[24,0,8,"What now>"]],"x":11,"f":[["cp",0,2],["cp",9,4],["cp",0,9],["cp",4,11],["cp",0,16],["cp",4,18],[22,5,"4"],[22,21,"4"],[22,37,"4"],[22,53,"4"],["cp",22,23],[24,0,7,["a","4"]]],"B":[["cp",0,2],["cp",9,4],["cp",0,9],["cp",4,11],["cp",0,16],["cp",4,18],[21,0,15,["a","1"]],[22,5,"1"],[22,21,"1"],[22,37,"1"],[22,53,"1"],["cp",22,23],[24,0,7,["a","1"]]],"t":1305115319.97469},{"y":25,"d":[[24,10,"s"]],"x":12,"t":1305115321.95686},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",1,8],["cp",2,9],["cp",11,10],["cp",4,11],["cp",5,12],["cp",6,13],["cp",0,14],["cp",1,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",19,24]],"x":1,"f":[["cp",4,3],["cp",0,4],["cp",3,10],["cp",0,11],["cp",3,17],["cp",0,18],["cp",22,21],["cp",24,23],["cp",0,24]],"B":[["cp",4,3],["cp",0,4],["cp",3,10],["cp",0,11],["cp",3,17],["cp",0,18],["cp",21,20],["cp",22,21],["cp",24,23],["cp",0,24]],"t":1305115322.14089},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",10,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",16,8],["cp",17,9],["cp",18,10],["cp",19,11],["cp",20,12],["cp",21,13],["cp",22,14],["cp",23,15],[16,0,34," staged unstaged path"],[17,0,16," 1: +27/-0"],[17,23,42,"nothing src/Makefile"],[18,0,16," 2: +10/-0"],[18,23,40,"nothing src/main.c"],[19,2,3,"3:"],[19,12,16,"+6/-0"],[19,23,46,"nothing src/version.h.in"],["cp",11,20],["cp",12,21],["cp",13,22],["cp",14,23],[24,0,8,"What now>"]],"x":11,"f":[["cp",3,2],["cp",0,3],["cp",2,9],["cp",0,10],["cp",21,13],["cp",13,14],["cp",23,15],["cp",0,17],["cp",0,21],["cp",13,23],["cp",15,24]],"B":[["cp",3,2],["cp",0,3],["cp",2,9],["cp",0,10],["cp",20,12],["cp",21,13],["cp",13,14],["cp",23,15],[16,5,34,["a","1"]],["cp",0,17],["cp",0,20],["cp",12,21],["cp",13,23],["cp",15,24]],"t":1305115322.15487},{"y":25,"d":[[24,10,"q"]],"x":12,"t":1305115325.06078},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",9,18],["cp",10,19],["cp",11,20],["cp",12,21],["cp",24,22],[23,0,9,"Bye. "],[23,18,24,["a"," "]],[23,34,40,["a"," "]],[23,50,56,["a"," "]],["cp",9,24]],"x":1,"f":[["cp",2,0],["cp",1,2],["cp",0,7],["cp",1,9],["cp",13,11],["cp",11,12],["cp",15,13],["cp",1,14],["cp",1,15],["cp",11,20],["cp",11,21],["cp",13,22],["cp",1,23],["cp",1,24]],"B":[["cp",2,0],["cp",1,2],["cp",0,7],["cp",1,9],["cp",12,10],["cp",13,11],["cp",11,12],["cp",15,13],["cp",16,14],["cp",1,15],["cp",1,16],["cp",10,19],["cp",11,20],["cp",11,21],["cp",13,22],["cp",1,23],["cp",1,24]],"t":1305115326.74124},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305115326.74413},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305115327.25252},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305115327.3168},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305115327.42863},{"y":25,"x":15,"t":1305115327.50857},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305115327.75671},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305115327.88488},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305115328.01286},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305115328.11661},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305115328.22058},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305115328.29294},{"y":25,"x":22,"t":1305115328.45344},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305115328.56449},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305115328.65257},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",8,17],["cp",9,18],["cp",10,19],["cp",11,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",8,24]],"x":1,"f":[["cp",1,0],["cp",7,6],["cp",0,7],["cp",11,10],["cp",13,12],["cp",0,13],["cp",10,19],["cp",12,21],["cp",0,22]],"B":[["cp",1,0],["cp",7,6],["cp",0,7],["cp",10,9],["cp",11,10],["cp",13,12],["cp",14,13],["cp",0,14],["cp",9,18],["cp",10,19],["cp",12,21],["cp",0,22]],"t":1305115328.79738},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",14,8],["cp",15,9],["cp",16,10],["cp",2,11],["cp",3,12],["cp",4,13],["cp",5,14],["cp",21,15],["cp",22,16],["cp",23,17],[18,0,15,"A src/Makefile "],[19,0,12,"A src/main.c"],[19,18,26,["a"," "]],[19,34,42,["a"," "]],[19,50,65,["a"," "]],[20,0,24,"A src/version.h.in "],[20,34,40,["a"," "]],[20,50,56,["a"," "]],[21,0,11,"?? src/hello"],[22,0,12,"?? src/main.o"],[23,0,22,"?? src/version.h "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",6,0],["cp",10,4],["cp",4,5],["cp",12,6],["cp",1,10],["cp",1,11],["cp",1,12],["cp",4,13],["cp",4,14],["cp",6,15],[18,0,"2"],["cp",18,19],["cp",18,20],[21,0,7,"11777777"],["cp",21,22],["cp",21,23]],"B":[["cp",6,0],["cp",9,3],["cp",10,4],["cp",4,5],["cp",12,6],["cp",13,7],["cp",1,9],["cp",1,10],["cp",1,11],["cp",3,12],["cp",4,13],["cp",4,14],["cp",6,15],["cp",1,18],["cp",1,19],["cp",1,20],["cp",1,21]],"t":1305115328.80637},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305115329.97274},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305115330.08441},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305115330.1727},{"y":25,"x":15,"t":1305115330.23659},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305115330.6604},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305115330.71673},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305115330.9006},{"y":25,"d":[[24,17,"m"]],"x":19,"t":1305115331.05239},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305115331.21239},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305115331.30041},{"y":25,"x":22,"t":1305115331.37233},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305115331.60435},{"y":25,"d":[[24,22,"m"]],"x":24,"t":1305115331.93232},{"y":25,"x":25,"t":1305115332.14037},{"y":25,"d":[[24,24,"\""]],"x":26,"t":1305115332.7005},{"y":25,"d":[[24,25,"H"]],"x":27,"t":1305115336.14049},{"y":25,"d":[[24,26,"e"]],"x":28,"t":1305115336.3002},{"y":25,"d":[[24,27,"l"]],"x":29,"t":1305115336.46011},{"y":25,"d":[[24,28,"l"]],"x":30,"t":1305115336.63643},{"y":25,"d":[[24,29,"o"]],"x":31,"t":1305115336.77211},{"y":25,"x":32,"t":1305115336.89243},{"y":25,"d":[[24,31,"w"]],"x":33,"t":1305115337.53319},{"y":25,"d":[[24,32,"o"]],"x":34,"t":1305115337.66036},{"y":25,"d":[[24,33,"r"]],"x":35,"t":1305115337.78815},{"y":25,"d":[[24,34,"l"]],"x":36,"t":1305115337.86832},{"y":25,"d":[[24,35,"d"]],"x":37,"t":1305115338.04403},{"y":25,"x":38,"t":1305115338.27631},{"y":25,"d":[[24,37,"i"]],"x":39,"t":1305115338.49206},{"y":25,"d":[[24,38,"n"]],"x":40,"t":1305115338.62817},{"y":25,"d":[[24,39,"i"]],"x":41,"t":1305115338.75626},{"y":25,"d":[[24,40,"t"]],"x":42,"t":1305115338.8122},{"y":25,"d":[[24,41,"i"]],"x":43,"t":1305115338.94812},{"d":[["r","Add untracked>> "],["r","added 3 paths "],["a"," "],["r","*** Commands *** "],["r"," 1: status 2: update 3: revert 4: add untracked "],["r"," 5: patch 6: diff 7: quit 8: help "],["r","What now> s "],["r"," staged unstaged path "],["r"," 1: +27/-0 nothing src/Makefile "],["r"," 2: +10/-0 nothing src/main.c "],["r"," 3: +6/-0 nothing src/version.h.in "],["a"," "],["r","*** Commands *** "],["r"," 1: status 2: update 3: revert 4: add untracked "],["r"," 5: patch 6: diff 7: quit 8: help "],["r","What now> q "],["r","Bye. "],["r","bash-3.2$ git status -s "],["r","A src/Makefile "],["r","A src/main.c "],["r","A src/version.h.in "],["r","?? src/hello "],["r","?? src/main.o "],["r","?? src/version.h "],["r","bash-3.2$ git commit -m \"Hello world initia "]],"x":44,"B":[["r","11111111111110000000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d",["r","11111111111111110000000000000000000000000000000000000000000000000000000000000000"],["r","00000100000000000000010000000000000001000000000000000100000000000000000000000000"],"d",["r","11111111000000000000000000000000000000000000000000000000000000000000000000000000"],["r","00000111111111111111111111111111111000000000000000000000000000000000000000000000"],["a","0"],"d","d","d",["r","11111111111111110000000000000000000000000000000000000000000000000000000000000000"],["r","00000100000000000000010000000000000001000000000000000100000000000000000000000000"],"d",["r","11111111000000000000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","44444444444447777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d",["r","77777477777777777777747777777777777774777777777777777477777777777777777777777777"],"d",["r","44444444777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d",["r","77777477777777777777747777777777777774777777777777777477777777777777777777777777"],"d",["r","44444444777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305115339.00388,"i":1},{"y":25,"d":[[24,43,"l"]],"x":45,"t":1305115339.12403},{"y":25,"d":[[24,44,"i"]],"x":46,"t":1305115339.30817},{"y":25,"d":[[24,45,"z"]],"x":47,"t":1305115339.42825},{"y":25,"d":[[24,46,"e"]],"x":48,"t":1305115339.57207},{"y":25,"d":[[24,47,"d"]],"x":49,"t":1305115339.73216},{"y":25,"d":[[24,48,"."]],"x":50,"t":1305115339.81215},{"y":25,"d":[[24,49,"\""]],"x":51,"t":1305115340.20395},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",1,10],["cp",2,11],["cp",3,12],["cp",4,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",1,24]],"x":1,"f":[["cp",1,0],["cp",4,3],["cp",6,5],["cp",0,6],["cp",3,12],["cp",5,14],["cp",0,15],["cp",18,17],["cp",21,20],["cp",0,23]],"B":[["cp",1,0],["cp",3,2],["cp",4,3],["cp",6,5],["cp",7,6],["cp",0,7],["cp",2,11],["cp",3,12],["cp",5,14],["cp",0,15]],"t":1305115340.39637},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",0,9],["cp",1,10],["cp",2,11],["cp",3,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,49,"[master 15f507b] Hello world initialized. "]],"x":1,"f":[["cp",3,2],["cp",5,4],["cp",0,5],["cp",2,11],["cp",4,13],["cp",0,14],["cp",17,16],["cp",20,19],["cp",0,22]],"B":[["cp",2,1],["cp",3,2],["cp",5,4],["cp",6,5],["cp",0,6],["cp",1,10],["cp",2,11],["cp",4,13],["cp",0,14]],"t":1305115340.67798},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",13,9],["cp",14,10],["cp",15,11],["cp",16,12],["cp",17,13],["cp",18,14],["cp",19,15],["cp",20,16],["cp",21,17],["cp",22,18],["cp",23,19],[20,0,49," 3 files changed, 43 insertions(+), 0 deletions(-)"],[21,0,31," create mode 100644 src/Makefile"],[22,0,49," create mode 100644 src/main.c "],[23,0,40," create mode 100644 src/version.h.in "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,0],["cp",1,2],["cp",1,3],["cp",1,4],["cp",11,7],["cp",7,8],["cp",0,9],["cp",1,11],["cp",16,12],["cp",12,13],["cp",12,14],["cp",19,15],["cp",15,16],["cp",15,17],["cp",1,18],["cp",1,19],["cp",1,20],["cp",1,21]],"B":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",2,3],["cp",2,4],["cp",2,5],["cp",10,6],["cp",11,7],["cp",7,8],["cp",0,9],["cp",2,10],["cp",2,11],["cp",2,12],["cp",2,13]],"t":1305115340.67936},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305115345.3719},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305115345.46001},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305115345.59583},{"y":25,"x":15,"t":1305115345.6998},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305115346.03575},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305115346.17961},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305115346.3237},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305115346.41171},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305115346.49964},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305115346.58781},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",4,24]],"x":1,"f":[["cp",1,0],["cp",7,6],["cp",9,8],["cp",0,9],["cp",12,11],["cp",15,14],["cp",0,17]],"B":[["cp",1,0],["cp",2,1],["cp",6,5],["cp",7,6],["cp",9,8],["cp",1,9]],"t":1305115346.84368},{"y":25,"d":[["cp",8,0],["cp",9,1],["cp",10,2],["cp",11,3],["cp",12,4],["cp",13,5],["cp",14,6],["cp",15,7],["cp",16,8],["cp",17,9],["cp",18,10],["cp",19,11],["cp",20,12],["cp",21,13],["cp",22,14],["cp",23,15],[16,0,17,"# On branch master"],[17,0,49,"# Untracked files: "],[18,0,65,"# (use \"git add ...\" to include in what will be committed)"],[19,0,49,"# "],[20,0,31,"# src/hello "],[21,0,29,"# src/main.o "],[22,0,35,"# src/version.h "],[23,0,75,"nothing added to commit but untracked files present (use \"git add\" to track)"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",8,0],["cp",11,3],["cp",3,4],["cp",3,5],["cp",14,6],["cp",6,7],["cp",6,8],["cp",1,11],["cp",1,12],["cp",1,13],["cp",1,14],["cp",1,15],["cp",1,16],[20,8,16,["a","1"]],[21,8,17,["a","1"]],[22,8,20,["a","1"]]],"B":[["cp",8,0],["cp",1,5],["cp",1,6],["cp",1,7],["cp",1,8]],"t":1305115346.85266},{"y":25,"d":[[24,10,"c"]],"x":12,"t":1305115347.68366},{"y":25,"d":[[24,11,"d"]],"x":13,"t":1305115347.8599},{"y":25,"x":14,"t":1305115347.92347},{"y":25,"d":[[24,13,"s"]],"x":15,"t":1305115348.05169},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305115348.16361},{"y":25,"d":[[24,15,"c"]],"x":17,"t":1305115348.33954},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,10,15,["a"," "]]],"x":11,"f":[["cp",1,0],["cp",3,2],["cp",6,5],["cp",0,8],["cp",20,19],["cp",21,20],["cp",22,21],["cp",0,22]],"B":[["cp",1,0]],"t":1305115348.50823},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305115348.79575},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305115348.92359},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",5,4],["cp",0,7],["cp",19,18],["cp",20,19],["cp",21,20],["cp",0,21]],"t":1305115349.02732},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,55,"Makefile hello main.c main.o version.h version.h.in"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",4,3],["cp",7,6],["cp",18,17],["cp",19,18],["cp",20,19],["cp",6,20]],"t":1305115349.03413},{"y":25,"d":[[24,10,"m"]],"x":12,"t":1305115350.09964},{"y":25,"d":[[24,11,"a"]],"x":13,"t":1305115350.21133},{"y":25,"d":[[24,12,"k"]],"x":14,"t":1305115350.2755},{"y":25,"d":[[24,13,"e"]],"x":15,"t":1305115350.33956},{"y":25,"x":16,"t":1305115350.42753},{"y":25,"d":[[24,15,"l"]],"x":17,"t":1305115350.62763},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305115350.71546},{"y":25,"d":[[24,17,"a"]],"x":19,"t":1305115350.85142},{"y":25,"d":[[24,18,"n"]],"x":20,"t":1305115350.96364},{"y":25,"d":[[24,18," "]],"x":19,"t":1305115351.4675},{"y":25,"d":[[24,17," "]],"x":18,"t":1305115351.63561},{"y":25,"d":[[24,16," "]],"x":17,"t":1305115351.81153},{"y":25,"d":[[24,15," "]],"x":16,"t":1305115351.97947},{"y":25,"d":[[24,15,"c"]],"x":17,"t":1305115352.03525},{"y":25,"d":[[24,16,"l"]],"x":18,"t":1305115352.19554},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305115352.41935},{"y":25,"d":[[24,18,"a"]],"x":20,"t":1305115352.54743},{"y":25,"d":[[24,19,"n"]],"x":21,"t":1305115352.62847},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",6,5],["cp",17,16],["cp",18,17],["cp",19,18],["cp",5,19]],"t":1305115352.82843},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,27,"rm -f hello main.o version.h"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,1],["cp",5,4],["cp",16,15],["cp",17,16],["cp",18,17],["cp",4,18]],"t":1305115352.8351},{"y":25,"d":[[24,10,"m"]],"x":12,"t":1305115353.07557},{"y":25,"d":[[24,11,"a"]],"x":13,"t":1305115353.16348},{"y":25,"d":[[24,12,"k"]],"x":14,"t":1305115353.2513},{"y":25,"d":[[24,13,"e"]],"x":15,"t":1305115353.30743},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",4,3],["cp",15,14],["cp",16,15],["cp",17,16],["cp",3,17]],"t":1305115353.49132},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,27,"version.h.in => version.h "],[23,0,24,"cc -c -o main.o main.c"]],"x":1,"f":[["cp",3,1],["cp",1,2],["cp",14,12],["cp",15,13],["cp",16,14],["cp",1,15],["cp",1,16]],"t":1305115353.51534},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,3,9,"-o hell"],[23,19,24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",12,11],["cp",13,12],["cp",14,13],["cp",0,14]],"t":1305115353.79946},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305115353.81507},{"y":25,"d":[[24,10,"."]],"x":12,"t":1305115354.27546},{"y":25,"d":[[24,11,"/"]],"x":13,"t":1305115354.45948},{"y":25,"d":[[24,12,"h"]],"x":14,"t":1305115354.68332},{"y":25,"d":[[24,13,"e"]],"x":15,"t":1305115354.77129},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305115354.88343},{"y":25,"d":[[24,15,"l"]],"x":17,"t":1305115355.04332},{"y":25,"d":[[24,16,"o"]],"x":18,"t":1305115355.2192},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13]],"t":1305115355.42725},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,17,"Hello, world. "],[23,0,32,"version: old_practice-4-g15f507b."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",10,8],["cp",11,9],["cp",12,10],["cp",0,11],["cp",0,12]],"t":1305115355.43217},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305115359.31509},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305115359.37908},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305115359.46725},{"y":25,"x":15,"t":1305115359.55508},{"y":25,"d":[[24,14,"t"]],"x":16,"t":1305115359.77933},{"y":25,"d":[[24,15,"a"]],"x":17,"t":1305115359.96308},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305115360.08298},{"y":25,"x":19,"t":1305115360.35537},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305115361.01907},{"y":25,"d":[[24,19,"m"]],"x":21,"t":1305115361.35501},{"y":25,"x":22,"t":1305115361.50719},{"y":25,"d":[[24,21,"\""]],"x":23,"t":1305115361.77928},{"y":25,"d":[[24,22,"S"]],"x":24,"t":1305115362.33927},{"y":25,"d":[[24,23,"e"]],"x":25,"t":1305115362.499},{"y":25,"d":[[24,24,"t"]],"x":26,"t":1305115362.63491},{"y":25,"x":27,"t":1305115362.78699},{"y":25,"d":[[24,26,"t"]],"x":28,"t":1305115362.93889},{"y":25,"d":[[24,27,"a"]],"x":29,"t":1305115363.09146},{"y":25,"d":[[24,28,"g"]],"x":30,"t":1305115363.25112},{"y":25,"x":31,"t":1305115363.75488},{"y":25,"d":[[24,30,"h"]],"x":32,"t":1305115364.48402},{"y":25,"d":[[24,31,"e"]],"x":33,"t":1305115364.5549},{"y":25,"d":[[24,32,"l"]],"x":34,"t":1305115364.67469},{"y":25,"d":[[24,33,"l"]],"x":35,"t":1305115364.84298},{"y":25,"d":[[24,34,"o"]],"x":36,"t":1305115365.0269},{"y":25,"d":[[24,35,"_"]],"x":37,"t":1305115365.32304},{"y":25,"d":[[24,36,"1"]],"x":38,"t":1305115365.65998},{"y":25,"d":[[24,37,"."]],"x":39,"t":1305115365.77859},{"y":25,"d":[[24,38,"9"]],"x":40,"t":1305115366.00293},{"d":[["r"," create mode 100644 src/Makefile "],["r"," create mode 100644 src/main.c "],["r"," create mode 100644 src/version.h.in "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","# Untracked files: "],["r","# (use \"git add ...\" to include in what will be committed) "],["r","# "],["r","# src/hello "],["r","# src/main.o "],["r","# src/version.h "],["r","nothing added to commit but untracked files present (use \"git add\" to track) "],["r","bash-3.2$ cd src "],["r","bash-3.2$ ls "],["r","Makefile hello main.c main.o version.h version.h.in "],["r","bash-3.2$ make clean "],["r","rm -f hello main.o version.h "],["r","bash-3.2$ make "],["r","version.h.in => version.h "],["r","cc -c -o main.o main.c "],["r","cc -o hello main.o "],["r","bash-3.2$ ./hello "],["r","Hello, world. "],["r","version: old_practice-4-g15f507b. "],["r","bash-3.2$ git tag -m \"Set tag hello_1. "]],"x":39,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d",["r","77777777111111111777777777777777777777777777777777777777777777777777777777777777"],["r","77777777111111111177777777777777777777777777777777777777777777777777777777777777"],["r","77777777111111111111177777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305115366.59514,"i":1},{"y":25,"d":[[24,38,"0"]],"x":40,"t":1305115367.13089},{"y":25,"d":[[24,39,"\""]],"x":41,"t":1305115367.53881},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",8,7],["cp",9,8],["cp",10,9],["cp",0,10]],"t":1305115368.03463},{"y":25,"d":[["cp",21,0],["cp",22,1],["cp",23,2],[3,0,78,"usage: git tag [-a|-s|-u ] [-f] [-m |-F ] []"],[4,0,29," or: git tag -d ..."],[5,0,65," or: git tag -l [-n[]] [] "],[6,0,29," or: git tag -v ..."],["cp",24,7],[8,0,17," -l "],[8,26,39,"list tag names"],[9,0,20," -n[] "],[9,26,60,"print lines of each tag message"],[10,0,75," -d delete tags "],[11,0,15," -v "],[11,26,36,"verify tags"],["cp",7,12],[13,0,55,"Tag creation options "],[14,0,19," -a "],[14,26,55,"annotated tag, needs a message"],[15,0,36," -m tag message"],[16,0,13," -F "],[16,26,47,"read message from file"],[17,0,53," -s annotated and GPG-signed tag"],[18,0,56," -u use another key to sign the tag"],[19,0,17," -f, --force "],[19,26,50,"replace the tag if exists"],["cp",7,20],[21,0,18,"Tag listing options"],[22,0,64," --contains print only tags that contain the commit"],["cp",7,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,7],["cp",0,8],["cp",0,9]],"t":1305115368.0416},{"y":25,"d":[["cp",2,24]],"x":41,"t":1305115369.2667},{"y":25,"x":42,"t":1305115369.64252},{"y":25,"d":[[24,41,"h"]],"x":43,"t":1305115369.8666},{"y":25,"d":[[24,42,"e"]],"x":44,"t":1305115369.9626},{"y":25,"d":[[24,43,"l"]],"x":45,"t":1305115370.05844},{"y":25,"d":[[24,44,"l"]],"x":46,"t":1305115370.22645},{"y":25,"d":[[24,45,"o"]],"x":47,"t":1305115370.41037},{"y":25,"d":[[24,46,"_"]],"x":48,"t":1305115370.79466},{"y":25,"d":[[24,47,"1"]],"x":49,"t":1305115371.13066},{"y":25,"d":[[24,48,"."]],"x":50,"t":1305115371.25065},{"y":25,"d":[[24,49,"0"]],"x":51,"t":1305115371.6188},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",6,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",6,19],["cp",21,20],["cp",22,21],["cp",6,22],["cp",24,23],["cp",6,24]],"x":1,"t":1305115372.85844},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305115373.14629},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305115374.61082},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305115374.70657},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305115374.84261},{"y":25,"x":15,"t":1305115374.88258},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305115375.40229},{"y":25,"d":[[24,15,"l"]],"x":17,"t":1305115375.49028},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305115375.57868},{"y":25,"d":[[24,17,"a"]],"x":19,"t":1305115375.72221},{"y":25,"d":[[24,17," "]],"x":18,"t":1305115376.05015},{"y":25,"d":[[24,16," "]],"x":17,"t":1305115376.5505},{"y":25,"d":[[24,15," "]],"x":16,"t":1305115376.63362},{"y":25,"d":[[24,14," "]],"x":15,"t":1305115376.71708},{"y":25,"x":14,"t":1305115376.80062},{"y":25,"d":[[24,12," "]],"x":13,"t":1305115376.88396},{"y":25,"d":[[24,11," "]],"x":12,"t":1305115376.96763},{"y":25,"d":[[24,10," "]],"x":11,"t":1305115377.05101},{"y":25,"d":[[24,10,"m"]],"x":12,"t":1305115377.45842},{"y":25,"d":[[24,11,"a"]],"x":13,"t":1305115377.57047},{"y":25,"d":[[24,12,"k"]],"x":14,"t":1305115377.65813},{"y":25,"d":[[24,13,"i"]],"x":15,"t":1305115377.66656},{"y":25,"d":[[24,14,"e"]],"x":16,"t":1305115377.71421},{"y":25,"x":17,"t":1305115377.81013},{"y":25,"d":[[24,16,"c"]],"x":18,"t":1305115377.98624},{"y":25,"d":[[24,16," "]],"x":17,"t":1305115378.28228},{"y":25,"x":16,"t":1305115378.45811},{"y":25,"d":[[24,14," "]],"x":15,"t":1305115378.61826},{"y":25,"d":[[24,13," "]],"x":14,"t":1305115378.79438},{"y":25,"d":[[24,13,"e"]],"x":15,"t":1305115378.92233},{"y":25,"x":16,"t":1305115379.01018},{"y":25,"d":[[24,15,"c"]],"x":17,"t":1305115379.21051},{"y":25,"d":[[24,16,"l"]],"x":18,"t":1305115379.33028},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305115379.41025},{"y":25,"d":[[24,18,"a"]],"x":20,"t":1305115379.54628},{"y":25,"d":[[24,19,"n"]],"x":21,"t":1305115379.78624},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",5,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",5,18],["cp",20,19],["cp",21,20],["cp",5,21],["cp",23,22],["cp",24,23],["cp",5,24]],"x":1,"t":1305115380.11421},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",4,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",4,17],["cp",19,18],["cp",20,19],["cp",4,20],["cp",22,21],["cp",23,22],[23,0,27,"rm -f hello main.o version.h"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305115380.12204},{"y":25,"d":[[24,10,"m"]],"x":12,"t":1305115381.04209},{"y":25,"d":[[24,11,"a"]],"x":13,"t":1305115381.09003},{"y":25,"d":[[24,12,"k"]],"x":14,"t":1305115381.20991},{"y":25,"d":[[24,13,"e"]],"x":15,"t":1305115381.24202},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",3,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",3,16],["cp",18,17],["cp",19,18],["cp",3,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",3,24]],"x":1,"t":1305115381.39397},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",1,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",1,14],["cp",17,15],["cp",18,16],["cp",1,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,27,"version.h.in => version.h "],[23,0,24,"cc -c -o main.o main.c"]],"x":1,"t":1305115381.41807},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",0,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13],["cp",15,14],["cp",16,15],["cp",0,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,3,9,"-o hell"],[23,19,24,["a"," "]]],"x":1,"t":1305115381.70081},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305115381.71629},{"y":25,"d":[[24,10,"."]],"x":12,"t":1305115382.20195},{"y":25,"d":[[24,11,"/"]],"x":13,"t":1305115382.39398},{"y":25,"d":[[24,12,"h"]],"x":14,"t":1305115382.60983},{"y":25,"d":[[24,13,"e"]],"x":15,"t":1305115382.74589},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305115382.85818},{"y":25,"d":[[24,15,16,"lo"]],"x":19,"t":1305115383.11433},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",4,12],["cp",14,13],["cp",15,14],["cp",4,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",4,24]],"x":1,"t":1305115383.52992},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",2,10],["cp",13,11],["cp",14,12],["cp",2,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,17,"Hello, world. "],[23,0,18,"version: hello_1.0."],[24,0,8,"bash-3.2$"]],"x":11,"t":1305115383.53445},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305115385.72202},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305115385.81003},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305115385.88999},{"y":25,"x":15,"t":1305115385.97005},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305115386.13791},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305115386.28177},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305115386.40997},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305115386.56983},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305115386.68985},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305115386.76981},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",1,9],["cp",11,10],["cp",12,11],["cp",1,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",1,24]],"x":1,"t":1305115386.92974},{"y":25,"d":[["cp",8,0],["cp",10,2],["cp",11,3],["cp",1,4],["cp",13,5],["cp",14,6],["cp",15,7],["cp",16,8],["cp",17,9],["cp",18,10],["cp",19,11],["cp",20,12],["cp",21,13],["cp",22,14],["cp",23,15],[16,0,17,"# On branch master"],[17,0,24,"# Untracked files: "],[18,0,65,"# (use \"git add ...\" to include in what will be committed)"],[19,0,17,"# "],[20,0,16,"# hello "],[21,0,13,"# main.o"],[22,0,18,"# version.h "],[23,0,75,"nothing added to commit but untracked files present (use \"git add\" to track)"],[24,0,8,"bash-3.2$"]],"x":11,"f":[[20,8,12,["a","1"]],[21,8,13,["a","1"]],[22,8,16,["a","1"]]],"t":1305115386.93817},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,75,"bash-3.2$ exit "],["cp",0,24]],"x":1,"f":[["cp",20,19],["cp",21,20],["cp",22,21],["cp",0,22]],"t":1305115390.72347}]} \ No newline at end of file diff --git a/html/part2/ch10-08-ignore.html b/html/part2/ch10-08-ignore.html new file mode 100644 index 000000000..40262637a --- /dev/null +++ b/html/part2/ch10-08-ignore.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch10-08-ignore +json_file: ch10-08-ignore.json +--- diff --git a/html/part2/ch10-08-ignore.json b/html/part2/ch10-08-ignore.json new file mode 100644 index 000000000..e6a03052a --- /dev/null +++ b/html/part2/ch10-08-ignore.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305116148.03797,"i":1},{"y":1,"d":[[0,10,39,"cd /path/to/my/workspace/demo/"]],"x":11,"t":1305116148.4776},{"y":2,"x":1,"t":1305116148.94122},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305116148.94148},{"y":2,"d":[[1,10,"l"]],"x":12,"t":1305116149.51054},{"y":2,"d":[[1,11,"s"]],"x":13,"t":1305116149.58134},{"y":2,"x":14,"t":1305116149.67746},{"y":2,"d":[[1,13,"-"]],"x":15,"t":1305116149.8613},{"y":2,"d":[[1,14,"F"]],"x":16,"t":1305116150.33336},{"y":3,"x":1,"t":1305116150.49324},{"y":4,"d":[[2,0,11,"README src/"],[3,0,8,"bash-3.2$"]],"x":11,"t":1305116150.4993},{"y":4,"d":[[3,10,"g"]],"x":12,"t":1305116152.65303},{"y":4,"d":[[3,11,"i"]],"x":13,"t":1305116152.7413},{"y":4,"d":[[3,12,"t"]],"x":14,"t":1305116152.84525},{"y":4,"x":15,"t":1305116152.91722},{"y":4,"d":[[3,14,"s"]],"x":16,"t":1305116153.03735},{"y":4,"d":[[3,15,"t"]],"x":17,"t":1305116153.29322},{"y":4,"d":[[3,16,"a"]],"x":18,"t":1305116153.78914},{"y":4,"d":[[3,17,"t"]],"x":19,"t":1305116153.9652},{"y":4,"d":[[3,18,"u"]],"x":20,"t":1305116154.04502},{"y":4,"d":[[3,19,"s"]],"x":21,"t":1305116154.13373},{"y":4,"x":22,"t":1305116154.26923},{"y":4,"d":[[3,21,"-"]],"x":23,"t":1305116154.35719},{"y":4,"d":[[3,22,"s"]],"x":24,"t":1305116154.50908},{"y":5,"x":1,"t":1305116154.66117},{"y":8,"d":[[4,0,11,"?? src/hello"],[5,0,12,"?? src/main.o"],[6,0,15,"?? src/version.h"],[7,0,8,"bash-3.2$"]],"x":11,"f":[[4,0,1,["a","1"]],["cp",4,5],["cp",4,6]],"t":1305116154.67044},{"y":8,"d":[[7,10,"c"]],"x":12,"t":1305116156.14905},{"y":8,"d":[[7,11,"a"]],"x":13,"t":1305116156.2612},{"y":8,"d":[[7,12,"t"]],"x":14,"t":1305116156.32513},{"y":8,"x":15,"t":1305116156.41301},{"y":8,"d":[[7,14,">"]],"x":16,"t":1305116156.65316},{"y":8,"x":17,"t":1305116156.7653},{"y":8,"d":[[7,16,"."]],"x":18,"t":1305116156.93321},{"y":8,"d":[[7,17,"g"]],"x":19,"t":1305116157.07697},{"y":8,"d":[[7,18,"i"]],"x":20,"t":1305116157.18098},{"y":8,"d":[[7,19,"t"]],"x":21,"t":1305116157.27691},{"y":8,"d":[[7,20,"i"]],"x":22,"t":1305116157.55693},{"y":8,"d":[[7,21,"g"]],"x":23,"t":1305116157.69299},{"y":8,"d":[[7,22,"n"]],"x":24,"t":1305116157.79697},{"y":8,"d":[[7,23,"o"]],"x":25,"t":1305116157.93311},{"y":8,"d":[[7,24,"r"]],"x":26,"t":1305116158.0128},{"y":8,"d":[[7,25,"e"]],"x":27,"t":1305116158.15172},{"y":8,"x":28,"t":1305116158.23703},{"y":8,"d":[[7,27,"<"]],"x":29,"t":1305116158.56529},{"y":8,"d":[[7,28,"<"]],"x":30,"t":1305116158.74109},{"y":8,"x":31,"t":1305116158.91708},{"y":8,"d":[[7,30,"E"]],"x":32,"t":1305116159.39696},{"y":8,"d":[[7,31,"O"]],"x":33,"t":1305116159.50079},{"y":8,"d":[[7,32,"F"]],"x":34,"t":1305116159.60498},{"y":9,"x":1,"t":1305116160.15779},{"y":9,"d":[[8,0,">"]],"x":3,"t":1305116160.15792},{"y":9,"d":[[8,2,"h"]],"x":4,"t":1305116160.83727},{"y":9,"d":[[8,3,"e"]],"x":5,"t":1305116160.90098},{"y":9,"d":[[8,4,"l"]],"x":6,"t":1305116161.02096},{"y":9,"d":[[8,5,"l"]],"x":7,"t":1305116161.18078},{"y":9,"d":[[8,6,"o"]],"x":8,"t":1305116161.35667},{"y":10,"x":1,"t":1305116161.98872},{"y":10,"d":[[9,0,">"]],"x":3,"t":1305116161.98882},{"y":10,"d":[[9,2,"*"]],"x":4,"t":1305116162.42919},{"y":10,"d":[[9,3,"."]],"x":5,"t":1305116162.63693},{"y":10,"d":[[9,4,"o"]],"x":6,"t":1305116163.46916},{"y":11,"d":[[10,0,">"]],"x":3,"t":1305116163.8769},{"y":11,"d":[[10,2,"*"]],"x":4,"t":1305116164.309},{"y":11,"d":[[10,3,"."]],"x":5,"t":1305116164.55685},{"y":11,"d":[[10,4,"h"]],"x":6,"t":1305116164.7729},{"y":12,"x":1,"t":1305116165.23682},{"y":12,"d":[[11,0,">"]],"x":3,"t":1305116165.23692},{"y":12,"d":[[11,2,"E"]],"x":4,"t":1305116165.79683},{"y":12,"d":[[11,3,"O"]],"x":5,"t":1305116165.90084},{"y":12,"d":[[11,4,"F"]],"x":6,"t":1305116166.01289},{"y":13,"x":1,"t":1305116166.39653},{"y":13,"d":[[12,0,8,"bash-3.2$"]],"x":11,"t":1305116166.4017},{"y":13,"d":[[12,10,"c"]],"x":12,"t":1305116166.98891},{"y":13,"d":[[12,11,"a"]],"x":13,"t":1305116167.07652},{"y":13,"d":[[12,12,"t"]],"x":14,"t":1305116167.15781},{"y":13,"x":15,"t":1305116167.26882},{"y":13,"d":[[12,14,"."]],"x":16,"t":1305116167.38059},{"y":13,"d":[[12,15,"g"]],"x":17,"t":1305116167.48479},{"y":13,"d":[[12,16,"i"]],"x":18,"t":1305116167.59681},{"y":13,"d":[[12,17,"t"]],"x":19,"t":1305116168.06862},{"y":13,"d":[[12,18,"i"]],"x":20,"t":1305116168.35058},{"y":13,"d":[[12,19,"g"]],"x":21,"t":1305116168.72489},{"y":13,"d":[[12,20,23,"nore"]],"x":26,"t":1305116169.03787},{"y":14,"x":1,"t":1305116169.5006},{"y":17,"d":[[13,0,4,"hello"],[14,0,2,"*.o"],[15,0,2,"*.h"],[16,0,8,"bash-3.2$"]],"x":11,"t":1305116169.505},{"y":17,"d":[[16,10,"g"]],"x":12,"t":1305116169.85284},{"y":17,"d":[[16,11,"i"]],"x":13,"t":1305116169.9566},{"y":17,"d":[[16,12,"t"]],"x":14,"t":1305116170.04458},{"y":17,"x":15,"t":1305116170.08482},{"y":17,"d":[[16,14,"s"]],"x":16,"t":1305116170.22837},{"y":17,"d":[[16,15,"t"]],"x":17,"t":1305116170.46064},{"y":17,"d":[[16,16,"a"]],"x":18,"t":1305116170.5885},{"y":17,"d":[[16,17,"t"]],"x":19,"t":1305116170.70066},{"y":17,"d":[[16,18,"u"]],"x":20,"t":1305116170.86852},{"y":17,"d":[[16,19,"s"]],"x":21,"t":1305116170.89257},{"y":17,"x":22,"t":1305116171.03659},{"y":17,"d":[[16,21,"-"]],"x":23,"t":1305116171.16451},{"y":17,"d":[["cp",3,16]],"x":24,"t":1305116171.26873},{"y":18,"x":1,"t":1305116171.55653},{"y":19,"d":[[17,0,12,"?? .gitignore"],[18,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,17]],"t":1305116171.56581},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/demo/ "],["r","bash-3.2$ ls -F "],["r","README src/ "],["r","bash-3.2$ git status -s "],["r","?? src/hello "],["r","?? src/main.o "],["r","?? src/version.h "],["r","bash-3.2$ cat > .gitignore << EOF "],["r","> hello "],["r","> *.o "],["r","> *.h "],["r","> EOF "],["r","bash-3.2$ cat .gitignore "],["r","hello "],["r","*.o "],["r","*.h "],["r","bash-3.2$ git status -s "],["r","?? .gitignore "],["r","bash-3.2$ g "],["a"," "],"d","d","d","d","d"],"x":12,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":19,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d",["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"],"d","d","d","d","d","d","d","d","d",["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305116172.33261,"i":1},{"y":19,"d":[[18,11,"i"]],"x":13,"t":1305116172.41239},{"y":19,"d":[[18,12,"t"]],"x":14,"t":1305116172.5164},{"y":19,"x":15,"t":1305116172.58839},{"y":19,"d":[[18,14,"a"]],"x":16,"t":1305116172.72449},{"y":19,"d":[[18,15,"d"]],"x":17,"t":1305116172.93239},{"y":19,"d":[[18,16,"d"]],"x":18,"t":1305116173.11673},{"y":19,"x":19,"t":1305116173.20476},{"y":19,"d":[[18,18,"-"]],"x":20,"t":1305116173.78847},{"y":19,"d":[[18,19,"A"]],"x":21,"t":1305116174.10042},{"y":20,"x":1,"t":1305116174.23632},{"y":20,"d":[[19,0,8,"bash-3.2$"]],"x":11,"t":1305116174.24313},{"y":20,"d":[[19,10,"g"]],"x":12,"t":1305116174.65226},{"y":20,"d":[[19,11,"i"]],"x":13,"t":1305116174.73227},{"y":20,"d":[[19,12,"t"]],"x":14,"t":1305116174.83624},{"y":20,"x":15,"t":1305116174.89243},{"y":20,"d":[[19,14,"s"]],"x":16,"t":1305116175.02038},{"y":20,"d":[[19,15,"t"]],"x":17,"t":1305116175.15668},{"y":20,"d":[[19,16,"a"]],"x":18,"t":1305116175.30034},{"y":20,"d":[[19,17,"t"]],"x":19,"t":1305116175.42041},{"y":20,"d":[[19,18,"u"]],"x":20,"t":1305116175.53285},{"y":20,"d":[[19,19,"s"]],"x":21,"t":1305116175.62057},{"y":20,"x":22,"t":1305116175.82041},{"y":20,"d":[[19,21,"-"]],"x":23,"t":1305116175.9802},{"y":20,"d":[["cp",3,19]],"x":24,"t":1305116176.1243},{"y":21,"x":1,"t":1305116176.23624},{"y":22,"d":[[20,0,12,"A .gitignore"],[21,0,8,"bash-3.2$"]],"x":11,"f":[[20,0,"2"]],"t":1305116176.2449},{"y":22,"d":[[21,10,"g"]],"x":12,"t":1305116176.76451},{"y":22,"d":[[21,11,"i"]],"x":13,"t":1305116176.82839},{"y":22,"d":[[21,12,"t"]],"x":14,"t":1305116176.94036},{"y":22,"x":15,"t":1305116176.9802},{"y":22,"d":[[21,14,"c"]],"x":16,"t":1305116177.16435},{"y":22,"d":[[21,15,"o"]],"x":17,"t":1305116177.2362},{"y":22,"d":[[21,16,"m"]],"x":18,"t":1305116177.4122},{"y":22,"d":[[21,17,"m"]],"x":19,"t":1305116177.57243},{"y":22,"d":[[21,18,"i"]],"x":20,"t":1305116177.74851},{"y":22,"d":[[21,19,"t"]],"x":21,"t":1305116177.80442},{"y":22,"x":22,"t":1305116177.8923},{"y":22,"d":[[21,21,"-"]],"x":23,"t":1305116178.02837},{"y":22,"d":[[21,22,"m"]],"x":24,"t":1305116178.2446},{"y":22,"x":25,"t":1305116178.42013},{"y":22,"d":[[21,24,"\""]],"x":26,"t":1305116178.95654},{"y":22,"d":[[21,25,"i"]],"x":27,"t":1305116181.46033},{"y":22,"d":[[21,26,"g"]],"x":28,"t":1305116181.54829},{"y":22,"d":[[21,27,"n"]],"x":29,"t":1305116181.9401},{"y":22,"d":[[21,28,"o"]],"x":30,"t":1305116182.07621},{"y":22,"d":[[21,29,"r"]],"x":31,"t":1305116182.18024},{"y":22,"d":[[21,30,"e"]],"x":32,"t":1305116182.33209},{"y":22,"x":33,"t":1305116182.42012},{"y":22,"d":[[21,32,"o"]],"x":34,"t":1305116182.68419},{"y":22,"d":[[21,33,"b"]],"x":35,"t":1305116182.82814},{"y":22,"d":[[21,34,"j"]],"x":36,"t":1305116182.90807},{"y":22,"d":[[21,35,"e"]],"x":37,"t":1305116183.05218},{"y":22,"d":[[21,36,"c"]],"x":38,"t":1305116183.22808},{"y":22,"d":[[21,37,"t"]],"x":39,"t":1305116183.36409},{"y":22,"x":40,"t":1305116183.54024},{"y":22,"d":[[21,39,"f"]],"x":41,"t":1305116183.70807},{"y":22,"d":[[21,40,"i"]],"x":42,"t":1305116183.77189},{"y":22,"d":[[21,41,"l"]],"x":43,"t":1305116183.87618},{"y":22,"d":[[21,42,"e"]],"x":44,"t":1305116183.9},{"y":22,"d":[[21,43,"s"]],"x":45,"t":1305116184.04391},{"y":22,"d":[[21,44,"."]],"x":46,"t":1305116184.13212},{"y":22,"d":[[21,45,"."]],"x":47,"t":1305116184.32428},{"y":22,"d":[[21,46,"."]],"x":48,"t":1305116184.48405},{"y":22,"d":[[21,47,"\""]],"x":49,"t":1305116184.92412},{"y":23,"x":1,"t":1305116185.16407},{"y":24,"d":[[22,0,38,"[master 211cb82] ignore object files..."]],"x":1,"t":1305116185.46275},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",2,15],["cp",17,16],["cp",18,17],["cp",2,18],["cp",20,19],["cp",21,20],["cp",22,21],[22,0,48," 1 files changed, 3 insertions(+), 0 deletions(-)"],[23,1,29,"create mode 100644 .gitignore"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,3],["cp",0,6],["cp",3,16],["cp",0,17],["cp",20,19],["cp",0,20]],"t":1305116185.46439},{"y":25,"d":[[24,10,"i"]],"x":12,"t":1305116187.29183},{"y":25,"d":[[24,10," "]],"x":11,"t":1305116187.71576},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116187.82799},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116187.92382},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116188.0039},{"y":25,"x":15,"t":1305116188.08398},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305116188.23622},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305116188.37199},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305116188.48383},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305116188.59576},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305116188.65988},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305116188.76381},{"y":25,"x":22,"t":1305116188.89201},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305116188.96372},{"y":25,"d":[["cp",2,24]],"x":24,"t":1305116189.1399},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",1,14],["cp",16,15],["cp",17,16],["cp",1,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",1,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",0,5],["cp",2,15],["cp",0,16],["cp",19,18],["cp",0,19]],"t":1305116189.24409},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305116189.25256},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116191.53202},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116191.57193},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116191.69169},{"y":25,"x":15,"t":1305116191.75581},{"y":25,"d":[[24,14,"m"]],"x":16,"t":1305116191.91574},{"y":25,"d":[[24,15,"v"]],"x":17,"t":1305116192.01983},{"y":25,"x":18,"t":1305116192.21182},{"y":25,"d":[[24,17,"."]],"x":19,"t":1305116192.59595},{"y":25,"d":[[24,18,"g"]],"x":20,"t":1305116192.71558},{"y":25,"d":[[24,19,"i"]],"x":21,"t":1305116192.80389},{"y":25,"d":[[24,20,"t"]],"x":22,"t":1305116192.96233},{"y":25,"d":[[24,21,"i"]],"x":23,"t":1305116193.49183},{"y":25,"d":[[24,22,26,"gnore"]],"x":28,"t":1305116193.61833},{"y":25,"x":29,"t":1305116194.64403},{"y":25,"x":28,"t":1305116196.53144},{"d":[["r","README src/ "],["r","bash-3.2$ git status -s "],["r","?? src/hello "],["r","?? src/main.o "],["r","?? src/version.h "],["r","bash-3.2$ cat > .gitignore << EOF "],["r","> hello "],["r","> *.o "],["r","> *.h "],["r","> EOF "],["r","bash-3.2$ cat .gitignore "],["r","hello "],["r","*.o "],["r","*.h "],["r","bash-3.2$ git status -s "],["r","?? .gitignore "],["r","bash-3.2$ git add -A "],["r","bash-3.2$ git status -s "],["r","A .gitignore "],["r","bash-3.2$ git commit -m \"ignore object files...\" "],["r","[master 211cb82] ignore object files... "],["r"," 1 files changed, 3 insertions(+), 0 deletions(-) "],["r"," create mode 100644 .gitignore "],["r","bash-3.2$ git status -s "],["r","bash-3.2$ git mv .gitignor "]],"x":27,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d",["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"],"d","d","d","d","d","d","d","d","d",["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305116197.03153,"i":1},{"y":25,"d":[[24,25," "]],"x":26,"t":1305116197.11508},{"y":25,"d":[[24,24," "]],"x":25,"t":1305116197.19866},{"y":25,"d":[[24,23," "]],"x":24,"t":1305116197.28197},{"y":25,"d":[[24,22," "]],"x":23,"t":1305116197.36538},{"y":25,"d":[[24,21," "]],"x":22,"t":1305116197.44902},{"y":25,"d":[[24,20," "]],"x":21,"t":1305116197.53234},{"y":25,"d":[[24,19," "]],"x":20,"t":1305116197.61576},{"y":25,"d":[[24,18," "]],"x":19,"t":1305116197.69918},{"y":25,"d":[[24,17," "]],"x":18,"t":1305116197.78245},{"y":25,"x":17,"t":1305116197.86593},{"y":25,"d":[[24,15," "]],"x":16,"t":1305116197.9493},{"y":25,"d":[[24,14," "]],"x":15,"t":1305116198.03256},{"y":25,"x":14,"t":1305116198.1162},{"y":25,"d":[[24,12," "]],"x":13,"t":1305116198.20039},{"y":25,"d":[[24,11," "]],"x":12,"t":1305116198.28294},{"y":25,"d":[[24,10," "]],"x":11,"t":1305116198.3665},{"y":25,"x":11,"t":1305116198.45085},{"y":25,"x":11,"t":1305116198.53336},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13],["cp",15,14],["cp",16,15],["cp",0,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",0,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,4],["cp",1,14],["cp",0,15],["cp",18,17],["cp",0,18]],"t":1305116198.81947},{"y":25,"d":[["cp",23,24]],"x":11,"t":1305116198.8196},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305116199.21146},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305116199.30738},{"y":25,"x":14,"t":1305116199.39537},{"y":25,"d":[[24,13,"-"]],"x":15,"t":1305116199.56364},{"y":25,"d":[[24,14,"a"]],"x":16,"t":1305116199.88353},{"y":25,"d":[[24,15,"F"]],"x":17,"t":1305116200.26756},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",12,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",12,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",4,3],["cp",0,13],["cp",3,14],["cp",17,16],["cp",3,17]],"t":1305116200.45152},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",11,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",11,20],["cp",22,21],["cp",23,22],[23,0,39,"./ ../ .git/ .gitignore README src/"],["cp",21,24]],"x":11,"f":[["cp",3,2],["cp",0,12],["cp",2,13],["cp",16,15],["cp",2,16]],"t":1305116200.45838},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116201.13946},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116201.21136},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116201.29938},{"y":25,"x":15,"t":1305116201.3794},{"y":25,"d":[[24,14,"m"]],"x":16,"t":1305116201.70745},{"y":25,"d":[[24,15,"v"]],"x":17,"t":1305116201.7955},{"y":25,"x":18,"t":1305116201.91632},{"y":25,"d":[[24,17,"."]],"x":19,"t":1305116202.25919},{"y":25,"d":[[24,18,"g"]],"x":20,"t":1305116202.37926},{"y":25,"d":[[24,19,"i"]],"x":21,"t":1305116202.46747},{"y":25,"d":[[24,20,"t"]],"x":22,"t":1305116202.6338},{"y":25,"d":[[24,21,"i"]],"x":23,"t":1305116203.13277},{"y":25,"d":[[24,22,26,"gnore"]],"x":28,"t":1305116203.26566},{"y":25,"x":29,"t":1305116203.86726},{"y":25,"d":[[24,28,"s"]],"x":30,"t":1305116204.12318},{"y":25,"d":[[24,29,"r"]],"x":31,"t":1305116204.24326},{"y":25,"d":[[24,30,"c"]],"x":32,"t":1305116204.44317},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",10,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",10,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,11],["cp",1,12],["cp",15,14],["cp",1,15]],"t":1305116204.64336},{"y":25,"d":[["cp",20,24]],"x":11,"t":1305116204.65266},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116205.4353},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116205.54726},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116205.63521},{"y":25,"x":15,"t":1305116205.69144},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305116205.86746},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305116206.05908},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305116206.13927},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305116206.2995},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305116206.37922},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305116206.47509},{"y":25,"x":22,"t":1305116206.64329},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305116206.82702},{"y":25,"d":[["cp",10,24]],"x":24,"t":1305116206.96363},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",9,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",9,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",9,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",11,10],["cp",0,11],["cp",14,13],["cp",0,14]],"t":1305116207.09909},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",8,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",8,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",8,22],[23,0,30,"R .gitignore -> src/.gitignore"],["cp",18,24]],"x":11,"f":[["cp",10,9],["cp",0,10],["cp",13,12],["cp",0,13],["cp",12,23]],"t":1305116207.10732},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116209.05131},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116209.13123},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116209.259},{"y":25,"x":15,"t":1305116209.27518},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305116209.48319},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305116209.55514},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305116209.73102},{"y":25,"d":[[24,17,"m"]],"x":19,"t":1305116209.89913},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305116210.06007},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305116210.10716},{"y":25,"x":22,"t":1305116210.19494},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305116210.35502},{"y":25,"d":[[24,22,"m"]],"x":24,"t":1305116210.60294},{"y":25,"x":25,"t":1305116210.73123},{"y":25,"d":[[24,24,"\""]],"x":26,"t":1305116211.0673},{"y":25,"d":[[24,25,"i"]],"x":27,"t":1305116212.33913},{"y":25,"d":[[24,26,"g"]],"x":28,"t":1305116212.45086},{"y":25,"d":[[24,27,"n"]],"x":29,"t":1305116212.78705},{"y":25,"d":[[24,28,"o"]],"x":30,"t":1305116212.92288},{"y":25,"d":[[24,29,"r"]],"x":31,"t":1305116212.94699},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305116213.09112},{"y":25,"x":33,"t":1305116213.24288},{"y":25,"d":[[24,32,"w"]],"x":34,"t":1305116213.77901},{"y":25,"d":[[24,33,"o"]],"x":35,"t":1305116213.88293},{"y":25,"d":[[24,34,"r"]],"x":36,"t":1305116213.94686},{"y":25,"d":[[24,35,"k"]],"x":37,"t":1305116214.0669},{"y":25,"d":[[24,36,"s"]],"x":38,"t":1305116214.3867},{"y":25,"x":39,"t":1305116214.88301},{"y":25,"d":[[24,38,"e"]],"x":40,"t":1305116216.195},{"y":25,"d":[[24,39,"v"]],"x":41,"t":1305116216.65867},{"y":25,"d":[[24,40,"e"]],"x":42,"t":1305116216.83493},{"y":25,"d":[[24,41,"n"]],"x":43,"t":1305116216.92293},{"y":25,"x":44,"t":1305116217.05065},{"y":25,"d":[[24,43,"m"]],"x":45,"t":1305116217.33875},{"y":25,"d":[[24,44,"o"]],"x":46,"t":1305116217.48304},{"y":25,"d":[[24,45,"v"]],"x":47,"t":1305116217.55478},{"y":25,"d":[[24,46,"e"]],"x":48,"t":1305116217.71476},{"d":[["r","> hello "],["r","> *.o "],["r","> *.h "],["r","> EOF "],["r","bash-3.2$ cat .gitignore "],["r","hello "],["r","*.o "],["r","*.h "],["r","bash-3.2$ git status -s "],["r","?? .gitignore "],["r","bash-3.2$ git add -A "],["r","bash-3.2$ git status -s "],["r","A .gitignore "],["r","bash-3.2$ git commit -m \"ignore object files...\" "],["r","[master 211cb82] ignore object files... "],["r"," 1 files changed, 3 insertions(+), 0 deletions(-) "],["r"," create mode 100644 .gitignore "],["r","bash-3.2$ git status -s "],["r","bash-3.2$ "],["r","bash-3.2$ ls -aF "],["r","./ ../ .git/ .gitignore README src/ "],["r","bash-3.2$ git mv .gitignore src "],["r","bash-3.2$ git status -s "],["r","R .gitignore -> src/.gitignore "],["r","bash-3.2$ git commit -m \"ignore works even move "]],"x":49,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d",["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305116217.80269,"i":1},{"y":25,"d":[[24,48,"."]],"x":50,"t":1305116217.98665},{"y":25,"d":[[24,49,"g"]],"x":51,"t":1305116218.10674},{"y":25,"d":[[24,50,"i"]],"x":52,"t":1305116218.22673},{"y":25,"d":[[24,51,"t"]],"x":53,"t":1305116218.3306},{"y":25,"d":[[24,52,"i"]],"x":54,"t":1305116219.17879},{"y":25,"d":[[24,53,"g"]],"x":55,"t":1305116219.3066},{"y":25,"d":[[24,54,"n"]],"x":56,"t":1305116219.4198},{"y":25,"d":[[24,55,"o"]],"x":57,"t":1305116219.56257},{"y":25,"d":[[24,56,"r"]],"x":58,"t":1305116219.59462},{"y":25,"d":[[24,57,"e"]],"x":59,"t":1305116219.73063},{"y":25,"x":60,"t":1305116219.84264},{"y":25,"d":[[24,59,"t"]],"x":61,"t":1305116220.05876},{"y":25,"d":[[24,60,"o"]],"x":62,"t":1305116220.13858},{"y":25,"x":63,"t":1305116220.27465},{"y":25,"d":[[24,62,"s"]],"x":64,"t":1305116220.48291},{"y":25,"d":[[24,63,"u"]],"x":65,"t":1305116220.65081},{"y":25,"d":[[24,64,"b"]],"x":66,"t":1305116220.72265},{"y":25,"d":[[24,65,"d"]],"x":67,"t":1305116220.95455},{"y":25,"d":[[24,66,"i"]],"x":68,"t":1305116221.05861},{"y":25,"d":[[24,67,"r"]],"x":69,"t":1305116221.14658},{"y":25,"d":[[24,68,"."]],"x":70,"t":1305116221.33875},{"y":25,"d":[[24,69,"\""]],"x":71,"t":1305116221.77067},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",7,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",7,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",7,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",9,8],["cp",0,9],["cp",12,11],["cp",0,12],["cp",11,22],["cp",0,23]],"t":1305116221.96248},{"y":25,"d":[["cp",3,0],["cp",4,1],["cp",5,2],["cp",6,3],["cp",7,4],["cp",8,5],["cp",9,6],["cp",11,8],["cp",12,9],["cp",13,10],["cp",14,11],["cp",15,12],["cp",4,13],["cp",17,14],["cp",18,15],["cp",19,16],["cp",20,17],["cp",4,18],["cp",22,19],["cp",23,20],[21,0,60,"[master 4ad14d4] ignore works even move .gitignore to subdir."],[22,0,48," 1 files changed, 0 insertions(+), 0 deletions(-)"],[23,0,69," rename .gitignore => src/.gitignore (100%) "],["cp",14,24]],"x":11,"f":[["cp",8,5],["cp",11,8],["cp",0,11],["cp",8,19],["cp",0,22]],"t":1305116221.97417},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116225.1866},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116225.27447},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116225.3706},{"y":25,"x":15,"t":1305116225.41836},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305116225.53034},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305116225.66629},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305116225.77858},{"y":25,"d":[[24,17,"q"]],"x":19,"t":1305116225.78669},{"y":25,"d":[[24,17," "]],"x":18,"t":1305116226.49832},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305116226.76238},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305116226.93034},{"y":25,"d":[[24,19,"s"]],"x":22,"t":1305116227.46394},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305116227.61057},{"y":25,"d":[[24,21," "]],"x":22,"t":1305116228.13828},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305116228.36261},{"y":25,"d":[["cp",4,24]],"x":24,"t":1305116228.49019},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",3,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",3,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",3,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",3,23],[24,["a"," "]]],"x":1,"f":[["cp",5,4],["cp",0,5],["cp",8,7],["cp",0,8],["cp",7,18],["cp",0,19]],"t":1305116228.67436},{"y":25,"d":[["cp",13,24]],"x":11,"t":1305116228.68776},{"y":25,"d":[[24,10,"c"]],"x":12,"t":1305116230.85835},{"y":25,"d":[[24,11,"d"]],"x":13,"t":1305116231.04216},{"y":25,"x":14,"t":1305116231.09837},{"y":25,"d":[[24,13,"s"]],"x":15,"t":1305116231.43436},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305116231.57824},{"y":25,"d":[[24,15,"c"]],"x":17,"t":1305116231.77851},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",2,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",2,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",2,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",2,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",4,3],["cp",0,4],["cp",7,6],["cp",0,7],["cp",6,17],["cp",0,18]],"t":1305116232.1223},{"y":25,"d":[["cp",12,24]],"x":11,"t":1305116232.1226},{"y":25,"d":[[24,10,"l"]],"x":12,"t":1305116234.06604},{"y":25,"d":[[24,11,"s"]],"x":13,"t":1305116234.13008},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",1,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",1,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",1,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",1,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",0,3],["cp",6,5],["cp",0,6],["cp",5,16],["cp",0,17]],"t":1305116234.29004},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",0,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",0,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",0,20],["cp",22,21],["cp",23,22],[23,0,55,"Makefile hello main.c main.o version.h version.h.in"],["cp",10,24]],"x":11,"f":[["cp",2,1],["cp",0,2],["cp",5,4],["cp",0,5],["cp",4,15],["cp",0,16]],"t":1305116234.29666},{"y":25,"d":[[24,10,"e"]],"x":12,"t":1305116234.76196},{"y":25,"d":[[24,11,"c"]],"x":13,"t":1305116234.96196},{"y":25,"d":[[24,12,"h"]],"x":14,"t":1305116235.02617},{"y":25,"d":[[24,13,"o"]],"x":15,"t":1305116235.1382},{"y":25,"x":16,"t":1305116235.25004},{"y":25,"d":[[24,15,"'"]],"x":17,"t":1305116237.29016},{"y":25,"d":[[24,16,"/"]],"x":18,"t":1305116237.63434},{"y":25,"d":[[24,17,"*"]],"x":19,"t":1305116238.01012},{"y":25,"x":20,"t":1305116238.62617},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305116238.96217},{"y":25,"d":[[24,20,"e"]],"x":22,"t":1305116239.17784},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305116239.54595},{"y":25,"d":[[24,22,"t"]],"x":24,"t":1305116239.6898},{"y":25,"x":25,"t":1305116240.21011},{"y":25,"d":[[24,24,"*"]],"x":26,"t":1305116240.81011},{"y":25,"d":[[24,25,"/"]],"x":27,"t":1305116241.32997},{"y":25,"d":[[24,26,"'"]],"x":28,"t":1305116241.69003},{"y":25,"x":29,"t":1305116242.04976},{"y":25,"d":[[24,28,">"]],"x":30,"t":1305116242.38601},{"y":25,"x":31,"t":1305116243.29781},{"y":25,"d":[[24,30,"h"]],"x":32,"t":1305116243.93765},{"y":25,"d":[[24,31,"e"]],"x":33,"t":1305116243.98574},{"y":25,"d":[[24,32,"l"]],"x":34,"t":1305116244.11386},{"y":25,"d":[[24,33,"l"]],"x":35,"t":1305116244.28165},{"y":25,"d":[[24,34,"o"]],"x":36,"t":1305116244.45766},{"y":25,"d":[[24,35,"."]],"x":37,"t":1305116244.65783},{"y":25,"d":[[24,36,"h"]],"x":38,"t":1305116244.83371},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",2,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",2,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",2,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",4,3],["cp",1,4],["cp",3,14],["cp",1,15]],"t":1305116245.04956},{"y":25,"d":[["cp",9,24]],"x":11,"t":1305116245.05006},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116245.90762},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116246.00166},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116246.11349},{"y":25,"x":15,"t":1305116246.16962},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305116246.31396},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305116246.44998},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305116246.5615},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305116246.67377},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305116246.75361},{"y":25,"d":[[24,19,"s"]],"x":21,"t":1305116246.84165},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",1,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",1,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",1,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",3,2],["cp",0,3],["cp",2,13],["cp",0,14]],"t":1305116246.97751},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",5,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",5,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,36,"# On branch master "],[23,0,42,"nothing to commit (working directory clean)"],["cp",6,24]],"x":11,"f":[["cp",2,0],["cp",1,2],["cp",0,11],["cp",1,13]],"t":1305116246.98745},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116248.43391},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116248.52952},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116248.63377},{"y":25,"x":15,"t":1305116248.69755},{"d":[["r","A .gitignore "],["r","bash-3.2$ git commit -m \"ignore object files...\" "],["r","[master 211cb82] ignore object files... "],["r"," 1 files changed, 3 insertions(+), 0 deletions(-) "],["r"," create mode 100644 .gitignore "],["r","bash-3.2$ git status -s "],["r","bash-3.2$ "],["r","bash-3.2$ ls -aF "],["r","./ ../ .git/ .gitignore README src/ "],["r","bash-3.2$ git mv .gitignore src "],["r","bash-3.2$ git status -s "],["r","R .gitignore -> src/.gitignore "],["r","bash-3.2$ git commit -m \"ignore works even move .gitignore to subdir.\" "],["r","[master 4ad14d4] ignore works even move .gitignore to subdir. "],["r"," 1 files changed, 0 insertions(+), 0 deletions(-) "],["r"," rename .gitignore => src/.gitignore (100%) "],["r","bash-3.2$ git status -s "],["r","bash-3.2$ cd src "],["r","bash-3.2$ ls "],["r","Makefile hello main.c main.o version.h version.h.in "],["r","bash-3.2$ echo '/* test */' > hello.h "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","nothing to commit (working directory clean) "],["r","bash-3.2$ git s "]],"x":16,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305116249.88145,"i":1},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305116250.04173},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305116250.19395},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305116250.28143},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305116250.3618},{"y":25,"d":[["cp",21,24]],"x":21,"t":1305116250.44163},{"y":25,"x":22,"t":1305116250.59364},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305116250.67366},{"y":25,"d":[[24,22,"-"]],"x":24,"t":1305116250.84147},{"y":25,"d":[[24,23,"i"]],"x":25,"t":1305116251.04152},{"y":25,"d":[[24,24,"g"]],"x":26,"t":1305116251.18567},{"y":25,"d":[[24,25,"n"]],"x":27,"t":1305116251.27347},{"y":25,"d":[[24,26,"o"]],"x":28,"t":1305116251.41755},{"y":25,"d":[[24,27,"r"]],"x":29,"t":1305116251.48148},{"y":25,"d":[[24,28,"e"]],"x":30,"t":1305116251.61745},{"y":25,"x":31,"t":1305116251.74529},{"y":25,"x":30,"t":1305116252.21748},{"y":25,"d":[[24,29,"d"]],"x":31,"t":1305116252.29748},{"y":25,"x":32,"t":1305116252.38548},{"y":25,"d":[[24,31,"s"]],"x":33,"t":1305116252.76956},{"y":25,"d":[[24,31," "]],"x":32,"t":1305116253.12122},{"y":25,"d":[[24,31,"-"]],"x":33,"t":1305116253.34549},{"y":25,"d":[[24,32,"s"]],"x":34,"t":1305116253.45737},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",4,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",4,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",11,10],["cp",0,11]],"t":1305116253.68939},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",0,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",13,9],["cp",14,10],["cp",0,11],["cp",16,12],["cp",17,13],["cp",18,14],["cp",19,15],["cp",20,16],["cp",21,17],["cp",22,18],["cp",23,19],[20,0,19,"!! hello "],[21,0,17,"!! hello.h "],[22,0,42,"!! main.o "],[23,0,32,"!! version.h "],["cp",1,24]],"x":11,"f":[["cp",10,6],["cp",0,10],[20,0,1,["a","1"]],["cp",20,21],["cp",20,22],["cp",20,23]],"t":1305116253.69836},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116254.49721},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116254.5613},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116254.67334},{"y":25,"x":15,"t":1305116254.72949},{"y":25,"d":[[24,14,"a"]],"x":16,"t":1305116254.86526},{"y":25,"d":[[24,15,"d"]],"x":17,"t":1305116255.04924},{"y":25,"d":[[24,16,"d"]],"x":18,"t":1305116255.20939},{"y":25,"x":19,"t":1305116255.2893},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305116255.40928},{"y":25,"d":[[24,19,"A"]],"x":21,"t":1305116255.90564},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",4,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",6,5],["cp",0,6],["cp",20,19],["cp",0,23]],"t":1305116256.06539},{"y":25,"d":[["cp",0,24]],"x":11,"t":1305116256.07191},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116256.49726},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116256.56149},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116256.67334},{"y":25,"x":15,"t":1305116256.72955},{"y":25,"d":[[24,14,"a"]],"x":16,"t":1305116256.84146},{"y":25,"d":[[24,15,"d"]],"x":17,"t":1305116256.99342},{"y":25,"d":[[24,16,"d"]],"x":18,"t":1305116257.16137},{"y":25,"x":19,"t":1305116257.24125},{"y":25,"d":[[24,18,"."]],"x":20,"t":1305116257.34529},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",3,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",5,4],["cp",0,5],["cp",19,18],["cp",0,22]],"t":1305116257.55337},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305116257.56151},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116257.90518},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116258.00207},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116258.0892},{"y":25,"x":15,"t":1305116258.1454},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305116258.31322},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305116258.42518},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305116258.53724},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305116258.66518},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305116258.69739},{"y":25,"d":[["cp",14,24]],"x":21,"t":1305116258.83325},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",2,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",13,23],[24,["a"," "]]],"x":1,"f":[["cp",4,3],["cp",0,4],["cp",18,17],["cp",0,21]],"t":1305116260.59294},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",0,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",11,21],["cp",12,22],["cp",13,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,1],["cp",0,3],["cp",17,15],["cp",15,16],["cp",0,19],["cp",0,20]],"t":1305116260.60463},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116262.72118},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116262.86514},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116263.24896},{"y":25,"x":15,"t":1305116263.52913},{"y":25,"d":[[24,14,"a"]],"x":16,"t":1305116263.73698},{"y":25,"d":[[24,15,"d"]],"x":17,"t":1305116263.92096},{"y":25,"d":[[24,16,"d"]],"x":18,"t":1305116264.10513},{"y":25,"x":19,"t":1305116264.1769},{"y":25,"d":[[24,18,"h"]],"x":20,"t":1305116264.38498},{"y":25,"d":[[24,19,"e"]],"x":21,"t":1305116264.46486},{"y":25,"d":[[24,20,"l"]],"x":22,"t":1305116264.60107},{"y":25,"d":[[24,21,22,"lo"]],"x":24,"t":1305116264.78664},{"y":25,"d":[[24,23,"."]],"x":25,"t":1305116265.36909},{"y":25,"d":[[24,24,"h"]],"x":26,"t":1305116265.56104},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",10,20],["cp",11,21],["cp",12,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",15,14],["cp",1,18]],"t":1305116265.82475},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",13,9],["cp",14,10],["cp",15,11],["cp",16,12],["cp",17,13],["cp",18,14],["cp",19,15],["cp",6,16],["cp",7,17],["cp",8,18],["cp",23,19],[20,0,63,"The following paths are ignored by one of your .gitignore files:"],[21,0,17,"src/hello.h "],[22,0,42,"Use -f if you really want to add them. "],[23,0,24,"fatal: no files added "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",14,10],["cp",10,11],["cp",10,12],["cp",10,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17]],"t":1305116265.83347},{"y":25,"d":[["cp",19,24]],"x":11,"t":1305116268.2968},{"y":25,"x":15,"t":1305116268.57693},{"y":25,"x":19,"t":1305116268.76884},{"y":25,"d":[[24,18,25,"-hello.h"]],"x":20,"t":1305116269.43282},{"y":25,"d":[[24,19,26,"fhello.h"]],"x":21,"t":1305116269.71303},{"y":25,"d":[[24,20,27," hello.h"]],"x":22,"t":1305116269.84896},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",5,15],["cp",6,16],["cp",7,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",10,9],["cp",0,13]],"t":1305116270.24118},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305116270.24891},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116271.0966},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116271.20071},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116271.30461},{"y":25,"x":15,"t":1305116271.33684},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305116271.48093},{"y":25,"d":[[24,15,"a"]],"x":17,"t":1305116271.68071},{"y":25,"d":[[24,16,"t"]],"x":18,"t":1305116271.81686},{"y":25,"d":[[24,16," "]],"x":17,"t":1305116272.29659},{"y":25,"d":[[24,15," "]],"x":16,"t":1305116272.47254},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305116272.48973},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305116272.64849},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305116272.77696},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305116272.88883},{"y":25,"d":[["cp",5,24]],"x":21,"t":1305116272.97663},{"y":25,"x":22,"t":1305116273.12862},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305116273.24878},{"d":[["r","bash-3.2$ git status -s "],["r","bash-3.2$ cd src "],["r","bash-3.2$ ls "],["r","Makefile hello main.c main.o version.h version.h.in "],["r","bash-3.2$ echo '/* test */' > hello.h "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","nothing to commit (working directory clean) "],["r","bash-3.2$ git status --ignored -s "],["r","!! hello "],["r","!! hello.h "],["r","!! main.o "],["r","!! version.h "],["r","bash-3.2$ git add -A "],["r","bash-3.2$ git add . "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","nothing to commit (working directory clean) "],["r","bash-3.2$ git add hello.h "],["r","The following paths are ignored by one of your .gitignore files: "],["r","src/hello.h "],["r","Use -f if you really want to add them. "],["r","fatal: no files added "],["r","bash-3.2$ git add -f hello.h "],["r","bash-3.2$ git status -s "]],"x":24,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d",["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d","d",["a","7"],"d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305116273.41658,"i":1},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",4,14],["cp",5,15],["cp",6,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",9,8],["cp",0,12]],"t":1305116273.53669},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",3,13],["cp",4,14],["cp",5,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,22,"A hello.h "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",8,7],["cp",0,11],[23,0,"2"]],"t":1305116273.54579},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116273.96055},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116274.02473},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116274.15337},{"y":25,"x":15,"t":1305116274.16335},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305116274.91368},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305116275.00848},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305116275.16874},{"y":25,"d":[[24,17,"m"]],"x":19,"t":1305116275.31247},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305116275.48045},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305116275.53654},{"y":25,"x":22,"t":1305116275.61678},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305116275.73665},{"y":25,"d":[[24,22,"m"]],"x":24,"t":1305116275.94469},{"y":25,"x":25,"t":1305116276.08066},{"y":25,"d":[[24,24,"\""]],"x":26,"t":1305116276.36868},{"y":25,"d":[[24,25,"a"]],"x":27,"t":1305116277.17659},{"y":25,"d":[[24,26,"d"]],"x":28,"t":1305116277.32856},{"y":25,"d":[[24,27,"d"]],"x":29,"t":1305116277.48837},{"y":25,"x":30,"t":1305116277.56058},{"y":25,"d":[[24,29,"h"]],"x":31,"t":1305116277.73651},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305116277.80872},{"y":25,"d":[[24,31,"l"]],"x":33,"t":1305116277.93656},{"y":25,"d":[[24,32,"l"]],"x":34,"t":1305116278.09662},{"y":25,"d":[[24,33,"o"]],"x":35,"t":1305116278.27259},{"y":25,"d":[[24,34,"."]],"x":36,"t":1305116278.57643},{"y":25,"d":[[24,35,"h"]],"x":37,"t":1305116278.85636},{"y":25,"x":38,"t":1305116279.00856},{"y":25,"d":[[24,37,"u"]],"x":39,"t":1305116279.7445},{"y":25,"d":[[24,38,"s"]],"x":40,"t":1305116279.84843},{"y":25,"d":[[24,39,"i"]],"x":41,"t":1305116279.92842},{"y":25,"d":[[24,40,"n"]],"x":42,"t":1305116280.05643},{"y":25,"d":[[24,41,"g"]],"x":43,"t":1305116280.14442},{"y":25,"x":44,"t":1305116280.28041},{"y":25,"d":[[24,43,"-"]],"x":45,"t":1305116280.38435},{"y":25,"d":[[24,44,"f"]],"x":46,"t":1305116280.66469},{"y":25,"x":47,"t":1305116280.82453},{"y":25,"d":[[24,46,"l"]],"x":48,"t":1305116281.12021},{"y":25,"d":[[24,46," "]],"x":47,"t":1305116281.63236},{"y":25,"d":[[24,46,"f"]],"x":48,"t":1305116281.74426},{"y":25,"d":[[24,47,"a"]],"x":49,"t":1305116281.87213},{"y":25,"d":[[24,48,"l"]],"x":50,"t":1305116281.90424},{"y":25,"d":[[24,49,"g"]],"x":51,"t":1305116282.07249},{"y":25,"d":[[24,49," "]],"x":50,"t":1305116282.73633},{"y":25,"d":[[24,48," "]],"x":49,"t":1305116282.90421},{"y":25,"d":[[24,47," "]],"x":48,"t":1305116283.08003},{"y":25,"d":[[24,47,"l"]],"x":49,"t":1305116283.27233},{"y":25,"d":[[24,48,"a"]],"x":50,"t":1305116283.33732},{"y":25,"d":[[24,49,"g"]],"x":51,"t":1305116283.70433},{"y":25,"d":[[24,50,"."]],"x":52,"t":1305116284.02421},{"y":25,"d":[[24,51,"\""]],"x":53,"t":1305116284.50439},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",2,12],["cp",3,13],["cp",4,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",7,6],["cp",0,10],["cp",23,22],["cp",0,23]],"t":1305116284.82419},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",1,11],["cp",2,12],["cp",3,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,51,"[master fd33ea2] add hello.h using -f flag. "]],"x":1,"f":[["cp",6,5],["cp",0,9],["cp",22,21],["cp",0,22]],"t":1305116285.12298},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",0,10],["cp",1,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,51," 1 files changed, 1 insertions(+), 0 deletions(-) "],[23,0,42," create mode 100644 src/hello.h "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",5,3],["cp",3,4],["cp",0,7],["cp",0,8],["cp",21,19],["cp",0,21]],"t":1305116285.1243},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116290.08813},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116290.18404},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116290.2962},{"y":25,"x":15,"t":1305116290.36006},{"y":25,"d":[[24,14,"a"]],"x":16,"t":1305116290.49599},{"y":25,"d":[[24,14," "]],"x":15,"t":1305116291.20805},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305116291.31196},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305116291.44794},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305116291.56783},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305116291.73596},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305116291.86436},{"y":25,"d":[["cp",9,24]],"x":21,"t":1305116291.93591},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",0,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",8,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",0,6],["cp",19,18],["cp",0,19]],"t":1305116292.29624},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",6,21],["cp",7,22],["cp",8,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",0,1],["cp",6,4],["cp",4,5],["cp",18,16],["cp",4,18]],"t":1305116292.31158},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116292.65592},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116292.74466},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116292.85611},{"y":25,"x":15,"t":1305116292.88804},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305116293.09585},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305116293.27186},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305116293.62373},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305116293.79985},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305116293.90391},{"y":25,"d":[["cp",6,24]],"x":21,"t":1305116293.98402},{"y":25,"x":22,"t":1305116294.12785},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305116294.26365},{"y":25,"d":[[24,22,"-"]],"x":24,"t":1305116294.448},{"y":25,"d":[[24,23,"i"]],"x":25,"t":1305116294.65601},{"y":25,"d":[[24,24,"g"]],"x":26,"t":1305116294.77611},{"y":25,"d":[[24,25,"n"]],"x":27,"t":1305116294.88803},{"y":25,"d":[[24,26,"o"]],"x":28,"t":1305116295.02403},{"y":25,"d":[[24,27,"r"]],"x":29,"t":1305116295.08794},{"y":25,"d":[[24,28,"e"]],"x":30,"t":1305116295.21591},{"y":25,"d":[[24,29,"d"]],"x":31,"t":1305116295.39293},{"y":25,"x":32,"t":1305116295.59172},{"y":25,"d":[[24,31,"-"]],"x":33,"t":1305116295.63984},{"y":25,"d":[[24,32,"s"]],"x":34,"t":1305116295.88794},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",5,20],["cp",6,21],["cp",7,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",4,3],["cp",16,15],["cp",3,16]],"t":1305116296.43266},{"y":25,"d":[["cp",3,0],["cp",4,1],["cp",5,2],["cp",6,3],["cp",7,4],["cp",8,5],["cp",9,6],["cp",10,7],["cp",11,8],["cp",12,9],["cp",13,10],["cp",14,11],["cp",15,12],["cp",16,13],["cp",17,14],["cp",18,15],["cp",19,16],["cp",2,17],["cp",3,18],["cp",4,19],["cp",23,20],[21,0,17,"!! hello "],[22,0,42,"!! main.o "],[23,0,32,"!! version.h "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,0],["cp",0,1],["cp",0,2],["cp",15,12],["cp",0,15],[21,0,1,["a","1"]],["cp",21,22],["cp",21,23]],"t":1305116296.43892},{"y":25,"d":[[24,10,"e"]],"x":12,"t":1305116299.84777},{"y":25,"d":[[24,11,"c"]],"x":13,"t":1305116300.02385},{"y":25,"d":[[24,12,"h"]],"x":14,"t":1305116300.08747},{"y":25,"d":[[24,13,"o"]],"x":15,"t":1305116300.19968},{"y":25,"x":16,"t":1305116300.2876},{"d":[["r","bash-3.2$ git add -A "],["r","bash-3.2$ git add . "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","nothing to commit (working directory clean) "],["r","bash-3.2$ git add hello.h "],["r","The following paths are ignored by one of your .gitignore files: "],["r","src/hello.h "],["r","Use -f if you really want to add them. "],["r","fatal: no files added "],["r","bash-3.2$ git add -f hello.h "],["r","bash-3.2$ git status -s "],["r","A hello.h "],["r","bash-3.2$ git commit -m \"add hello.h using -f flag.\" "],["r","[master fd33ea2] add hello.h using -f flag. "],["r"," 1 files changed, 1 insertions(+), 0 deletions(-) "],["r"," create mode 100644 src/hello.h "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","nothing to commit (working directory clean) "],["r","bash-3.2$ git status --ignored -s "],["r","!! hello "],["r","!! main.o "],["r","!! version.h "],["r","bash-3.2$ echo \" "]],"x":17,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d",["r","27777777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d",["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305116300.71167,"i":1},{"y":25,"d":[[24,16,"/"]],"x":18,"t":1305116301.26361},{"y":25,"d":[[24,17,"*"]],"x":19,"t":1305116301.79178},{"y":25,"x":20,"t":1305116302.19172},{"y":25,"d":[[24,19,"e"]],"x":21,"t":1305116302.34346},{"y":25,"d":[[24,20,"n"]],"x":22,"t":1305116302.43158},{"y":25,"d":[[24,21,"d"]],"x":23,"t":1305116302.51951},{"y":25,"x":24,"t":1305116303.27137},{"y":25,"d":[[24,23,"*"]],"x":25,"t":1305116303.53586},{"y":25,"d":[[24,24,"/"]],"x":26,"t":1305116304.63172},{"y":25,"d":[[24,25,"\""]],"x":27,"t":1305116304.89547},{"y":25,"x":28,"t":1305116305.0633},{"y":25,"d":[[24,27,">"]],"x":29,"t":1305116305.47969},{"y":25,"d":[[24,28,">"]],"x":30,"t":1305116305.64735},{"y":25,"x":31,"t":1305116305.80739},{"y":25,"d":[[24,30,"h"]],"x":32,"t":1305116306.18335},{"y":25,"d":[[24,31,"e"]],"x":33,"t":1305116306.23957},{"y":25,"d":[[24,32,"l"]],"x":34,"t":1305116306.35145},{"y":25,"d":[[24,33,34,"lo"]],"x":36,"t":1305116306.47932},{"y":25,"d":[[24,35,"."]],"x":37,"t":1305116306.93537},{"y":25,"d":[[24,36,"h"]],"x":38,"t":1305116307.10349},{"y":25,"x":39,"t":1305116307.2156},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",1,16],["cp",2,17],["cp",3,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",12,11],["cp",0,12],["cp",21,20],["cp",0,23]],"t":1305116307.4232},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305116307.42357},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116307.69531},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116307.76755},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116307.86366},{"y":25,"x":15,"t":1305116307.95158},{"y":25,"d":[[24,14,"s"]],"x":16,"t":1305116308.19136},{"y":25,"d":[[24,15,"t"]],"x":17,"t":1305116308.34441},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305116308.47927},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305116308.62351},{"y":25,"d":[[24,18,"u"]],"x":20,"t":1305116308.63127},{"y":25,"d":[["cp",1,24]],"x":21,"t":1305116308.74461},{"y":25,"x":22,"t":1305116309.8392},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",0,15],["cp",1,16],["cp",2,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",0,23],[24,["a"," "]]],"x":1,"f":[["cp",11,10],["cp",0,11],["cp",20,19],["cp",0,22]],"t":1305116310.63133},{"y":25,"d":[["cp",8,0],["cp",9,1],["cp",10,2],["cp",11,3],["cp",12,4],["cp",13,5],["cp",14,6],["cp",15,7],["cp",16,8],["cp",17,9],["cp",18,10],["cp",19,11],["cp",20,12],["cp",21,13],["cp",22,14],[17,0,42,"# Changes not staged for commit: "],[18,0,9,"# (use \""],[18,14,61,"add ...\" to update what will be committed)"],[19,0,76,"# (use \"git checkout -- ...\" to discard changes in working directory)"],[20,0,8,"# "],[21,0,26,"# modified: hello.h"],["cp",20,22],[23,0,64,"no changes added to commit (use \"git add\" and/or \"git commit -a\")"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",10,2],["cp",0,10],["cp",19,11],["cp",11,12],["cp",11,13],["cp",0,19],["cp",0,20],[21,0,1,["a","7"]],[21,8,26,["a","1"]]],"t":1305116310.64047},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116311.28717},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116311.37518},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116311.46318},{"y":25,"x":15,"t":1305116311.52731},{"y":25,"d":[[24,14,"d"]],"x":16,"t":1305116311.68729},{"y":25,"d":[[24,15,"i"]],"x":17,"t":1305116311.76722},{"y":25,"d":[[24,16,"f"]],"x":18,"t":1305116311.87911},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305116312.05527},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",6,14],["cp",7,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",19,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,2],["cp",11,10],["cp",0,13],["cp",21,20],["cp",0,21]],"t":1305116312.39983},{"y":25,"d":[["cp",7,0],["cp",8,1],["cp",9,2],["cp",10,3],["cp",11,4],["cp",12,5],["cp",13,6],["cp",14,7],["cp",0,8],["cp",16,9],["cp",17,10],["cp",18,11],["cp",19,12],["cp",20,13],["cp",12,14],["cp",22,15],["cp",23,16],[17,0,61,"diff --git a/src/hello.h b/src/hello.h "],[18,0,76,"index 0043c3b..6e482c6 100644 "],[19,0,16,"--- a/src/hello.h"],[20,0,26,"+++ b/src/hello.h "],[21,0,12,"@@ -1 +1,2 @@"],[22,0,64," /* test */ "],[23,0,17,"+/* end */ "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,1],["cp",10,3],["cp",3,4],["cp",3,5],["cp",0,10],["cp",0,11],["cp",0,12],["cp",20,13],["cp",0,20],[21,0,12,["a","6"]],[23,0,9,["a","2"]]],"B":[[17,0,37,["a","1"]],[18,0,28,["a","1"]],[19,0,16,["a","1"]],["cp",19,20]],"t":1305116312.41527},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116313.79123},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116313.88709},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116313.9993},{"y":25,"x":15,"t":1305116314.07909},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305116314.21498},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305116314.27905},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305116314.43902},{"y":25,"d":[[24,17,"m"]],"x":19,"t":1305116314.60697},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305116314.79131},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305116314.85497},{"y":25,"x":22,"t":1305116314.93513},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305116315.28708},{"y":25,"d":[[24,22,"m"]],"x":24,"t":1305116315.54325},{"y":25,"x":25,"t":1305116315.70305},{"y":25,"d":[[24,24,"\""]],"x":26,"t":1305116316.0553},{"y":25,"d":[[24,24," "]],"x":25,"t":1305116319.06273},{"y":25,"x":24,"t":1305116319.43074},{"y":25,"d":[[24,22," "]],"x":23,"t":1305116319.59878},{"y":25,"d":[[24,22,"a"]],"x":24,"t":1305116319.951},{"y":25,"x":25,"t":1305116320.12699},{"y":25,"d":[[24,24,"-"]],"x":26,"t":1305116320.69482},{"y":25,"d":[[24,25,"m"]],"x":27,"t":1305116321.07868},{"y":25,"x":28,"t":1305116321.19074},{"y":25,"d":[[24,27,"\""]],"x":29,"t":1305116321.63908},{"y":25,"d":[[24,28,"c"]],"x":30,"t":1305116324.35856},{"y":25,"d":[[24,29,"o"]],"x":31,"t":1305116324.42282},{"y":25,"d":[[24,30,"m"]],"x":32,"t":1305116324.56689},{"y":25,"d":[[24,31,"m"]],"x":33,"t":1305116324.73493},{"y":25,"d":[[24,32,"i"]],"x":34,"t":1305116324.89483},{"y":25,"d":[[24,33,"t"]],"x":35,"t":1305116324.9748},{"y":25,"x":36,"t":1305116325.06289},{"y":25,"d":[[24,35,"u"]],"x":37,"t":1305116325.45478},{"y":25,"d":[[24,36,"s"]],"x":38,"t":1305116325.59867},{"y":25,"d":[[24,37,"i"]],"x":39,"t":1305116325.67883},{"y":25,"d":[[24,38,"n"]],"x":40,"t":1305116325.81462},{"y":25,"d":[[24,39,"g"]],"x":41,"t":1305116325.87073},{"y":25,"x":42,"t":1305116325.95863},{"y":25,"d":[[24,41,"-"]],"x":43,"t":1305116326.15052},{"y":25,"d":[[24,42,"a"]],"x":44,"t":1305116326.35849},{"y":25,"x":45,"t":1305116326.51051},{"y":25,"d":[[24,44,"f"]],"x":46,"t":1305116326.74275},{"y":25,"d":[[24,45,"l"]],"x":47,"t":1305116326.85461},{"y":25,"d":[[24,46,"a"]],"x":48,"t":1305116327.01464},{"y":25,"d":[[24,47,"g"]],"x":49,"t":1305116327.14244},{"y":25,"d":[[24,48,"e"]],"x":50,"t":1305116327.35075},{"y":25,"d":[[24,48," "]],"x":49,"t":1305116328.14261},{"y":25,"d":[[24,48,","]],"x":50,"t":1305116328.36655},{"y":25,"x":51,"t":1305116328.51872},{"y":25,"d":[[24,50,"m"]],"x":52,"t":1305116328.93498},{"y":25,"d":[[24,51,"e"]],"x":53,"t":1305116329.03832},{"y":25,"d":[[24,52,"a"]],"x":54,"t":1305116329.18242},{"y":25,"d":[[24,53,"s"]],"x":55,"t":1305116329.39053},{"y":25,"d":[[24,53," "]],"x":54,"t":1305116329.99047},{"d":[["r","# On branch master "],["r","nothing to commit (working directory clean) "],["r","bash-3.2$ git status --ignored -s "],["r","!! hello "],["r","!! main.o "],["r","!! version.h "],["r","bash-3.2$ echo \"/* end */\" >> hello.h "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","# Changes not staged for commit: "],["r","# (use \"git add ...\" to update what will be committed) "],["r","# (use \"git checkout -- ...\" to discard changes in working directory) "],["r","# "],["r","# modified: hello.h "],["r","# "],["r","no changes added to commit (use \"git add\" and/or \"git commit -a\") "],["r","bash-3.2$ git diff "],["r","diff --git a/src/hello.h b/src/hello.h "],["r","index 0043c3b..6e482c6 100644 "],["r","--- a/src/hello.h "],["r","+++ b/src/hello.h "],["r","@@ -1 +1,2 @@ "],["r"," /* test */ "],["r","+/* end */ "],["r","bash-3.2$ git commit -a -m \"commit using -a flag, mean "]],"x":55,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["r","11111111111111111111111111111111111111000000000000000000000000000000000000000000"],["r","11111111111111111111111111111000000000000000000000000000000000000000000000000000"],["r","11111111111111111000000000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],"d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d",["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["a","7"],"d","d","d","d","d","d",["r","77777777111111111111111111177777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d",["r","66666666666667777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","22222222227777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305116330.1665,"i":1},{"y":25,"d":[[24,54,"s"]],"x":56,"t":1305116330.27061},{"y":25,"x":57,"t":1305116330.44648},{"y":25,"d":[[24,56,"a"]],"x":58,"t":1305116331.23842},{"y":25,"d":[[24,57,"d"]],"x":59,"t":1305116331.44644},{"y":25,"d":[[24,58,"d"]],"x":60,"t":1305116331.59871},{"y":25,"x":61,"t":1305116332.13439},{"y":25,"d":[[24,60,"t"]],"x":62,"t":1305116332.39056},{"y":25,"d":[[24,61,"h"]],"x":63,"t":1305116332.44654},{"y":25,"d":[[24,62,"e"]],"x":64,"t":1305116332.5664},{"y":25,"d":[[24,63,"n"]],"x":65,"t":1305116332.65453},{"y":25,"x":66,"t":1305116333.07853},{"y":25,"d":[[24,65,"c"]],"x":67,"t":1305116333.24642},{"y":25,"d":[[24,66,"o"]],"x":68,"t":1305116333.34244},{"y":25,"d":[[24,67,"m"]],"x":69,"t":1305116333.49439},{"y":25,"d":[[24,68,"m"]],"x":70,"t":1305116333.64633},{"y":25,"d":[[24,69,"i"]],"x":71,"t":1305116333.86221},{"y":25,"d":[[24,70,"t"]],"x":72,"t":1305116333.99025},{"y":25,"d":[[24,71,"."]],"x":73,"t":1305116334.10234},{"y":25,"d":[[24,72,"\""]],"x":74,"t":1305116334.55844},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",11,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",0,5],["cp",13,12],["cp",0,13],["cp",21,20],["cp",0,21],["cp",23,22],["cp",0,23]],"B":[["cp",17,16],["cp",18,17],["cp",19,18],["cp",0,20]],"t":1305116334.74221},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",10,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,72,"[master 8e715bc] commit using -a flag, means add then commit. "]],"x":1,"f":[["cp",2,1],["cp",0,4],["cp",12,11],["cp",0,12],["cp",20,19],["cp",0,20],["cp",22,21],["cp",0,22]],"B":[["cp",16,15],["cp",17,16],["cp",18,17],["cp",0,19]],"t":1305116335.04848},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",9,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,60," 1 files changed, 1 insertions(+), 0 deletions(-) "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",4,3],["cp",11,10],["cp",3,11],["cp",19,18],["cp",3,19],["cp",21,20],["cp",3,21]],"B":[["cp",15,14],["cp",16,15],["cp",17,16],["cp",0,18]],"t":1305116335.04988},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116340.43016},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116340.5262},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116340.638},{"y":25,"x":15,"t":1305116340.69399},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305116340.97398},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305116341.07808},{"y":25,"d":[[24,16,"n"]],"x":18,"t":1305116341.19004},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305116341.23797},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305116341.39003},{"y":25,"d":[[24,19,"g"]],"x":21,"t":1305116341.47001},{"y":25,"x":22,"t":1305116341.57406},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305116342.65391},{"y":25,"d":[[24,22,"-"]],"x":24,"t":1305116342.83789},{"y":25,"d":[[24,23,"g"]],"x":25,"t":1305116342.97429},{"y":25,"d":[[24,24,"l"]],"x":26,"t":1305116343.07805},{"y":25,"d":[[24,25,"o"]],"x":27,"t":1305116343.246},{"y":25,"d":[[24,26,"b"]],"x":28,"t":1305116343.30993},{"y":25,"d":[[24,27,"a"]],"x":29,"t":1305116343.45413},{"y":25,"d":[[24,28,"l"]],"x":30,"t":1305116343.55812},{"y":25,"x":31,"t":1305116343.85406},{"y":25,"d":[[24,30,"c"]],"x":32,"t":1305116344.56614},{"y":25,"d":[[24,31,"o"]],"x":33,"t":1305116344.64606},{"y":25,"d":[[24,32,"r"]],"x":34,"t":1305116345.30999},{"y":25,"d":[[24,33,"e"]],"x":35,"t":1305116345.48595},{"y":25,"d":[[24,34,"."]],"x":36,"t":1305116345.68602},{"y":25,"d":[[24,35,"e"]],"x":37,"t":1305116346.30185},{"y":25,"d":[[24,36,"x"]],"x":38,"t":1305116346.54185},{"y":25,"d":[[24,37,"c"]],"x":39,"t":1305116346.69378},{"y":25,"d":[[24,38,"l"]],"x":40,"t":1305116346.77475},{"y":25,"d":[[24,39,"u"]],"x":41,"t":1305116346.91776},{"y":25,"d":[[24,40,"d"]],"x":42,"t":1305116347.03021},{"y":25,"d":[[24,41,"e"]],"x":43,"t":1305116347.21394},{"y":25,"d":[[24,42,"s"]],"x":44,"t":1305116347.39769},{"y":25,"d":[[24,43,"f"]],"x":45,"t":1305116347.68604},{"y":25,"d":[[24,44,"i"]],"x":46,"t":1305116347.78984},{"y":25,"d":[[24,45,"l"]],"x":47,"t":1305116347.88581},{"y":25,"d":[[24,46,"e"]],"x":48,"t":1305116348.03783},{"y":25,"x":49,"t":1305116348.46167},{"y":25,"d":[[24,48,"~"]],"x":50,"t":1305116349.03789},{"y":25,"d":[[24,49,"/"]],"x":51,"t":1305116349.38968},{"y":25,"d":[[24,50,"."]],"x":52,"t":1305116349.62194},{"y":25,"d":[[24,51,"g"]],"x":53,"t":1305116349.7657},{"y":25,"d":[[24,52,"i"]],"x":54,"t":1305116349.85391},{"y":25,"d":[[24,53,"t"]],"x":55,"t":1305116349.96573},{"y":25,"d":[[24,54,"i"]],"x":56,"t":1305116350.50183},{"y":25,"d":[[24,55,"g"]],"x":57,"t":1305116350.66176},{"y":25,"d":[[24,56,"n"]],"x":58,"t":1305116350.71767},{"y":25,"d":[[24,57,"o"]],"x":59,"t":1305116350.86182},{"y":25,"d":[[24,58,"r"]],"x":60,"t":1305116350.94173},{"y":25,"d":[[24,59,"e"]],"x":61,"t":1305116351.10179},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",8,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",3,2],["cp",10,9],["cp",2,10],["cp",18,17],["cp",2,18],["cp",20,19],["cp",2,20]],"B":[["cp",14,13],["cp",15,14],["cp",16,15],["cp",0,17]],"t":1305116351.71759},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305116351.72488},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305116353.18959},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116353.27774},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305116353.38982},{"y":25,"x":15,"t":1305116353.47752},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305116353.61358},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305116353.67751},{"y":25,"d":[[24,16,"n"]],"x":18,"t":1305116353.79774},{"y":25,"d":[[24,17,"f"]],"x":19,"t":1305116353.83752},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305116353.9655},{"y":25,"d":[[24,19,"g"]],"x":21,"t":1305116354.06156},{"y":25,"x":22,"t":1305116354.14961},{"y":25,"d":[[24,21,"c"]],"x":23,"t":1305116354.54967},{"y":25,"d":[[24,22,"o"]],"x":24,"t":1305116354.61356},{"y":25,"d":[[24,23,"r"]],"x":25,"t":1305116354.7415},{"y":25,"d":[[24,24,"e"]],"x":26,"t":1305116354.86959},{"y":25,"d":[[24,25,"."]],"x":27,"t":1305116355.02149},{"y":25,"d":[[24,26,"e"]],"x":28,"t":1305116355.22949},{"y":25,"d":[[24,27,"x"]],"x":29,"t":1305116355.42946},{"y":25,"d":[[24,28,"c"]],"x":30,"t":1305116355.60544},{"y":25,"d":[[24,29,"l"]],"x":31,"t":1305116355.66944},{"y":25,"d":[[24,30,"u"]],"x":32,"t":1305116355.80539},{"y":25,"d":[[24,31,"d"]],"x":33,"t":1305116355.90167},{"y":25,"d":[[24,32,"e"]],"x":34,"t":1305116356.09339},{"y":25,"d":[[24,33,"s"]],"x":35,"t":1305116356.24541},{"y":25,"d":[[24,34,"f"]],"x":36,"t":1305116356.92554},{"d":[["r","!! main.o "],["r","!! version.h "],["r","bash-3.2$ echo \"/* end */\" >> hello.h "],["r","bash-3.2$ git status "],["r","# On branch master "],["r","# Changes not staged for commit: "],["r","# (use \"git add ...\" to update what will be committed) "],["r","# (use \"git checkout -- ...\" to discard changes in working directory) "],["r","# "],["r","# modified: hello.h "],["r","# "],["r","no changes added to commit (use \"git add\" and/or \"git commit -a\") "],["r","bash-3.2$ git diff "],["r","diff --git a/src/hello.h b/src/hello.h "],["r","index 0043c3b..6e482c6 100644 "],["r","--- a/src/hello.h "],["r","+++ b/src/hello.h "],["r","@@ -1 +1,2 @@ "],["r"," /* test */ "],["r","+/* end */ "],["r","bash-3.2$ git commit -a -m \"commit using -a flag, means add then commit.\" "],["r","[master 8e715bc] commit using -a flag, means add then commit. "],["r"," 1 files changed, 1 insertions(+), 0 deletions(-) "],["r","bash-3.2$ git config --global core.excludesfile ~/.gitignore "],["r","bash-3.2$ git config core.excludesfi "]],"x":37,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d",["r","11111111111111111111111111111111111111000000000000000000000000000000000000000000"],["r","11111111111111111111111111111000000000000000000000000000000000000000000000000000"],["r","11111111111111111000000000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],"d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","11777777777777777777777777777777777777777777777777777777777777777777777777777777"],"d",["a","7"],"d","d","d","d","d","d",["r","77777777111111111111111111177777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d",["r","66666666666667777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","22222222227777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305116357.02957,"i":1},{"y":25,"d":[[24,36,"l"]],"x":38,"t":1305116357.14156},{"y":25,"d":[[24,37,"e"]],"x":39,"t":1305116357.28556},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",7,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",9,8],["cp",1,9],["cp",17,16],["cp",1,17],["cp",19,18],["cp",1,19]],"B":[["cp",13,12],["cp",14,13],["cp",15,14],["cp",0,16]],"t":1305116358.6453},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",6,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,37,"/Users/jiangxin/.gitignore "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",8,7],["cp",0,8],["cp",16,15],["cp",0,16],["cp",18,17],["cp",0,18]],"B":[["cp",12,11],["cp",13,12],["cp",14,13],["cp",0,15]],"t":1305116358.65154},{"y":25,"d":[[24,10,"v"]],"x":12,"t":1305116360.43748},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305116360.53331},{"y":25,"x":14,"t":1305116360.64545},{"y":25,"d":[[24,13,"~"]],"x":15,"t":1305116360.92546},{"y":25,"d":[[24,14,"/"]],"x":16,"t":1305116361.15724},{"y":25,"d":[[24,15,"."]],"x":17,"t":1305116361.40517},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305116361.66125},{"y":25,"d":[[24,17,"i"]],"x":19,"t":1305116361.83734},{"y":25,"d":[[24,18,"t"]],"x":20,"t":1305116362.06132},{"y":25,"d":[[24,19,"i"]],"x":21,"t":1305116362.53323},{"y":25,"d":[[24,20,"g"]],"x":22,"t":1305116362.64522},{"y":25,"d":[[24,21,"n"]],"x":23,"t":1305116362.89331},{"y":25,"d":[[24,22,"o"]],"x":24,"t":1305116363.02117},{"y":25,"d":[[24,23,"r"]],"x":25,"t":1305116363.17322},{"y":25,"d":[[24,24,"e"]],"x":26,"t":1305116363.34939},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",5,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",7,6],["cp",0,7],["cp",15,14],["cp",0,15],["cp",17,16],["cp",0,17]],"B":[["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,14]],"t":1305116364.66129},{"y":25,"x":1,"t":1305116364.99939},{"y":1,"d":[[0,0,19,"*~ "],[1,0,17,"*.pyc "],[2,0,31,".*.mmx "],[3,0,61,"~ "],["cp",3,4],["cp",3,5],["cp",3,6],["cp",3,7],["cp",3,8],["cp",3,9],["cp",3,10],["cp",3,11],["cp",3,12],["cp",3,13],["cp",3,14],["cp",3,15],["cp",3,16],["cp",3,17],["cp",3,18],["cp",3,19],["cp",3,20],["cp",3,21],[22,0,25,"\"~/.gitignore\" 3L, 16Cc "],["cp",24,23]],"x":1,"f":[[3,0,77,["a","4"]],["cp",3,4],["cp",3,5],["cp",3,6],["cp",3,7],["cp",3,8],["cp",3,9],["cp",3,10],["cp",3,11],["cp",3,12],["cp",3,13],["cp",3,14],["cp",3,15],["cp",3,16],["cp",3,17],["cp",3,18],["cp",3,19],["cp",3,20],["cp",3,21]],"B":[[3,0,77,["a","1"]],["cp",3,4],["cp",3,5],["cp",3,6],["cp",3,7],["cp",3,8],["cp",3,9],["cp",3,10],["cp",3,11],["cp",3,12],["cp",3,13],["cp",3,14],["cp",3,15],["cp",3,16],["cp",3,17],["cp",3,18],["cp",3,19],["cp",3,20],["cp",3,21]],"t":1305116365.00564},{"y":2,"x":1,"t":1305116366.38932},{"y":3,"x":1,"t":1305116366.68537},{"y":3,"x":1,"t":1305116366.86175},{"y":23,"d":[[22,0,22,": "]],"x":2,"t":1305116367.88547},{"y":23,"d":[[22,1,"w"]],"x":3,"t":1305116368.13319},{"y":23,"d":[[22,2,"q"]],"x":4,"t":1305116368.35715},{"y":23,"x":1,"t":1305116369.82901},{"y":23,"d":[[22,0,13,"\"~/.gitignore\""]],"x":15,"t":1305116369.8292},{"y":23,"d":[[22,15,29,"3L, 16C written"]],"x":31,"t":1305116370.11825},{"y":25,"d":[["cp",23,0],["cp",0,1],["cp",0,2],["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21],["cp",0,22],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"B":[["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"t":1305116370.12052},{"y":25,"d":[[23,0,13,"bash-3.2$ exit"],["cp",0,24]],"x":1,"t":1305116371.82918}]} \ No newline at end of file diff --git a/html/part2/ch11-01-clone.html b/html/part2/ch11-01-clone.html new file mode 100644 index 000000000..f565e8608 --- /dev/null +++ b/html/part2/ch11-01-clone.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch11-01-clone +json_file: ch11-01-clone.json +--- diff --git a/html/part2/ch11-01-clone.json b/html/part2/ch11-01-clone.json new file mode 100644 index 000000000..de094ce5a --- /dev/null +++ b/html/part2/ch11-01-clone.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305117731.8983,"i":1},{"y":1,"d":[[0,10,34,"cd /path/to/my/workspace/"]],"x":11,"t":1305117732.59419},{"y":2,"x":1,"t":1305117733.50635},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305117733.50657},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305117734.3303},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305117734.43433},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305117734.5142},{"y":2,"x":15,"t":1305117734.57812},{"y":2,"d":[[1,14,"c"]],"x":16,"t":1305117734.77023},{"y":2,"d":[[1,15,"l"]],"x":17,"t":1305117734.81045},{"y":2,"d":[[1,16,"o"]],"x":18,"t":1305117734.96233},{"y":2,"d":[[1,17,"n"]],"x":19,"t":1305117735.06615},{"y":2,"d":[[1,18,"e"]],"x":20,"t":1305117735.15428},{"y":2,"x":21,"t":1305117735.22628},{"y":2,"d":[[1,20,"g"]],"x":22,"t":1305117735.37033},{"y":2,"d":[[1,21,"i"]],"x":23,"t":1305117735.43415},{"y":2,"d":[[1,22,"t"]],"x":24,"t":1305117735.56218},{"y":2,"d":[[1,23,":"]],"x":25,"t":1305117735.83431},{"y":2,"d":[[1,24,"/"]],"x":26,"t":1305117736.03412},{"y":2,"d":[[1,25,"/"]],"x":27,"t":1305117736.18604},{"y":2,"d":[[1,26,"g"]],"x":28,"t":1305117736.93807},{"y":2,"d":[[1,27,"i"]],"x":29,"t":1305117737.0263},{"y":2,"d":[[1,28,"t"]],"x":30,"t":1305117737.12202},{"y":2,"d":[[1,29,"."]],"x":31,"t":1305117737.23454},{"y":2,"d":[[1,29," "]],"x":30,"t":1305117738.11411},{"y":2,"d":[[1,29,"h"]],"x":31,"t":1305117738.38586},{"y":2,"d":[[1,30,"u"]],"x":32,"t":1305117738.57826},{"y":2,"d":[[1,31,"b"]],"x":33,"t":1305117738.66616},{"y":2,"d":[[1,32,"."]],"x":34,"t":1305117738.79401},{"y":2,"d":[[1,33,"c"]],"x":35,"t":1305117738.89804},{"y":2,"d":[[1,34,"o"]],"x":36,"t":1305117738.98598},{"y":2,"d":[[1,35,"m"]],"x":37,"t":1305117739.12197},{"y":2,"d":[[1,36,"/"]],"x":38,"t":1305117739.57824},{"y":2,"d":[[1,37,38,"^P"]],"x":40,"t":1305117739.58593},{"y":2,"d":[[1,39,"o"]],"x":41,"t":1305117739.88184},{"y":2,"d":[[1,39," "]],"x":40,"t":1305117740.21796},{"y":2,"d":[[1,37,38,["a"," "]]],"x":38,"t":1305117740.36981},{"y":2,"d":[[1,37,"o"]],"x":39,"t":1305117740.67407},{"y":2,"d":[[1,38,"s"]],"x":40,"t":1305117740.818},{"y":2,"d":[[1,39,"s"]],"x":41,"t":1305117740.99505},{"y":2,"d":[[1,40,"x"]],"x":42,"t":1305117741.16978},{"y":2,"d":[[1,41,"p"]],"x":43,"t":1305117741.24212},{"y":2,"d":[[1,42,"-"]],"x":44,"t":1305117741.45787},{"y":2,"d":[[1,43,"c"]],"x":45,"t":1305117741.66583},{"y":2,"d":[[1,44,"o"]],"x":46,"t":1305117741.7541},{"y":2,"d":[[1,45,"m"]],"x":47,"t":1305117741.90575},{"y":2,"d":[[1,46,"/"]],"x":48,"t":1305117742.12996},{"y":2,"d":[[1,47,"g"]],"x":49,"t":1305117742.80987},{"y":2,"d":[[1,48,"i"]],"x":50,"t":1305117742.88187},{"y":2,"d":[[1,49,"t"]],"x":51,"t":1305117742.98585},{"y":2,"d":[[1,50,"d"]],"x":52,"t":1305117743.18577},{"y":2,"d":[[1,51,"e"]],"x":53,"t":1305117743.36207},{"y":2,"d":[[1,52,"m"]],"x":54,"t":1305117743.7538},{"y":2,"d":[[1,53,"o"]],"x":55,"t":1305117743.92967},{"y":2,"d":[[1,54,"-"]],"x":56,"t":1305117744.24197},{"y":2,"d":[[1,55,"c"]],"x":57,"t":1305117745.11392},{"y":2,"d":[[1,56,"o"]],"x":58,"t":1305117745.17794},{"y":2,"d":[[1,57,"m"]],"x":59,"t":1305117745.3296},{"y":2,"d":[[1,58,"m"]],"x":60,"t":1305117745.48167},{"y":2,"d":[[1,59,"i"]],"x":61,"t":1305117745.66568},{"y":2,"d":[[1,60,"t"]],"x":62,"t":1305117745.72196},{"y":2,"d":[[1,61,"-"]],"x":63,"t":1305117745.89053},{"y":2,"d":[[1,62,"g"]],"x":64,"t":1305117746.01771},{"y":2,"d":[[1,63,"r"]],"x":65,"t":1305117746.18565},{"y":2,"d":[[1,64,"e"]],"x":66,"t":1305117746.36217},{"y":2,"d":[[1,65,"e"]],"x":67,"t":1305117746.54586},{"y":2,"d":[[1,65," "]],"x":66,"t":1305117747.10575},{"y":2,"d":[[1,64," "]],"x":65,"t":1305117747.25745},{"y":2,"d":[[1,63," "]],"x":64,"t":1305117747.41749},{"y":2,"d":[[1,62," "]],"x":63,"t":1305117747.58554},{"y":2,"d":[[1,62,"t"]],"x":64,"t":1305117747.67395},{"y":2,"d":[[1,63,"r"]],"x":65,"t":1305117747.85777},{"y":2,"d":[[1,64,"e"]],"x":66,"t":1305117748.01779},{"y":2,"d":[[1,65,"e"]],"x":67,"t":1305117748.17797},{"y":2,"d":[[1,66,"."]],"x":68,"t":1305117748.33074},{"y":2,"d":[[1,67,"g"]],"x":69,"t":1305117748.45748},{"y":2,"d":[[1,68,"i"]],"x":70,"t":1305117748.56159},{"y":2,"d":[[1,69,"t"]],"x":71,"t":1305117748.64972},{"y":3,"x":1,"t":1305117748.85755},{"y":4,"d":[[2,0,34,"Cloning into gitdemo-commit-tree..."]],"x":1,"t":1305117748.8693},{"y":5,"d":[[3,0,34,"remote: Counting objects: 65, done."]],"x":1,"t":1305117751.23197},{"y":5,"d":[[4,0,39,"remote: Compressing objects: 15% (8/53)"]],"x":1,"t":1305117751.23395},{"y":5,"d":[[4,30,40,"20% (11/53)"]],"x":1,"t":1305117751.6234},{"y":6,"d":[[4,29,30,"10"],[4,35,36,"53"],[4,41,47,", done."]],"x":1,"t":1305117751.62554},{"y":6,"d":[[5,0,29,"Receiving objects: 1% (1/65)"]],"x":1,"t":1305117752.42267},{"y":6,"d":[[5,20,30,"46% (30/65)"]],"x":1,"t":1305117752.42357},{"y":6,"d":[[5,31,52,", 52.00 KiB | 22 KiB/s"]],"x":1,"t":1305117754.41193},{"y":9,"d":[[5,0,52,"remote: Total 65 (delta 8), reused 0 (delta 0) "],[6,0,59,"Receiving objects: 100% (65/65), 78.14 KiB | 22 KiB/s, done."],[7,0,34,"Resolving deltas: 100% (8/8), done."],[8,0,8,"bash-3.2$"]],"x":11,"t":1305117754.43645},{"y":9,"d":[[8,10,"c"]],"x":12,"t":1305117756.84156},{"y":9,"d":[[8,11,"d"]],"x":13,"t":1305117757.02561},{"y":9,"x":14,"t":1305117757.0974},{"y":9,"d":[[8,13,"g"]],"x":15,"t":1305117757.56925},{"y":9,"d":[[8,14,"i"]],"x":16,"t":1305117757.67348},{"y":9,"d":[[8,15,"t"]],"x":17,"t":1305117757.75325},{"y":9,"d":[[8,16,"d"]],"x":18,"t":1305117757.9455},{"y":9,"d":[[8,17,32,"emo-commit-tree/"]],"x":34,"t":1305117758.17553},{"y":10,"x":1,"t":1305117758.78532},{"y":10,"d":[[9,0,8,"bash-3.2$"]],"x":11,"t":1305117758.78571},{"y":10,"d":[[9,10,"l"]],"x":12,"t":1305117759.62534},{"y":10,"d":[[9,11,"s"]],"x":13,"t":1305117759.7292},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/ "],["r","bash-3.2$ git clone git://github.com/ossxp-com/gitdemo-commit-tree.git "],["r","Cloning into gitdemo-commit-tree... "],["r","remote: Counting objects: 65, done. "],["r","remote: Compressing objects: 100% (53/53), done. "],["r","remote: Total 65 (delta 8), reused 0 (delta 0) "],["r","Receiving objects: 100% (65/65), 78.14 KiB | 22 KiB/s, done. "],["r","Resolving deltas: 100% (8/8), done. "],["r","bash-3.2$ cd gitdemo-commit-tree/ "],["r","bash-3.2$ ls "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":1,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":11,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305117760.02517,"i":1},{"y":12,"d":[[10,0,39,"README doc gitg.png src treeview.png"],[11,0,8,"bash-3.2$"]],"x":11,"t":1305117760.03241},{"y":12,"d":[[11,10,"g"]],"x":12,"t":1305117760.98504},{"y":12,"d":[[11,11,"i"]],"x":13,"t":1305117761.06527},{"y":12,"d":[[11,12,"t"]],"x":14,"t":1305117761.16913},{"y":12,"x":15,"t":1305117761.23313},{"y":12,"d":[[11,14,"l"]],"x":16,"t":1305117761.67313},{"y":12,"d":[[11,15,"o"]],"x":17,"t":1305117761.83327},{"y":12,"d":[[11,16,"g"]],"x":18,"t":1305117761.91333},{"y":12,"x":19,"t":1305117761.97704},{"y":12,"d":[[11,18,"-"]],"x":20,"t":1305117762.10506},{"y":12,"d":[[11,19,"-"]],"x":21,"t":1305117762.2813},{"y":12,"d":[[11,20,"o"]],"x":22,"t":1305117762.47329},{"y":12,"d":[[11,21,"n"]],"x":23,"t":1305117762.60134},{"y":12,"d":[[11,22,"e"]],"x":24,"t":1305117762.70517},{"y":12,"d":[[11,23,"l"]],"x":25,"t":1305117762.80914},{"y":12,"d":[[11,24,"i"]],"x":26,"t":1305117762.96922},{"y":12,"d":[[11,25,"n"]],"x":27,"t":1305117763.09722},{"y":12,"d":[[11,26,"e"]],"x":28,"t":1305117763.18512},{"y":12,"x":29,"t":1305117763.27325},{"y":12,"d":[[11,28,"-"]],"x":30,"t":1305117763.44101},{"y":12,"d":[[11,29,"-"]],"x":31,"t":1305117763.62496},{"y":12,"d":[[11,30,"g"]],"x":32,"t":1305117763.84923},{"y":12,"d":[[11,31,"r"]],"x":33,"t":1305117764.03317},{"y":12,"d":[[11,32,"a"]],"x":34,"t":1305117764.16109},{"y":12,"d":[[11,33,"p"]],"x":35,"t":1305117764.34504},{"y":12,"d":[[11,34,"h"]],"x":36,"t":1305117764.46511},{"y":12,"x":37,"t":1305117764.697},{"y":12,"d":[[11,36,"-"]],"x":38,"t":1305117764.86544},{"y":12,"d":[[11,37,"-"]],"x":39,"t":1305117765.04909},{"y":12,"d":[[11,38,"d"]],"x":40,"t":1305117765.16109},{"y":12,"d":[[11,39,"e"]],"x":41,"t":1305117765.31299},{"y":12,"d":[[11,40,"c"]],"x":42,"t":1305117765.50523},{"y":12,"d":[[11,41,"o"]],"x":43,"t":1305117765.58519},{"y":12,"d":[[11,42,"r"]],"x":44,"t":1305117765.68894},{"y":12,"d":[[11,43,"a"]],"x":45,"t":1305117765.92126},{"y":12,"d":[[11,44,"t"]],"x":46,"t":1305117766.05685},{"y":12,"d":[[11,45,"e"]],"x":47,"t":1305117766.19301},{"y":13,"x":1,"t":1305117766.36891},{"y":25,"b":[[24,0,5,["a","7"]]],"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],[6,0,77,"* 6652a0d (HEAD, origin/master, origin/HEAD, master) Add Images for git treevi"],[7,0,45,"* 8199323 (tag: A) Commit A: merge B with C."],[8,0,32,"|\\ "],[9,0,29,"| * 0cd7f2e (tag: C) commit C."],[10,0,39,"| | "],[11,0,45,"| \\ "],[12,0,54,"*-. \\ 776c5c9 (tag: B) Commit B: merge D with E and F"],[13,0,5,"|\\ \\ \\"],[14,0,5,"| | |/"],[15,0,48,"| | * beb30ca (tag: F) Commit F: merge I with J"],[16,0,5,"| | |\\"],[17,0,33,"| | | * 3252fcc (tag: J) commit J."],[18,0,31,"| | * 634836c (tag: I) commit I."],[19,0,29,"| * 83be369 (tag: E) commit E."],[20,0,44,"* 212efce (tag: D) Commit D: merge G with H"],["cp",8,21],[22,0,29,"| * 2ab52ad (tag: H) commit H."],[23,0,27,"* e80aa74 (tag: G) commit G."],[24,0,4,"(END)"]],"x":7,"f":[[6,2,51,"33333333366663311111111111113311111111111332222223"],[7,4,19,["a","3"]],[8,0,1,"23"],[9,0,19,"27773333333333333333"],[10,0,2,"273"],[11,0,3,"2773"],[12,1,23,"33737773333333333333333"],[13,0,5,"457373"],[14,0,5,"475733"],[15,0,2,"475"],[15,8,23,["a","3"]],[16,0,5,"475712"],[17,0,23,"475717773333333333333333"],[18,0,21,"4757773333333333333333"],[19,0,19,"47773333333333333333"],["cp",7,20],[21,0,1,"34"],[22,0,19,"37773333333333333333"],[23,2,17,["a","3"]],[24,0,5,["a","0"]]],"B":[[6,11,50,"1111001111111111111001111111111100111111"],[7,13,18,["a","1"]],["cp",7,9],[12,17,22,["a","1"]],["cp",12,15],[16,4,5,["a","1"]],[17,4,"1"],[17,17,22,["a","1"]],[18,15,20,["a","1"]],["cp",7,19],["cp",7,20],[21,0,1,["a","1"]],[22,0,"1"],[22,13,18,["a","1"]],[23,11,16,["a","1"]]],"t":1305117766.38341},{"y":25,"b":[["cp",0,24]],"d":[[24,["a"," "]]],"x":1,"f":[["cp",0,24]],"t":1305117768.23285},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305117768.2343},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",7,20],["cp",22,21],["cp",23,22],[23,0,27,"bash-3.2$ exit "],[24,["a"," "]]],"x":1,"f":[["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",6,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",0,23]],"B":[["cp",6,5],["cp",7,6],["cp",0,7],["cp",6,8],["cp",0,9],["cp",12,11],["cp",0,12],["cp",11,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",6,18],["cp",21,20],["cp",22,21],["cp",23,22],["cp",0,23]],"t":1305117769.57783}]} \ No newline at end of file diff --git a/html/part2/ch11-02-rev-parse.html b/html/part2/ch11-02-rev-parse.html new file mode 100644 index 000000000..b2993fbb1 --- /dev/null +++ b/html/part2/ch11-02-rev-parse.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch11-02-rev-parse +json_file: ch11-02-rev-parse.json +--- diff --git a/html/part2/ch11-02-rev-parse.json b/html/part2/ch11-02-rev-parse.json new file mode 100644 index 000000000..0a224a6db --- /dev/null +++ b/html/part2/ch11-02-rev-parse.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305118078.99197,"i":1},{"y":1,"d":[[0,10,54,"cd /path/to/my/workspace/gitdemo-commit-tree/"]],"x":11,"t":1305118079.59688},{"y":2,"x":1,"t":1305118080.30084},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305118080.30111},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305118081.19703},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305118081.30875},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305118081.40492},{"y":2,"x":15,"t":1305118081.49285},{"y":2,"d":[[1,14,"r"]],"x":16,"t":1305118081.80479},{"y":2,"d":[[1,15,"e"]],"x":17,"t":1305118081.98088},{"y":2,"d":[[1,16,"v"]],"x":18,"t":1305118082.16468},{"y":2,"d":[[1,17,"-"]],"x":19,"t":1305118082.35688},{"y":2,"d":[[1,18,"p"]],"x":20,"t":1305118082.62167},{"y":2,"d":[[1,19,"a"]],"x":21,"t":1305118082.72507},{"y":2,"d":[[1,20,"r"]],"x":22,"t":1305118082.83677},{"y":2,"d":[[1,21,"s"]],"x":23,"t":1305118082.99676},{"y":2,"d":[[1,22,"e"]],"x":24,"t":1305118083.12485},{"y":2,"x":25,"t":1305118083.23702},{"y":2,"d":[[1,24,"-"]],"x":26,"t":1305118083.7731},{"y":2,"d":[[1,25,"-"]],"x":27,"t":1305118084.71672},{"y":2,"d":[[1,26,"s"]],"x":28,"t":1305118085.31671},{"y":2,"d":[[1,27,"y"]],"x":29,"t":1305118085.85277},{"y":2,"d":[[1,28,"m"]],"x":30,"t":1305118086.10078},{"y":2,"d":[[1,29,"b"]],"x":31,"t":1305118086.29273},{"y":2,"d":[[1,30,"o"]],"x":32,"t":1305118086.40493},{"y":2,"d":[[1,31,"l"]],"x":33,"t":1305118086.5971},{"y":2,"d":[[1,32,"i"]],"x":34,"t":1305118086.74886},{"y":2,"d":[[1,33,"c"]],"x":35,"t":1305118086.9167},{"y":2,"x":36,"t":1305118087.51658},{"y":2,"d":[[1,35,"-"]],"x":37,"t":1305118088.16457},{"y":2,"d":[[1,36,"-"]],"x":38,"t":1305118088.36455},{"y":2,"d":[[1,37,"b"]],"x":39,"t":1305118088.48444},{"y":2,"d":[[1,38,"r"]],"x":40,"t":1305118088.67675},{"y":2,"d":[[1,39,"a"]],"x":41,"t":1305118088.82055},{"y":2,"d":[[1,40,"n"]],"x":42,"t":1305118088.9568},{"y":2,"d":[[1,41,"c"]],"x":43,"t":1305118089.03663},{"y":2,"d":[[1,42,"h"]],"x":44,"t":1305118089.1805},{"y":2,"d":[[1,43,"e"]],"x":45,"t":1305118089.26061},{"y":2,"d":[[1,44,"s"]],"x":46,"t":1305118089.42864},{"y":3,"x":1,"t":1305118089.61252},{"y":4,"d":[[2,0,5,"master"],[3,0,8,"bash-3.2$"]],"x":11,"t":1305118089.61959},{"y":4,"d":[["cp",1,3]],"x":11,"t":1305118091.26053},{"y":4,"x":45,"t":1305118091.63652},{"y":4,"x":38,"t":1305118091.91672},{"y":4,"d":[[3,37,44,["a"," "]]],"x":37,"t":1305118092.25233},{"y":4,"x":37,"t":1305118092.46031},{"y":4,"x":38,"t":1305118092.4604},{"y":4,"d":[[3,37,"t"]],"x":39,"t":1305118092.7486},{"y":4,"d":[[3,38,"a"]],"x":40,"t":1305118092.94023},{"y":4,"d":[[3,39,"g"]],"x":41,"t":1305118093.1003},{"y":4,"d":[[3,40,"s"]],"x":42,"t":1305118093.2523},{"y":5,"x":1,"t":1305118093.38826},{"y":15,"d":[[4,0,"A"],[5,0,"B"],[6,0,"C"],[7,0,"D"],[8,0,"E"],[9,0,"F"],[10,0,"G"],[11,0,"H"],[12,0,"I"],[13,0,"J"],[14,0,8,"bash-3.2$"]],"x":11,"t":1305118093.39627},{"y":15,"d":[[14,10,"g"]],"x":12,"t":1305118096.4604},{"y":15,"d":[[14,11,"i"]],"x":13,"t":1305118096.50024},{"y":15,"d":[[14,12,"t"]],"x":14,"t":1305118096.65235},{"y":15,"x":15,"t":1305118096.70833},{"y":15,"d":[[14,14,"l"]],"x":16,"t":1305118097.22016},{"y":15,"d":[[14,15,"o"]],"x":17,"t":1305118097.39643},{"y":15,"d":[[14,16,"g"]],"x":18,"t":1305118097.46032},{"y":15,"x":19,"t":1305118097.54824},{"y":15,"d":[[14,18,"-"]],"x":20,"t":1305118097.67751},{"y":15,"d":[[14,19,"-"]],"x":21,"t":1305118097.86021},{"y":15,"d":[[14,20,"o"]],"x":22,"t":1305118098.04414},{"y":15,"d":[[14,21,"n"]],"x":23,"t":1305118098.18806},{"y":15,"d":[[14,22,"e"]],"x":24,"t":1305118098.22022},{"y":15,"d":[[14,23,"l"]],"x":25,"t":1305118098.34055},{"y":15,"d":[[14,24,"i"]],"x":26,"t":1305118098.46809},{"y":15,"d":[[14,25,"n"]],"x":27,"t":1305118098.60412},{"y":15,"d":[[14,26,"e"]],"x":28,"t":1305118098.71645},{"y":15,"x":29,"t":1305118098.87608},{"y":15,"d":[[14,28,"-"]],"x":30,"t":1305118101.64413},{"y":15,"d":[[14,29,"-"]],"x":31,"t":1305118101.83618},{"y":15,"d":[[14,30,"g"]],"x":32,"t":1305118102.49202},{"y":15,"d":[[14,31,"r"]],"x":33,"t":1305118102.6439},{"y":15,"d":[[14,32,"a"]],"x":34,"t":1305118102.78794},{"y":15,"d":[[14,33,"p"]],"x":35,"t":1305118102.94019},{"y":15,"d":[[14,34,"h"]],"x":36,"t":1305118103.09189},{"y":15,"x":37,"t":1305118103.35625},{"y":15,"d":[[14,36,"-"]],"x":38,"t":1305118103.76404},{"y":15,"d":[[14,37,"-"]],"x":39,"t":1305118103.94785},{"y":15,"d":[[14,38,"d"]],"x":40,"t":1305118104.05985},{"y":15,"d":[[14,39,"e"]],"x":41,"t":1305118104.22004},{"y":15,"d":[[14,40,"c"]],"x":42,"t":1305118104.39588},{"y":15,"d":[[14,41,"o"]],"x":43,"t":1305118104.45982},{"y":15,"d":[[14,42,"r"]],"x":44,"t":1305118104.57991},{"y":15,"d":[[14,43,"a"]],"x":45,"t":1305118104.7881},{"y":15,"d":[[14,44,"t"]],"x":46,"t":1305118104.90802},{"y":15,"d":[[14,45,"e"]],"x":47,"t":1305118105.04409},{"y":16,"x":1,"t":1305118105.12397},{"y":25,"b":[[24,0,5,["a","7"]]],"d":[["cp",9,0],["cp",10,1],["cp",11,2],["cp",12,3],["cp",13,4],["cp",14,5],[6,0,77,"* 6652a0d (HEAD, origin/master, origin/HEAD, master) Add Images for git treevi"],[7,0,45,"* 8199323 (tag: A) Commit A: merge B with C."],[8,0,1,"|\\"],[9,0,29,"| * 0cd7f2e (tag: C) commit C."],[10,0,2,"| |"],[11,0,3,"| \\"],[12,0,54,"*-. \\ 776c5c9 (tag: B) Commit B: merge D with E and F"],[13,0,5,"|\\ \\ \\"],[14,0,45,"| | |/ "],[15,0,48,"| | * beb30ca (tag: F) Commit F: merge I with J"],[16,0,5,"| | |\\"],[17,0,33,"| | | * 3252fcc (tag: J) commit J."],[18,0,31,"| | * 634836c (tag: I) commit I."],[19,0,29,"| * 83be369 (tag: E) commit E."],[20,0,44,"* 212efce (tag: D) Commit D: merge G with H"],["cp",8,21],[22,0,29,"| * 2ab52ad (tag: H) commit H."],[23,0,27,"* e80aa74 (tag: G) commit G."],[24,0,4,"(END)"]],"x":7,"f":[[6,2,51,"33333333366663311111111111113311111111111332222223"],[7,4,19,["a","3"]],[8,0,1,"23"],[9,0,19,"27773333333333333333"],[10,0,2,"273"],[11,0,3,"2773"],[12,1,23,"33737773333333333333333"],[13,0,5,"457373"],[14,0,5,"475733"],[15,0,2,"475"],[15,8,23,["a","3"]],[16,0,5,"475712"],[17,0,23,"475717773333333333333333"],[18,0,21,"4757773333333333333333"],[19,0,19,"47773333333333333333"],["cp",7,20],[21,0,1,"34"],[22,0,19,"37773333333333333333"],[23,2,17,["a","3"]],[24,0,5,["a","0"]]],"B":[[6,11,50,"1111001111111111111001111111111100111111"],[7,13,18,["a","1"]],["cp",7,9],[12,17,22,["a","1"]],["cp",12,15],[16,4,5,["a","1"]],[17,4,"1"],[17,17,22,["a","1"]],[18,15,20,["a","1"]],["cp",7,19],["cp",7,20],[21,0,1,["a","1"]],[22,0,"1"],[22,13,18,["a","1"]],[23,11,16,["a","1"]]],"t":1305118105.13536},{"y":25,"b":[["cp",0,24]],"d":[[24,["a"," "]]],"x":1,"f":[["cp",0,24]],"t":1305118108.76375},{"y":25,"b":[[24,0,5,["a","7"]]],"d":[["cp",23,0],[1,0,13,"...skipping..."],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",13,9],["cp",14,10],["cp",15,11],["cp",16,12],["cp",17,13],["cp",18,14],["cp",19,15],["cp",20,16],["cp",4,17],["cp",22,18],["cp",0,19],[20,0,44,"~ "],["cp",20,21],["cp",20,22],["cp",20,23],[24,0,4,"(END)"]],"x":7,"f":[["cp",23,0],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",11,7],["cp",12,8],["cp",13,9],["cp",14,10],["cp",15,11],["cp",16,12],["cp",17,13],["cp",18,14],["cp",19,15],["cp",3,16],["cp",21,17],["cp",22,18],["cp",0,19],["cp",1,20],["cp",1,21],["cp",1,22],["cp",1,23],[24,0,5,["a","0"]]],"B":[["cp",23,0],["cp",6,2],["cp",7,3],["cp",3,5],["cp",1,6],["cp",1,7],["cp",12,8],["cp",1,9],["cp",8,11],["cp",16,12],["cp",17,13],["cp",18,14],["cp",3,15],["cp",3,16],["cp",21,17],["cp",22,18],["cp",0,19],[20,0,"1"],[20,13,18,["a","0"]],["cp",20,21],["cp",20,22],["cp",20,23]],"t":1305118108.76419},{"y":25,"x":7,"t":1305118108.85191},{"y":25,"b":[[24,6,26,["a","7"]]],"d":[[24,0,26,"No next tag (press RETURN)"]],"x":28,"f":[[24,6,26,["a","0"]]],"t":1305118108.98764},{"y":23,"b":[[22,0,5,["a","7"]]],"d":[[22,0,4,"(END)"]],"x":7,"f":[[22,0,5,["a","0"]]],"B":[["cp",1,22]],"t":1305118109.04372},{"y":23,"b":[["cp",0,22]],"d":[[22,["a"," "]]],"x":1,"f":[["cp",1,22]],"t":1305118109.50772},{"y":25,"b":[[24,6,26,["a","0"]]],"d":[["cp",20,0],["cp",0,22],[24,0,26,"(END) "]],"x":7,"f":[["cp",1,0],[24,6,26,["a","7"]]],"B":[["cp",20,0],["cp",0,22]],"t":1305118109.50807},{"y":25,"x":7,"t":1305118109.69968},{"y":25,"b":[[24,6,41,["a","7"]]],"d":[[24,0,41,"Cannot edit standard input (press RETURN)"]],"x":43,"f":[[24,6,41,["a","0"]]],"t":1305118109.88366},{"d":[["r","~ "],["r","...skipping... "],["r","* 6652a0d (HEAD, origin/master, origin/HEAD, master) Add Images for git treevi "],["r","* 8199323 (tag: A) Commit A: merge B with C. "],["r","|\\ "],["r","| * 0cd7f2e (tag: C) commit C. "],["r","| | "],["r","| \\ "],["r","*-. \\ 776c5c9 (tag: B) Commit B: merge D with E and F "],["r","|\\ \\ \\ "],["r","| | |/ "],["r","| | * beb30ca (tag: F) Commit F: merge I with J "],["r","| | |\\ "],["r","| | | * 3252fcc (tag: J) commit J. "],["r","| | * 634836c (tag: I) commit I. "],["r","| * 83be369 (tag: E) commit E. "],["r","* 212efce (tag: D) Commit D: merge G with H "],["r","|\\ "],["r","| * 2ab52ad (tag: H) commit H. "],["r","* e80aa74 (tag: G) commit G. "],["r","~ "],"d",["a"," "],["r","~ "],["r","Cannot edit standard input (press RETURN) "]],"x":1,"B":[["r","10000000000000000000000000000000000000000000000000000000000000000000000000000000"],["a","0"],["r","00000000000111100111111111111100111111111110011111100000000000000000000000000000"],["r","00000000000001111110000000000000000000000000000000000000000000000000000000000000"],["a","0"],["r","00000000000001111110000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d",["r","00000000000000000111111000000000000000000000000000000000000000000000000000000000"],["a","0"],"d",["r","00000000000000000111111000000000000000000000000000000000000000000000000000000000"],["r","00001100000000000000000000000000000000000000000000000000000000000000000000000000"],["r","00001000000000000111111000000000000000000000000000000000000000000000000000000000"],["r","00000000000000011111100000000000000000000000000000000000000000000000000000000000"],["r","00000000000001111110000000000000000000000000000000000000000000000000000000000000"],"d",["r","11000000000000000000000000000000000000000000000000000000000000000000000000000000"],["r","10000000000001111110000000000000000000000000000000000000000000000000000000000000"],["r","00000000000111111000000000000000000000000000000000000000000000000000000000000000"],["r","10000000000000000000000000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],["r","10000000000000000000000000000000000000000000000000000000000000000000000000000000"],["a","0"]],"y":23,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["r","77777777777777777777777777777777777777777700000000000000000000000000000000000000"]],"f":[["a","7"],"d",["r","77333333333666633111111111111133111111111113322222237777777777777777777777777777"],["r","77773333333333333333777777777777777777777777777777777777777777777777777777777777"],["r","23777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","27773333333333333333777777777777777777777777777777777777777777777777777777777777"],["r","27377777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","27737777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","73373777333333333333333377777777777777777777777777777777777777777777777777777777"],["r","45737377777777777777777777777777777777777777777777777777777777777777777777777777"],["r","47573377777777777777777777777777777777777777777777777777777777777777777777777777"],["r","47577777333333333333333377777777777777777777777777777777777777777777777777777777"],["r","47571277777777777777777777777777777777777777777777777777777777777777777777777777"],["r","47571777333333333333333377777777777777777777777777777777777777777777777777777777"],["r","47577733333333333333337777777777777777777777777777777777777777777777777777777777"],["r","47773333333333333333777777777777777777777777777777777777777777777777777777777777"],["r","77773333333333333333777777777777777777777777777777777777777777777777777777777777"],["r","34777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","37773333333333333333777777777777777777777777777777777777777777777777777777777777"],["r","77333333333333333377777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d",["r","00000000000000000000000000000000000000000077777777777777777777777777777777777777"]],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305118110.62048,"i":1},{"y":23,"d":[[22,0,8,"bash-3.2$"]],"x":11,"t":1305118110.6238},{"y":23,"d":[[22,10,"g"]],"x":12,"t":1305118111.38763},{"y":23,"d":[[22,11,"i"]],"x":13,"t":1305118111.49975},{"y":23,"d":[[22,12,"t"]],"x":14,"t":1305118111.58779},{"y":23,"x":15,"t":1305118111.65182},{"y":23,"d":[[22,14,"r"]],"x":16,"t":1305118112.8036},{"y":23,"d":[[22,15,"e"]],"x":17,"t":1305118112.97169},{"y":23,"d":[[22,16,"v"]],"x":18,"t":1305118113.10753},{"y":23,"d":[[22,17,"-"]],"x":19,"t":1305118113.2597},{"y":23,"d":[[22,18,"p"]],"x":20,"t":1305118113.53968},{"y":23,"d":[[22,19,"a"]],"x":21,"t":1305118113.64348},{"y":23,"d":[[22,20,"r"]],"x":22,"t":1305118113.75547},{"y":23,"d":[[22,21,"s"]],"x":23,"t":1305118113.96349},{"y":23,"d":[[22,22,"e"]],"x":24,"t":1305118114.14745},{"y":23,"x":25,"t":1305118114.3638},{"y":23,"d":[[22,24,"H"]],"x":26,"t":1305118114.75559},{"y":23,"d":[[22,25,"E"]],"x":27,"t":1305118114.81969},{"y":23,"d":[[22,26,"A"]],"x":28,"t":1305118114.97144},{"y":23,"d":[[22,27,"D"]],"x":29,"t":1305118115.07575},{"y":24,"x":1,"t":1305118115.81934},{"y":25,"b":[[24,0,9,["a","0"]]],"d":[[23,0,39,"6652a0dce6a5067732c00ef0a220810a7230655e"],[24,0,9,"bash-3.2$ "]],"x":11,"f":[[24,0,9,["a","7"]]],"B":[["cp",1,23]],"t":1305118115.82574},{"y":25,"b":[[24,10,"0"]],"d":[[24,10,"g"]],"x":12,"f":[[24,10,"7"]],"t":1305118117.70748},{"y":25,"b":[[24,11,"0"]],"d":[[24,11,"i"]],"x":13,"f":[[24,11,"7"]],"t":1305118117.81165},{"y":25,"b":[[24,12,"0"]],"d":[[24,12,"t"]],"x":14,"f":[[24,12,"7"]],"t":1305118117.93141},{"y":25,"b":[[24,13,"0"]],"d":[[24,13," "]],"x":15,"f":[[24,13,"7"]],"t":1305118117.97159},{"y":25,"b":[[24,14,"0"]],"d":[[24,14,"d"]],"x":16,"f":[[24,14,"7"]],"t":1305118118.35585},{"y":25,"b":[[24,15,"0"]],"d":[[24,15,"e"]],"x":17,"f":[[24,15,"7"]],"t":1305118118.50751},{"y":25,"b":[[24,16,"0"]],"d":[[24,16,"s"]],"x":18,"f":[[24,16,"7"]],"t":1305118118.65973},{"y":25,"b":[[24,17,"0"]],"d":[[24,17,"c"]],"x":19,"f":[[24,17,"7"]],"t":1305118118.85964},{"y":25,"b":[[24,18,"0"]],"x":20,"f":[[24,18,"7"]],"t":1305118119.04331},{"y":25,"b":[[24,19,"0"]],"d":[[24,19,"i"]],"x":21,"f":[[24,19,"7"]],"t":1305118119.37131},{"y":25,"b":[[24,20,"0"]],"d":[[24,20,"b"]],"x":22,"f":[[24,20,"7"]],"t":1305118119.51544},{"y":25,"b":[[24,21,"0"]],"d":[[24,21,"e"]],"x":23,"f":[[24,21,"7"]],"t":1305118119.70731},{"y":25,"b":[["cp",24,23],["cp",0,24]],"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",3,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",2,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",0,19],["cp",24,23],["cp",0,24]],"B":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,3],["cp",2,4],["cp",0,5],["cp",8,7],["cp",0,8],["cp",7,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",2,14],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",0,21]],"t":1305118120.65919},{"y":25,"b":[["cp",23,22],["cp",0,23]],"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",2,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,41,"A-1-g6652a0d "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",1,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",23,22],["cp",18,23]],"B":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",2,4],["cp",7,6],["cp",2,7],["cp",6,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",1,13],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",2,20]],"t":1305118120.66948},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305118122.97946},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305118123.05912},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305118123.17128},{"y":25,"x":15,"t":1305118123.22751},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305118123.41922},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305118123.57942},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305118123.76341},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305118123.85951},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305118124.10741},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305118124.18706},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305118124.30805},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305118124.47507},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305118124.58741},{"y":25,"x":25,"t":1305118124.70722},{"y":25,"d":[[24,24,"A"]],"x":26,"t":1305118126.10698},{"y":25,"d":[[24,25,"-"]],"x":27,"t":1305118126.79499},{"y":25,"d":[[24,26,"1"]],"x":28,"t":1305118126.93095},{"y":25,"d":[[24,27,"-"]],"x":29,"t":1305118127.75515},{"y":25,"d":[[24,28,"g"]],"x":30,"t":1305118128.35493},{"y":25,"d":[[24,29,"6"]],"x":31,"t":1305118129.01897},{"y":25,"d":[[24,30,"6"]],"x":32,"t":1305118129.20307},{"y":25,"d":[[24,31,"5"]],"x":33,"t":1305118131.05077},{"y":25,"d":[[24,32,"2"]],"x":34,"t":1305118131.50699},{"y":25,"d":[[24,33,"a"]],"x":35,"t":1305118133.05874},{"y":25,"d":[[24,34,"0"]],"x":36,"t":1305118134.97081},{"y":25,"d":[[24,35,"d"]],"x":37,"t":1305118135.06658},{"y":25,"b":[["cp",22,21],["cp",0,22]],"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",1,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",22,21],["cp",17,22]],"B":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",1,3],["cp",6,5],["cp",1,6],["cp",5,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",0,12],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",1,19]],"t":1305118135.35481},{"y":25,"b":[["cp",21,20],["cp",0,21]],"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",19,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",21,20],["cp",16,21]],"B":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",5,4],["cp",0,5],["cp",4,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",1,11],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",0,18]],"t":1305118135.36224},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305118138.60267},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305118138.6907},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305118138.8585},{"y":25,"x":15,"t":1305118138.89883},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305118139.17059},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305118139.33874},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305118139.52265},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305118139.62663},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305118139.89864},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305118140.00241},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305118140.11465},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305118140.26682},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305118140.41863},{"y":25,"x":25,"t":1305118140.57048},{"y":25,"d":[[24,24,"m"]],"x":26,"t":1305118141.03443},{"y":25,"d":[[24,25,"a"]],"x":27,"t":1305118141.12243},{"y":25,"d":[[24,26,"s"]],"x":28,"t":1305118141.29868},{"y":25,"d":[[24,27,"t"]],"x":29,"t":1305118141.41033},{"y":25,"d":[[24,28,"e"]],"x":30,"t":1305118141.58679},{"y":25,"d":[[24,29,"r"]],"x":31,"t":1305118141.65077},{"y":25,"x":32,"t":1305118141.9304},{"y":25,"d":[[24,31,"r"]],"x":33,"t":1305118142.1627},{"y":25,"d":[[24,32,"e"]],"x":34,"t":1305118142.29832},{"y":25,"d":[[24,33,"f"]],"x":35,"t":1305118142.44259},{"y":25,"d":[[24,34,"s"]],"x":36,"t":1305118142.61849},{"y":25,"d":[[24,35,"/"]],"x":37,"t":1305118142.75437},{"y":25,"d":[[24,36,"h"]],"x":38,"t":1305118142.97037},{"y":25,"d":[[24,37,"e"]],"x":39,"t":1305118143.0343},{"y":25,"d":[[24,38,"a"]],"x":40,"t":1305118143.17864},{"y":25,"d":[[24,39,"d"]],"x":41,"t":1305118143.29054},{"y":25,"d":[[24,40,"s"]],"x":42,"t":1305118143.49038},{"y":25,"d":[[24,41,"/"]],"x":43,"t":1305118143.84248},{"y":25,"d":[[24,42,"m"]],"x":44,"t":1305118144.14631},{"y":25,"d":[[24,43,"a"]],"x":45,"t":1305118144.21865},{"y":25,"d":[[24,44,"s"]],"x":46,"t":1305118144.3942},{"y":25,"d":[[24,45,"t"]],"x":47,"t":1305118144.51425},{"d":[["r","|\\ "],["r","| * 0cd7f2e (tag: C) commit C. "],["r","| | "],["r","| \\ "],["r","*-. \\ 776c5c9 (tag: B) Commit B: merge D with E and F "],["r","|\\ \\ \\ "],["r","| | |/ "],["r","| | * beb30ca (tag: F) Commit F: merge I with J "],["r","| | |\\ "],["r","| | | * 3252fcc (tag: J) commit J. "],["r","| | * 634836c (tag: I) commit I. "],["r","| * 83be369 (tag: E) commit E. "],["r","* 212efce (tag: D) Commit D: merge G with H "],["r","|\\ "],["r","| * 2ab52ad (tag: H) commit H. "],["r","* e80aa74 (tag: G) commit G. "],["r","~ "],"d",["r","bash-3.2$ git rev-parse HEAD "],["r","6652a0dce6a5067732c00ef0a220810a7230655e "],["r","bash-3.2$ git describenput (press RETURN) "],["r","A-1-g6652a0d "],["r","bash-3.2$ git rev-parse A-1-g6652a0d "],["r","6652a0dce6a5067732c00ef0a220810a7230655e "],["r","bash-3.2$ git rev-parse master refs/heads/maste "]],"x":48,"B":[["a","0"],["r","00000000000001111110000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d",["r","00000000000000000111111000000000000000000000000000000000000000000000000000000000"],["a","0"],"d",["r","00000000000000000111111000000000000000000000000000000000000000000000000000000000"],["r","00001100000000000000000000000000000000000000000000000000000000000000000000000000"],["r","00001000000000000111111000000000000000000000000000000000000000000000000000000000"],["r","00000000000000011111100000000000000000000000000000000000000000000000000000000000"],["r","00000000000001111110000000000000000000000000000000000000000000000000000000000000"],"d",["r","11000000000000000000000000000000000000000000000000000000000000000000000000000000"],["r","10000000000001111110000000000000000000000000000000000000000000000000000000000000"],["r","00000000000111111000000000000000000000000000000000000000000000000000000000000000"],["r","10000000000000000000000000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],"d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["r","00000000000000000000007777777777777777777700000000000000000000000000000000000000"],["a","0"],"d","d","d"],"f":[["r","23777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","27773333333333333333777777777777777777777777777777777777777777777777777777777777"],["r","27377777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","27737777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","73373777333333333333333377777777777777777777777777777777777777777777777777777777"],["r","45737377777777777777777777777777777777777777777777777777777777777777777777777777"],["r","47573377777777777777777777777777777777777777777777777777777777777777777777777777"],["r","47577777333333333333333377777777777777777777777777777777777777777777777777777777"],["r","47571277777777777777777777777777777777777777777777777777777777777777777777777777"],["r","47571777333333333333333377777777777777777777777777777777777777777777777777777777"],["r","47577733333333333333337777777777777777777777777777777777777777777777777777777777"],["r","47773333333333333333777777777777777777777777777777777777777777777777777777777777"],["r","77773333333333333333777777777777777777777777777777777777777777777777777777777777"],["r","34777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","37773333333333333333777777777777777777777777777777777777777777777777777777777777"],["r","77333333333333333377777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d",["r","77777777777777777777770000000000000000000077777777777777777777777777777777777777"],["a","7"],"d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305118144.69034,"i":1},{"y":25,"d":[[24,47,"r"]],"x":49,"t":1305118144.7626},{"y":25,"b":[["cp",20,19],["cp",0,20]],"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",18,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",20,19],["cp",15,20]],"B":[["cp",1,0],["cp",2,1],["cp",4,3],["cp",1,4],["cp",3,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",0,10],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",1,17]],"t":1305118144.92247},{"y":25,"b":[["cp",19,17],["cp",0,19]],"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",13,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",16,20],["cp",23,21],["cp",16,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",13,14],["cp",19,17],["cp",13,19]],"B":[["cp",1,0],["cp",3,1],["cp",0,3],["cp",1,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",8,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",13,14],["cp",0,15],["cp",0,16]],"t":1305118144.92847},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305118146.34632},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305118146.41015},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305118146.57051},{"y":25,"x":15,"t":1305118146.61045},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305118147.27413},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305118147.41822},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305118147.59418},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305118147.7382},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305118147.98625},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305118148.09044},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305118148.18611},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305118148.34635},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305118148.45034},{"y":25,"x":25,"t":1305118148.58622},{"y":25,"d":[[24,24,"6"]],"x":26,"t":1305118150.69839},{"y":25,"d":[[24,25,"6"]],"x":27,"t":1305118150.85816},{"y":25,"d":[[24,26,"5"]],"x":28,"t":1305118151.07404},{"y":25,"d":[[24,27,"2"]],"x":29,"t":1305118153.36205},{"y":25,"x":30,"t":1305118153.57815},{"y":25,"d":[[24,29,"6"]],"x":31,"t":1305118154.72205},{"y":25,"d":[[24,30,"6"]],"x":32,"t":1305118154.88191},{"y":25,"d":[[24,31,"5"]],"x":33,"t":1305118155.10603},{"y":25,"d":[[24,32,"2"]],"x":34,"t":1305118155.64994},{"y":25,"d":[[24,33,"a"]],"x":35,"t":1305118156.12982},{"y":25,"d":[[24,34,"0"]],"x":36,"t":1305118156.58583},{"y":25,"d":[[24,35,"d"]],"x":37,"t":1305118157.16975},{"y":25,"d":[[24,36,"c"]],"x":38,"t":1305118157.43399},{"y":25,"d":[[24,37,"e"]],"x":39,"t":1305118157.88205},{"y":25,"b":[["cp",17,16],["cp",0,17]],"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",15,19],["cp",21,20],["cp",15,21],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",17,16],["cp",12,17]],"B":[["cp",1,0],["cp",2,1],["cp",0,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",1,14]],"t":1305118158.04169},{"y":25,"b":[["cp",16,14],["cp",0,16]],"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",10,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",17,15],["cp",18,16],["cp",13,17],["cp",20,18],["cp",13,20],["cp",23,21],["cp",13,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",10,11],["cp",16,14],["cp",10,16]],"B":[["cp",1,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",5,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",10,11],["cp",0,12],["cp",0,13]],"t":1305118158.04778},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305118160.43367},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305118160.52975},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305118160.64991},{"y":25,"x":15,"t":1305118160.68204},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305118160.86575},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305118161.02572},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305118161.21794},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305118161.78596},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305118162.04174},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305118162.12171},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305118162.2017},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305118162.37765},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305118162.4815},{"y":25,"x":25,"t":1305118162.58582},{"y":25,"d":[[24,24,"A"]],"x":26,"t":1305118163.15392},{"y":25,"x":27,"t":1305118163.37774},{"y":25,"d":[[24,26,"r"]],"x":28,"t":1305118163.61876},{"y":25,"d":[[24,27,"e"]],"x":29,"t":1305118163.75352},{"y":25,"d":[[24,28,"f"]],"x":30,"t":1305118163.88992},{"y":25,"d":[[24,29,"s"]],"x":31,"t":1305118164.05757},{"y":25,"d":[[24,30,"/"]],"x":32,"t":1305118164.19367},{"y":25,"d":[[24,31,"t"]],"x":33,"t":1305118164.32963},{"y":25,"d":[[24,32,"a"]],"x":34,"t":1305118164.48974},{"y":25,"d":[[24,33,"g"]],"x":35,"t":1305118164.57782},{"y":25,"d":[[24,34,"s"]],"x":36,"t":1305118164.73754},{"y":25,"d":[[24,35,"/"]],"x":37,"t":1305118165.13737},{"y":25,"d":[[24,36,"A"]],"x":38,"t":1305118166.16174},{"y":25,"x":39,"t":1305118166.66578},{"y":25,"d":[[24,38,"t"]],"x":40,"t":1305118167.69743},{"y":25,"d":[[24,39,"a"]],"x":41,"t":1305118167.84937},{"y":25,"d":[[24,40,"g"]],"x":42,"t":1305118167.97746},{"y":25,"d":[[24,41,"s"]],"x":43,"t":1305118168.13754},{"y":25,"d":[[24,42,"/"]],"x":44,"t":1305118168.28936},{"y":25,"d":[[24,43,"A"]],"x":45,"t":1305118168.61766},{"y":25,"b":[["cp",14,13],["cp",0,14]],"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",12,16],["cp",18,17],["cp",12,18],["cp",21,20],["cp",12,21],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",14,13],["cp",9,14]],"B":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",12,11]],"t":1305118168.85751},{"y":25,"b":[["cp",13,10],["cp",0,13]],"d":[["cp",3,0],["cp",4,1],["cp",5,2],["cp",6,3],["cp",7,4],["cp",8,5],["cp",9,6],["cp",6,7],["cp",11,8],["cp",12,9],["cp",13,10],["cp",14,11],["cp",15,12],["cp",9,13],["cp",17,14],["cp",9,15],["cp",20,17],["cp",23,20],[21,0,39,"c9b03a208288aebdbfe8d84aeb984952a16da3f2"],["cp",21,22],["cp",21,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,0],["cp",4,1],["cp",5,2],["cp",6,3],["cp",7,4],["cp",8,5],["cp",9,6],["cp",6,7],["cp",6,8],["cp",13,10],["cp",6,13]],"B":[["cp",3,0],["cp",4,1],["cp",1,2],["cp",6,3],["cp",7,4],["cp",8,5],["cp",9,6],["cp",6,7],["cp",11,8],["cp",8,9],["cp",8,10]],"t":1305118168.86437},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305118174.3694},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305118174.4576},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305118174.54654},{"y":25,"x":15,"t":1305118174.64115},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305118174.78523},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305118174.94506},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305118175.13719},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305118175.40928},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305118175.64122},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305118175.74538},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305118175.82515},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305118175.97727},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305118176.06524},{"y":25,"x":25,"t":1305118176.15315},{"y":25,"d":[[24,24,"A"]],"x":26,"t":1305118176.53749},{"y":25,"d":[[24,25,"^"]],"x":27,"t":1305118178.49702},{"y":25,"d":[[24,26,"{"]],"x":28,"t":1305118178.96905},{"y":25,"d":[[24,27,"}"]],"x":29,"t":1305118179.13698},{"y":25,"x":30,"t":1305118179.40925},{"y":25,"d":[[24,29,"a"]],"x":31,"t":1305118180.08884},{"y":25,"d":[[24,30,"^"]],"x":32,"t":1305118180.90507},{"y":25,"d":[[24,30," "]],"x":31,"t":1305118181.35298},{"y":25,"d":[[24,29," "]],"x":30,"t":1305118181.50492},{"y":25,"d":[[24,29,"a"]],"x":31,"t":1305118181.64908},{"y":25,"d":[[24,29," "]],"x":30,"t":1305118182.00936},{"y":25,"d":[[24,29,"A"]],"x":31,"t":1305118182.30511},{"y":25,"d":[[24,30,"^"]],"x":32,"t":1305118183.13696},{"y":25,"d":[[24,31,"{"]],"x":33,"t":1305118183.64128},{"y":25,"d":[[24,32,"-"]],"x":34,"t":1305118185.22499},{"y":25,"d":[[24,32," "]],"x":33,"t":1305118185.79268},{"d":[["r","| | * 634836c (tag: I) commit I. "],["r","| * 83be369 (tag: E) commit E. "],["r","* 212efce (tag: D) Commit D: merge G with H "],["r","|\\ "],["r","| * 2ab52ad (tag: H) commit H. "],["r","* e80aa74 (tag: G) commit G. "],["r","~ "],"d",["r","bash-3.2$ git rev-parse HEAD "],["r","6652a0dce6a5067732c00ef0a220810a7230655e "],["r","bash-3.2$ git describenput (press RETURN) "],["r","A-1-g6652a0d "],["r","bash-3.2$ git rev-parse A-1-g6652a0d "],["r","6652a0dce6a5067732c00ef0a220810a7230655e "],["r","bash-3.2$ git rev-parse master refs/heads/master "],["r","6652a0dce6a5067732c00ef0a220810a7230655e "],"d",["r","bash-3.2$ git rev-parse 6652 6652a0dce "],["r","6652a0dce6a5067732c00ef0a220810a7230655e "],"d",["r","bash-3.2$ git rev-parse A refs/tags/A tags/A "],["r","c9b03a208288aebdbfe8d84aeb984952a16da3f2 "],"d","d",["r","bash-3.2$ git rev-parse A^{} A^{c "]],"x":34,"B":[["r","00000000000000011111100000000000000000000000000000000000000000000000000000000000"],["r","00000000000001111110000000000000000000000000000000000000000000000000000000000000"],"d",["r","11000000000000000000000000000000000000000000000000000000000000000000000000000000"],["r","10000000000001111110000000000000000000000000000000000000000000000000000000000000"],["r","00000000000111111000000000000000000000000000000000000000000000000000000000000000"],["r","10000000000000000000000000000000000000000000000000000000000000000000000000000000"],"d",["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d",["r","00000000000000000000007777777777777777777700000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","47577733333333333333337777777777777777777777777777777777777777777777777777777777"],["r","47773333333333333333777777777777777777777777777777777777777777777777777777777777"],["r","77773333333333333333777777777777777777777777777777777777777777777777777777777777"],["r","34777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","37773333333333333333777777777777777777777777777777777777777777777777777777777777"],["r","77333333333333333377777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d",["r","77777777777777777777770000000000000000000077777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305118186.20876,"i":1},{"y":25,"d":[[24,33,"o"]],"x":35,"t":1305118186.2729},{"y":25,"d":[[24,34,"m"]],"x":36,"t":1305118186.44131},{"y":25,"d":[[24,35,"m"]],"x":37,"t":1305118186.60916},{"y":25,"d":[[24,36,"i"]],"x":38,"t":1305118186.76869},{"y":25,"d":[[24,37,"t"]],"x":39,"t":1305118186.84872},{"y":25,"d":[[24,38,"}"]],"x":40,"t":1305118187.66482},{"y":25,"x":41,"t":1305118187.83284},{"y":25,"d":[[24,40,"A"]],"x":42,"t":1305118188.40098},{"y":25,"d":[[24,41,"^"]],"x":43,"t":1305118189.33724},{"y":25,"d":[[24,42,"0"]],"x":44,"t":1305118189.78466},{"y":25,"b":[["cp",10,9],["cp",0,10]],"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",8,12],["cp",14,13],["cp",8,14],["cp",17,16],["cp",8,17],["cp",20,19],["cp",21,20],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",10,9],["cp",5,10]],"B":[["cp",1,0],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",8,7]],"t":1305118191.05641},{"y":25,"b":[["cp",9,6],["cp",0,9]],"d":[["cp",3,0],["cp",4,1],["cp",5,2],["cp",2,3],["cp",7,4],["cp",8,5],["cp",9,6],["cp",10,7],["cp",11,8],["cp",5,9],["cp",13,10],["cp",5,11],["cp",16,13],["cp",19,16],["cp",20,17],["cp",17,18],["cp",17,19],["cp",23,20],[21,0,38,"81993234fc12a325d303eccea20f6fd62941271"],["cp",21,22],["cp",21,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,0],["cp",4,1],["cp",5,2],["cp",2,3],["cp",2,4],["cp",9,6],["cp",2,9]],"B":[["cp",3,0],["cp",4,1],["cp",5,2],["cp",2,3],["cp",7,4],["cp",4,5],["cp",4,6]],"t":1305118191.06293},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305118194.92863},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305118194.97653},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305118195.08872},{"y":25,"x":15,"t":1305118195.18454},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305118195.39235},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305118195.56868},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305118195.77628},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305118196.14456},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305118196.44832},{"y":25,"d":[[24,19,"["]],"x":21,"t":1305118196.46423},{"y":25,"d":[[24,20,"a"]],"x":22,"t":1305118196.55225},{"y":25,"d":[[24,21,"r"]],"x":23,"t":1305118196.63243},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305118196.8003},{"y":25,"d":[[24,22," "]],"x":23,"t":1305118197.10445},{"y":25,"d":[[24,21," "]],"x":22,"t":1305118197.28003},{"y":25,"d":[[24,20," "]],"x":21,"t":1305118197.45612},{"y":25,"d":[[24,19," "]],"x":20,"t":1305118197.62422},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305118197.72821},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305118197.81663},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305118198.0884},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305118198.25603},{"y":25,"x":25,"t":1305118198.41624},{"y":25,"d":[[24,24,"A"]],"x":26,"t":1305118199.43236},{"y":25,"d":[[24,25,"^"]],"x":27,"t":1305118200.24012},{"y":25,"x":28,"t":1305118200.44056},{"y":25,"d":[[24,27,"a"]],"x":29,"t":1305118200.64829},{"y":25,"d":[[24,28,"^"]],"x":30,"t":1305118201.51242},{"y":25,"d":[[24,29,"1"]],"x":31,"t":1305118202.67216},{"y":25,"x":32,"t":1305118202.86393},{"y":25,"d":[[24,31,"B"]],"x":33,"t":1305118203.62423},{"y":25,"d":[[24,32,"^"]],"x":34,"t":1305118204.61614},{"y":25,"d":[[24,33,"0"]],"x":35,"t":1305118205.18413},{"y":25,"x":34,"t":1305118207.10423},{"y":25,"x":34,"t":1305118207.53593},{"y":25,"x":34,"t":1305118207.71984},{"y":25,"x":33,"t":1305118207.95185},{"y":25,"x":32,"t":1305118208.35973},{"y":25,"x":30,"t":1305118208.55183},{"y":25,"x":29,"t":1305118208.88816},{"y":25,"x":28,"t":1305118209.42394},{"y":25,"d":[[24,27,"A"]],"x":28,"t":1305118209.91978},{"y":25,"b":[["cp",6,5],["cp",0,6]],"d":[["cp",1,0],["cp",2,1],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",4,8],["cp",10,9],["cp",4,10],["cp",13,12],["cp",4,13],["cp",16,15],["cp",17,16],["cp",20,19],["cp",21,20],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",6,5],["cp",1,6]],"B":[["cp",1,0],["cp",2,1],["cp",4,3]],"t":1305118210.12786},{"y":25,"b":[["cp",5,2],["cp",0,5]],"d":[["cp",3,0],["cp",4,1],["cp",5,2],["cp",6,3],["cp",7,4],["cp",1,5],["cp",9,6],["cp",1,7],["cp",12,9],["cp",15,12],["cp",16,13],["cp",13,14],["cp",13,15],["cp",19,16],["cp",20,17],["cp",17,18],["cp",17,19],["cp",23,20],[21,0,39,"776c5c9da9dcbb7e463c061d965ea47e73853b6e"],["cp",21,22],["cp",21,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",5,2],["cp",0,5]],"B":[["cp",3,0],["cp",0,1],["cp",0,2]],"t":1305118210.13594},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305118212.09566},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305118212.19167},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305118212.28798},{"y":25,"x":15,"t":1305118212.35183},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305118213.23164},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305118213.38355},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305118213.54363},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305118213.67975},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305118213.91161},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305118214.00788},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305118214.46408},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305118214.75163},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305118214.91149},{"y":25,"x":25,"t":1305118215.02478},{"y":25,"d":[[24,24,"A"]],"x":26,"t":1305118216.02541},{"y":25,"d":[[24,25,"^"]],"x":27,"t":1305118217.14364},{"y":25,"d":[[24,26,"^"]],"x":28,"t":1305118217.32749},{"y":25,"d":[[24,27,"3"]],"x":29,"t":1305118218.34387},{"y":25,"d":[[24,28,"$"]],"x":30,"t":1305118220.84762},{"y":25,"d":[[24,28," "]],"x":29,"t":1305118221.3593},{"y":25,"d":[[24,28,"^"]],"x":30,"t":1305118222.51947},{"y":25,"d":[[24,29,"2"]],"x":31,"t":1305118223.05566},{"y":25,"x":32,"t":1305118224.27128},{"y":25,"d":[[24,31,"F"]],"x":33,"t":1305118224.62336},{"y":25,"d":[[24,32,"^"]],"x":34,"t":1305118225.39157},{"y":25,"d":[[24,33,"2"]],"x":35,"t":1305118226.05549},{"y":25,"x":36,"t":1305118226.69514},{"y":25,"d":[[24,35,"J"]],"x":37,"t":1305118227.18327},{"y":25,"d":[[24,36,"^"]],"x":38,"t":1305118228.43933},{"y":25,"d":[[24,37,"{"]],"x":39,"t":1305118228.96722},{"y":25,"d":[[24,38,"}"]],"x":40,"t":1305118229.15089},{"y":25,"b":[["cp",2,1],["cp",0,2]],"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",6,5],["cp",0,6],["cp",9,8],["cp",0,9],["cp",12,11],["cp",13,12],["cp",16,15],["cp",17,16],["cp",20,19],["cp",21,20],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",0,2]],"t":1305118230.23108},{"y":25,"b":[["cp",0,1]],"d":[["cp",3,0],["cp",4,1],["cp",5,2],["cp",1,3],["cp",8,5],["cp",11,8],["cp",12,9],["cp",9,10],["cp",9,11],["cp",15,12],["cp",16,13],["cp",13,14],["cp",13,15],["cp",19,16],["cp",20,17],["cp",17,18],["cp",17,19],["cp",23,20],[21,0,39,"3252fcce40949a4a622a1ac012cb120d6b340ac8"],["cp",21,22],["cp",21,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,1]],"t":1305118230.24079},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305118233.38315},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305118233.46274},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305118233.55884},{"y":25,"x":15,"t":1305118233.61495},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305118233.78292},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305118233.91884},{"y":25,"d":[[24,16,"-"]],"x":18,"t":1305118234.27091},{"y":25,"d":[[24,16," "]],"x":17,"t":1305118234.64675},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305118234.7511},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305118234.93483},{"y":25,"d":[[24,18,"a"]],"x":20,"t":1305118235.37517},{"d":[["r","bash-3.2$ git rev-parse A-1-g6652a0d "],["r","6652a0dce6a5067732c00ef0a220810a7230655e "],["r","bash-3.2$ git rev-parse master refs/heads/master "],["r","6652a0dce6a5067732c00ef0a220810a7230655e "],"d",["r","bash-3.2$ git rev-parse 6652 6652a0dce "],["r","6652a0dce6a5067732c00ef0a220810a7230655e "],"d",["r","bash-3.2$ git rev-parse A refs/tags/A tags/A "],["r","c9b03a208288aebdbfe8d84aeb984952a16da3f2 "],"d","d",["r","bash-3.2$ git rev-parse A^{} A^{commit} A^0 "],["r","81993234fc12a325d303eccea20f6fd629412712 "],"d","d",["r","bash-3.2$ git rev-parse A^ A^1 B^0 "],["r","776c5c9da9dcbb7e463c061d965ea47e73853b6e "],"d","d",["r","bash-3.2$ git rev-parse A^^3^2 F^2 J^{} "],["r","3252fcce40949a4a622a1ac012cb120d6b340ac8 "],"d","d",["r","bash-3.2$ git rev-ar "]],"x":21,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305118235.50284,"i":1},{"y":25,"d":[[24,19," "]],"x":20,"t":1305118235.75088},{"y":25,"d":[[24,18," "]],"x":19,"t":1305118235.93481},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305118236.15868},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305118236.25474},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305118236.36677},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305118236.55062},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305118236.7266},{"y":25,"x":25,"t":1305118236.83095},{"y":25,"d":[[24,24,"A"]],"x":26,"t":1305118238.1908},{"y":25,"d":[[24,25,"~"]],"x":27,"t":1305118238.76705},{"y":25,"d":[[24,26,"3"]],"x":28,"t":1305118239.40688},{"y":25,"x":29,"t":1305118240.07882},{"y":25,"d":[[24,28,"A"]],"x":30,"t":1305118240.68689},{"y":25,"d":[[24,29,"^"]],"x":31,"t":1305118242.51873},{"y":25,"d":[[24,30,"^"]],"x":32,"t":1305118242.67875},{"y":25,"d":[[24,31,"^"]],"x":33,"t":1305118242.83861},{"y":25,"x":34,"t":1305118243.47846},{"y":25,"d":[[24,33,"G"]],"x":35,"t":1305118244.29461},{"y":25,"d":[[24,34,"^"]],"x":36,"t":1305118244.99875},{"y":25,"d":[[24,35,"0"]],"x":37,"t":1305118245.63882},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",5,4],["cp",0,5],["cp",8,7],["cp",9,8],["cp",12,11],["cp",13,12],["cp",16,15],["cp",17,16],["cp",20,19],["cp",21,20],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118246.43855},{"y":25,"d":[["cp",4,1],["cp",7,4],["cp",8,5],["cp",5,6],["cp",5,7],["cp",11,8],["cp",12,9],["cp",9,10],["cp",9,11],["cp",15,12],["cp",16,13],["cp",13,14],["cp",13,15],["cp",19,16],["cp",20,17],["cp",17,18],["cp",17,19],["cp",23,20],[21,0,39,"e80aa7481beda65ae00e35afc4bc4b171f9b0ebf"],["cp",21,22],["cp",21,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118246.44669},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305118249.01414},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305118249.07844},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305118249.18214},{"y":25,"x":15,"t":1305118249.25416},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305118249.40637},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305118249.56618},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305118249.74233},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305118249.88613},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305118250.11821},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305118250.23039},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305118250.38208},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305118250.54223},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305118250.68626},{"y":25,"x":25,"t":1305118250.79043},{"y":25,"d":[[24,24,"A"]],"x":26,"t":1305118251.69439},{"y":25,"d":[[24,25,"^"]],"x":27,"t":1305118252.27812},{"y":25,"d":[[24,26,"{"]],"x":28,"t":1305118253.11028},{"y":25,"d":[[24,27,"g"]],"x":29,"t":1305118253.33446},{"y":25,"d":[[24,28,"r"]],"x":30,"t":1305118253.57409},{"y":25,"d":[[24,28," "]],"x":29,"t":1305118253.90997},{"y":25,"d":[[24,27," "]],"x":28,"t":1305118254.06214},{"y":25,"d":[[24,27,"t"]],"x":29,"t":1305118254.13433},{"y":25,"d":[[24,28,"r"]],"x":30,"t":1305118254.28668},{"y":25,"d":[[24,29,"e"]],"x":31,"t":1305118254.43799},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305118254.61403},{"y":25,"d":[[24,31,"}"]],"x":33,"t":1305118255.19824},{"y":25,"x":34,"t":1305118256.35027},{"y":25,"d":[[24,33,"A"]],"x":35,"t":1305118256.75026},{"y":25,"d":[[24,34,":"]],"x":36,"t":1305118257.26198},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",4,3],["cp",5,4],["cp",8,7],["cp",9,8],["cp",12,11],["cp",13,12],["cp",16,15],["cp",17,16],["cp",20,19],["cp",21,20],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118257.58197},{"y":25,"d":[["cp",1,0],["cp",3,1],["cp",4,2],["cp",2,3],["cp",7,5],["cp",8,6],["cp",6,7],["cp",11,9],["cp",12,10],["cp",10,11],["cp",15,13],["cp",16,14],["cp",14,15],["cp",19,17],["cp",20,18],["cp",18,19],["cp",23,21],[22,0,39,"95ab9e7db14ca113d5548dc20a4872950e8e08c0"],["cp",22,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118257.58976},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305118259.63117},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305118259.71796},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305118259.84601},{"y":25,"x":15,"t":1305118260.04607},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305118260.51783},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305118260.6698},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305118260.83774},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305118260.95787},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305118261.22191},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305118261.34978},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305118261.51005},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305118261.70967},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305118261.8379},{"y":25,"x":25,"t":1305118262.0216},{"y":25,"d":[[24,24,"A"]],"x":26,"t":1305118263.12585},{"y":25,"d":[[24,25,"^"]],"x":27,"t":1305118263.69378},{"y":25,"d":[[24,26,"{"]],"x":28,"t":1305118264.06983},{"y":25,"d":[[24,27,"t"]],"x":29,"t":1305118264.38964},{"y":25,"d":[[24,28,"g"]],"x":30,"t":1305118264.3981},{"y":25,"d":[[24,29,"r"]],"x":31,"t":1305118264.55763},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305118264.74961},{"y":25,"d":[[24,30," "]],"x":31,"t":1305118264.98962},{"y":25,"d":[[24,29," "]],"x":30,"t":1305118265.17339},{"y":25,"d":[[24,28," "]],"x":29,"t":1305118265.32557},{"y":25,"d":[[24,28,"r"]],"x":30,"t":1305118265.47763},{"y":25,"d":[[24,29,"e"]],"x":31,"t":1305118265.62157},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305118265.7819},{"y":25,"d":[[24,31,"}"]],"x":33,"t":1305118266.70968},{"y":25,"x":34,"t":1305118267.38168},{"y":25,"x":33,"t":1305118268.90147},{"y":25,"d":[[24,32,":"]],"x":34,"t":1305118269.44573},{"y":25,"d":[[24,33,"s"]],"x":35,"t":1305118269.74933},{"y":25,"d":[[24,34,"r"]],"x":36,"t":1305118269.8854},{"y":25,"d":[[24,35,"c"]],"x":37,"t":1305118270.08612},{"y":25,"d":[[24,36,"/"]],"x":38,"t":1305118270.60554},{"y":25,"d":[[24,37,"M"]],"x":39,"t":1305118270.99757},{"y":25,"d":[[24,38,"a"]],"x":40,"t":1305118271.13346},{"y":25,"d":[[24,39,"k"]],"x":41,"t":1305118271.23767},{"y":25,"d":[[24,40,"e"]],"x":42,"t":1305118271.34966},{"y":25,"d":[[24,41,"f"]],"x":43,"t":1305118271.53339},{"y":25,"d":[[24,42,"i"]],"x":44,"t":1305118271.58975},{"y":25,"d":[[24,43,"l"]],"x":45,"t":1305118271.66938},{"y":25,"d":[[24,44,"e"]],"x":46,"t":1305118271.8456},{"y":25,"x":47,"t":1305118272.68531},{"y":25,"d":[[24,46,"A"]],"x":48,"t":1305118273.02954},{"y":25,"d":[[24,47,":"]],"x":49,"t":1305118273.45371},{"d":[["r","6652a0dce6a5067732c00ef0a220810a7230655e "],["r","bash-3.2$ git rev-parse A refs/tags/A tags/A "],["r","c9b03a208288aebdbfe8d84aeb984952a16da3f2 "],"d","d",["r","bash-3.2$ git rev-parse A^{} A^{commit} A^0 "],["r","81993234fc12a325d303eccea20f6fd629412712 "],"d","d",["r","bash-3.2$ git rev-parse A^ A^1 B^0 "],["r","776c5c9da9dcbb7e463c061d965ea47e73853b6e "],"d","d",["r","bash-3.2$ git rev-parse A^^3^2 F^2 J^{} "],["r","3252fcce40949a4a622a1ac012cb120d6b340ac8 "],"d","d",["r","bash-3.2$ git rev-parse A~3 A^^^ G^0 "],["r","e80aa7481beda65ae00e35afc4bc4b171f9b0ebf "],"d","d",["r","bash-3.2$ git rev-parse A^{tree} A: "],["r","95ab9e7db14ca113d5548dc20a4872950e8e08c0 "],"d",["r","bash-3.2$ git rev-parse A^{tree}:src/Makefile A:s "]],"x":50,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305118273.77347,"i":1},{"y":25,"d":[[24,49,"r"]],"x":51,"t":1305118273.93317},{"y":25,"d":[[24,50,"c"]],"x":52,"t":1305118274.11754},{"y":25,"d":[[24,51,"/"]],"x":53,"t":1305118274.53324},{"y":25,"d":[[24,52,"M"]],"x":54,"t":1305118274.82173},{"y":25,"d":[[24,53,"a"]],"x":55,"t":1305118274.96537},{"y":25,"d":[[24,54,"k"]],"x":56,"t":1305118275.05338},{"y":25,"d":[[24,55,"e"]],"x":57,"t":1305118275.16537},{"y":25,"d":[[24,56,"f"]],"x":58,"t":1305118275.35737},{"y":25,"d":[[24,57,"i"]],"x":59,"t":1305118275.43738},{"y":25,"d":[[24,58,"l"]],"x":60,"t":1305118275.52534},{"y":25,"d":[[24,59,"e"]],"x":61,"t":1305118275.67725},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",5,4],["cp",6,5],["cp",9,8],["cp",10,9],["cp",13,12],["cp",14,13],["cp",17,16],["cp",18,17],["cp",21,20],["cp",22,21],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118276.37349},{"y":25,"d":[["cp",1,0],["cp",4,2],["cp",5,3],["cp",3,4],["cp",8,6],["cp",9,7],["cp",7,8],["cp",12,10],["cp",13,11],["cp",11,12],["cp",16,14],["cp",17,15],["cp",15,16],["cp",20,18],["cp",21,19],["cp",19,20],["cp",23,21],[22,1,39,"6554c5d4590dbde28183e9a6a3199d526eeb925"],["cp",22,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118276.38234},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305118278.43715},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305118278.51742},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305118278.66912},{"y":25,"x":15,"t":1305118278.70124},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305118278.9172},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305118279.09308},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305118279.27728},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305118279.61307},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305118279.93307},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305118280.06127},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305118280.23718},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305118280.44519},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305118280.59692},{"y":25,"x":25,"t":1305118281.38085},{"y":25,"d":[[24,24,":"]],"x":26,"t":1305118282.07727},{"y":25,"d":[[24,25,"g"]],"x":27,"t":1305118282.53309},{"y":25,"d":[[24,26,"i"]],"x":28,"t":1305118282.63722},{"y":25,"d":[[24,27,"t"]],"x":29,"t":1305118282.7568},{"y":25,"d":[[24,28,"g"]],"x":30,"t":1305118283.3253},{"y":25,"d":[[24,29,"."]],"x":31,"t":1305118283.65305},{"y":25,"d":[[24,30,"p"]],"x":32,"t":1305118283.99693},{"y":25,"d":[[24,31,"n"]],"x":33,"t":1305118284.56516},{"y":25,"d":[[24,32,"g"]],"x":34,"t":1305118284.75689},{"y":25,"x":35,"t":1305118285.30888},{"y":25,"d":[[24,34,"H"]],"x":36,"t":1305118286.40497},{"y":25,"d":[[24,35,"E"]],"x":37,"t":1305118286.50095},{"y":25,"d":[[24,36,"A"]],"x":38,"t":1305118286.66874},{"y":25,"d":[[24,37,"D"]],"x":39,"t":1305118286.80514},{"y":25,"d":[[24,38,":"]],"x":40,"t":1305118287.77296},{"y":25,"d":[[24,39,"g"]],"x":41,"t":1305118288.08492},{"y":25,"d":[[24,40,"i"]],"x":42,"t":1305118288.20474},{"y":25,"d":[[24,41,"t"]],"x":43,"t":1305118288.2848},{"y":25,"d":[[24,42,"g"]],"x":44,"t":1305118288.62883},{"y":25,"d":[[24,43,"."]],"x":45,"t":1305118289.09263},{"y":25,"d":[[24,44,"p"]],"x":46,"t":1305118289.33268},{"y":25,"d":[[24,45,"n"]],"x":47,"t":1305118289.51684},{"y":25,"d":[[24,46,"g"]],"x":48,"t":1305118289.60469},{"y":25,"d":[["cp",2,1],["cp",3,2],["cp",6,5],["cp",7,6],["cp",10,9],["cp",11,10],["cp",14,13],["cp",15,14],["cp",18,17],["cp",19,18],["cp",21,20],["cp",22,21],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118289.7806},{"y":25,"d":[["cp",2,0],["cp",0,1],["cp",5,3],["cp",6,4],["cp",4,5],["cp",9,7],["cp",10,8],["cp",8,9],["cp",13,11],["cp",14,12],["cp",12,13],["cp",17,15],["cp",18,16],["cp",16,17],["cp",20,18],["cp",21,19],["cp",19,20],["cp",23,21],[22,0,39,"fc58966ccc1e5af24c2c9746196550241bc01c50"],["cp",22,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118289.78812},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305118291.6526},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305118291.72488},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305118291.8684},{"y":25,"x":15,"t":1305118291.90068},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305118292.11639},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305118292.28462},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305118292.49271},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305118293.35654},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305118293.68554},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305118293.80465},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305118294.0684},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305118294.26856},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305118294.46062},{"y":25,"x":25,"t":1305118294.63637},{"y":25,"d":[[24,24,"/"]],"x":26,"t":1305118295.44481},{"y":25,"d":[[24,24," "]],"x":25,"t":1305118295.83633},{"y":25,"d":[[24,24,":"]],"x":26,"t":1305118296.18846},{"y":25,"d":[[24,25,"/"]],"x":27,"t":1305118296.57251},{"y":25,"d":[[24,26,"\""]],"x":28,"t":1305118298.04455},{"y":25,"d":[[24,27,"C"]],"x":29,"t":1305118298.46862},{"y":25,"d":[[24,28,"o"]],"x":30,"t":1305118299.04444},{"y":25,"d":[[24,29,"m"]],"x":31,"t":1305118299.21224},{"y":25,"d":[[24,30,"m"]],"x":32,"t":1305118299.36415},{"y":25,"d":[[24,31,"i"]],"x":33,"t":1305118299.53264},{"y":25,"d":[[24,32,"t"]],"x":34,"t":1305118299.60437},{"y":25,"x":35,"t":1305118299.7003},{"y":25,"d":[[24,34,"A"]],"x":36,"t":1305118299.94861},{"y":25,"d":[[24,35,"\""]],"x":37,"t":1305118300.32465},{"y":25,"d":[["cp",3,2],["cp",4,3],["cp",7,6],["cp",8,7],["cp",11,10],["cp",12,11],["cp",15,14],["cp",16,15],["cp",18,17],["cp",19,18],["cp",21,20],["cp",22,21],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118300.53216},{"y":25,"d":[["cp",2,1],["cp",3,2],["cp",6,5],["cp",7,6],["cp",10,9],["cp",11,10],["cp",14,13],["cp",15,14],["cp",17,16],["cp",18,17],["cp",20,19],["cp",21,20],["cp",23,22],["cp",0,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118300.53948},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305118302.71653},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305118302.81232},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305118302.91608},{"y":25,"x":15,"t":1305118302.95611},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305118303.13222},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305118303.28403},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305118303.46811},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305118303.61206},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305118303.88436},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305118303.98816},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305118304.11622},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305118304.26828},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305118304.38033},{"y":25,"x":25,"t":1305118304.5084},{"y":25,"d":[[24,24,"H"]],"x":26,"t":1305118305.16415},{"y":25,"d":[[24,25,"E"]],"x":27,"t":1305118305.22016},{"y":25,"d":[[24,26,"A"]],"x":28,"t":1305118305.3721},{"d":[["r","81993234fc12a325d303eccea20f6fd629412712 "],["r","bash-3.2$ git rev-parse A^ A^1 B^0 "],["r","776c5c9da9dcbb7e463c061d965ea47e73853b6e "],"d","d",["r","bash-3.2$ git rev-parse A^^3^2 F^2 J^{} "],["r","3252fcce40949a4a622a1ac012cb120d6b340ac8 "],"d","d",["r","bash-3.2$ git rev-parse A~3 A^^^ G^0 "],["r","e80aa7481beda65ae00e35afc4bc4b171f9b0ebf "],"d","d",["r","bash-3.2$ git rev-parse A^{tree} A: "],["r","95ab9e7db14ca113d5548dc20a4872950e8e08c0 "],"d",["r","bash-3.2$ git rev-parse A^{tree}:src/Makefile A:src/Makefile "],["r","96554c5d4590dbde28183e9a6a3199d526eeb925 "],"d",["r","bash-3.2$ git rev-parse :gitg.png HEAD:gitg.png "],["r","fc58966ccc1e5af24c2c9746196550241bc01c50 "],"d",["r","bash-3.2$ git rev-parse :/\"Commit A\" "],["r","81993234fc12a325d303eccea20f6fd629412712 "],["r","bash-3.2$ git rev-parse HEAD "]],"x":29,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305118305.5162,"i":1},{"y":25,"d":[[24,28,"@"]],"x":30,"t":1305118306.37233},{"y":25,"d":[[24,29,"{"]],"x":31,"t":1305118306.84437},{"y":25,"d":[[24,30,"0"]],"x":32,"t":1305118307.27615},{"y":25,"d":[[24,31,"}"]],"x":33,"t":1305118308.756},{"y":25,"x":34,"t":1305118309.03612},{"y":25,"d":[[24,33,"m"]],"x":35,"t":1305118309.38806},{"y":25,"d":[[24,34,"a"]],"x":36,"t":1305118309.56392},{"y":25,"d":[[24,35,"s"]],"x":37,"t":1305118309.85184},{"y":25,"d":[[24,36,"t"]],"x":38,"t":1305118310.028},{"y":25,"d":[[24,37,"e"]],"x":39,"t":1305118310.21286},{"y":25,"d":[[24,38,"r"]],"x":40,"t":1305118310.25982},{"y":25,"d":[[24,39,"@"]],"x":41,"t":1305118311.11628},{"y":25,"d":[[24,40,"{"]],"x":42,"t":1305118311.49217},{"y":25,"d":[[24,41,"0"]],"x":43,"t":1305118311.82798},{"y":25,"d":[[24,42,"}"]],"x":44,"t":1305118312.18012},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",5,4],["cp",6,5],["cp",9,8],["cp",10,9],["cp",13,12],["cp",14,13],["cp",16,15],["cp",17,16],["cp",19,18],["cp",20,19],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118312.98795},{"y":25,"d":[["cp",1,0],["cp",4,2],["cp",5,3],["cp",3,4],["cp",8,6],["cp",9,7],["cp",7,8],["cp",12,10],["cp",13,11],["cp",11,12],["cp",15,13],["cp",16,14],["cp",14,15],["cp",18,16],["cp",19,17],["cp",17,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,39,"6652a0dce6a5067732c00ef0a220810a7230655e"],["cp",22,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118312.99555},{"y":25,"d":[["cp",2,1],["cp",3,2],["cp",6,5],["cp",7,6],["cp",10,9],["cp",11,10],["cp",13,12],["cp",14,13],["cp",16,15],["cp",17,16],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],[23,0,39,"bash-3.2$ exit "],[24,["a"," "]]],"x":1,"t":1305118318.60421}]} \ No newline at end of file diff --git a/html/part2/ch11-03-rev-list.html b/html/part2/ch11-03-rev-list.html new file mode 100644 index 000000000..aa9f501b2 --- /dev/null +++ b/html/part2/ch11-03-rev-list.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch11-03-rev-list +json_file: ch11-03-rev-list.json +--- diff --git a/html/part2/ch11-03-rev-list.json b/html/part2/ch11-03-rev-list.json new file mode 100644 index 000000000..568244a45 --- /dev/null +++ b/html/part2/ch11-03-rev-list.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305118352.9488,"i":1},{"y":1,"d":[[0,10,54,"cd /path/to/my/workspace/gitdemo-commit-tree/"]],"x":11,"t":1305118353.42614},{"y":2,"x":1,"t":1305118354.08204},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305118354.0823},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305118355.1061},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305118355.19432},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305118355.33011},{"y":2,"x":15,"t":1305118355.34614},{"y":2,"d":[[1,14,"l"]],"x":16,"t":1305118356.37012},{"y":2,"d":[[1,15,"o"]],"x":17,"t":1305118356.52216},{"y":2,"d":[[1,16,"g"]],"x":18,"t":1305118356.58634},{"y":2,"x":19,"t":1305118356.65808},{"y":2,"d":[[1,18,"-"]],"x":20,"t":1305118356.80209},{"y":2,"d":[[1,19,"-"]],"x":21,"t":1305118356.98606},{"y":2,"d":[[1,20,"o"]],"x":22,"t":1305118357.26604},{"y":2,"d":[[1,21,"n"]],"x":23,"t":1305118357.40998},{"y":2,"d":[[1,22,"e"]],"x":24,"t":1305118357.49837},{"y":2,"d":[[1,23,"l"]],"x":25,"t":1305118357.59413},{"y":2,"d":[[1,24,"i"]],"x":26,"t":1305118357.73002},{"y":2,"d":[[1,25,"n"]],"x":27,"t":1305118357.85818},{"y":2,"d":[[1,26,"e"]],"x":28,"t":1305118357.93816},{"y":2,"x":29,"t":1305118358.01002},{"y":2,"d":[[1,28,"-"]],"x":30,"t":1305118358.17783},{"y":2,"d":[[1,29,"-"]],"x":31,"t":1305118358.36212},{"y":2,"d":[[1,30,"d"]],"x":32,"t":1305118358.72209},{"y":2,"d":[[1,31,"e"]],"x":33,"t":1305118358.89001},{"y":2,"d":[[1,32,"c"]],"x":34,"t":1305118359.06622},{"y":2,"d":[[1,33,"o"]],"x":35,"t":1305118359.12202},{"y":2,"d":[[1,34,"r"]],"x":36,"t":1305118359.22593},{"y":2,"d":[[1,35,"a"]],"x":37,"t":1305118359.37816},{"y":2,"d":[[1,36,"t"]],"x":38,"t":1305118359.51409},{"y":2,"d":[[1,37,"e"]],"x":39,"t":1305118359.61805},{"y":2,"x":40,"t":1305118359.76977},{"y":2,"d":[[1,39,"-"]],"x":41,"t":1305118360.00183},{"y":2,"d":[[1,40,"-"]],"x":42,"t":1305118360.24188},{"y":2,"d":[[1,41,"g"]],"x":43,"t":1305118360.4498},{"y":2,"d":[[1,42,"r"]],"x":44,"t":1305118360.63383},{"y":2,"d":[[1,43,"a"]],"x":45,"t":1305118360.75383},{"y":2,"d":[[1,44,"p"]],"x":46,"t":1305118360.89788},{"y":2,"d":[[1,45,"h"]],"x":47,"t":1305118361.04979},{"y":3,"x":1,"t":1305118361.30588},{"y":21,"b":[[20,0,5,["a","7"]]],"d":[[2,0,77,"* 6652a0d (HEAD, origin/master, origin/HEAD, master) Add Images for git treevi"],[3,0,45,"* 8199323 (tag: A) Commit A: merge B with C."],[4,0,1,"|\\"],[5,0,29,"| * 0cd7f2e (tag: C) commit C."],[6,0,2,"| |"],[7,0,3,"| \\"],[8,0,54,"*-. \\ 776c5c9 (tag: B) Commit B: merge D with E and F"],[9,0,5,"|\\ \\ \\"],[10,0,5,"| | |/"],[11,0,48,"| | * beb30ca (tag: F) Commit F: merge I with J"],[12,0,5,"| | |\\"],[13,0,33,"| | | * 3252fcc (tag: J) commit J."],[14,0,31,"| | * 634836c (tag: I) commit I."],[15,0,29,"| * 83be369 (tag: E) commit E."],[16,0,44,"* 212efce (tag: D) Commit D: merge G with H"],["cp",4,17],[18,0,29,"| * 2ab52ad (tag: H) commit H."],[19,0,27,"* e80aa74 (tag: G) commit G."],[20,0,4,"(END)"]],"x":7,"f":[[2,2,51,"33333333366663311111111111113311111111111332222223"],[3,4,19,["a","3"]],[4,0,1,"23"],[5,0,19,"27773333333333333333"],[6,0,2,"273"],[7,0,3,"2773"],[8,1,23,"33737773333333333333333"],[9,0,5,"457373"],[10,0,5,"475733"],[11,0,2,"475"],[11,8,23,["a","3"]],[12,0,5,"475712"],[13,0,23,"475717773333333333333333"],[14,0,21,"4757773333333333333333"],[15,0,19,"47773333333333333333"],["cp",3,16],[17,0,1,"34"],[18,0,19,"37773333333333333333"],[19,2,17,["a","3"]],[20,0,5,["a","0"]]],"B":[[2,11,50,"1111001111111111111001111111111100111111"],[3,13,18,["a","1"]],["cp",3,5],[8,17,22,["a","1"]],["cp",8,11],[12,4,5,["a","1"]],[13,4,"1"],[13,17,22,["a","1"]],[14,15,20,["a","1"]],["cp",3,15],["cp",3,16],[17,0,1,["a","1"]],[18,0,"1"],[18,13,18,["a","1"]],[19,11,16,["a","1"]]],"t":1305118361.31686},{"y":21,"b":[["cp",0,20]],"d":[["cp",21,20]],"x":1,"f":[["cp",0,20]],"t":1305118362.41798},{"y":21,"d":[[20,0,8,"bash-3.2$"]],"x":11,"t":1305118362.41941},{"y":21,"d":[[20,10,"g"]],"x":12,"t":1305118363.56187},{"y":21,"d":[[20,11,"i"]],"x":13,"t":1305118363.64202},{"y":21,"d":[[20,12,"t"]],"x":14,"t":1305118363.76208},{"y":21,"x":15,"t":1305118363.79391},{"y":21,"d":[[20,14,"r"]],"x":16,"t":1305118364.00156},{"y":21,"d":[[20,15,"e"]],"x":17,"t":1305118364.16303},{"y":21,"d":[[20,16,"v"]],"x":18,"t":1305118364.32173},{"y":21,"d":[[20,17,"-"]],"x":19,"t":1305118364.45762},{"y":21,"d":[[20,18,"l"]],"x":20,"t":1305118364.67374},{"y":21,"d":[[20,19,"i"]],"x":21,"t":1305118364.77002},{"y":21,"d":[[20,20,"s"]],"x":22,"t":1305118364.87402},{"y":21,"d":[[20,21,"t"]],"x":23,"t":1305118364.95382},{"y":21,"x":24,"t":1305118365.13776},{"y":21,"d":[[20,23,"-"]],"x":25,"t":1305118365.95366},{"y":21,"d":[[20,24,"-"]],"x":26,"t":1305118366.11394},{"y":21,"d":[[20,25,"o"]],"x":27,"t":1305118366.32165},{"y":21,"d":[[20,26,"n"]],"x":28,"t":1305118366.47365},{"y":21,"d":[[20,27,"e"]],"x":29,"t":1305118366.6417},{"y":21,"d":[[20,28,"l"]],"x":30,"t":1305118366.7937},{"y":21,"d":[[20,29,"i"]],"x":31,"t":1305118366.95364},{"y":21,"d":[[20,30,"n"]],"x":32,"t":1305118367.0818},{"y":21,"d":[[20,31,"e"]],"x":33,"t":1305118367.13778},{"y":21,"x":34,"t":1305118367.21785},{"y":21,"d":[[20,33,"A"]],"x":35,"t":1305118367.68187},{"y":22,"x":1,"t":1305118368.07382},{"y":25,"d":[["cp",7,0],["cp",8,1],["cp",9,2],["cp",10,3],["cp",11,4],["cp",12,5],["cp",13,6],["cp",14,7],["cp",15,8],["cp",16,9],["cp",17,10],["cp",18,11],["cp",19,12],["cp",20,13],[14,0,32,"8199323 Commit A: merge B with C."],[15,0,29,"0cd7f2e commit C. "],[16,0,44,"776c5c9 Commit B: merge D with E and F "],[17,0,31,"beb30ca Commit F: merge I with J"],[18,0,31,"212efce Commit D: merge G with H"],[19,0,27,"634836c commit I. "],[20,0,33,"3252fcc commit J. "],[21,0,16,"83be369 commit E."],[22,0,16,"2ab52ad commit H."],[23,0,16,"e80aa74 commit G."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",7,0],["cp",8,1],["cp",9,2],["cp",10,3],["cp",11,4],["cp",12,5],["cp",13,6],["cp",14,7],["cp",15,8],["cp",16,9],["cp",17,10],["cp",18,11],["cp",19,12],["cp",20,13],["cp",13,14],["cp",13,15],["cp",13,16],["cp",13,17],["cp",13,18],["cp",13,19]],"B":[["cp",8,1],["cp",0,2],["cp",0,3],["cp",1,4],["cp",12,5],["cp",13,6],["cp",14,7],["cp",15,8],["cp",8,9],["cp",17,10],["cp",18,11],["cp",19,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19]],"t":1305118368.08197},{"y":25,"d":[["cp",13,24]],"x":11,"t":1305118371.84943},{"y":25,"x":34,"t":1305118372.26573},{"y":25,"d":[[24,33," "]],"x":33,"t":1305118372.64945},{"y":25,"x":34,"t":1305118372.85744},{"y":25,"d":[[24,33,"D"]],"x":35,"t":1305118373.19348},{"y":25,"x":36,"t":1305118373.52156},{"y":25,"d":[[24,35,"F"]],"x":37,"t":1305118373.84187},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12]],"B":[["cp",1,0],["cp",2,1],["cp",0,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",10,9],["cp",11,10],["cp",12,11],["cp",1,12]],"t":1305118374.55356},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",14,8],["cp",15,9],["cp",16,10],["cp",17,11],["cp",18,12],["cp",19,13],["cp",20,14],["cp",21,15],["cp",22,16],["cp",23,17],["cp",10,18],["cp",11,19],["cp",12,20],["cp",13,21],["cp",15,22],["cp",16,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",6,7],["cp",6,8],["cp",6,9],["cp",6,10],["cp",6,11]],"B":[["cp",6,0],["cp",7,1],["cp",1,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",6,7],["cp",6,8],["cp",6,9],["cp",6,10],["cp",6,11]],"t":1305118374.56162},{"y":25,"d":[["cp",17,24]],"x":11,"t":1305118378.05754},{"y":25,"x":36,"t":1305118378.64152},{"y":25,"d":[[24,35," "]],"x":35,"t":1305118378.994},{"y":25,"x":34,"t":1305118379.16933},{"y":25,"x":35,"t":1305118379.36911},{"y":25,"x":36,"t":1305118379.69714},{"y":25,"d":[[24,35,"^"]],"x":37,"t":1305118381.6186},{"y":25,"d":[[24,36,"G"]],"x":38,"t":1305118382.22522},{"y":25,"x":39,"t":1305118382.57735},{"y":25,"d":[[24,38,"D"]],"x":40,"t":1305118382.87351},{"y":25,"x":39,"t":1305118384.08257},{"y":25,"x":37,"t":1305118384.36904},{"y":25,"x":36,"t":1305118384.68108},{"y":25,"x":35,"t":1305118384.86494},{"y":25,"x":34,"t":1305118385.04898},{"y":25,"d":[[24,33,38," ^G D "]],"x":34,"t":1305118385.2411},{"y":25,"d":[[24,33,37,"^G D "]],"x":34,"t":1305118385.43307},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",9,17],["cp",10,18],["cp",11,19],["cp",12,20],["cp",14,21],["cp",15,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5]],"B":[["cp",1,0],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5]],"t":1305118385.82545},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",15,13],["cp",16,14],["cp",7,15],["cp",8,16],["cp",9,17],["cp",10,18],["cp",12,19],["cp",13,20],["cp",23,21],["cp",8,22],["cp",12,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",3,4]],"B":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",3,4]],"t":1305118385.83346},{"y":25,"d":[["cp",21,24]],"x":11,"t":1305118388.39283},{"y":25,"x":37,"t":1305118388.92912},{"d":[["r","|\\ "],["r","| * 2ab52ad (tag: H) commit H. "],["r","* e80aa74 (tag: G) commit G. "],["r","bash-3.2$ git rev-list --oneline A "],["r","8199323 Commit A: merge B with C. "],["r","0cd7f2e commit C. "],["r","776c5c9 Commit B: merge D with E and F "],["r","beb30ca Commit F: merge I with J "],["r","212efce Commit D: merge G with H "],["r","634836c commit I. "],["r","3252fcc commit J. "],["r","83be369 commit E. "],["r","2ab52ad commit H. "],["r","e80aa74 commit G. "],["r","bash-3.2$ git rev-list --oneline D F "],["r","beb30ca Commit F: merge I with J "],["r","212efce Commit D: merge G with H "],["r","634836c commit I. "],["r","3252fcc commit J. "],["r","2ab52ad commit H. "],["r","e80aa74 commit G. "],["r","bash-3.2$ git rev-list --oneline ^G D "],["r","212efce Commit D: merge G with H "],["r","2ab52ad commit H. "],["r","bash-3.2$ git rev-list --oneline ^G D "]],"x":36,"B":[["r","11000000000000000000000000000000000000000000000000000000000000000000000000000000"],["r","10000000000001111110000000000000000000000000000000000000000000000000000000000000"],["r","00000000000111111000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","34777777777777777777777777777777777777777777777777777777777777777777777777777777"],["r","37773333333333333333777777777777777777777777777777777777777777777777777777777777"],["r","77333333333333333377777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305118389.48077,"i":1},{"y":25,"x":35,"t":1305118389.66475},{"y":25,"x":34,"t":1305118389.82489},{"y":25,"d":[[24,33,36,"G D "]],"x":34,"t":1305118390.03276},{"y":25,"x":35,"t":1305118390.20869},{"y":25,"d":[[24,34,36,". D"]],"x":36,"t":1305118390.72076},{"y":25,"d":[[24,35,37,". D"]],"x":37,"t":1305118390.88897},{"y":25,"x":36,"t":1305118391.16962},{"y":25,"x":37,"t":1305118391.54454},{"y":25,"d":[[24,36,37,"D "]],"x":37,"t":1305118391.78493},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",6,14],["cp",7,15],["cp",8,16],["cp",9,17],["cp",11,18],["cp",12,19],["cp",21,20],["cp",7,21],["cp",11,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2]],"B":[["cp",1,0],["cp",2,1],["cp",3,2]],"t":1305118392.09676},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",4,12],["cp",5,13],["cp",6,14],["cp",7,15],["cp",9,16],["cp",10,17],["cp",20,18],["cp",5,19],["cp",9,20],["cp",23,21],["cp",5,22],["cp",9,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",0,1]],"B":[["cp",2,0],["cp",0,1]],"t":1305118392.10547},{"y":25,"d":[["cp",21,24]],"x":11,"t":1305118395.11262},{"y":25,"x":37,"t":1305118395.56068},{"y":25,"x":36,"t":1305118395.91269},{"y":25,"x":35,"t":1305118396.08861},{"y":25,"x":34,"t":1305118396.24856},{"y":25,"d":[[24,33,36,["a"," "]]],"x":33,"t":1305118396.78472},{"y":25,"x":34,"t":1305118396.92844},{"y":25,"d":[[24,33,"^"]],"x":35,"t":1305118397.80207},{"y":25,"d":[[24,34,"B"]],"x":36,"t":1305118398.20071},{"y":25,"x":37,"t":1305118398.62446},{"y":25,"d":[[24,36,"C"]],"x":38,"t":1305118399.11246},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",3,11],["cp",4,12],["cp",5,13],["cp",6,14],["cp",8,15],["cp",9,16],["cp",18,17],["cp",4,18],["cp",8,19],["cp",21,20],["cp",4,21],["cp",8,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118399.55249},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",2,10],["cp",3,11],["cp",4,12],["cp",5,13],["cp",7,14],["cp",8,15],["cp",17,16],["cp",3,17],["cp",7,18],["cp",20,19],["cp",3,20],["cp",7,21],["cp",23,22],["cp",0,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118399.55996},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305118400.74455},{"y":25,"x":15,"t":1305118400.98454},{"y":25,"x":18,"t":1305118401.16835},{"y":25,"x":19,"t":1305118401.3283},{"y":25,"x":24,"t":1305118401.50424},{"y":25,"x":26,"t":1305118401.67225},{"y":25,"x":34,"t":1305118401.84096},{"y":25,"x":35,"t":1305118402.01639},{"y":25,"x":34,"t":1305118402.45625},{"y":25,"d":[[24,33,36,["a"," "]]],"x":33,"t":1305118403.05648},{"y":25,"x":33,"t":1305118403.29632},{"y":25,"x":34,"t":1305118403.2964},{"y":25,"d":[[24,33,"C"]],"x":35,"t":1305118403.67238},{"y":25,"x":36,"t":1305118403.94454},{"y":25,"d":[[24,35,"^"]],"x":37,"t":1305118404.5764},{"y":25,"d":[[24,36,"B"]],"x":38,"t":1305118405.11219},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",1,9],["cp",2,10],["cp",3,11],["cp",4,12],["cp",6,13],["cp",7,14],["cp",16,15],["cp",2,16],["cp",6,17],["cp",19,18],["cp",2,19],["cp",6,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118406.07236},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",0,8],["cp",1,9],["cp",2,10],["cp",3,11],["cp",5,12],["cp",6,13],["cp",15,14],["cp",1,15],["cp",5,16],["cp",18,17],["cp",1,18],["cp",5,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",21,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118406.08015},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305118409.94402},{"y":25,"x":37,"t":1305118410.45607},{"y":25,"x":36,"t":1305118410.75194},{"y":25,"x":35,"t":1305118411.16793},{"y":25,"x":34,"t":1305118411.36803},{"y":25,"d":[[24,33,36,["a"," "]]],"x":33,"t":1305118411.69589},{"y":25,"x":34,"t":1305118411.84006},{"y":25,"d":[[24,33,"B"]],"x":35,"t":1305118412.25584},{"y":25,"d":[[24,34,"."]],"x":36,"t":1305118412.73601},{"y":25,"d":[[24,35,"."]],"x":37,"t":1305118412.89571},{"y":25,"d":[[24,36,"C"]],"x":38,"t":1305118413.79195},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",0,8],["cp",1,9],["cp",2,10],["cp",4,11],["cp",5,12],["cp",14,13],["cp",0,14],["cp",4,15],["cp",17,16],["cp",0,17],["cp",4,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",20,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118415.38371},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",0,8],["cp",1,9],["cp",3,10],["cp",4,11],["cp",13,12],["cp",7,13],["cp",3,14],["cp",16,15],["cp",7,16],["cp",3,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",19,21],["cp",23,22],["cp",19,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118415.39302},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305118416.31167},{"y":25,"x":37,"t":1305118416.80007},{"y":25,"x":36,"t":1305118417.17593},{"y":25,"x":35,"t":1305118417.34401},{"y":25,"x":34,"t":1305118417.50386},{"y":25,"d":[[24,33,36,["a"," "]]],"x":33,"t":1305118417.87963},{"y":25,"x":34,"t":1305118418.03158},{"y":25,"d":[[24,33,"C"]],"x":35,"t":1305118418.39973},{"y":25,"d":[[24,34,"."]],"x":36,"t":1305118418.6958},{"y":25,"d":[[24,35,"."]],"x":37,"t":1305118418.87158},{"y":25,"d":[[24,36,"B"]],"x":38,"t":1305118419.19964},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",0,8],["cp",2,9],["cp",3,10],["cp",12,11],["cp",6,12],["cp",2,13],["cp",15,14],["cp",6,15],["cp",2,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",18,20],["cp",22,21],["cp",18,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118420.97543},{"y":25,"d":[["cp",5,0],["cp",6,1],["cp",7,2],["cp",8,3],["cp",9,4],["cp",10,5],["cp",11,6],["cp",1,7],["cp",4,8],["cp",14,9],["cp",1,10],["cp",4,11],["cp",17,12],["cp",18,13],["cp",19,14],["cp",13,15],["cp",21,16],["cp",13,17],["cp",23,18],[19,0,37,"776c5c9 Commit B: merge D with E and F"],["cp",1,20],[21,0,36,"83be369 commit E. "],["cp",4,22],["cp",5,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118420.98309},{"y":25,"d":[["cp",18,24]],"x":11,"t":1305118426.01532},{"y":25,"x":15,"t":1305118426.51941},{"y":25,"x":18,"t":1305118426.71118},{"y":25,"x":19,"t":1305118426.8793},{"y":25,"x":24,"t":1305118427.04714},{"y":25,"x":26,"t":1305118427.21553},{"y":25,"x":34,"t":1305118427.38329},{"y":25,"x":35,"t":1305118427.55116},{"y":25,"x":34,"t":1305118427.93531},{"y":25,"d":[[24,33,36,["a"," "]]],"x":33,"t":1305118428.36772},{"y":25,"x":34,"t":1305118428.5195},{"y":25,"d":[[24,33,"B"]],"x":35,"t":1305118428.86336},{"y":25,"d":[[24,34,"."]],"x":36,"t":1305118429.64751},{"y":25,"d":[[24,35,"."]],"x":37,"t":1305118429.8072},{"y":25,"d":[[24,36,"."]],"x":38,"t":1305118429.98292},{"y":25,"d":[[24,37,"C"]],"x":39,"t":1305118430.35132},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",3,7],["cp",9,8],["cp",0,9],["cp",3,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",12,14],["cp",16,15],["cp",12,16],["cp",18,17],["cp",19,18],["cp",0,19],["cp",21,20],["cp",3,21],["cp",4,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118430.61954},{"y":25,"d":[["cp",3,1],["cp",8,2],["cp",0,3],["cp",1,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",6,8],["cp",15,9],["cp",6,10],["cp",17,11],["cp",18,12],["cp",0,13],["cp",20,14],["cp",1,15],["cp",22,16],["cp",23,17],["cp",6,18],["cp",12,19],["cp",0,20],["cp",14,21],["cp",1,22],["cp",16,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118430.62272},{"y":25,"d":[["cp",17,24]],"x":11,"t":1305118431.63923},{"y":25,"x":38,"t":1305118432.0711},{"y":25,"x":35,"t":1305118432.34327},{"y":25,"x":34,"t":1305118432.77501},{"y":25,"d":[[24,33,37,["a"," "]]],"x":33,"t":1305118433.20709},{"y":25,"x":34,"t":1305118433.38303},{"y":25,"d":[[24,33,"C"]],"x":35,"t":1305118433.76722},{"y":25,"d":[[24,34,"."]],"x":36,"t":1305118434.7992},{"y":25,"d":[[24,35,"."]],"x":37,"t":1305118434.96722},{"y":25,"d":[[24,36,"."]],"x":38,"t":1305118435.13497},{"y":25,"d":[[24,37,"B"]],"x":39,"t":1305118435.44722},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",5,7],["cp",9,8],["cp",5,9],["cp",11,10],["cp",12,11],["cp",2,12],["cp",14,13],["cp",0,14],["cp",16,15],["cp",17,16],["cp",5,17],["cp",11,18],["cp",2,19],["cp",13,20],["cp",0,21],["cp",15,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118435.83129},{"y":25,"d":[["cp",6,0],["cp",5,1],["cp",8,2],["cp",1,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",14,8],["cp",15,9],["cp",16,10],["cp",1,11],["cp",5,12],["cp",6,13],["cp",7,14],["cp",8,15],["cp",9,16],["cp",23,17],["cp",1,18],["cp",5,19],["cp",6,20],["cp",7,21],["cp",8,22],["cp",9,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118435.83819},{"d":[["r","bash-3.2$ git rev-list --oneline C ^B "],["r","0cd7f2e commit C. "],["r","bash-3.2$ git rev-list --oneline B..C "],["r","0cd7f2e commit C. "],["r","bash-3.2$ git rev-list --oneline C..B "],["r","776c5c9 Commit B: merge D with E and F "],["r","212efce Commit D: merge G with H "],["r","83be369 commit E. "],["r","2ab52ad commit H. "],["r","e80aa74 commit G. "],["r","bash-3.2$ git rev-list --oneline B...C "],["r","0cd7f2e commit C. "],["r","776c5c9 Commit B: merge D with E and F "],["r","212efce Commit D: merge G with H "],["r","83be369 commit E. "],["r","2ab52ad commit H. "],["r","e80aa74 commit G. "],["r","bash-3.2$ git rev-list --oneline C...B "],["r","0cd7f2e commit C. "],["r","776c5c9 Commit B: merge D with E and F "],["r","212efce Commit D: merge G with H "],["r","83be369 commit E. "],["r","2ab52ad commit H. "],["r","e80aa74 commit G. "],["r","bash-3.2$ git rev-list --oneline C...B "]],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305118437.58283,"i":1},{"y":25,"x":15,"t":1305118438.11083},{"y":25,"x":18,"t":1305118438.28676},{"y":25,"x":19,"t":1305118438.46276},{"y":25,"x":24,"t":1305118438.63073},{"y":25,"x":26,"t":1305118438.79887},{"y":25,"x":34,"t":1305118438.95869},{"y":25,"x":35,"t":1305118439.13473},{"y":25,"x":34,"t":1305118439.5508},{"y":25,"d":[[24,33,37,["a"," "]]],"x":33,"t":1305118439.96011},{"y":25,"x":34,"t":1305118440.12683},{"y":25,"d":[[24,33,"B"]],"x":35,"t":1305118440.44744},{"y":25,"d":[[24,34,"^"]],"x":36,"t":1305118442.14294},{"y":25,"d":[[24,35,"@"]],"x":37,"t":1305118442.60675},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",0,10],["cp",4,11],["cp",5,12],["cp",6,13],["cp",7,14],["cp",8,15],["cp",17,16],["cp",0,17],["cp",4,18],["cp",5,19],["cp",6,20],["cp",7,21],["cp",8,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118444.0709},{"y":25,"d":[["cp",7,0],["cp",8,1],["cp",9,2],["cp",10,3],["cp",16,9],["cp",23,16],[17,0,8,"beb30ca C"],[17,15,31,"F: merge I with J"],["cp",5,18],[19,0,8,"634836c c"],[19,15,31,"I. "],[20,0,6,"3252fcc"],[20,15,"J"],["cp",6,21],["cp",0,22],["cp",1,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118444.07908},{"y":25,"d":[["cp",16,24]],"x":11,"t":1305118449.30262},{"y":25,"x":15,"t":1305118449.74239},{"y":25,"x":18,"t":1305118449.91836},{"y":25,"x":36,"t":1305118450.28656},{"y":25,"d":[[24,35," "]],"x":35,"t":1305118450.78256},{"y":25,"x":36,"t":1305118450.97443},{"y":25,"d":[[24,35,"!"]],"x":37,"t":1305118451.34245},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",9,8],["cp",2,9],["cp",3,10],["cp",4,11],["cp",5,12],["cp",6,13],["cp",0,14],["cp",16,15],["cp",17,16],["cp",4,17],["cp",19,18],["cp",20,19],["cp",5,20],["cp",6,21],["cp",0,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118452.97431},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",1,8],["cp",2,9],["cp",3,10],["cp",4,11],["cp",5,12],["cp",6,13],["cp",15,14],["cp",16,15],["cp",3,16],["cp",18,17],["cp",19,18],["cp",4,19],["cp",5,20],["cp",6,21],["cp",23,22],["cp",2,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118452.98272},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305118454.86233},{"y":25,"x":36,"t":1305118455.52638},{"y":25,"x":35,"t":1305118455.87078},{"y":25,"x":34,"t":1305118456.05417},{"y":25,"d":[[24,33,35,["a"," "]]],"x":33,"t":1305118456.40595},{"y":25,"x":34,"t":1305118456.55849},{"y":25,"d":[[24,33,"F"]],"x":35,"t":1305118457.83817},{"y":25,"d":[[24,34,"^"]],"x":36,"t":1305118459.13397},{"y":25,"d":[[24,34," "]],"x":35,"t":1305118459.99826},{"y":25,"d":[[24,34,"^"]],"x":36,"t":1305118460.94227},{"y":25,"d":[[24,35,"~"]],"x":37,"t":1305118461.29408},{"y":25,"d":[[24,35," "]],"x":36,"t":1305118461.94195},{"y":25,"d":[[24,35,"!"]],"x":37,"t":1305118462.30209},{"y":25,"x":38,"t":1305118462.89387},{"y":25,"d":[[24,37,"D"]],"x":39,"t":1305118463.91025},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",1,8],["cp",2,9],["cp",3,10],["cp",4,11],["cp",5,12],["cp",14,13],["cp",15,14],["cp",2,15],["cp",17,16],["cp",18,17],["cp",3,18],["cp",4,19],["cp",5,20],["cp",22,21],["cp",1,22],["cp",24,23],[24,["a"," "]]],"x":1,"t":1305118464.23792},{"y":25,"d":[["cp",4,0],["cp",5,1],["cp",6,2],["cp",7,3],["cp",8,4],["cp",9,5],["cp",10,6],["cp",0,7],["cp",1,8],["cp",13,9],["cp",14,10],["cp",5,11],["cp",16,12],["cp",17,13],["cp",6,14],["cp",0,15],["cp",1,16],["cp",21,17],["cp",4,18],["cp",23,19],["cp",10,20],["cp",5,21],["cp",0,22],["cp",1,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305118464.24559},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",9,8],["cp",10,9],["cp",4,10],["cp",12,11],["cp",13,12],["cp",5,13],["cp",6,14],["cp",0,15],["cp",17,16],["cp",3,17],["cp",19,18],["cp",9,19],["cp",4,20],["cp",6,21],["cp",0,22],[23,0,16,"bash-3.2$ exit "],[24,["a"," "]]],"x":1,"t":1305118467.31}]} \ No newline at end of file diff --git a/html/part2/ch12-01-back2future-1.html b/html/part2/ch12-01-back2future-1.html new file mode 100644 index 000000000..184962829 --- /dev/null +++ b/html/part2/ch12-01-back2future-1.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch12-01-back2future-1 +json_file: ch12-01-back2future-1.json +--- diff --git a/html/part2/ch12-01-back2future-1.json b/html/part2/ch12-01-back2future-1.json new file mode 100644 index 000000000..04cae02ae --- /dev/null +++ b/html/part2/ch12-01-back2future-1.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305119117.63681,"i":1},{"y":1,"d":[[0,10,38,"cd /path/to/my/workspace/demo"]],"x":11,"t":1305119118.17385},{"y":2,"x":1,"t":1305119118.94986},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305119118.9501},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305119119.84598},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305119119.966},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305119120.03796},{"y":2,"x":15,"t":1305119120.10975},{"y":2,"d":[[1,14,"l"]],"x":16,"t":1305119120.22187},{"y":2,"d":[[1,15,"o"]],"x":17,"t":1305119120.40568},{"y":2,"d":[[1,16,"g"]],"x":18,"t":1305119120.51003},{"y":2,"x":19,"t":1305119120.58987},{"y":2,"d":[[1,18,"-"]],"x":20,"t":1305119120.72565},{"y":2,"d":[[1,19,"-"]],"x":21,"t":1305119120.92603},{"y":2,"d":[[1,20,"o"]],"x":22,"t":1305119121.42987},{"y":2,"d":[[1,21,"n"]],"x":23,"t":1305119121.59794},{"y":2,"d":[[1,22,"e"]],"x":24,"t":1305119121.68589},{"y":2,"d":[[1,23,"l"]],"x":25,"t":1305119122.38981},{"y":2,"d":[[1,24,"i"]],"x":26,"t":1305119122.53365},{"y":2,"d":[[1,25,"n"]],"x":27,"t":1305119122.66987},{"y":2,"d":[[1,26,"e"]],"x":28,"t":1305119122.766},{"y":2,"x":29,"t":1305119122.90964},{"y":2,"d":[[1,28,"-"]],"x":30,"t":1305119123.12582},{"y":2,"d":[[1,29,"6"]],"x":31,"t":1305119123.9978},{"y":2,"x":32,"t":1305119124.10162},{"y":2,"d":[[1,31,"-"]],"x":33,"t":1305119124.33381},{"y":2,"d":[[1,32,"-"]],"x":34,"t":1305119124.52582},{"y":2,"d":[[1,33,"d"]],"x":35,"t":1305119126.44574},{"y":2,"d":[[1,34,"e"]],"x":36,"t":1305119126.62961},{"y":2,"d":[[1,35,"c"]],"x":37,"t":1305119126.79749},{"y":2,"d":[[1,36,"o"]],"x":38,"t":1305119126.87771},{"y":2,"d":[[1,37,"r"]],"x":39,"t":1305119126.99769},{"y":2,"d":[[1,38,"a"]],"x":40,"t":1305119127.16562},{"y":2,"d":[[1,39,"t"]],"x":41,"t":1305119127.26987},{"y":2,"d":[[1,40,"e"]],"x":42,"t":1305119127.36573},{"y":3,"x":1,"t":1305119127.46984},{"y":9,"d":[[2,0,66,"8e715bc (HEAD, master) commit using -a flag, means add then commit."],[3,0,33,"fd33ea2 add hello.h using -f flag."],[4,0,51,"4ad14d4 ignore works even move .gitignore to subdir."],[5,0,29,"211cb82 ignore object files..."],[6,0,48,"15f507b (tag: hello_1.0) Hello world initialized."],[7,0,33,"8be895d README is from welcome.txt"],[8,0,8,"bash-3.2$"]],"x":11,"f":[[2,0,21,"3333333336666332222223"],[3,0,6,["a","3"]],["cp",3,4],["cp",3,5],[6,0,23,["a","3"]],["cp",3,7]],"B":[[2,9,20,"111100111111"],[6,9,22,["a","1"]]],"t":1305119127.48358},{"y":9,"d":[[8,10,"g"]],"x":12,"t":1305119129.7258},{"y":9,"d":[[8,11,"i"]],"x":13,"t":1305119129.80549},{"y":9,"d":[[8,12,"t"]],"x":14,"t":1305119129.91759},{"y":9,"x":15,"t":1305119129.97348},{"y":9,"d":[[8,14,"t"]],"x":16,"t":1305119130.22958},{"y":9,"d":[[8,15,"a"]],"x":17,"t":1305119130.38933},{"y":9,"d":[[8,16,"g"]],"x":18,"t":1305119130.52565},{"y":9,"x":19,"t":1305119130.74955},{"y":9,"d":[[8,18,"F"]],"x":20,"t":1305119135.63752},{"y":9,"x":21,"t":1305119136.03726},{"y":9,"d":[[8,20,"h"]],"x":22,"t":1305119136.33333},{"y":9,"d":[[8,21,"e"]],"x":23,"t":1305119136.42149},{"y":9,"d":[[8,21," "]],"x":22,"t":1305119136.78927},{"y":9,"d":[[8,20," "]],"x":21,"t":1305119136.96536},{"y":9,"d":[[8,20,"H"]],"x":22,"t":1305119137.19769},{"y":9,"d":[[8,21,"E"]],"x":23,"t":1305119137.25346},{"y":9,"d":[[8,22,"A"]],"x":24,"t":1305119137.40516},{"y":9,"d":[[8,23,"D"]],"x":25,"t":1305119137.50118},{"y":10,"x":1,"t":1305119137.84515},{"y":10,"d":[[9,0,8,"bash-3.2$"]],"x":11,"t":1305119137.85667},{"y":10,"d":[["cp",8,9]],"x":11,"t":1305119139.13331},{"y":10,"x":24,"t":1305119139.50955},{"y":10,"x":25,"t":1305119139.7095},{"y":10,"d":[[9,24,"^"]],"x":26,"t":1305119140.5414},{"y":10,"x":25,"t":1305119142.0771},{"y":10,"x":24,"t":1305119142.26104},{"y":10,"x":23,"t":1305119142.48522},{"y":10,"x":22,"t":1305119142.66103},{"y":10,"x":21,"t":1305119142.85298},{"y":10,"x":20,"t":1305119143.02096},{"y":10,"x":19,"t":1305119143.19707},{"y":10,"d":[[9,18,"E"]],"x":19,"t":1305119144.3011},{"y":11,"x":1,"t":1305119145.99004},{"y":11,"d":[[10,0,8,"bash-3.2$"]],"x":11,"t":1305119145.9957},{"y":11,"d":[["cp",9,10]],"x":11,"t":1305119146.8848},{"y":11,"x":15,"t":1305119147.78074},{"y":11,"x":16,"t":1305119148.10081},{"y":11,"x":17,"t":1305119148.28489},{"y":11,"x":18,"t":1305119148.45286},{"y":11,"x":19,"t":1305119148.63687},{"y":11,"d":[[10,18,"D"]],"x":19,"t":1305119150.18909},{"y":11,"x":19,"t":1305119150.99682},{"y":11,"x":20,"t":1305119151.19685},{"y":11,"d":[[10,19,25,"$ HEAD^"]],"x":21,"t":1305119152.14896},{"y":11,"d":[[10,19,25," HEAD^ "]],"x":20,"t":1305119152.74094},{"y":11,"x":19,"t":1305119152.92475},{"y":11,"x":25,"t":1305119153.45287},{"y":11,"x":26,"t":1305119153.78081},{"y":11,"d":[[10,25,"^"]],"x":27,"t":1305119154.55678},{"y":12,"x":1,"t":1305119154.85246},{"y":12,"d":[[11,0,8,"bash-3.2$"]],"x":11,"t":1305119154.86038},{"y":12,"d":[["cp",10,11]],"x":11,"t":1305119155.55654},{"y":12,"x":15,"t":1305119155.80452},{"y":12,"x":19,"t":1305119155.99648},{"y":12,"x":21,"t":1305119156.18045},{"y":12,"x":20,"t":1305119156.54864},{"y":12,"x":19,"t":1305119156.75665},{"y":12,"d":[[11,18,"C"]],"x":19,"t":1305119159.14851},{"y":12,"x":19,"t":1305119160.01264},{"y":12,"x":26,"t":1305119160.68439},{"y":12,"x":27,"t":1305119161.01271},{"y":12,"d":[[11,26,"^"]],"x":28,"t":1305119161.85353},{"y":13,"x":1,"t":1305119162.44872},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/demo "],["r","bash-3.2$ git log --oneline -6 --decorate "],["r","8e715bc (HEAD, master) commit using -a flag, means add then commit. "],["r","fd33ea2 add hello.h using -f flag. "],["r","4ad14d4 ignore works even move .gitignore to subdir. "],["r","211cb82 ignore object files... "],["r","15f507b (tag: hello_1.0) Hello world initialized. "],["r","8be895d README is from welcome.txt "],["r","bash-3.2$ git tag F HEAD "],["r","bash-3.2$ git tag E HEAD^ "],["r","bash-3.2$ git tag D HEAD^^ "],["r","bash-3.2$ git tag C HEAD^^^ "],["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d",["r","00000000011110011111100000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d",["r","00000000011111111111111000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":13,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d",["r","33333333366663322222237777777777777777777777777777777777777777777777777777777777"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],"d","d",["r","33333333333333333333333377777777777777777777777777777777777777777777777777777777"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305119162.45757,"i":1},{"y":13,"d":[["cp",11,12]],"x":11,"t":1305119163.03624},{"y":13,"x":15,"t":1305119163.36424},{"y":13,"x":19,"t":1305119163.54828},{"y":13,"x":21,"t":1305119163.74819},{"y":13,"x":20,"t":1305119164.10023},{"y":13,"x":19,"t":1305119164.33217},{"y":13,"d":[[12,18,"B"]],"x":19,"t":1305119165.73223},{"y":13,"x":19,"t":1305119166.41229},{"y":13,"x":27,"t":1305119166.94825},{"y":13,"x":28,"t":1305119167.28421},{"y":13,"d":[[12,27,"^"]],"x":29,"t":1305119168.21223},{"y":14,"x":1,"t":1305119168.50039},{"y":14,"d":[[13,0,8,"bash-3.2$"]],"x":11,"t":1305119168.50918},{"y":14,"d":[["cp",12,13]],"x":11,"t":1305119169.0361},{"y":14,"x":15,"t":1305119169.31611},{"y":14,"x":19,"t":1305119169.50057},{"y":14,"x":21,"t":1305119169.69197},{"y":14,"x":20,"t":1305119170.1242},{"y":14,"x":19,"t":1305119170.32411},{"y":14,"d":[[13,18,"A"]],"x":19,"t":1305119170.82031},{"y":14,"x":19,"t":1305119171.51593},{"y":14,"x":28,"t":1305119171.93994},{"y":14,"x":29,"t":1305119172.26003},{"y":14,"d":[[13,28,"^"]],"x":30,"t":1305119173.08404},{"y":15,"x":1,"t":1305119174.46006},{"y":15,"d":[[14,0,8,"bash-3.2$"]],"x":11,"t":1305119174.46876},{"y":15,"d":[["cp",13,14]],"x":11,"t":1305119175.65185},{"y":15,"d":[[14,10,28,"/ "]],"x":12,"t":1305119175.82016},{"y":15,"d":[[14,11,"l"]],"x":13,"t":1305119176.01977},{"y":15,"d":[[14,12,"o"]],"x":14,"t":1305119176.21176},{"y":15,"d":[[14,13,"g"]],"x":15,"t":1305119176.28383},{"y":15,"d":[["cp",1,14]],"x":11,"t":1305119176.43567},{"y":16,"x":1,"t":1305119177.70784},{"y":22,"d":[[15,0,74,"8e715bc (HEAD, tag: F, master) commit using -a flag, means add then commit."],[16,0,42,"fd33ea2 (tag: E) add hello.h using -f flag."],[17,0,60,"4ad14d4 (tag: D) ignore works even move .gitignore to subdir."],[18,0,38,"211cb82 (tag: C) ignore object files..."],[19,0,56,"15f507b (tag: hello_1.0, tag: B) Hello world initialized."],[20,0,42,"8be895d (tag: A) README is from welcome.txt"],[21,0,8,"bash-3.2$"]],"x":11,"f":[[15,0,29,"333333333666633333333332222223"],[16,0,15,["a","3"]],["cp",16,17],["cp",16,18],[19,0,31,["a","3"]],["cp",16,20]],"B":[[15,9,28,"11110011111100111111"],[16,9,14,["a","1"]],["cp",16,17],["cp",16,18],[19,9,30,"1111111111111100111111"],["cp",16,20]],"t":1305119177.72177},{"y":22,"d":[[21,10,"g"]],"x":12,"t":1305119194.90727},{"y":22,"d":[[21,11,"i"]],"x":13,"t":1305119194.99544},{"y":22,"d":[[21,12,"t"]],"x":14,"t":1305119195.13103},{"y":22,"x":15,"t":1305119195.16304},{"y":22,"d":[[21,14,"c"]],"x":16,"t":1305119195.36319},{"y":22,"d":[[21,15,"h"]],"x":17,"t":1305119195.48321},{"y":22,"d":[[21,16,"e"]],"x":18,"t":1305119195.57092},{"y":22,"d":[[21,17,"c"]],"x":19,"t":1305119195.73913},{"y":22,"d":[[21,18,"k"]],"x":20,"t":1305119195.84319},{"y":22,"d":[[21,19,"o"]],"x":21,"t":1305119195.9712},{"y":22,"d":[[21,20,"u"]],"x":22,"t":1305119196.0671},{"y":22,"d":[[21,21,"t"]],"x":23,"t":1305119196.17108},{"y":22,"x":24,"t":1305119196.2432},{"y":22,"d":[[21,23,"C"]],"x":25,"t":1305119196.69115},{"y":23,"x":1,"t":1305119197.56309},{"y":25,"d":[["cp",10,0],["cp",11,1],["cp",12,2],["cp",13,3],["cp",14,4],["cp",15,5],["cp",16,6],["cp",17,7],["cp",18,8],["cp",19,9],["cp",20,10],["cp",21,11],[12,0,27,"Note: checking out 'C'. "],["cp",22,13],[14,0,71,"You are in 'detached HEAD' state. You can look around, make experimental"],[15,0,74,"changes and commit them, and you can discard any commits you make in this "],[16,0,67,"state without impacting any branches by performing another checkout."],["cp",13,17],[18,0,71,"If you want to create a new branch to retain commits you create, you may"],[19,0,73,"do so (now or later) by using -b with the checkout command again. Example:"],["cp",13,20],[21,0,32," git checkout -b new_branch_name"],[23,0,47,"HEAD is now at 211cb82... ignore object files..."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,2],["cp",0,3],["cp",0,4],["cp",15,5],["cp",16,6],["cp",6,7],["cp",6,8],["cp",19,9],["cp",6,10],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20]],"B":[["cp",0,2],["cp",15,5],["cp",16,6],["cp",6,7],["cp",6,8],["cp",19,9],["cp",6,10],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20]],"t":1305119197.57603},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119200.59479},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119200.63484},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119200.72293},{"y":25,"x":15,"t":1305119200.84306},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305119201.04281},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305119201.1708},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305119201.23477},{"y":25,"d":[[24,17,"r"]],"x":19,"t":1305119201.44288},{"y":25,"d":[[24,18,"r"]],"x":20,"t":1305119201.60286},{"y":25,"d":[[24,19,"y"]],"x":21,"t":1305119201.71478},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305119202.99474},{"y":25,"d":[[24,21,"p"]],"x":23,"t":1305119203.29099},{"y":25,"d":[[24,22,"c"]],"x":24,"t":1305119203.4507},{"y":25,"d":[[24,23,"k"]],"x":25,"t":1305119203.53062},{"y":25,"d":[[24,23," "]],"x":24,"t":1305119204.21066},{"y":25,"d":[[24,22," "]],"x":23,"t":1305119204.37061},{"y":25,"d":[[24,22,"i"]],"x":24,"t":1305119204.58664},{"y":25,"d":[[24,23,"c"]],"x":25,"t":1305119204.68281},{"y":25,"d":[[24,24,"k"]],"x":26,"t":1305119204.78673},{"y":25,"x":27,"t":1305119205.13861},{"y":25,"d":[[24,26,"m"]],"x":28,"t":1305119206.45857},{"y":25,"d":[[24,27,"a"]],"x":29,"t":1305119206.58667},{"y":25,"d":[[24,28,"s"]],"x":30,"t":1305119206.74681},{"y":25,"d":[[24,29,"t"]],"x":31,"t":1305119206.90665},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305119207.09062},{"y":25,"d":[[24,31,"r"]],"x":33,"t":1305119207.15465},{"y":25,"d":[[24,32,"^"]],"x":34,"t":1305119208.1628},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",12,16],["cp",18,17],["cp",19,18],["cp",12,19],["cp",21,20],["cp",12,21],["cp",23,22],["cp",24,23],["cp",12,24]],"x":1,"f":[["cp",5,4],["cp",6,5],["cp",9,8],["cp",5,9],["cp",0,10]],"B":[["cp",5,4],["cp",6,5],["cp",9,8],["cp",5,9],["cp",0,10]],"t":1305119210.21071},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",11,15],["cp",17,16],["cp",18,17],["cp",11,18],["cp",20,19],["cp",11,20],["cp",22,21],["cp",23,22],[23,0,49,"[detached HEAD dc41349] add hello.h using -f flag."]],"x":1,"f":[["cp",4,3],["cp",5,4],["cp",8,7],["cp",4,8],["cp",0,9]],"B":[["cp",4,3],["cp",5,4],["cp",8,7],["cp",4,8],["cp",0,9]],"t":1305119210.51945},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",10,8],["cp",11,9],["cp",12,10],["cp",13,11],["cp",14,12],["cp",9,13],["cp",16,14],["cp",17,15],["cp",9,16],["cp",19,17],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,48," 1 files changed, 1 insertions(+), 0 deletions(-)"],[23,0,49," create mode 100644 src/hello.h "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,1],["cp",4,2],["cp",2,3],["cp",7,5],["cp",0,7],["cp",0,8]],"B":[["cp",3,1],["cp",4,2],["cp",2,3],["cp",7,5],["cp",0,7],["cp",0,8]],"t":1305119210.52134},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119212.96246},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119213.10655},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119213.1943},{"y":25,"x":15,"t":1305119213.2744},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305119213.45855},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305119213.56247},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305119213.65051},{"y":25,"d":[[24,17,"r"]],"x":19,"t":1305119213.91436},{"y":25,"d":[[24,18,"r"]],"x":20,"t":1305119214.09838},{"y":25,"d":[[24,19,"y"]],"x":21,"t":1305119214.22639},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305119214.53852},{"y":25,"d":[[24,21,"p"]],"x":23,"t":1305119214.81046},{"y":25,"d":[[24,22,"i"]],"x":24,"t":1305119215.2506},{"y":25,"d":[[24,23,"c"]],"x":25,"t":1305119215.36234},{"y":25,"d":[[24,24,"k"]],"x":26,"t":1305119215.45878},{"y":25,"x":27,"t":1305119215.7785},{"y":25,"d":[[24,26,"m"]],"x":28,"t":1305119216.01837},{"y":25,"d":[[24,27,"a"]],"x":29,"t":1305119216.10643},{"y":25,"d":[[24,28,"s"]],"x":30,"t":1305119216.25844},{"d":[["r","bash-3.2$ git log --oneline -6 --decorate "],["r","8e715bc (HEAD, tag: F, master) commit using -a flag, means add then commit. "],["r","fd33ea2 (tag: E) add hello.h using -f flag. "],["r","4ad14d4 (tag: D) ignore works even move .gitignore to subdir. "],["r","211cb82 (tag: C) ignore object files... "],["r","15f507b (tag: hello_1.0, tag: B) Hello world initialized. "],["r","8be895d (tag: A) README is from welcome.txt "],["r","bash-3.2$ git checkout C "],["r","Note: checking out 'C'. "],["a"," "],["r","You are in 'detached HEAD' state. You can look around, make experimental "],["r","changes and commit them, and you can discard any commits you make in this "],["r","state without impacting any branches by performing another checkout. "],["a"," "],["r","If you want to create a new branch to retain commits you create, you may "],["r","do so (now or later) by using -b with the checkout command again. Example: "],["a"," "],["r"," git checkout -b new_branch_name "],["a"," "],["r","HEAD is now at 211cb82... ignore object files... "],["r","bash-3.2$ git cherry-pick master^ "],["r","[detached HEAD dc41349] add hello.h using -f flag. "],["r"," 1 files changed, 1 insertions(+), 0 deletions(-) "],["r"," create mode 100644 src/hello.h "],["r","bash-3.2$ git cherry-pick mast "]],"x":31,"B":[["a","0"],["r","00000000011110011111100111111000000000000000000000000000000000000000000000000000"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],"d","d",["r","00000000011111111111111001111110000000000000000000000000000000000000000000000000"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],["r","33333333366663333333333222222377777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],"d","d",["r","33333333333333333333333333333333777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305119216.34639,"i":1},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305119216.5143},{"y":25,"d":[[24,31,"r"]],"x":33,"t":1305119216.57843},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",8,12],["cp",14,13],["cp",15,14],["cp",8,15],["cp",17,16],["cp",8,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",8,24]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",5,4],["cp",1,5],["cp",7,6]],"B":[["cp",1,0],["cp",2,1],["cp",5,4],["cp",1,5],["cp",7,6]],"t":1305119216.70685},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",7,11],["cp",13,12],["cp",14,13],["cp",7,14],["cp",16,15],["cp",7,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,67,"[detached HEAD a2f9af0] commit using -a flag, means add then commit."]],"x":1,"f":[["cp",1,0],["cp",4,3],["cp",0,4],["cp",6,5]],"B":[["cp",1,0],["cp",4,3],["cp",0,4],["cp",6,5]],"t":1305119217.01989},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",6,10],["cp",12,11],["cp",13,12],["cp",6,13],["cp",15,14],["cp",6,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",19,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,2],["cp",0,3],["cp",5,4]],"B":[["cp",3,2],["cp",0,3],["cp",5,4]],"t":1305119217.02175},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119218.8662},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119218.94616},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119219.06662},{"y":25,"x":15,"t":1305119219.10612},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305119219.25814},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305119219.43423},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305119219.50655},{"y":25,"x":19,"t":1305119219.58613},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305119219.78622},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305119219.99417},{"y":25,"d":[[24,20,"o"]],"x":22,"t":1305119220.25009},{"y":25,"d":[[24,21,"n"]],"x":23,"t":1305119220.39414},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305119220.49839},{"y":25,"d":[[24,23,"l"]],"x":25,"t":1305119220.59408},{"y":25,"d":[[24,24,"i"]],"x":26,"t":1305119220.73812},{"y":25,"d":[[24,25,"n"]],"x":27,"t":1305119220.86611},{"y":25,"d":[[24,26,"e"]],"x":28,"t":1305119220.92201},{"y":25,"x":29,"t":1305119221.01},{"y":25,"d":[[24,28,"-"]],"x":30,"t":1305119221.17822},{"y":25,"d":[[24,29,"-"]],"x":31,"t":1305119221.35402},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305119221.48997},{"y":25,"d":[[24,31,"c"]],"x":33,"t":1305119221.70613},{"y":25,"d":[[24,31," "]],"x":32,"t":1305119222.13802},{"y":25,"d":[[24,30," "]],"x":31,"t":1305119222.32243},{"y":25,"d":[[24,30,"d"]],"x":32,"t":1305119222.45809},{"y":25,"d":[[24,31,"e"]],"x":33,"t":1305119222.61795},{"y":25,"d":[[24,32,"c"]],"x":34,"t":1305119222.79422},{"y":25,"d":[[24,33,"o"]],"x":35,"t":1305119222.85015},{"y":25,"d":[[24,34,"r"]],"x":36,"t":1305119222.98591},{"y":25,"d":[[24,35,"a"]],"x":37,"t":1305119223.17011},{"y":25,"d":[[24,36,"t"]],"x":38,"t":1305119223.274},{"y":25,"d":[[24,37,"e"]],"x":39,"t":1305119223.39417},{"y":25,"x":40,"t":1305119223.51425},{"y":25,"d":[[24,39,"-"]],"x":41,"t":1305119223.64218},{"y":25,"d":[[24,40,"6"]],"x":42,"t":1305119224.36995},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",5,9],["cp",11,10],["cp",12,11],["cp",5,12],["cp",14,13],["cp",5,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",18,22],["cp",24,23],["cp",5,24]],"x":1,"f":[["cp",2,1],["cp",0,2],["cp",4,3]],"B":[["cp",2,1],["cp",0,2],["cp",4,3]],"t":1305119224.50608},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",5,3],["cp",10,4],["cp",11,5],["cp",3,6],["cp",13,7],["cp",3,8],["cp",15,9],["cp",16,10],["cp",17,11],["cp",18,12],["cp",19,13],["cp",20,14],["cp",21,15],["cp",12,16],["cp",23,17],[18,0,58,"a2f9af0 (HEAD) commit using -a flag, means add then commit."],[19,0,33,"dc41349 add hello.h using -f flag."],[20,0,38,"211cb82 (tag: C) ignore object files..."],[21,0,67,"15f507b (tag: hello_1.0, tag: B) Hello world initialized. "],[22,0,48,"8be895d (tag: A) README is from welcome.txt "],[23,0,40,"cb5775e restore file: welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,0],["cp",0,1],["cp",0,2],[18,0,13,"33333333366663"],[19,0,6,["a","3"]],[20,0,15,["a","3"]],[21,0,31,["a","3"]],["cp",20,22],["cp",19,23]],"B":[["cp",3,0],["cp",0,1],["cp",0,2],[18,9,12,["a","1"]],[20,9,14,["a","1"]],[21,9,30,"1111111111111100111111"],["cp",20,22]],"t":1305119224.52157},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119234.92196},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119235.02546},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119235.09752},{"y":25,"x":15,"t":1305119235.16995},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305119236.20173},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305119236.35364},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305119236.42557},{"y":25,"x":19,"t":1305119236.48949},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305119236.64171},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305119236.80958},{"y":25,"d":[[24,20,"p"]],"x":22,"t":1305119237.03361},{"y":25,"d":[[24,21,"r"]],"x":23,"t":1305119237.13773},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305119237.28156},{"y":25,"d":[[24,23,"t"]],"x":25,"t":1305119237.44968},{"y":25,"d":[[24,24,"t"]],"x":26,"t":1305119237.62566},{"y":25,"d":[[24,25,"y"]],"x":27,"t":1305119237.78551},{"y":25,"x":28,"t":1305119238.8577},{"y":25,"x":27,"t":1305119239.19355},{"y":25,"d":[[24,26,"="]],"x":28,"t":1305119240.36155},{"y":25,"d":[[24,27,"f"]],"x":29,"t":1305119240.48958},{"y":25,"d":[[24,28,"u"]],"x":30,"t":1305119240.62551},{"y":25,"d":[[24,29,"l"]],"x":31,"t":1305119240.83363},{"y":25,"d":[[24,30,"l"]],"x":32,"t":1305119240.99332},{"y":25,"d":[[24,31,"e"]],"x":33,"t":1305119241.1216},{"y":25,"d":[[24,32,"r"]],"x":34,"t":1305119241.16933},{"y":25,"x":35,"t":1305119241.4253},{"y":25,"d":[[24,34,"-"]],"x":36,"t":1305119241.78575},{"y":25,"d":[[24,35,"-"]],"x":37,"t":1305119241.96133},{"y":25,"d":[[24,36,"d"]],"x":38,"t":1305119242.72926},{"y":25,"d":[[24,37,"e"]],"x":39,"t":1305119242.9943},{"y":25,"d":[[24,38,"c"]],"x":40,"t":1305119243.25731},{"y":25,"d":[[24,39,"o"]],"x":41,"t":1305119243.3372},{"y":25,"d":[[24,40,"r"]],"x":42,"t":1305119243.47353},{"y":25,"d":[[24,41,"a"]],"x":43,"t":1305119243.8976},{"y":25,"d":[[24,42,"t"]],"x":44,"t":1305119244.02532},{"y":25,"d":[[24,43,"e"]],"x":45,"t":1305119244.18518},{"y":25,"x":46,"t":1305119244.29775},{"y":25,"d":[[24,45,"-"]],"x":47,"t":1305119244.98508},{"y":25,"d":[[24,46,"2"]],"x":48,"t":1305119245.13837},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",2,5],["cp",7,6],["cp",2,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",11,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",2,24]],"x":1,"f":[["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",19,21],["cp",18,22],["cp",0,23]],"B":[["cp",18,17],["cp",0,18],["cp",20,19],["cp",21,20],["cp",19,21],["cp",0,22]],"t":1305119245.41767},{"y":25,"d":[["cp",11,0],["cp",16,1],["cp",17,2],["cp",18,3],["cp",19,4],["cp",20,5],["cp",21,6],["cp",22,7],["cp",23,8],[9,0,53,"commit a2f9af0b099d0a0d28b9c15dda475bcbcc3bf920 (HEAD)"],[10,0,49,"Author: Jiang Xin "],[11,0,48,"AuthorDate: Wed May 11 20:18:54 2011 +0800 "],[12,0,41,"Commit: Jiang Xin "],[13,0,41,"CommitDate: Wed May 11 21:06:57 2011 +0800"],["cp",24,14],[15,1,48," commit using -a flag, means add then commit. "],["cp",14,16],[17,0,58,"commit dc4134948d33602c3d258ab2f23c5fcfb6f79ecf "],["cp",10,18],[19,0,41,"AuthorDate: Wed May 11 20:18:04 2011 +0800"],["cp",12,20],[21,0,42,"CommitDate: Wed May 11 21:06:50 2011 +0800 "],["cp",14,22],[23,0,46," add hello.h using -f flag. "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",17,2],["cp",18,3],["cp",19,4],["cp",20,5],["cp",4,6],["cp",3,7],[9,0,53,"333333333333333333333333333333333333333333333333366663"],[17,9,46,["a","3"]],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21],["cp",0,22]],"B":[["cp",17,2],["cp",19,4],["cp",20,5],["cp",4,6],[9,49,52,["a","1"]],["cp",0,17],["cp",0,19],["cp",0,20],["cp",0,21]],"t":1305119245.43246},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119253.09709},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119253.16882},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119253.25713},{"y":25,"x":15,"t":1305119253.35293},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305119253.56095},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305119253.697},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305119253.77704},{"y":25,"d":[[24,17,"c"]],"x":19,"t":1305119253.94498},{"y":25,"d":[[24,18,"k"]],"x":20,"t":1305119254.00876},{"y":25,"d":[[24,19,"o"]],"x":21,"t":1305119254.1529},{"y":25,"d":[[24,20,"u"]],"x":22,"t":1305119254.24926},{"y":25,"d":[[24,21,"t"]],"x":23,"t":1305119254.32104},{"y":25,"x":24,"t":1305119254.41684},{"y":25,"d":[[24,23,"m"]],"x":25,"t":1305119254.56116},{"y":25,"d":[[24,24,"a"]],"x":26,"t":1305119254.68905},{"y":25,"d":[[24,25,"s"]],"x":27,"t":1305119254.82528},{"d":[["r"," 1 files changed, 1 insertions(+), 0 deletions(-) "],["r","bash-3.2$ git log --oneline --decorate -6 "],["r","a2f9af0 (HEAD) commit using -a flag, means add then commit. "],["r","dc41349 add hello.h using -f flag. "],["r","211cb82 (tag: C) ignore object files... "],["r","15f507b (tag: hello_1.0, tag: B) Hello world initialized. "],["r","8be895d (tag: A) README is from welcome.txt "],["r","cb5775e restore file: welcome.txt "],["r","bash-3.2$ git log --pretty=fuller --decorate -2 "],["r","commit a2f9af0b099d0a0d28b9c15dda475bcbcc3bf920 (HEAD) "],["r","Author: Jiang Xin "],["r","AuthorDate: Wed May 11 20:18:54 2011 +0800 "],["r","Commit: Jiang Xin "],["r","CommitDate: Wed May 11 21:06:57 2011 +0800 "],["a"," "],["r"," commit using -a flag, means add then commit. "],["a"," "],["r","commit dc4134948d33602c3d258ab2f23c5fcfb6f79ecf "],["r","Author: Jiang Xin "],["r","AuthorDate: Wed May 11 20:18:04 2011 +0800 "],["r","Commit: Jiang Xin "],["r","CommitDate: Wed May 11 21:06:50 2011 +0800 "],["a"," "],["r"," add hello.h using -f flag. "],["r","bash-3.2$ git checkout mast "]],"x":28,"B":[["a","0"],"d",["r","00000000011110000000000000000000000000000000000000000000000000000000000000000000"],["a","0"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],["r","00000000011111111111111001111110000000000000000000000000000000000000000000000000"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d",["r","00000000000000000000000000000000000000000000000001111000000000000000000000000000"],["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d",["r","33333333366663777777777777777777777777777777777777777777777777777777777777777777"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],["r","33333333333333333333333333333333777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","33333333333333333333333333333333333333333333333336666377777777777777777777777777"],["a","7"],"d","d","d","d","d","d",["r","33333333333333333333333333333333333333333333333777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305119254.92902,"i":1},{"y":25,"d":[[24,27,"e"]],"x":29,"t":1305119255.08096},{"y":25,"d":[[24,28,"r"]],"x":30,"t":1305119255.15283},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",13,15],["cp",17,16],["cp",9,17],["cp",19,18],["cp",11,19],["cp",21,20],["cp",13,21],["cp",23,22],["cp",24,23],["cp",13,24]],"x":1,"f":[["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",3,5],["cp",2,6],["cp",0,7],["cp",9,8],["cp",0,9],["cp",17,16],["cp",0,17]],"B":[["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",3,5],["cp",0,6],["cp",9,8],["cp",0,9]],"t":1305119255.98465},{"y":25,"d":[["cp",12,0],["cp",13,1],["cp",14,2],["cp",1,3],["cp",16,4],["cp",9,5],["cp",18,6],["cp",11,7],["cp",20,8],["cp",1,9],["cp",22,10],["cp",23,11],[12,0,58,"Warning: you are leaving 2 commits behind, not connected to"],[13,0,20,"any of your branches:"],["cp",1,14],[15,2,53,"a2f9af0 commit using -a flag, means add then commit."],[16,0,46," dc41349 add hello.h using -f flag. "],["cp",1,17],[18,0,73,"If you want to keep them by creating a new branch, this may be a good time"],[19,0,41,"to do so with: "],["cp",1,20],[21,1,67,"git branch new_branch_name a2f9af0b099d0a0d28b9c15dda475bcbcc3bf920"],["cp",1,22],[23,0,28,"Switched to branch 'master' "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,1],["cp",0,2],["cp",0,3],["cp",16,4],["cp",0,5],["cp",0,6],["cp",0,8],["cp",0,16]],"B":[["cp",0,1],["cp",0,3],["cp",0,4],["cp",0,5],["cp",0,8]],"t":1305119255.99766},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119256.56878},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119256.63267},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119256.74475},{"y":25,"x":15,"t":1305119256.80083},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305119257.0411},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305119257.17677},{"y":25,"d":[[24,16,"s"]],"x":18,"t":1305119257.32086},{"y":25,"d":[[24,17,"t"]],"x":19,"t":1305119257.52071},{"y":25,"d":[[24,17," "]],"x":18,"t":1305119258.11287},{"y":25,"d":[[24,16," "]],"x":17,"t":1305119258.59257},{"y":25,"d":[[24,15," "]],"x":16,"t":1305119258.79278},{"y":25,"d":[[24,14," "]],"x":15,"t":1305119258.96062},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305119259.41662},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305119259.56874},{"y":25,"d":[[24,16,"s"]],"x":18,"t":1305119259.71277},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305119259.77664},{"y":25,"d":[[24,18,"t"]],"x":20,"t":1305119259.89656},{"y":25,"x":21,"t":1305119260.05669},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305119260.28067},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305119260.46478},{"y":25,"d":[[24,22,"h"]],"x":24,"t":1305119261.30457},{"y":25,"d":[[24,23,"a"]],"x":25,"t":1305119261.36892},{"y":25,"d":[[24,24,"r"]],"x":26,"t":1305119261.4809},{"y":25,"d":[[24,25,"d"]],"x":27,"t":1305119261.65657},{"y":25,"x":28,"t":1305119261.8009},{"y":25,"d":[[24,27,"H"]],"x":29,"t":1305119262.28056},{"y":25,"d":[[24,28,"E"]],"x":30,"t":1305119262.3365},{"y":25,"d":[[24,29,"A"]],"x":31,"t":1305119262.49682},{"y":25,"d":[[24,30,"D"]],"x":32,"t":1305119262.57658},{"y":25,"d":[[24,31,"@"]],"x":33,"t":1305119263.86488},{"y":25,"d":[[24,32,"{"]],"x":34,"t":1305119264.40076},{"y":25,"d":[[24,33,"1"]],"x":35,"t":1305119264.6164},{"y":25,"d":[[24,34,"}"]],"x":36,"t":1305119264.94449},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",0,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13],["cp",15,14],["cp",16,15],["cp",0,16],["cp",18,17],["cp",19,18],["cp",0,19],["cp",21,20],["cp",0,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",4,3],["cp",0,4]],"t":1305119265.21642},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",1,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",1,12],["cp",14,13],["cp",15,14],["cp",1,15],["cp",17,16],["cp",18,17],["cp",1,18],["cp",20,19],["cp",1,20],["cp",22,21],["cp",23,22],[23,0,66,"HEAD is now at a2f9af0 commit using -a flag, means add then commit."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,2],["cp",0,3]],"t":1305119265.2269},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119266.01646},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119266.09639},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119266.20842},{"y":25,"x":15,"t":1305119266.29636},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305119266.44051},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305119266.60873},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305119266.74468},{"y":25,"x":19,"t":1305119266.8246},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305119267.60861},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305119267.79235},{"y":25,"d":[[24,20,"d"]],"x":22,"t":1305119268.02424},{"y":25,"d":[[24,21,"e"]],"x":23,"t":1305119268.2003},{"y":25,"d":[[24,22,"c"]],"x":24,"t":1305119268.36842},{"y":25,"d":[[24,23,"o"]],"x":25,"t":1305119268.45644},{"y":25,"d":[[24,24,"r"]],"x":26,"t":1305119268.53658},{"y":25,"d":[[24,25,"a"]],"x":27,"t":1305119268.68855},{"y":25,"d":[[24,26,"t"]],"x":28,"t":1305119268.80863},{"y":25,"d":[[24,27,"e"]],"x":29,"t":1305119268.93629},{"y":25,"x":30,"t":1305119269.07215},{"y":25,"d":[[24,29,"-"]],"x":31,"t":1305119270.36044},{"y":25,"d":[[24,30,"-"]],"x":32,"t":1305119270.53636},{"y":25,"d":[[24,31,"o"]],"x":33,"t":1305119270.74428},{"y":25,"d":[[24,32,"n"]],"x":34,"t":1305119270.88014},{"y":25,"d":[[24,33,"e"]],"x":35,"t":1305119271.00828},{"y":25,"d":[[24,34,"l"]],"x":36,"t":1305119271.04848},{"y":25,"d":[[24,35,"i"]],"x":37,"t":1305119271.20042},{"y":25,"d":[[24,36,"n"]],"x":38,"t":1305119271.31214},{"y":25,"d":[[24,37,"e"]],"x":39,"t":1305119271.37624},{"y":25,"x":40,"t":1305119271.48031},{"y":25,"d":[[24,39,"-"]],"x":41,"t":1305119271.8884},{"y":25,"d":[[24,40,"6"]],"x":42,"t":1305119272.21618},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",0,11],["cp",13,12],["cp",14,13],["cp",0,14],["cp",16,15],["cp",17,16],["cp",0,17],["cp",19,18],["cp",0,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",2,1],["cp",0,2]],"t":1305119272.32017},{"y":25,"d":[["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",0,5],["cp",12,6],["cp",13,7],["cp",0,8],["cp",15,9],["cp",16,10],["cp",18,12],["cp",0,13],["cp",20,14],["cp",21,15],["cp",22,16],["cp",23,17],[18,0,67,"a2f9af0 (HEAD, master) commit using -a flag, means add then commit. "],[19,0,33,"dc41349 add hello.h using -f flag."],[20,0,38,"211cb82 (tag: C) ignore object files..."],[21,0,56,"15f507b (tag: hello_1.0, tag: B) Hello world initialized."],[22,0,66,"8be895d (tag: A) README is from welcome.txt "],[23,0,40,"cb5775e restore file: welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",0,1],[18,0,21,"3333333336666332222223"],[19,0,6,["a","3"]],[20,0,15,["a","3"]],[21,0,31,["a","3"]],["cp",20,22],["cp",19,23]],"B":[[18,9,20,"111100111111"],[20,9,14,["a","1"]],[21,9,30,"1111111111111100111111"],["cp",20,22]],"t":1305119272.33433},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119279.09587},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119279.2161},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119279.28796},{"y":25,"x":15,"t":1305119279.368},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305119280.63987},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305119280.7201},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305119280.82375},{"y":25,"d":[[24,17,"c"]],"x":19,"t":1305119280.99185},{"y":25,"d":[[24,18,"k"]],"x":20,"t":1305119281.06371},{"y":25,"d":[[24,19,"o"]],"x":21,"t":1305119281.19973},{"y":25,"d":[[24,20,"u"]],"x":22,"t":1305119281.28787},{"y":25,"d":[[24,21,"t"]],"x":23,"t":1305119281.36779},{"y":25,"x":24,"t":1305119281.43979},{"y":25,"d":[[24,23,"m"]],"x":25,"t":1305119281.55974},{"y":25,"d":[[24,24,"a"]],"x":26,"t":1305119281.66389},{"y":25,"d":[[24,25,"s"]],"x":27,"t":1305119281.80807},{"y":25,"d":[[24,26,"t"]],"x":28,"t":1305119281.95196},{"y":25,"d":[[24,27,"e"]],"x":29,"t":1305119282.11322},{"y":25,"d":[["cp",2,24]],"x":30,"t":1305119282.19168},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",4,7],["cp",9,8],["cp",10,9],["cp",4,10],["cp",12,11],["cp",4,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",1,23],["cp",4,24]],"x":1,"f":[["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",19,21],["cp",18,22],["cp",0,23]],"B":[["cp",18,17],["cp",0,18],["cp",20,19],["cp",21,20],["cp",19,21],["cp",0,22]],"t":1305119282.51975},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",3,6],["cp",8,7],["cp",9,8],["cp",3,9],["cp",11,10],["cp",3,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",0,22],[23,0,28,"Already on 'master' "]],"x":1,"f":[["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",18,20],["cp",17,21],["cp",0,22]],"B":[["cp",17,16],["cp",0,17],["cp",19,18],["cp",20,19],["cp",18,20],["cp",0,21]],"t":1305119282.52862},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305119282.81505},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119283.75977},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119283.86383},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119283.96796},{"y":25,"x":15,"t":1305119284.02366},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305119284.42367},{"d":[["r","bash-3.2$ git checkout master "],["r","Warning: you are leaving 2 commits behind, not connected to "],["r","any of your branches: "],["a"," "],["r"," a2f9af0 commit using -a flag, means add then commit. "],["r"," dc41349 add hello.h using -f flag. "],["a"," "],["r","If you want to keep them by creating a new branch, this may be a good time "],["r","to do so with: "],["a"," "],["r"," git branch new_branch_name a2f9af0b099d0a0d28b9c15dda475bcbcc3bf920 "],["a"," "],["r","Switched to branch 'master' "],["r","bash-3.2$ git reset --hard HEAD@{1} "],["r","HEAD is now at a2f9af0 commit using -a flag, means add then commit. "],["r","bash-3.2$ git log --decorate --oneline -6 "],["r","a2f9af0 (HEAD, master) commit using -a flag, means add then commit. "],["r","dc41349 add hello.h using -f flag. "],["r","211cb82 (tag: C) ignore object files... "],["r","15f507b (tag: hello_1.0, tag: B) Hello world initialized. "],["r","8be895d (tag: A) README is from welcome.txt "],["r","cb5775e restore file: welcome.txt "],["r","bash-3.2$ git checkout master "],["r","Already on 'master' "],["r","bash-3.2$ git re "]],"x":17,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["r","00000000011110011111100000000000000000000000000000000000000000000000000000000000"],["a","0"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],["r","00000000011111111111111001111110000000000000000000000000000000000000000000000000"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["r","33333333366663322222237777777777777777777777777777777777777777777777777777777777"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],["r","33333333333333333333333333333333777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305119284.57598,"i":1},{"y":25,"d":[[24,16,"s"]],"x":18,"t":1305119284.71981},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305119284.77603},{"y":25,"d":[[24,18,"t"]],"x":20,"t":1305119284.87969},{"y":25,"x":21,"t":1305119285.0248},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305119285.18387},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305119285.37598},{"y":25,"d":[[24,22,"h"]],"x":24,"t":1305119286.98364},{"y":25,"d":[[24,23,"a"]],"x":25,"t":1305119287.04822},{"y":25,"d":[[24,24,"r"]],"x":26,"t":1305119287.17559},{"y":25,"d":[[24,25,"d"]],"x":27,"t":1305119287.40786},{"y":25,"x":28,"t":1305119287.56762},{"y":25,"d":[[24,27,"F"]],"x":29,"t":1305119287.87973},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",2,5],["cp",7,6],["cp",8,7],["cp",2,8],["cp",10,9],["cp",2,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",2,24]],"x":1,"f":[["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",17,19],["cp",16,20],["cp",0,21]],"B":[["cp",16,15],["cp",0,16],["cp",18,17],["cp",19,18],["cp",17,19],["cp",0,20]],"t":1305119288.10391},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",1,4],["cp",6,5],["cp",7,6],["cp",1,7],["cp",9,8],["cp",1,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,66,"HEAD is now at 8e715bc commit using -a flag, means add then commit."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",16,18],["cp",15,19],["cp",0,20]],"B":[["cp",15,14],["cp",0,15],["cp",17,16],["cp",18,17],["cp",16,18],["cp",0,19]],"t":1305119288.11517},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119289.32784},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119289.41551},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119289.51156},{"y":25,"x":15,"t":1305119289.55948},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305119289.83157},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305119289.99953},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305119290.05555},{"y":25,"x":19,"t":1305119290.11964},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305119290.27946},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305119290.46409},{"y":25,"d":[[24,20,"o"]],"x":22,"t":1305119290.64769},{"y":25,"d":[[24,21,"n"]],"x":23,"t":1305119290.78366},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305119290.84768},{"y":25,"d":[[24,23,"l"]],"x":25,"t":1305119291.74356},{"y":25,"d":[[24,24,26,"ine"]],"x":29,"t":1305119291.95326},{"y":25,"d":[[24,28,"-"]],"x":30,"t":1305119292.65624},{"y":25,"d":[[24,29,"-"]],"x":31,"t":1305119292.84727},{"y":25,"d":[[24,30,"d"]],"x":32,"t":1305119293.06359},{"y":25,"d":[[24,31,"e"]],"x":33,"t":1305119293.24757},{"y":25,"d":[[24,32,"c"]],"x":34,"t":1305119293.43142},{"y":25,"d":[[24,33,"o"]],"x":35,"t":1305119293.53534},{"y":25,"d":[[24,34,"r"]],"x":36,"t":1305119293.62363},{"y":25,"d":[[24,35,37,"ate"]],"x":39,"t":1305119293.93296},{"y":25,"x":40,"t":1305119294.68747},{"y":25,"d":[[24,39,"-"]],"x":41,"t":1305119294.89541},{"y":25,"d":[[24,40,"6"]],"x":42,"t":1305119295.50322},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",8,7],["cp",0,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",15,17],["cp",14,18],["cp",0,19]],"B":[["cp",14,13],["cp",0,14],["cp",16,15],["cp",17,16],["cp",15,17],["cp",0,18]],"t":1305119295.84747},{"y":25,"d":[["cp",7,1],["cp",0,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",14,8],["cp",15,9],["cp",16,10],["cp",17,11],["cp",18,12],["cp",19,13],["cp",20,14],["cp",21,15],["cp",22,16],["cp",23,17],[18,0,74,"8e715bc (HEAD, tag: F, master) commit using -a flag, means add then commit."],[19,0,42,"fd33ea2 (tag: E) add hello.h using -f flag."],[20,0,60,"4ad14d4 (tag: D) ignore works even move .gitignore to subdir."],["cp",9,21],["cp",10,22],["cp",11,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",13,7],["cp",14,8],["cp",15,9],["cp",16,10],["cp",9,11],["cp",8,12],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],[18,7,29,"33666633333333332222223"],["cp",9,19],["cp",9,20],["cp",9,21],["cp",10,22],["cp",9,23]],"B":[["cp",13,7],["cp",15,9],["cp",16,10],["cp",9,11],["cp",0,13],["cp",0,15],["cp",0,16],["cp",0,17],[18,9,28,"11110011111100111111"],["cp",9,19],["cp",9,20],["cp",9,21],["cp",10,22],["cp",9,23]],"t":1305119295.86061},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119299.8471},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119299.93516},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119300.02313},{"y":25,"x":15,"t":1305119300.07929},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305119300.25529},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305119300.39117},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305119300.45541},{"y":25,"d":[[24,17,"c"]],"x":19,"t":1305119300.62336},{"y":25,"d":[[24,18,"k"]],"x":20,"t":1305119300.67127},{"y":25,"d":[[24,19,"o"]],"x":21,"t":1305119300.82327},{"y":25,"d":[[24,20,"u"]],"x":22,"t":1305119300.9031},{"y":25,"d":[[24,21,"t"]],"x":23,"t":1305119300.9672},{"y":25,"x":24,"t":1305119301.06323},{"y":25,"d":[[24,23,"D"]],"x":25,"t":1305119301.32744},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",8,20],["cp",9,21],["cp",10,22],["cp",24,23],["cp",1,24]],"x":1,"f":[["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",8,10],["cp",7,11],["cp",0,12],["cp",18,17],["cp",8,18],["cp",9,21],["cp",8,22],["cp",0,23]],"B":[["cp",7,6],["cp",0,7],["cp",9,8],["cp",10,9],["cp",8,10],["cp",0,11],["cp",18,17],["cp",8,18],["cp",9,21],["cp",8,22],["cp",0,23]],"t":1305119301.51897},{"y":25,"d":[["cp",12,0],["cp",13,1],["cp",14,2],["cp",15,3],["cp",16,4],["cp",17,5],["cp",18,6],["cp",19,7],["cp",23,11],[12,0,28,"Note: checking out 'D'. "],["cp",24,13],[14,0,71,"You are in 'detached HEAD' state. You can look around, make experimental"],[15,0,72,"changes and commit them, and you can discard any commits you make in this"],[16,0,67,"state without impacting any branches by performing another checkout."],["cp",13,17],[18,0,71,"If you want to create a new branch to retain commits you create, you may"],[19,0,73,"do so (now or later) by using -b with the checkout command again. Example:"],["cp",13,20],[21,0,56," git checkout -b new_branch_name "],["cp",13,22],[23,0,69,"HEAD is now at 4ad14d4... ignore works even move .gitignore to subdir."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",17,5],["cp",8,6],["cp",6,7],["cp",0,11],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21],["cp",0,22]],"B":[["cp",17,5],["cp",8,6],["cp",6,7],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21],["cp",0,22]],"t":1305119301.52977},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119303.43107},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119303.51111},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119303.61506},{"y":25,"x":15,"t":1305119303.67095},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305119303.93492},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305119304.09494},{"y":25,"d":[[24,16,"s"]],"x":18,"t":1305119304.23105},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305119304.29499},{"y":25,"d":[[24,18,"t"]],"x":20,"t":1305119304.39902},{"y":25,"x":21,"t":1305119304.49506},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305119304.67903},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305119304.84707},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305119304.97491},{"y":25,"d":[[24,23,"o"]],"x":25,"t":1305119305.08692},{"y":25,"d":[[24,24,"f"]],"x":26,"t":1305119305.16683},{"y":25,"d":[[24,25,"t"]],"x":27,"t":1305119305.37476},{"y":25,"x":28,"t":1305119305.47899},{"y":25,"d":[[24,27,"H"]],"x":29,"t":1305119305.86306},{"y":25,"d":[[24,28,"E"]],"x":30,"t":1305119305.94296},{"y":25,"d":[[24,29,"A"]],"x":31,"t":1305119306.09483},{"y":25,"d":[[24,30,"D"]],"x":32,"t":1305119306.19092},{"y":25,"d":[[24,31,"^"]],"x":33,"t":1305119307.30305},{"y":25,"d":[[24,32,"^"]],"x":34,"t":1305119307.48688},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",12,16],["cp",18,17],["cp",19,18],["cp",12,19],["cp",21,20],["cp",12,21],["cp",23,22],["cp",24,23],["cp",12,24]],"x":1,"f":[["cp",5,4],["cp",6,5],["cp",9,8],["cp",5,9],["cp",0,10]],"B":[["cp",5,4],["cp",6,5],["cp",9,8],["cp",5,9],["cp",0,10]],"t":1305119309.4951},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305119309.50497},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119310.37578},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119310.47083},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119310.56684},{"y":25,"x":15,"t":1305119310.65487},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305119311.81481},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305119311.90288},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305119312.06258},{"y":25,"d":[[24,17,"m"]],"x":19,"t":1305119312.22267},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305119312.38283},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305119312.43086},{"y":25,"x":22,"t":1305119312.53473},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305119312.679},{"y":25,"d":[[24,22,"C"]],"x":24,"t":1305119313.04703},{"y":25,"x":25,"t":1305119313.27067},{"y":25,"d":[[24,24,"C"]],"x":26,"t":1305119313.60676},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",11,15],["cp",17,16],["cp",18,17],["cp",11,18],["cp",20,19],["cp",11,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",11,24]],"x":1,"f":[["cp",4,3],["cp",5,4],["cp",8,7],["cp",4,8],["cp",0,9]],"B":[["cp",4,3],["cp",5,4],["cp",8,7],["cp",4,8],["cp",0,9]],"t":1305119315.00675},{"d":[["r","8e715bc (HEAD, tag: F, master) commit using -a flag, means add then commit. "],["r","fd33ea2 (tag: E) add hello.h using -f flag. "],["r","4ad14d4 (tag: D) ignore works even move .gitignore to subdir. "],["r","211cb82 (tag: C) ignore object files... "],["r","15f507b (tag: hello_1.0, tag: B) Hello world initialized. "],["r","8be895d (tag: A) README is from welcome.txt "],["r","bash-3.2$ git checkout D "],["r","Note: checking out 'D'. "],["a"," "],["r","You are in 'detached HEAD' state. You can look around, make experimental "],["r","changes and commit them, and you can discard any commits you make in this "],["r","state without impacting any branches by performing another checkout. "],["a"," "],["r","If you want to create a new branch to retain commits you create, you may "],["r","do so (now or later) by using -b with the checkout command again. Example: "],["a"," "],["r"," git checkout -b new_branch_name "],["a"," "],["r","HEAD is now at 4ad14d4... ignore works even move .gitignore to subdir. "],["r","bash-3.2$ git reset --soft HEAD^^ "],["r","bash-3.2$ git commit -C C "],["r","[detached HEAD 47dbcd0] ignore object files... "],["r"," 1 files changed, 3 insertions(+), 0 deletions(-) "],["r"," create mode 100644 src/.gitignore "],["r","bash-3.2$ "]],"x":11,"B":[["r","00000000011110011111100111111000000000000000000000000000000000000000000000000000"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],"d","d",["r","00000000011111111111111001111110000000000000000000000000000000000000000000000000"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["r","33333333366663333333333222222377777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],"d","d",["r","33333333333333333333333333333333777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305119315.29728,"i":1},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119315.77458},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119315.84672},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119315.95869},{"y":25,"x":15,"t":1305119316.02284},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305119316.18266},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305119316.31854},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305119316.38264},{"y":25,"d":[[24,17,"c"]],"x":19,"t":1305119316.56647},{"y":25,"d":[[24,17," "]],"x":18,"t":1305119317.40652},{"y":25,"d":[[24,17,"r"]],"x":19,"t":1305119317.79046},{"y":25,"d":[[24,18,"r"]],"x":20,"t":1305119317.95058},{"y":25,"d":[[24,19,"y"]],"x":21,"t":1305119318.22443},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305119318.71043},{"y":25,"d":[[24,21,"p"]],"x":23,"t":1305119319.01453},{"y":25,"d":[[24,22,"i"]],"x":24,"t":1305119319.21462},{"y":25,"d":[[24,23,24,"ck"]],"x":27,"t":1305119319.34741},{"y":25,"d":[[24,26,"E"]],"x":28,"t":1305119320.39847},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",7,11],["cp",13,12],["cp",14,13],["cp",7,14],["cp",16,15],["cp",7,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",7,24]],"x":1,"f":[["cp",1,0],["cp",4,3],["cp",0,4],["cp",6,5]],"B":[["cp",1,0],["cp",4,3],["cp",0,4],["cp",6,5]],"t":1305119320.63043},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",6,10],["cp",12,11],["cp",13,12],["cp",6,13],["cp",15,14],["cp",6,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,49,"[detached HEAD ad8c6ca] add hello.h using -f flag."]],"x":1,"f":[["cp",3,2],["cp",0,3],["cp",5,4]],"B":[["cp",3,2],["cp",0,3],["cp",5,4]],"t":1305119320.93692},{"y":25,"d":[["cp",2,0],["cp",3,1],["cp",4,2],["cp",5,3],["cp",6,4],["cp",7,5],["cp",8,6],["cp",9,7],["cp",4,8],["cp",11,9],["cp",12,10],["cp",4,11],["cp",14,12],["cp",16,14],["cp",17,15],["cp",18,16],["cp",19,17],["cp",20,18],["cp",21,19],["cp",22,20],["cp",23,21],[22,0,48," 1 files changed, 1 insertions(+), 0 deletions(-)"],[23,0,49," create mode 100644 src/hello.h "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",4,2],["cp",2,3]],"B":[["cp",2,0],["cp",4,2],["cp",2,3]],"t":1305119320.93866},{"y":25,"d":[["cp",20,24]],"x":28,"t":1305119324.03013},{"y":25,"d":[[24,26," "]],"x":27,"t":1305119324.46217},{"y":25,"d":[[24,26,"F"]],"x":28,"t":1305119324.86257},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",3,7],["cp",9,8],["cp",10,9],["cp",3,10],["cp",12,11],["cp",3,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",3,24]],"x":1,"f":[["cp",1,0],["cp",2,1]],"B":[["cp",1,0],["cp",2,1]],"t":1305119325.24616},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",2,6],["cp",8,7],["cp",9,8],["cp",2,9],["cp",11,10],["cp",2,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,67,"[detached HEAD e26385a] commit using -a flag, means add then commit."]],"x":1,"f":[["cp",1,0]],"B":[["cp",1,0]],"t":1305119325.54865},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",1,5],["cp",7,6],["cp",8,7],["cp",1,8],["cp",10,9],["cp",1,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",19,23],[24,0,8,"bash-3.2$"]],"x":11,"t":1305119325.55048},{"y":25,"d":[["cp",21,24]],"x":11,"t":1305119327.42237},{"y":25,"d":[[24,10,26,"/ "]],"x":12,"t":1305119327.59016},{"y":25,"d":[[24,11,"l"]],"x":13,"t":1305119327.78211},{"y":25,"d":[[24,12,"o"]],"x":14,"t":1305119327.96717},{"y":25,"d":[[24,13,"g"]],"x":15,"t":1305119328.04626},{"y":25,"d":[[24,10,40,"git log --oneline --decorate -6"]],"x":11,"t":1305119328.18222},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",9,8],["cp",0,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",18,22],["cp",24,23],["cp",0,24]],"x":1,"t":1305119329.40613},{"y":25,"d":[["cp",6,0],["cp",4,1],["cp",8,2],["cp",1,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",14,8],["cp",15,9],["cp",16,10],["cp",17,11],["cp",18,12],["cp",19,13],["cp",20,14],["cp",21,15],["cp",12,16],["cp",23,17],[18,0,58,"e26385a (HEAD) commit using -a flag, means add then commit."],[19,0,33,"ad8c6ca add hello.h using -f flag."],[20,0,29,"47dbcd0 ignore object files..."],[21,0,67,"15f507b (tag: hello_1.0, tag: B) Hello world initialized. "],[22,0,48,"8be895d (tag: A) README is from welcome.txt "],[23,0,40,"cb5775e restore file: welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[[18,0,13,"33333333366663"],[19,0,6,["a","3"]],["cp",19,20],[21,0,31,["a","3"]],[22,0,15,["a","3"]],["cp",19,23]],"B":[[18,9,12,["a","1"]],[21,9,30,"1111111111111100111111"],[22,9,14,["a","1"]]],"t":1305119329.42073},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119337.50191},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119337.58989},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119338.18985},{"y":25,"x":15,"t":1305119338.31785},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305119338.98979},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305119339.07784},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305119339.16573},{"y":25,"d":[[24,17,"c"]],"x":19,"t":1305119339.33372},{"y":25,"d":[[24,18,"k"]],"x":20,"t":1305119339.42162},{"y":25,"d":[[24,19,"o"]],"x":21,"t":1305119339.56582},{"y":25,"d":[[24,20,"u"]],"x":22,"t":1305119339.66969},{"y":25,"d":[[24,21,"t"]],"x":23,"t":1305119339.72565},{"y":25,"x":24,"t":1305119339.81363},{"y":25,"d":[[24,23,"m"]],"x":25,"t":1305119339.97385},{"y":25,"d":[[24,24,"a"]],"x":26,"t":1305119340.09355},{"y":25,"d":[[24,25,"s"]],"x":27,"t":1305119340.22979},{"y":25,"d":[[24,26,"t"]],"x":28,"t":1305119340.34949},{"y":25,"d":[[24,27,"e"]],"x":29,"t":1305119340.50151},{"y":25,"d":[[24,28,"r"]],"x":30,"t":1305119340.55782},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",11,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",18,17],["cp",19,18],["cp",21,20],["cp",22,21],["cp",18,22],["cp",0,23]],"B":[["cp",18,17],["cp",0,18],["cp",21,20],["cp",22,21],["cp",0,22]],"t":1305119340.72588},{"y":25,"d":[["cp",13,0],["cp",14,1],["cp",11,2],["cp",16,3],["cp",17,4],["cp",18,5],["cp",19,6],["cp",20,7],["cp",21,8],["cp",22,9],["cp",23,10],[11,0,58,"Warning: you are leaving 3 commits behind, not connected to"],[12,0,30,"any of your branches: "],["cp",24,13],[14,0,67," e26385a commit using -a flag, means add then commit. "],[15,1,48," ad8c6ca add hello.h using -f flag. "],[16,0,40," 47dbcd0 ignore object files... "],["cp",13,17],[18,0,73,"If you want to keep them by creating a new branch, this may be a good time"],[19,0,29,"to do so with: "],["cp",13,20],[21,0,67," git branch new_branch_name e26385afafc98e3202555e8ea0a0cf996c1da323"],["cp",13,22],[23,0,28,"Switched to branch 'master' "]],"x":1,"f":[["cp",17,4],["cp",18,5],["cp",5,6],["cp",20,7],["cp",21,8],["cp",5,9],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21],["cp",0,22]],"B":[["cp",17,4],["cp",20,7],["cp",21,8],["cp",0,17],["cp",0,20],["cp",0,21]],"t":1305119340.73828},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305119341.02567},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119341.62971},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119341.70972},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119341.81362},{"y":25,"x":15,"t":1305119341.87746},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305119342.5895},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305119342.73379},{"y":25,"d":[[24,16,"s"]],"x":18,"t":1305119342.86952},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305119342.9494},{"y":25,"d":[[24,18,"t"]],"x":20,"t":1305119343.01355},{"y":25,"x":21,"t":1305119343.12555},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305119343.26959},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305119343.45356},{"y":25,"d":[[24,22,"h"]],"x":24,"t":1305119343.6297},{"y":25,"d":[[24,23,"r"]],"x":25,"t":1305119343.76551},{"y":25,"d":[[24,23," "]],"x":24,"t":1305119344.22175},{"y":25,"d":[[24,23,"a"]],"x":25,"t":1305119344.37361},{"y":25,"d":[[24,24,"r"]],"x":26,"t":1305119344.95746},{"y":25,"d":[[24,25,"d"]],"x":27,"t":1305119345.15748},{"y":25,"x":28,"t":1305119345.82954},{"y":25,"d":[[24,27,"m"]],"x":29,"t":1305119346.13338},{"y":25,"d":[[24,27," "]],"x":28,"t":1305119346.50116},{"y":25,"d":[[24,27,"H"]],"x":29,"t":1305119346.85332},{"y":25,"d":[[24,28,"E"]],"x":30,"t":1305119347.55742},{"y":25,"d":[[24,29,"A"]],"x":31,"t":1305119347.70941},{"y":25,"d":[[24,30,"D"]],"x":32,"t":1305119347.8373},{"y":25,"d":[[24,31,"@"]],"x":33,"t":1305119348.62958},{"y":25,"d":[[24,32,"{"]],"x":34,"t":1305119349.06148},{"y":25,"d":[[24,33,"1"]],"x":35,"t":1305119349.24546},{"y":25,"d":[[24,34,"}"]],"x":36,"t":1305119349.5735},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",12,16],["cp",18,17],["cp",19,18],["cp",12,19],["cp",21,20],["cp",12,21],["cp",23,22],["cp",24,23],["cp",12,24]],"x":1,"f":[["cp",4,3],["cp",5,4],["cp",7,6],["cp",8,7],["cp",4,8],["cp",0,9]],"B":[["cp",4,3],["cp",0,4],["cp",7,6],["cp",8,7],["cp",0,8]],"t":1305119349.85313},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",11,15],["cp",17,16],["cp",18,17],["cp",11,18],["cp",20,19],["cp",11,20],["cp",22,21],["cp",23,22],[23,0,66,"HEAD is now at e26385a commit using -a flag, means add then commit."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",3,2],["cp",4,3],["cp",6,5],["cp",7,6],["cp",3,7],["cp",0,8]],"B":[["cp",3,2],["cp",0,3],["cp",6,5],["cp",7,6],["cp",0,7]],"t":1305119349.86628},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305119350.74194},{"y":25,"d":[[24,10,34,"/ "]],"x":12,"t":1305119350.90953},{"y":25,"d":[[24,11,"l"]],"x":13,"t":1305119351.11727},{"y":25,"d":[[24,12,"o"]],"x":14,"t":1305119351.29325},{"y":25,"d":[[24,13,"g"]],"x":15,"t":1305119351.35736},{"y":25,"d":[["cp",1,24]],"x":11,"t":1305119351.5012},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",10,14],["cp",16,15],["cp",17,16],["cp",10,17],["cp",19,18],["cp",10,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",0,23],["cp",10,24]],"x":1,"f":[["cp",2,1],["cp",3,2],["cp",5,4],["cp",6,5],["cp",2,6],["cp",0,7]],"B":[["cp",2,1],["cp",0,2],["cp",5,4],["cp",6,5],["cp",0,6]],"t":1305119352.62926},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",4,8],["cp",15,9],["cp",16,10],["cp",4,11],["cp",18,12],["cp",4,13],["cp",20,14],["cp",21,15],["cp",22,16],["cp",23,17],[18,0,67,"e26385a (HEAD, master) commit using -a flag, means add then commit. "],[19,0,33,"ad8c6ca add hello.h using -f flag."],[20,0,29,"47dbcd0 ignore object files..."],[21,0,56,"15f507b (tag: hello_1.0, tag: B) Hello world initialized."],[22,0,66,"8be895d (tag: A) README is from welcome.txt "],["cp",0,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",2,0],["cp",7,1],["cp",1,2],["cp",1,3],["cp",1,4],["cp",1,5],["cp",1,6],[18,0,21,"3333333336666332222223"],["cp",0,19],["cp",0,20],[21,0,31,["a","3"]],[22,0,15,["a","3"]],["cp",0,23]],"B":[["cp",0,1],["cp",0,4],["cp",0,5],[18,9,20,"111100111111"],[21,9,30,"1111111111111100111111"],[22,9,14,["a","1"]]],"t":1305119352.64234},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",3,7],["cp",9,8],["cp",10,9],["cp",3,10],["cp",12,11],["cp",3,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",3,24]],"x":1,"f":[["cp",1,0],["cp",18,17],["cp",19,18],["cp",21,20],["cp",22,21],["cp",18,22],["cp",0,23]],"B":[["cp",18,17],["cp",0,18],["cp",21,20],["cp",22,21],["cp",0,22]],"t":1305119359.53322},{"y":25,"d":[["cp",23,24]],"x":11,"t":1305119359.53333},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",2,6],["cp",8,7],["cp",9,8],["cp",2,9],["cp",11,10],["cp",2,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",2,24]],"x":1,"f":[["cp",17,16],["cp",18,17],["cp",20,19],["cp",21,20],["cp",17,21],["cp",0,22]],"B":[["cp",17,16],["cp",0,17],["cp",20,19],["cp",21,20],["cp",0,21]],"t":1305119359.68487},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305119359.68498},{"d":[["r","Warning: you are leaving 3 commits behind, not connected to "],["r","any of your branches: "],["a"," "],["r"," e26385a commit using -a flag, means add then commit. "],["r"," ad8c6ca add hello.h using -f flag. "],["r"," 47dbcd0 ignore object files... "],["a"," "],["r","If you want to keep them by creating a new branch, this may be a good time "],["r","to do so with: "],["a"," "],["r"," git branch new_branch_name e26385afafc98e3202555e8ea0a0cf996c1da323 "],["a"," "],["r","Switched to branch 'master' "],["r","bash-3.2$ git reset --hard HEAD@{1} "],["r","HEAD is now at e26385a commit using -a flag, means add then commit. "],["r","bash-3.2$ git log --oneline --decorate -6 "],["r","e26385a (HEAD, master) commit using -a flag, means add then commit. "],["r","ad8c6ca add hello.h using -f flag. "],["r","47dbcd0 ignore object files... "],["r","15f507b (tag: hello_1.0, tag: B) Hello world initialized. "],["r","8be895d (tag: A) README is from welcome.txt "],["r","cb5775e restore file: welcome.txt "],["r","bash-3.2$ "],"d",["r","bash-3.2$ g "]],"x":12,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["r","00000000011110011111100000000000000000000000000000000000000000000000000000000000"],["a","0"],"d",["r","00000000011111111111111001111110000000000000000000000000000000000000000000000000"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d",["r","33333333366663322222237777777777777777777777777777777777777777777777777777777777"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],"d",["r","33333333333333333333333333333333777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305119360.41332,"i":1},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119360.48506},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119360.61296},{"y":25,"x":15,"t":1305119360.65288},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305119361.1491},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305119361.23676},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305119361.32488},{"y":25,"d":[[24,17,"c"]],"x":19,"t":1305119361.48509},{"y":25,"d":[[24,18,"k"]],"x":20,"t":1305119361.565},{"y":25,"d":[[24,19,"o"]],"x":21,"t":1305119361.70082},{"y":25,"d":[[24,20,"u"]],"x":22,"t":1305119361.76504},{"y":25,"d":[[24,21,"t"]],"x":23,"t":1305119361.85271},{"y":25,"x":24,"t":1305119361.93286},{"y":25,"d":[[24,23,"m"]],"x":25,"t":1305119362.02885},{"y":25,"d":[[24,24,"a"]],"x":26,"t":1305119362.15672},{"y":25,"d":[[24,25,"s"]],"x":27,"t":1305119362.30908},{"y":25,"d":[[24,26,"t"]],"x":28,"t":1305119362.41312},{"y":25,"d":[[24,27,"e"]],"x":29,"t":1305119362.55705},{"y":25,"d":[[24,28,"r"]],"x":30,"t":1305119362.61284},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",1,5],["cp",7,6],["cp",8,7],["cp",1,8],["cp",10,9],["cp",1,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",24,23],["cp",1,24]],"x":1,"f":[["cp",16,15],["cp",17,16],["cp",19,18],["cp",20,19],["cp",16,20],["cp",0,21]],"B":[["cp",16,15],["cp",0,16],["cp",19,18],["cp",20,19],["cp",0,20]],"t":1305119362.76472},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",9,8],["cp",0,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",23,22],[23,0,28,"Already on 'master' "]],"x":1,"f":[["cp",15,14],["cp",16,15],["cp",18,17],["cp",19,18],["cp",15,19],["cp",0,20]],"B":[["cp",15,14],["cp",0,15],["cp",18,17],["cp",19,18],["cp",0,19]],"t":1305119362.77401},{"y":25,"d":[["cp",20,24]],"x":11,"t":1305119363.06023},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119363.09307},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119363.17275},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119363.27711},{"y":25,"x":15,"t":1305119363.34096},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305119363.49285},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305119363.65292},{"y":25,"d":[[24,16,"s"]],"x":18,"t":1305119363.78888},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305119363.86889},{"y":25,"d":[[24,18,"t"]],"x":20,"t":1305119363.91666},{"y":25,"x":21,"t":1305119364.0287},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305119364.17259},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305119364.33278},{"y":25,"d":[[24,22,"h"]],"x":24,"t":1305119364.58069},{"y":25,"d":[[24,23,"a"]],"x":25,"t":1305119364.6608},{"y":25,"d":[[24,24,"r"]],"x":26,"t":1305119364.74078},{"y":25,"d":[[24,25,"d"]],"x":27,"t":1305119364.90856},{"y":25,"x":28,"t":1305119365.04487},{"y":25,"d":[[24,27,"F"]],"x":29,"t":1305119365.40566},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",3,6],["cp",8,7],["cp",3,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",22,21],["cp",23,22],["cp",24,23],["cp",3,24]],"x":1,"f":[["cp",14,13],["cp",15,14],["cp",17,16],["cp",18,17],["cp",14,18],["cp",0,19]],"B":[["cp",14,13],["cp",0,14],["cp",17,16],["cp",18,17],["cp",0,18]],"t":1305119366.97288},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",2,5],["cp",7,6],["cp",2,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,66,"HEAD is now at 8e715bc commit using -a flag, means add then commit."],["cp",18,24]],"x":11,"f":[["cp",13,12],["cp",14,13],["cp",16,15],["cp",17,16],["cp",13,17],["cp",0,18]],"B":[["cp",13,12],["cp",0,13],["cp",16,15],["cp",17,16],["cp",0,17]],"t":1305119366.98297},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",1,4],["cp",6,5],["cp",1,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,66,"bash-3.2$ exit "],["cp",1,24]],"x":1,"f":[["cp",12,11],["cp",13,12],["cp",15,14],["cp",16,15],["cp",12,16],["cp",0,17]],"B":[["cp",12,11],["cp",0,12],["cp",15,14],["cp",16,15],["cp",0,16]],"t":1305119370.28496}]} \ No newline at end of file diff --git a/html/part2/ch12-02-back2future-2.html b/html/part2/ch12-02-back2future-2.html new file mode 100644 index 000000000..02e7e28f6 --- /dev/null +++ b/html/part2/ch12-02-back2future-2.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch12-02-back2future-2 +json_file: ch12-02-back2future-2.json +--- diff --git a/html/part2/ch12-02-back2future-2.json b/html/part2/ch12-02-back2future-2.json new file mode 100644 index 000000000..16aea2755 --- /dev/null +++ b/html/part2/ch12-02-back2future-2.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305119515.91394,"i":1},{"y":1,"d":[[0,10,38,"cd /path/to/my/workspace/demo"]],"x":11,"t":1305119516.43105},{"y":2,"x":1,"t":1305119517.17512},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305119517.17536},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305119517.59928},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305119517.66307},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305119517.76696},{"y":2,"x":15,"t":1305119517.8231},{"y":2,"d":[[1,14,"l"]],"x":16,"t":1305119517.90318},{"y":2,"d":[[1,15,"o"]],"x":17,"t":1305119518.06293},{"y":2,"d":[[1,16,"g"]],"x":18,"t":1305119518.15097},{"y":2,"x":19,"t":1305119518.23923},{"y":2,"d":[[1,18,"-"]],"x":20,"t":1305119518.3991},{"y":2,"d":[[1,19,"-"]],"x":21,"t":1305119518.59102},{"y":2,"d":[[1,20,"o"]],"x":22,"t":1305119518.78298},{"y":2,"d":[[1,21,"n"]],"x":23,"t":1305119518.89497},{"y":2,"d":[[1,22,"e"]],"x":24,"t":1305119518.95909},{"y":2,"d":[[1,23,"l"]],"x":25,"t":1305119519.06276},{"y":2,"d":[[1,24,"i"]],"x":26,"t":1305119519.19908},{"y":2,"d":[[1,25,"n"]],"x":27,"t":1305119519.31918},{"y":2,"d":[[1,26,"e"]],"x":28,"t":1305119519.42304},{"y":2,"x":29,"t":1305119519.51096},{"y":2,"d":[[1,28,"-"]],"x":30,"t":1305119519.631},{"y":2,"d":[[1,29,"-"]],"x":31,"t":1305119519.81496},{"y":2,"d":[[1,30,"d"]],"x":32,"t":1305119520.639},{"y":2,"d":[[1,31,"e"]],"x":33,"t":1305119520.82328},{"y":2,"d":[[1,32,"c"]],"x":34,"t":1305119520.99878},{"y":2,"d":[[1,33,"o"]],"x":35,"t":1305119521.11889},{"y":2,"d":[[1,34,"r"]],"x":36,"t":1305119521.24697},{"y":2,"d":[[1,35,"a"]],"x":37,"t":1305119521.439},{"y":2,"d":[[1,36,"t"]],"x":38,"t":1305119521.83082},{"y":2,"d":[[1,37,"e"]],"x":39,"t":1305119521.98275},{"y":2,"x":40,"t":1305119522.1591},{"y":2,"d":[[1,39,"-"]],"x":41,"t":1305119522.33469},{"y":2,"d":[[1,40,"6"]],"x":42,"t":1305119523.11875},{"y":3,"x":1,"t":1305119523.34266},{"y":9,"d":[[2,0,74,"8e715bc (HEAD, tag: F, master) commit using -a flag, means add then commit."],[3,0,42,"fd33ea2 (tag: E) add hello.h using -f flag."],[4,0,60,"4ad14d4 (tag: D) ignore works even move .gitignore to subdir."],[5,0,38,"211cb82 (tag: C) ignore object files..."],[6,0,56,"15f507b (tag: hello_1.0, tag: B) Hello world initialized."],[7,0,42,"8be895d (tag: A) README is from welcome.txt"],[8,0,8,"bash-3.2$"]],"x":11,"f":[[2,0,29,"333333333666633333333332222223"],[3,0,15,["a","3"]],["cp",3,4],["cp",3,5],[6,0,31,["a","3"]],["cp",3,7]],"B":[[2,9,28,"11110011111100111111"],[3,9,14,["a","1"]],["cp",3,4],["cp",3,5],[6,9,30,"1111111111111100111111"],["cp",3,7]],"t":1305119523.35681},{"y":9,"d":[[8,10,"g"]],"x":12,"t":1305119525.75115},{"y":9,"d":[[8,11,"i"]],"x":13,"t":1305119525.84673},{"y":9,"d":[[8,12,"t"]],"x":14,"t":1305119525.95884},{"y":9,"x":15,"t":1305119526.02252},{"y":9,"d":[[8,14,"r"]],"x":16,"t":1305119528.23081},{"y":9,"d":[[8,15,"e"]],"x":17,"t":1305119528.37493},{"y":9,"d":[[8,16,"b"]],"x":18,"t":1305119528.58257},{"y":9,"d":[[8,17,"a"]],"x":19,"t":1305119528.75869},{"y":9,"d":[[8,18,"s"]],"x":20,"t":1305119528.91862},{"y":9,"d":[[8,19,"e"]],"x":21,"t":1305119529.03869},{"y":9,"x":22,"t":1305119529.22239},{"y":9,"d":[[8,21,"-"]],"x":23,"t":1305119529.47895},{"y":9,"d":[[8,22,"-"]],"x":24,"t":1305119529.66266},{"y":9,"d":[[8,23,"o"]],"x":25,"t":1305119529.87049},{"y":9,"d":[[8,24,"n"]],"x":26,"t":1305119530.03039},{"y":9,"d":[[8,25,"t"]],"x":27,"t":1305119530.18252},{"y":9,"d":[[8,26,"o"]],"x":28,"t":1305119530.29497},{"y":9,"x":29,"t":1305119530.85469},{"y":9,"d":[[8,28,"C"]],"x":30,"t":1305119531.70274},{"y":9,"x":31,"t":1305119531.97474},{"y":9,"d":[[8,30,"E"]],"x":32,"t":1305119533.31877},{"y":9,"d":[[8,31,"^"]],"x":33,"t":1305119534.24717},{"y":9,"x":34,"t":1305119534.78249},{"y":9,"d":[[8,33,"F"]],"x":35,"t":1305119535.15049},{"y":10,"x":1,"t":1305119535.71858},{"y":11,"d":[[9,0,56,"First, rewinding head to replay your work on top of it..."]],"x":1,"t":1305119536.09306},{"y":12,"d":[[10,0,35,"Applying: add hello.h using -f flag."]],"x":1,"t":1305119536.24774},{"y":13,"d":[[11,0,53,"Applying: commit using -a flag, means add then commit."]],"x":1,"t":1305119536.3475},{"y":13,"d":[[12,0,8,"bash-3.2$"]],"x":11,"t":1305119536.40569},{"y":13,"d":[[12,10,"g"]],"x":12,"t":1305119537.79058},{"y":13,"d":[[12,11,"i"]],"x":13,"t":1305119537.87034},{"y":13,"d":[[12,12,"t"]],"x":14,"t":1305119537.99839},{"y":13,"x":15,"t":1305119538.04613},{"y":13,"d":[[12,14,"l"]],"x":16,"t":1305119538.75835},{"y":13,"d":[[12,15,"o"]],"x":17,"t":1305119538.918},{"y":13,"d":[[12,16,"g"]],"x":18,"t":1305119539.04627},{"y":13,"x":17,"t":1305119539.43037},{"y":13,"d":[["cp",8,12]],"x":11,"t":1305119539.51017},{"y":13,"d":[[12,10,33,"/ "]],"x":12,"t":1305119539.6784},{"y":13,"d":[[12,11,"l"]],"x":13,"t":1305119539.87807},{"y":13,"d":[[12,12,"o"]],"x":14,"t":1305119540.05398},{"y":13,"d":[[12,13,"g"]],"x":15,"t":1305119540.06185},{"y":13,"d":[["cp",1,12]],"x":11,"t":1305119540.26991},{"y":14,"x":1,"t":1305119540.91002},{"y":20,"d":[[13,0,58,"8c17f39 (HEAD) commit using -a flag, means add then commit."],[14,0,33,"7c8d7d0 add hello.h using -f flag."],["cp",5,15],["cp",6,16],["cp",7,17],[18,0,32,"cb5775e restore file: welcome.txt"],[19,0,8,"bash-3.2$"]],"x":11,"f":[[13,0,13,"33333333366663"],[14,0,6,["a","3"]],["cp",3,15],["cp",6,16],["cp",3,17],["cp",14,18]],"B":[[13,9,12,["a","1"]],["cp",3,15],["cp",6,16],["cp",3,17]],"t":1305119540.92276},{"y":20,"d":[[19,10,"g"]],"x":12,"t":1305119545.06237},{"y":20,"d":[[19,11,"i"]],"x":13,"t":1305119545.15777},{"y":20,"d":[[19,12,"t"]],"x":14,"t":1305119545.25412},{"y":20,"x":15,"t":1305119545.29397},{"y":20,"d":[[19,14,"c"]],"x":16,"t":1305119545.51783},{"y":20,"d":[[19,15,"h"]],"x":17,"t":1305119545.63829},{"y":20,"d":[[19,16,"e"]],"x":18,"t":1305119545.71816},{"y":20,"d":[[19,17,"c"]],"x":19,"t":1305119545.87811},{"y":20,"d":[[19,18,"k"]],"x":20,"t":1305119545.93391},{"y":20,"d":[[19,19,"o"]],"x":21,"t":1305119546.06208},{"y":20,"d":[[19,20,"u"]],"x":22,"t":1305119546.15808},{"y":20,"d":[[19,21,"t"]],"x":23,"t":1305119546.18985},{"y":20,"x":24,"t":1305119546.2781},{"y":20,"d":[[19,23,"m"]],"x":25,"t":1305119546.40613},{"y":20,"d":[[19,24,"a"]],"x":26,"t":1305119546.50199},{"y":20,"d":[[19,25,"s"]],"x":27,"t":1305119546.64599},{"y":20,"d":[[19,26,"t"]],"x":28,"t":1305119546.74205},{"y":20,"d":[[19,27,"e"]],"x":29,"t":1305119546.9017},{"d":[["r","bash-3.2$ cd /path/to/my/workspace/demo "],["r","bash-3.2$ git log --oneline --decorate -6 "],["r","8e715bc (HEAD, tag: F, master) commit using -a flag, means add then commit. "],["r","fd33ea2 (tag: E) add hello.h using -f flag. "],["r","4ad14d4 (tag: D) ignore works even move .gitignore to subdir. "],["r","211cb82 (tag: C) ignore object files... "],["r","15f507b (tag: hello_1.0, tag: B) Hello world initialized. "],["r","8be895d (tag: A) README is from welcome.txt "],["r","bash-3.2$ git rebase --onto C E^ F "],["r","First, rewinding head to replay your work on top of it... "],["r","Applying: add hello.h using -f flag. "],["r","Applying: commit using -a flag, means add then commit. "],["r","bash-3.2$ git log --oneline --decorate -6 "],["r","8c17f39 (HEAD) commit using -a flag, means add then commit. "],["r","7c8d7d0 add hello.h using -f flag. "],["r","211cb82 (tag: C) ignore object files... "],["r","15f507b (tag: hello_1.0, tag: B) Hello world initialized. "],["r","8be895d (tag: A) README is from welcome.txt "],["r","cb5775e restore file: welcome.txt "],["r","bash-3.2$ git checkout master "],["a"," "],"d","d","d","d"],"x":30,"B":[["a","0"],"d",["r","00000000011110011111100111111000000000000000000000000000000000000000000000000000"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],"d","d",["r","00000000011111111111111001111110000000000000000000000000000000000000000000000000"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d",["r","00000000011110000000000000000000000000000000000000000000000000000000000000000000"],["a","0"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],["r","00000000011111111111111001111110000000000000000000000000000000000000000000000000"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d"],"y":20,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d",["r","33333333366663333333333222222377777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],"d","d",["r","33333333333333333333333333333333777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d",["r","33333333366663777777777777777777777777777777777777777777777777777777777777777777"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],["r","33333333333333333333333333333333777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305119546.98183,"i":1},{"y":21,"x":1,"t":1305119547.10989},{"y":25,"d":[["cp",8,0],["cp",9,1],["cp",10,2],["cp",11,3],["cp",12,4],["cp",13,5],["cp",14,6],["cp",15,7],["cp",16,8],["cp",17,9],["cp",18,10],["cp",19,11],[12,0,58,"Warning: you are leaving 2 commits behind, not connected to"],[13,0,58,"any of your branches: "],["cp",20,14],[15,0,53," 8c17f39 commit using -a flag, means add then commit."],[16,0,12," 7c8d7d0 add"],[16,19,56,".h using -f flag. "],["cp",14,17],[18,0,73,"If you want to keep them by creating a new branch, this may be a good time"],[19,0,28,"to do so with: "],[21,1,67,"git branch new_branch_name 8c17f39f0a1a4f13bb7f5e8c32542d0dd5c3d892"],[23,0,26,"Switched to branch 'master'"]],"x":1,"f":[["cp",0,2],["cp",0,3],["cp",0,4],["cp",13,5],["cp",14,6],["cp",16,8],["cp",7,9],["cp",6,10],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18]],"B":[["cp",0,2],["cp",0,3],["cp",0,4],["cp",13,5],["cp",0,6],["cp",16,8],["cp",7,9],["cp",0,13],["cp",0,15],["cp",0,16],["cp",0,17]],"t":1305119547.12144},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305119547.40489},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119548.24583},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119548.33381},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119548.43799},{"y":25,"x":15,"t":1305119548.49377},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305119548.67017},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305119548.84579},{"y":25,"d":[[24,16,"s"]],"x":18,"t":1305119549.00595},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305119549.10174},{"y":25,"d":[[24,18,"t"]],"x":20,"t":1305119549.34996},{"y":25,"x":21,"t":1305119549.60587},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305119549.99784},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305119550.18178},{"y":25,"d":[[24,22,"a"]],"x":24,"t":1305119550.33377},{"y":25,"d":[[24,22," "]],"x":23,"t":1305119550.78187},{"y":25,"d":[[24,22,"h"]],"x":24,"t":1305119551.01391},{"y":25,"d":[[24,23,"a"]],"x":25,"t":1305119551.12596},{"y":25,"d":[[24,24,"r"]],"x":26,"t":1305119551.21381},{"y":25,"d":[[24,25,"d"]],"x":27,"t":1305119551.38994},{"y":25,"x":28,"t":1305119551.56595},{"y":25,"d":[[24,27,"H"]],"x":29,"t":1305119553.32557},{"y":25,"d":[[24,28,"E"]],"x":30,"t":1305119553.42167},{"y":25,"d":[[24,29,"A"]],"x":31,"t":1305119553.60564},{"y":25,"d":[[24,30,"D"]],"x":32,"t":1305119553.72571},{"y":25,"d":[[24,31,"@"]],"x":33,"t":1305119554.58978},{"y":25,"d":[[24,32,"{"]],"x":34,"t":1305119555.17385},{"y":25,"d":[[24,33,"1"]],"x":35,"t":1305119555.35768},{"y":25,"d":[[24,34,"}"]],"x":36,"t":1305119555.7099},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",13,16],["cp",18,17],["cp",19,18],["cp",13,19],["cp",21,20],["cp",13,21],["cp",23,22],["cp",24,23],["cp",13,24]],"x":1,"f":[["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",6,8],["cp",5,9],["cp",0,10]],"B":[["cp",5,4],["cp",0,5],["cp",7,6],["cp",8,7],["cp",6,8],["cp",0,9]],"t":1305119555.98163},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",12,15],["cp",17,16],["cp",18,17],["cp",12,18],["cp",20,19],["cp",12,20],["cp",22,21],["cp",23,22],[23,0,66,"HEAD is now at 8c17f39 commit using -a flag, means add then commit."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",5,7],["cp",4,8],["cp",0,9]],"B":[["cp",4,3],["cp",0,4],["cp",6,5],["cp",7,6],["cp",5,7],["cp",0,8]],"t":1305119555.99292},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119556.7975},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119556.89367},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119557.02948},{"y":25,"x":13,"t":1305119557.50149},{"y":25,"d":[["cp",22,24]],"x":11,"t":1305119557.58162},{"y":25,"d":[[24,10,34,"/ "]],"x":12,"t":1305119557.76554},{"y":25,"d":[[24,11,"l"]],"x":13,"t":1305119557.95747},{"y":25,"d":[[24,12,"o"]],"x":14,"t":1305119558.13326},{"y":25,"d":[[24,13,"g"]],"x":15,"t":1305119558.22147},{"y":25,"d":[["cp",2,24]],"x":11,"t":1305119558.35732},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",11,14],["cp",16,15],["cp",17,16],["cp",11,17],["cp",19,18],["cp",11,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",1,23],["cp",11,24]],"x":1,"f":[["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",4,6],["cp",3,7],["cp",0,8]],"B":[["cp",3,2],["cp",0,3],["cp",5,4],["cp",6,5],["cp",4,6],["cp",0,7]],"t":1305119559.32532},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",5,8],["cp",15,9],["cp",16,10],["cp",18,12],["cp",5,13],["cp",20,14],["cp",21,15],["cp",22,16],["cp",23,17],[18,0,67,"8c17f39 (HEAD, master) commit using -a flag, means add then commit. "],[19,0,33,"7c8d7d0 add hello.h using -f flag."],[20,0,38,"211cb82 (tag: C) ignore object files..."],[21,0,56,"15f507b (tag: hello_1.0, tag: B) Hello world initialized."],["cp",0,22],["cp",1,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",4,0],["cp",3,1],["cp",8,2],["cp",2,3],["cp",2,4],["cp",2,5],["cp",2,6],["cp",2,7],[18,0,21,"3333333336666332222223"],["cp",1,19],["cp",0,20],[21,0,31,["a","3"]],["cp",0,22],["cp",1,23]],"B":[["cp",4,0],["cp",1,2],["cp",1,4],["cp",1,5],["cp",1,6],[18,9,20,"111100111111"],["cp",0,20],[21,9,30,"1111111111111100111111"],["cp",0,22]],"t":1305119559.33937},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119567.03737},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119567.09346},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119567.19713},{"y":25,"x":15,"t":1305119567.29327},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305119567.42912},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305119567.5651},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305119567.66125},{"y":25,"d":[[24,17,"c"]],"x":19,"t":1305119567.84529},{"y":25,"d":[[24,18,"k"]],"x":20,"t":1305119567.93304},{"y":25,"d":[[24,19,"o"]],"x":21,"t":1305119568.09323},{"y":25,"d":[[24,20,"u"]],"x":22,"t":1305119568.16508},{"y":25,"d":[[24,21,"t"]],"x":23,"t":1305119568.24499},{"y":25,"x":24,"t":1305119568.32549},{"y":25,"d":[[24,23,"m"]],"x":25,"t":1305119568.92524},{"y":25,"d":[[24,24,"a"]],"x":26,"t":1305119569.053},{"y":25,"d":[[24,25,"s"]],"x":27,"t":1305119569.21307},{"y":25,"d":[[24,26,"t"]],"x":28,"t":1305119569.33307},{"y":25,"d":[[24,27,"e"]],"x":29,"t":1305119569.4929},{"y":25,"d":[["cp",2,24]],"x":30,"t":1305119569.56518},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",4,7],["cp",9,8],["cp",10,9],["cp",4,10],["cp",12,11],["cp",4,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",0,22],["cp",1,23],["cp",4,24]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",18,17],["cp",0,18],["cp",20,19],["cp",21,20],["cp",19,21],["cp",0,22],["cp",1,23]],"B":[["cp",1,0],["cp",18,17],["cp",0,18],["cp",20,19],["cp",21,20],["cp",19,21],["cp",0,22]],"t":1305119569.69298},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",3,6],["cp",8,7],["cp",9,8],["cp",3,9],["cp",11,10],["cp",3,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",0,22],[23,0,28,"Already on 'master' "]],"x":1,"f":[["cp",1,0],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",18,20],["cp",17,21],["cp",0,22]],"B":[["cp",17,16],["cp",0,17],["cp",19,18],["cp",20,19],["cp",18,20],["cp",0,21]],"t":1305119569.70233},{"y":25,"d":[[24,0,"g"]],"x":2,"t":1305119569.9892},{"y":25,"d":[[24,1,11,"bash-3.2$ g"]],"x":13,"t":1305119569.99511},{"y":25,"d":[[24,12,"i"]],"x":14,"t":1305119570.06895},{"y":25,"d":[[24,13,"t"]],"x":15,"t":1305119570.17298},{"y":25,"x":16,"t":1305119570.30139},{"y":25,"d":[[24,15,"r"]],"x":17,"t":1305119571.46903},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305119571.62091},{"y":25,"d":[[24,17,"s"]],"x":19,"t":1305119571.73302},{"y":25,"d":[[24,18,"e"]],"x":20,"t":1305119571.82221},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305119571.88512},{"y":25,"x":22,"t":1305119571.96512},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305119572.12487},{"y":25,"d":[[24,22,"-"]],"x":24,"t":1305119572.30903},{"y":25,"d":[[24,23,"h"]],"x":25,"t":1305119572.52508},{"y":25,"d":[[24,24,"a"]],"x":26,"t":1305119572.63706},{"y":25,"d":[[24,25,"r"]],"x":27,"t":1305119572.71712},{"y":25,"d":[[24,26,"d"]],"x":28,"t":1305119572.87685},{"y":25,"x":29,"t":1305119573.01304},{"y":25,"d":[[24,28,"F"]],"x":30,"t":1305119573.27757},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",2,5],["cp",7,6],["cp",8,7],["cp",2,8],["cp",10,9],["cp",2,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",2,24]],"x":1,"f":[["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",17,19],["cp",16,20],["cp",0,21]],"B":[["cp",16,15],["cp",0,16],["cp",18,17],["cp",19,18],["cp",17,19],["cp",0,20]],"t":1305119573.50077},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",1,4],["cp",6,5],["cp",7,6],["cp",1,7],["cp",9,8],["cp",1,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,66,"HEAD is now at 8e715bc commit using -a flag, means add then commit."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",16,18],["cp",15,19],["cp",0,20]],"B":[["cp",15,14],["cp",0,15],["cp",17,16],["cp",18,17],["cp",16,18],["cp",0,19]],"t":1305119573.51215},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119576.71708},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119576.79704},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119576.92468},{"y":25,"x":15,"t":1305119576.98088},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305119577.1568},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305119577.2529},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305119577.3567},{"y":25,"d":[[24,17,"c"]],"x":19,"t":1305119577.51704},{"y":25,"d":[[24,18,"k"]],"x":20,"t":1305119577.61283},{"y":25,"d":[[24,19,"o"]],"x":21,"t":1305119577.76469},{"y":25,"d":[[24,20,"u"]],"x":22,"t":1305119577.84472},{"y":25,"d":[[24,21,"t"]],"x":23,"t":1305119577.95838},{"y":25,"x":24,"t":1305119578.04484},{"d":[["r","any of your branches: "],["a"," "],["r"," 8c17f39 commit using -a flag, means add then commit. "],["r"," 7c8d7d0 add hello.h using -f flag. "],["a"," "],["r","If you want to keep them by creating a new branch, this may be a good time "],["r","to do so with: "],["a"," "],["r"," git branch new_branch_name 8c17f39f0a1a4f13bb7f5e8c32542d0dd5c3d892 "],["a"," "],["r","Switched to branch 'master' "],["r","bash-3.2$ git reset --hard HEAD@{1} "],["r","HEAD is now at 8c17f39 commit using -a flag, means add then commit. "],["r","bash-3.2$ git log --oneline --decorate -6 "],["r","8c17f39 (HEAD, master) commit using -a flag, means add then commit. "],["r","7c8d7d0 add hello.h using -f flag. "],["r","211cb82 (tag: C) ignore object files... "],["r","15f507b (tag: hello_1.0, tag: B) Hello world initialized. "],["r","8be895d (tag: A) README is from welcome.txt "],["r","cb5775e restore file: welcome.txt "],["r","bash-3.2$ git checkout master "],["r","Already on 'master' "],["r","gbash-3.2$ git reset --hard F "],["r","HEAD is now at 8e715bc commit using -a flag, means add then commit. "],["r","bash-3.2$ git checkout D "]],"x":25,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d",["r","00000000011110011111100000000000000000000000000000000000000000000000000000000000"],["a","0"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],["r","00000000011111111111111001111110000000000000000000000000000000000000000000000000"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d",["r","33333333366663322222237777777777777777777777777777777777777777777777777777777777"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],["r","33333333333333333333333333333333777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305119578.45299,"i":1},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",0,3],["cp",5,4],["cp",6,5],["cp",0,6],["cp",8,7],["cp",0,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",15,17],["cp",14,18],["cp",0,19]],"B":[["cp",14,13],["cp",0,14],["cp",16,15],["cp",17,16],["cp",15,17],["cp",0,18]],"t":1305119579.04493},{"y":25,"d":[["cp",12,0],["cp",13,1],["cp",14,2],["cp",15,3],["cp",16,4],["cp",17,5],["cp",18,6],["cp",19,7],["cp",20,8],["cp",21,9],["cp",22,10],["cp",23,11],[12,0,40,"Note: checking out 'D'. "],["cp",24,13],[14,0,71,"You are in 'detached HEAD' state. You can look around, make experimental"],[15,0,72,"changes and commit them, and you can discard any commits you make in this"],[16,0,67,"state without impacting any branches by performing another checkout."],["cp",13,17],[18,0,71,"If you want to create a new branch to retain commits you create, you may"],[19,0,73,"do so (now or later) by using -b with the checkout command again. Example:"],["cp",13,20],[21,0,32," git checkout -b new_branch_name"],["cp",13,22],[23,0,69,"HEAD is now at 4ad14d4... ignore works even move .gitignore to subdir."],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",13,1],["cp",14,2],["cp",15,3],["cp",16,4],["cp",3,5],["cp",2,6],["cp",0,13],["cp",0,14],["cp",0,15],["cp",0,16],["cp",0,17],["cp",0,18]],"B":[["cp",13,1],["cp",15,3],["cp",16,4],["cp",3,5],["cp",0,13],["cp",0,15],["cp",0,16],["cp",0,17]],"t":1305119579.0554},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119580.42876},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119580.4928},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119580.60468},{"y":25,"x":15,"t":1305119580.6687},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305119580.89269},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305119581.02874},{"y":25,"d":[[24,16,"s"]],"x":18,"t":1305119581.15682},{"y":25,"d":[[24,17,"e"]],"x":19,"t":1305119581.25247},{"y":25,"d":[[24,18,"t"]],"x":20,"t":1305119581.33247},{"y":25,"x":21,"t":1305119581.45275},{"y":25,"d":[[24,20,"-"]],"x":22,"t":1305119581.66067},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305119581.84463},{"y":25,"d":[[24,22,"s"]],"x":24,"t":1305119581.96471},{"y":25,"d":[[24,23,"o"]],"x":25,"t":1305119582.07652},{"y":25,"d":[[24,24,"f"]],"x":26,"t":1305119582.18053},{"y":25,"d":[[24,25,"t"]],"x":27,"t":1305119582.38047},{"y":25,"x":28,"t":1305119582.54055},{"y":25,"d":[[24,27,"H"]],"x":29,"t":1305119584.01254},{"y":25,"d":[[24,28,"E"]],"x":30,"t":1305119584.06067},{"y":25,"d":[[24,29,"A"]],"x":31,"t":1305119584.24452},{"y":25,"d":[[24,30,"D"]],"x":32,"t":1305119584.32478},{"y":25,"d":[[24,31,"^"]],"x":33,"t":1305119585.29314},{"y":25,"d":[[24,32,"^"]],"x":34,"t":1305119585.46069},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",12,16],["cp",18,17],["cp",19,18],["cp",12,19],["cp",21,20],["cp",12,21],["cp",23,22],["cp",24,23],["cp",12,24]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",2,4],["cp",1,5],["cp",7,6]],"B":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",2,4],["cp",1,5]],"t":1305119585.98859},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305119586.0005},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119588.10868},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119588.20442},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119588.30867},{"y":25,"x":15,"t":1305119588.36422},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305119588.78029},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305119588.87641},{"y":25,"d":[[24,16,"m"]],"x":18,"t":1305119589.05224},{"y":25,"d":[[24,17,"m"]],"x":19,"t":1305119589.2043},{"y":25,"d":[[24,18,"i"]],"x":20,"t":1305119589.3886},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305119589.50042},{"y":25,"x":22,"t":1305119589.6123},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305119589.78866},{"y":25,"d":[[24,22,"C"]],"x":24,"t":1305119590.26863},{"y":25,"x":25,"t":1305119590.46834},{"y":25,"d":[[24,24,"C"]],"x":26,"t":1305119590.86056},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",11,15],["cp",17,16],["cp",18,17],["cp",11,18],["cp",20,19],["cp",11,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",11,24]],"x":1,"f":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",0,4],["cp",6,5]],"B":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",1,3],["cp",0,4]],"t":1305119591.20433},{"y":25,"d":[["cp",3,0],["cp",4,1],["cp",5,2],["cp",6,3],["cp",7,4],["cp",8,5],["cp",9,6],["cp",10,7],["cp",11,8],["cp",12,9],["cp",13,10],["cp",14,11],["cp",8,12],["cp",16,13],["cp",17,14],["cp",19,16],["cp",8,17],["cp",21,18],["cp",22,19],["cp",23,20],[21,0,69,"[detached HEAD b0b142a] ignore object files... "],[22,0,48," 1 files changed, 3 insertions(+), 0 deletions(-)"],[23,0,33," create mode 100644 src/.gitignore"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",1,0],["cp",4,1],["cp",5,2],["cp",2,3],["cp",2,4]],"B":[["cp",1,0],["cp",4,1],["cp",1,2],["cp",1,3]],"t":1305119591.29522},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119593.86842},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119593.96411},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119594.06809},{"y":25,"x":15,"t":1305119594.14014},{"y":25,"d":[[24,14,"t"]],"x":16,"t":1305119594.37206},{"y":25,"d":[[24,15,"a"]],"x":17,"t":1305119594.53212},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305119594.65237},{"y":25,"x":19,"t":1305119594.964},{"y":25,"d":[[24,18,"n"]],"x":20,"t":1305119595.58835},{"y":25,"d":[[24,19,"e"]],"x":21,"t":1305119595.68421},{"y":25,"d":[[24,20,"w"]],"x":22,"t":1305119596.38807},{"y":25,"d":[[24,21,"b"]],"x":23,"t":1305119596.66057},{"y":25,"d":[[24,22,"a"]],"x":24,"t":1305119596.86796},{"y":25,"d":[[24,23,"s"]],"x":25,"t":1305119597.02802},{"y":25,"d":[[24,24,"e"]],"x":26,"t":1305119597.14008},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",7,11],["cp",13,12],["cp",14,13],["cp",7,14],["cp",16,15],["cp",7,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",7,24]],"x":1,"f":[["cp",1,0],["cp",2,1]],"B":[["cp",1,0]],"t":1305119597.62796},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305119597.63509},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119599.10011},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119599.20407},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119599.3078},{"y":25,"x":15,"t":1305119599.36407},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305119599.52393},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305119599.66007},{"y":25,"d":[[24,16,"v"]],"x":18,"t":1305119599.82793},{"y":25,"d":[[24,17,"-"]],"x":19,"t":1305119599.95603},{"y":25,"d":[[24,18,"p"]],"x":20,"t":1305119600.17986},{"y":25,"d":[[24,19,"a"]],"x":21,"t":1305119600.32406},{"y":25,"d":[[24,20,"r"]],"x":22,"t":1305119600.52388},{"y":25,"d":[[24,21,"s"]],"x":23,"t":1305119600.6838},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305119600.81973},{"y":25,"x":25,"t":1305119600.92377},{"y":25,"d":[[24,24,"n"]],"x":26,"t":1305119601.37186},{"y":25,"d":[[24,25,"e"]],"x":27,"t":1305119601.42804},{"y":25,"d":[[24,26,"w"]],"x":28,"t":1305119601.53986},{"y":25,"d":[[24,27,"b"]],"x":29,"t":1305119601.83577},{"y":25,"d":[[24,28,"a"]],"x":30,"t":1305119602.02781},{"y":25,"d":[[24,29,"s"]],"x":31,"t":1305119602.196},{"y":25,"d":[[24,30,"e"]],"x":32,"t":1305119602.27591},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",6,10],["cp",12,11],["cp",13,12],["cp",6,13],["cp",15,14],["cp",6,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",6,24]],"x":1,"f":[["cp",1,0]],"t":1305119602.5237},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",5,9],["cp",11,10],["cp",12,11],["cp",5,12],["cp",14,13],["cp",5,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,1,39,"0b142a6756f330be41de0b928c544990048845c"],[24,0,8,"bash-3.2$"]],"x":11,"t":1305119602.53043},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119604.12372},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119604.25162},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119604.33995},{"y":25,"x":15,"t":1305119604.41173},{"y":25,"d":[[24,14,"r"]],"x":16,"t":1305119604.5876},{"y":25,"d":[[24,15,"e"]],"x":17,"t":1305119604.7159},{"y":25,"d":[[24,16,"b"]],"x":18,"t":1305119604.93157},{"y":25,"d":[[24,17,"a"]],"x":19,"t":1305119605.15562},{"y":25,"d":[[24,18,"s"]],"x":20,"t":1305119605.32385},{"y":25,"d":[[24,19,"e"]],"x":21,"t":1305119605.4599},{"y":25,"x":22,"t":1305119605.66757},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305119605.95685},{"y":25,"d":[[24,22,"-"]],"x":24,"t":1305119606.14801},{"y":25,"d":[[24,23,"o"]],"x":25,"t":1305119606.41153},{"y":25,"d":[[24,24,"n"]],"x":26,"t":1305119606.5957},{"d":[["r","Already on 'master' "],["r","gbash-3.2$ git reset --hard F "],["r","HEAD is now at 8e715bc commit using -a flag, means add then commit. "],["r","bash-3.2$ git checkout D "],["r","Note: checking out 'D'. "],["a"," "],["r","You are in 'detached HEAD' state. You can look around, make experimental "],["r","changes and commit them, and you can discard any commits you make in this "],["r","state without impacting any branches by performing another checkout. "],["a"," "],["r","If you want to create a new branch to retain commits you create, you may "],["r","do so (now or later) by using -b with the checkout command again. Example: "],["a"," "],["r"," git checkout -b new_branch_name "],["a"," "],["r","HEAD is now at 4ad14d4... ignore works even move .gitignore to subdir. "],["r","bash-3.2$ git reset --soft HEAD^^ "],["r","bash-3.2$ git commit -C C "],["r","[detached HEAD b0b142a] ignore object files... "],["r"," 1 files changed, 3 insertions(+), 0 deletions(-) "],["r"," create mode 100644 src/.gitignore "],["r","bash-3.2$ git tag newbase "],["r","bash-3.2$ git rev-parse newbase "],["r","b0b142a6756f330be41de0b928c544990048845c "],["r","bash-3.2$ git rebase --ont "]],"x":27,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305119606.73953,"i":1},{"y":25,"d":[[24,26,"o"]],"x":28,"t":1305119606.85156},{"y":25,"x":29,"t":1305119607.03563},{"y":25,"d":[[24,28,"n"]],"x":30,"t":1305119607.83555},{"y":25,"d":[[24,29,"e"]],"x":31,"t":1305119607.93958},{"y":25,"d":[[24,30,"w"]],"x":32,"t":1305119608.06772},{"y":25,"d":[[24,31,"b"]],"x":33,"t":1305119608.33172},{"y":25,"d":[[24,32,"a"]],"x":34,"t":1305119608.52356},{"y":25,"d":[[24,33,"s"]],"x":35,"t":1305119608.73954},{"y":25,"d":[[24,34,"e"]],"x":36,"t":1305119609.24369},{"y":25,"x":37,"t":1305119609.49979},{"y":25,"d":[[24,36,"E"]],"x":38,"t":1305119610.74021},{"y":25,"d":[[24,37,"^"]],"x":39,"t":1305119611.7076},{"y":25,"x":40,"t":1305119612.16372},{"y":25,"d":[[24,39,"m"]],"x":41,"t":1305119612.58736},{"y":25,"d":[[24,40,"a"]],"x":42,"t":1305119612.6754},{"y":25,"d":[[24,41,"s"]],"x":43,"t":1305119612.85155},{"y":25,"d":[[24,42,"t"]],"x":44,"t":1305119612.93939},{"y":25,"d":[[24,43,"e"]],"x":45,"t":1305119613.11571},{"y":25,"d":[[24,44,"r"]],"x":46,"t":1305119613.1874},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",4,8],["cp",10,9],["cp",11,10],["cp",4,11],["cp",13,12],["cp",4,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",4,24]],"x":1,"t":1305119613.37134},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",3,7],["cp",9,8],["cp",10,9],["cp",3,10],["cp",12,11],["cp",3,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,56,"First, rewinding head to replay your work on top of it..."]],"x":1,"t":1305119613.45566},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",2,6],["cp",8,7],["cp",9,8],["cp",2,9],["cp",11,10],["cp",2,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,56,"Applying: add hello.h using -f flag. "]],"x":1,"t":1305119613.83545},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",1,5],["cp",7,6],["cp",8,7],["cp",1,8],["cp",10,9],["cp",1,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,10,53,"commit using -a flag, means add then commit."]],"x":1,"t":1305119613.92131},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305119613.98665},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119616.54732},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119616.63533},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119616.74721},{"y":25,"x":15,"t":1305119616.80365},{"y":25,"d":[[24,14,"l"]],"x":16,"t":1305119616.93124},{"y":25,"d":[[24,15,"o"]],"x":17,"t":1305119617.10725},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305119617.19531},{"y":25,"x":19,"t":1305119617.31524},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305119617.44338},{"y":25,"d":[[24,19,"-"]],"x":21,"t":1305119617.6353},{"y":25,"d":[[24,20,"o"]],"x":22,"t":1305119617.92316},{"y":25,"d":[[24,21,"n"]],"x":23,"t":1305119618.06753},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305119618.15525},{"y":25,"d":[[24,23,"l"]],"x":25,"t":1305119619.27504},{"y":25,"d":[[24,24,"i"]],"x":26,"t":1305119619.42736},{"y":25,"d":[[24,25,"e"]],"x":27,"t":1305119619.53113},{"y":25,"d":[[24,25," "]],"x":26,"t":1305119620.16314},{"y":25,"d":[[24,25,"n"]],"x":27,"t":1305119620.37929},{"y":25,"d":[[24,26,"e"]],"x":28,"t":1305119620.45928},{"y":25,"x":29,"t":1305119620.55555},{"y":25,"d":[[24,28,"-"]],"x":30,"t":1305119620.7072},{"y":25,"d":[[24,29,"-"]],"x":31,"t":1305119620.9072},{"y":25,"d":[[24,30,"d"]],"x":32,"t":1305119620.97115},{"y":25,"d":[[24,31,"e"]],"x":33,"t":1305119621.14727},{"y":25,"d":[[24,32,"c"]],"x":34,"t":1305119621.3152},{"y":25,"d":[[24,33,"o"]],"x":35,"t":1305119621.39531},{"y":25,"d":[[24,34,"r"]],"x":36,"t":1305119621.46718},{"y":25,"d":[[24,35,"a"]],"x":37,"t":1305119621.63507},{"y":25,"d":[[24,36,"t"]],"x":38,"t":1305119621.73908},{"y":25,"d":[[24,37,"e"]],"x":39,"t":1305119621.81901},{"y":25,"x":40,"t":1305119621.93913},{"y":25,"d":[[24,39,"-"]],"x":41,"t":1305119622.0432},{"y":25,"d":[[24,40,"6"]],"x":42,"t":1305119622.52312},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",0,4],["cp",6,5],["cp",7,6],["cp",0,7],["cp",9,8],["cp",0,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"t":1305119622.99504},{"y":25,"d":[["cp",6,0],["cp",4,1],["cp",8,2],["cp",1,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",14,8],["cp",15,9],["cp",16,10],["cp",17,11],["cp",18,12],["cp",19,13],["cp",20,14],["cp",21,15],["cp",22,16],["cp",23,17],[18,0,66,"f75a3b2 (HEAD, master) commit using -a flag, means add then commit."],[19,0,44,"38bb147 add hello.h using -f flag. "],[20,0,56,"b0b142a (tag: newbase) ignore object files... "],[21,0,12,"15f507b (tag:"],[21,19,56,"_1.0, tag: B) Hello world initialized."],[22,0,53,"8be895d (tag: A) README is from welcome.txt "],[23,0,40,"cb5775e restore file: welcome.txt "],[24,0,8,"bash-3.2$"]],"x":11,"f":[[18,0,21,"3333333336666332222223"],[19,0,6,["a","3"]],[20,0,21,["a","3"]],[21,0,31,["a","3"]],[22,0,15,["a","3"]],["cp",19,23]],"B":[[18,9,20,"111100111111"],[20,9,20,["a","1"]],[21,9,30,"1111111111111100111111"],[22,9,14,["a","1"]]],"t":1305119623.0087},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119627.12306},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119627.21105},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119627.2909},{"y":25,"x":15,"t":1305119627.37881},{"y":25,"d":[[24,14,"b"]],"x":16,"t":1305119627.54686},{"y":25,"d":[[24,15,"r"]],"x":17,"t":1305119627.73086},{"y":25,"d":[[24,16,"a"]],"x":18,"t":1305119627.89085},{"y":25,"d":[[24,17,"n"]],"x":19,"t":1305119628.01108},{"y":25,"d":[[24,18,"c"]],"x":20,"t":1305119628.11496},{"y":25,"d":[[24,19,"h"]],"x":21,"t":1305119628.22691},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",18,22],["cp",0,23]],"B":[["cp",18,17],["cp",0,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",0,22]],"t":1305119628.43505},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,19,"* master "],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",17,21],["cp",0,22],[23,2,7,["a","2"]]],"B":[["cp",17,16],["cp",0,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",0,21]],"t":1305119628.44226},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119631.25079},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119631.33868},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119631.41853},{"y":25,"x":15,"t":1305119631.51474},{"y":25,"d":[[24,14,"t"]],"x":16,"t":1305119631.67478},{"y":25,"d":[[24,15,"a"]],"x":17,"t":1305119631.83471},{"y":25,"d":[[24,16,"g"]],"x":18,"t":1305119631.94666},{"y":25,"x":19,"t":1305119632.09898},{"y":25,"d":[[24,18,"-"]],"x":20,"t":1305119632.23481},{"y":25,"d":[[24,19,"d"]],"x":21,"t":1305119633.09874},{"y":25,"x":22,"t":1305119633.2199},{"y":25,"d":[[24,21,"n"]],"x":23,"t":1305119633.52251},{"y":25,"d":[[24,22,"e"]],"x":24,"t":1305119633.58677},{"y":25,"d":[[24,23,"w"]],"x":25,"t":1305119634.14665},{"y":25,"d":[[24,24,"b"]],"x":26,"t":1305119634.43461},{"y":25,"d":[[24,25,"a"]],"x":27,"t":1305119634.64255},{"y":25,"d":[[24,26,"s"]],"x":28,"t":1305119634.80261},{"y":25,"d":[[24,27,"e"]],"x":29,"t":1305119634.89069},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],["cp",0,24]],"x":1,"f":[["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",16,20],["cp",0,21],["cp",23,22],["cp",0,23]],"B":[["cp",16,15],["cp",0,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",0,20]],"t":1305119635.13052},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,34,"Deleted tag 'newbase' (was b0b142a)"],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",15,19],["cp",0,20],["cp",22,21],["cp",0,22]],"B":[["cp",15,14],["cp",0,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",0,19]],"t":1305119635.13846},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23]],"x":11,"f":[["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",14,18],["cp",0,19],["cp",21,20],["cp",0,21]],"B":[["cp",14,13],["cp",0,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",0,18]],"t":1305119638.58675},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119638.81849},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119638.89835},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119638.97845},{"y":25,"x":15,"t":1305119639.08235},{"y":25,"d":[[24,14,"c"]],"x":16,"t":1305119639.32235},{"y":25,"d":[[24,15,"h"]],"x":17,"t":1305119639.42627},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305119639.50639},{"d":[["r","bash-3.2$ git reset --soft HEAD^^ "],["r","bash-3.2$ git commit -C C "],["r","[detached HEAD b0b142a] ignore object files... "],["r"," 1 files changed, 3 insertions(+), 0 deletions(-) "],["r"," create mode 100644 src/.gitignore "],["r","bash-3.2$ git tag newbase "],["r","bash-3.2$ git rev-parse newbase "],["r","b0b142a6756f330be41de0b928c544990048845c "],["r","bash-3.2$ git rebase --onto newbase E^ master "],["r","First, rewinding head to replay your work on top of it... "],["r","Applying: add hello.h using -f flag. "],["r","Applying: commit using -a flag, means add then commit. "],["r","bash-3.2$ git log --oneline --decorate -6 "],["r","f75a3b2 (HEAD, master) commit using -a flag, means add then commit. "],["r","38bb147 add hello.h using -f flag. "],["r","b0b142a (tag: newbase) ignore object files... "],["r","15f507b (tag: hello_1.0, tag: B) Hello world initialized. "],["r","8be895d (tag: A) README is from welcome.txt "],["r","cb5775e restore file: welcome.txt "],["r","bash-3.2$ git branch "],["r","* master "],["r","bash-3.2$ git tag -d newbase "],["r","Deleted tag 'newbase' (was b0b142a) "],["r","bash-3.2$ "],["r","bash-3.2$ git chec "]],"x":19,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d",["r","00000000011110011111100000000000000000000000000000000000000000000000000000000000"],["a","0"],["r","00000000011111111111100000000000000000000000000000000000000000000000000000000000"],["r","00000000011111111111111001111110000000000000000000000000000000000000000000000000"],["r","00000000011111100000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d"],"y":25,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d",["r","33333333366663322222237777777777777777777777777777777777777777777777777777777777"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["r","33333333333333333333337777777777777777777777777777777777777777777777777777777777"],["r","33333333333333333333333333333333777777777777777777777777777777777777777777777777"],["r","33333333333333337777777777777777777777777777777777777777777777777777777777777777"],["r","33333337777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],["r","77222222777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305119639.67439,"i":1},{"y":25,"d":[[24,18,"k"]],"x":20,"t":1305119639.76241},{"y":25,"d":[[24,19,"o"]],"x":21,"t":1305119639.92238},{"y":25,"d":[[24,20,"u"]],"x":22,"t":1305119640.00217},{"y":25,"d":[[24,21,"t"]],"x":23,"t":1305119640.0824},{"y":25,"x":24,"t":1305119640.1705},{"y":25,"d":[[24,23,"m"]],"x":25,"t":1305119640.40249},{"y":25,"d":[[24,24,"a"]],"x":26,"t":1305119640.7305},{"y":25,"d":[[24,25,"s"]],"x":27,"t":1305119640.89828},{"y":25,"d":[[24,26,"t"]],"x":28,"t":1305119641.04216},{"y":25,"d":[[24,27,"e"]],"x":29,"t":1305119641.20235},{"y":25,"d":[[24,28,"r"]],"x":30,"t":1305119641.25827},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",13,17],["cp",0,18],["cp",20,19],["cp",0,20]],"B":[["cp",13,12],["cp",0,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",0,17]],"t":1305119641.37831},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,28,"Already on 'master' "]],"x":1,"f":[["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",12,16],["cp",0,17],["cp",19,18],["cp",0,19]],"B":[["cp",12,11],["cp",0,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",0,16]],"t":1305119641.38798},{"y":25,"d":[[24,0,"g"]],"x":2,"t":1305119641.61851},{"y":25,"d":[[24,1,11,"bash-3.2$ g"]],"x":13,"t":1305119641.68043},{"y":25,"d":[[24,12,"i"]],"x":14,"t":1305119641.71419},{"y":25,"d":[[24,13,"t"]],"x":15,"t":1305119641.81032},{"y":25,"x":16,"t":1305119641.89035},{"y":25,"d":[[24,15,"r"]],"x":17,"t":1305119642.05024},{"y":25,"d":[[24,16,"e"]],"x":18,"t":1305119642.1863},{"y":25,"d":[[24,17,"s"]],"x":19,"t":1305119642.33038},{"y":25,"d":[[24,18,"e"]],"x":20,"t":1305119642.39424},{"y":25,"d":[[24,19,"t"]],"x":21,"t":1305119642.4663},{"y":25,"x":22,"t":1305119642.55431},{"y":25,"d":[[24,21,"-"]],"x":23,"t":1305119642.66643},{"y":25,"d":[[24,22,"-"]],"x":24,"t":1305119642.85042},{"y":25,"d":[[24,23,"h"]],"x":25,"t":1305119643.04216},{"y":25,"d":[[24,24,"a"]],"x":26,"t":1305119643.1062},{"y":25,"d":[[24,25,"r"]],"x":27,"t":1305119643.1947},{"y":25,"d":[[24,26,"d"]],"x":28,"t":1305119643.37015},{"y":25,"x":29,"t":1305119643.71462},{"y":25,"d":[[24,28,"F"]],"x":30,"t":1305119643.98642},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",24,23],[24,["a"," "]]],"x":1,"f":[["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",11,15],["cp",0,16],["cp",18,17],["cp",0,18]],"B":[["cp",11,10],["cp",0,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",0,15]],"t":1305119644.81836},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,66,"HEAD is now at 8e715bc commit using -a flag, means add then commit."],["cp",19,24]],"x":11,"f":[["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",10,14],["cp",0,15],["cp",17,16],["cp",0,17]],"B":[["cp",10,9],["cp",0,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",0,14]],"t":1305119644.829},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],[23,0,66,"bash-3.2$ exit "],[24,["a"," "]]],"x":1,"f":[["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",9,13],["cp",0,14],["cp",16,15],["cp",0,16]],"B":[["cp",9,8],["cp",0,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",0,13]],"t":1305119647.37848}]} \ No newline at end of file diff --git a/html/part2/ch12-03-back2future-3.html b/html/part2/ch12-03-back2future-3.html new file mode 100644 index 000000000..07d47ae75 --- /dev/null +++ b/html/part2/ch12-03-back2future-3.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: ch12-03-back2future-3 +json_file: ch12-03-back2future-3.json +--- diff --git a/html/part2/ch12-03-back2future-3.json b/html/part2/ch12-03-back2future-3.json new file mode 100644 index 000000000..0f6807b99 --- /dev/null +++ b/html/part2/ch12-03-back2future-3.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305119677.38603,"i":1},{"y":1,"d":[[0,10,38,"cd /path/to/my/workspace/demo"]],"x":11,"t":1305119677.91316},{"y":2,"x":1,"t":1305119678.62489},{"y":2,"d":[[1,0,8,"bash-3.2$"]],"x":11,"t":1305119678.62514},{"y":2,"d":[[1,10,"g"]],"x":12,"t":1305119679.27294},{"y":2,"d":[[1,11,"i"]],"x":13,"t":1305119679.36092},{"y":2,"d":[[1,12,"t"]],"x":14,"t":1305119679.44085},{"y":2,"x":15,"t":1305119679.53779},{"y":2,"d":[[1,14,"l"]],"x":16,"t":1305119679.65695},{"y":2,"d":[[1,15,"o"]],"x":17,"t":1305119679.84102},{"y":2,"d":[[1,16,"g"]],"x":18,"t":1305119679.92879},{"y":2,"x":19,"t":1305119680.0088},{"y":2,"d":[[1,18,"-"]],"x":20,"t":1305119680.16108},{"y":2,"d":[[1,19,"-"]],"x":21,"t":1305119680.34503},{"y":2,"d":[[1,20,"d"]],"x":22,"t":1305119680.45697},{"y":2,"d":[[1,21,"e"]],"x":23,"t":1305119680.62479},{"y":2,"d":[[1,22,"c"]],"x":24,"t":1305119680.80909},{"y":2,"d":[[1,23,"o"]],"x":25,"t":1305119680.92074},{"y":2,"d":[[1,24,"r"]],"x":26,"t":1305119680.98507},{"y":2,"d":[[1,25,"a"]],"x":27,"t":1305119681.16093},{"y":2,"d":[[1,26,"t"]],"x":28,"t":1305119681.29698},{"y":2,"d":[[1,27,"e"]],"x":29,"t":1305119681.40893},{"y":2,"x":30,"t":1305119681.56077},{"y":2,"d":[[1,29,"-"]],"x":31,"t":1305119681.75272},{"y":2,"d":[[1,30,"-"]],"x":32,"t":1305119681.95271},{"y":2,"d":[[1,31,"o"]],"x":33,"t":1305119682.30457},{"y":2,"d":[[1,32,"n"]],"x":34,"t":1305119682.4491},{"y":2,"d":[[1,33,"e"]],"x":35,"t":1305119683.08877},{"y":2,"d":[[1,34,"l"]],"x":36,"t":1305119683.28866},{"y":2,"d":[[1,35,"i"]],"x":37,"t":1305119683.45674},{"y":2,"d":[[1,36,"n"]],"x":38,"t":1305119683.57683},{"y":2,"d":[[1,37,"e"]],"x":39,"t":1305119683.69666},{"y":2,"x":40,"t":1305119683.78474},{"y":2,"d":[[1,39,"-"]],"x":41,"t":1305119684.02468},{"y":2,"d":[[1,40,"6"]],"x":42,"t":1305119684.81683},{"y":3,"x":1,"t":1305119684.9288},{"y":9,"d":[[2,0,74,"8e715bc (HEAD, tag: F, master) commit using -a flag, means add then commit."],[3,0,42,"fd33ea2 (tag: E) add hello.h using -f flag."],[4,0,60,"4ad14d4 (tag: D) ignore works even move .gitignore to subdir."],[5,0,38,"211cb82 (tag: C) ignore object files..."],[6,0,56,"15f507b (tag: hello_1.0, tag: B) Hello world initialized."],[7,0,42,"8be895d (tag: A) README is from welcome.txt"],[8,0,8,"bash-3.2$"]],"x":11,"f":[[2,0,29,"333333333666633333333332222223"],[3,0,15,["a","3"]],["cp",3,4],["cp",3,5],[6,0,31,["a","3"]],["cp",3,7]],"B":[[2,9,28,"11110011111100111111"],[3,9,14,["a","1"]],["cp",3,4],["cp",3,5],[6,9,30,"1111111111111100111111"],["cp",3,7]],"t":1305119684.94269},{"y":10,"x":1,"t":1305119687.59253},{"y":10,"d":[["cp",8,9]],"x":11,"t":1305119687.59269},{"y":10,"d":[[9,10,"g"]],"x":12,"t":1305119688.08871},{"y":10,"d":[[9,11,"i"]],"x":13,"t":1305119688.19271},{"y":10,"d":[[9,12,"t"]],"x":14,"t":1305119688.3365},{"y":10,"x":15,"t":1305119688.39253},{"y":10,"d":[[9,14,"r"]],"x":16,"t":1305119688.62471},{"y":10,"d":[[9,15,"e"]],"x":17,"t":1305119688.76124},{"y":10,"d":[[9,16,"b"]],"x":18,"t":1305119689.08046},{"y":10,"d":[[9,17,"a"]],"x":19,"t":1305119689.30458},{"y":10,"d":[[9,18,"s"]],"x":20,"t":1305119689.48864},{"y":10,"d":[[9,19,"e"]],"x":21,"t":1305119689.64046},{"y":10,"x":22,"t":1305119689.82464},{"y":10,"d":[[9,21,"-"]],"x":23,"t":1305119691.65662},{"y":10,"d":[[9,22,"i"]],"x":24,"t":1305119691.90443},{"y":10,"x":25,"t":1305119692.1446},{"y":10,"d":[[9,24,"D"]],"x":26,"t":1305119693.11262},{"y":10,"d":[[9,25,"^"]],"x":27,"t":1305119693.67249},{"y":11,"x":1,"t":1305119694.3764},{"y":11,"x":1,"t":1305119694.85056},{"y":1,"d":[[0,0,56,"pick 4ad14d4 ignore works even move .gitignore to subdir."],[1,0,40,"pick fd33ea2 add hello.h using -f flag. "],[2,0,74,"pick 8e715bc commit using -a flag, means add then commit. "],["cp",10,3],[4,0,60,"# Rebase 211cb82..8e715bc onto 211cb82 "],[5,0,38,"# "],[6,0,56,"# Commands: "],[7,0,42,"# p, pick = use commit "],[8,0,53,"# r, reword = use commit, but edit the commit message"],[9,0,45,"# e, edit = use commit, but stop for amending"],[10,0,55,"# s, squash = use commit, but meld into previous commit"],[11,0,65,"# f, fixup = like \"squash\", but discard this commit's log message"],[12,0,58,"# x, exec = run command (the rest of the line) using shell"],["cp",5,13],[14,0,52,"# If you remove a line here THAT COMMIT WILL BE LOST."],[15,0,63,"# However, if you remove everything, the rebase will be aborted."],["cp",5,16],[17,0,"~"],["cp",17,18],["cp",17,19],["cp",17,20],["cp",17,21],[22,0,77,"...\" to unstage)"],[14,0,"#"],[15,0,27,"# new file: src/.gitignore"],["cp",14,16],[17,0,"~"],["cp",17,18],["cp",17,19],["cp",17,20],["cp",17,21],[22,0,31,"\".git/COMMIT_EDITMSG\" 17L, 451Cc"]],"x":1,"f":[[0,0,36,["a","4"]],[1,0,31,"44555555555555555555555555555555"],[5,0,32,"445555555555555555555555555555555"],[9,0,65,["a","4"]],[10,0,66,["a","4"]],[11,0,29,"445555555555555555555555555555"],[12,0,25,"44555555555555555555555555"],[13,0,46,["a","4"]],[14,0,"4"],[15,0,27,"4422222222441111111111111111"],["cp",14,16],[17,0,77,["a","4"]],["cp",17,18],["cp",17,19],["cp",17,20],["cp",17,21]],"B":[[17,0,77,["a","1"]],["cp",17,18],["cp",17,19],["cp",17,20],["cp",17,21]],"t":1305119748.21491},{"y":23,"d":[[22,0,31,": "]],"x":2,"t":1305119750.81472},{"y":23,"d":[[22,1,"w"]],"x":3,"t":1305119752.47009},{"y":23,"d":[[22,2,"q"]],"x":4,"t":1305119752.71006},{"y":23,"d":[[22,2," "]],"x":3,"t":1305119754.56615},{"y":23,"d":[[22,1," "]],"x":2,"t":1305119755.11821},{"y":1,"d":[["cp",2,22]],"x":1,"t":1305119755.66189},{"y":23,"d":[[22,0,":"]],"x":2,"t":1305119758.07818},{"y":23,"d":[[22,1,"w"]],"x":3,"t":1305119758.19824},{"y":23,"d":[[22,2,"q"]],"x":4,"t":1305119758.39791},{"y":23,"x":1,"t":1305119758.53384},{"y":23,"d":[[22,0,20,"\".git/COMMIT_EDITMSG\""]],"x":22,"t":1305119758.53405},{"y":23,"d":[[22,22,38,"17L, 451C written"]],"x":40,"t":1305119758.81332},{"y":25,"d":[["cp",2,0],["cp",0,1],["cp",0,3],["cp",0,5],["cp",0,7],[8,0,50,"Successfully rebased and updated refs/heads/master."],[9,0,65,"bash-3.2$ git log --decorate --oneline -6 "],[10,0,58,"b542daf (HEAD, master) commit using -a flag, means add then"],[11,0,33,"aae1601 add hello.h using -f flag."],[12,0,38,"211cb82 (tag: C) ignore object files..."],[13,0,56,"15f507b (tag: hello_1.0, tag: B) Hello world initialized."],[14,0,42,"8be895d (tag: A) README is from welcome.txt"],[15,0,32,"cb5775e restore file: welcome.txt"],[16,0,28,"bash-3.2$ git checkout master"],[17,0,18,"Already on 'master'"],[18,0,27,"bash-3.2$ git reset --hard F"],[19,0,66,"HEAD is now at 8e715bc commit using -a flag, means add then commit."],[20,0,25,"bash-3.2$ git rebase -i C^"],[21,0,45,"[detached HEAD 3366181] ignore object files..."],[22,0,48," 1 files changed, 3 insertions(+), 0 deletions(-)"],[23,1,33,"create mode 100644 src/.gitignore"],[24,0,13,"Rebasing (3/4)"]],"x":1,"f":[["cp",2,0],["cp",0,1],["cp",0,5],["cp",0,9],[10,0,66,"3333333336666332222223777777777777777777777777777777777777777777777"],[11,0,29,"333333377777777777777777777777"],[12,0,25,"33333333333333337777777777"],[13,0,46,"33333333333333333333333333333333777777777777777"],["cp",12,14],["cp",11,15],["cp",0,16],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"B":[[10,9,20,"111100111111"],[12,9,14,["a","1"]],[13,9,30,"1111111111111100111111"],["cp",12,14],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21]],"t":1305119758.86191},{"y":25,"d":[[24,10,"4"]],"x":1,"t":1305119758.92479},{"y":25,"d":[["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",23,22],["cp",7,23],["cp",0,24]],"x":1,"f":[["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",11,13],["cp",10,14],["cp",0,15]],"B":[["cp",10,9],["cp",0,10],["cp",12,11],["cp",13,12],["cp",11,13],["cp",0,14]],"t":1305119759.24175},{"y":25,"d":[[24,0,8,"bash-3.2$"]],"x":11,"t":1305119759.24301},{"y":25,"d":[[24,10,"g"]],"x":12,"t":1305119760.28576},{"y":25,"d":[[24,11,"i"]],"x":13,"t":1305119760.37365},{"y":25,"d":[[24,12,"t"]],"x":14,"t":1305119760.50175},{"y":25,"x":15,"t":1305119760.60578},{"y":25,"x":14,"t":1305119761.04563},{"y":25,"d":[["cp",19,24]],"x":11,"t":1305119761.12578},{"y":25,"d":[[24,10,25,"/ "]],"x":12,"t":1305119761.31775},{"y":25,"d":[[24,11,"l"]],"x":13,"t":1305119761.50175},{"y":25,"d":[[24,12,"o"]],"x":14,"t":1305119761.66995},{"y":25,"d":[[24,13,"g"]],"x":15,"t":1305119761.74992},{"y":25,"d":[["cp",8,24]],"x":11,"t":1305119761.8937},{"y":25,"d":[["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",17,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",6,22],["cp",7,23],["cp",0,24]],"x":1,"f":[["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",10,12],["cp",9,13],["cp",0,14]],"B":[["cp",9,8],["cp",0,9],["cp",11,10],["cp",12,11],["cp",10,12],["cp",0,13]],"t":1305119762.87783},{"y":25,"d":[["cp",6,0],["cp",7,1],["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",12,6],["cp",13,7],["cp",14,8],["cp",15,9],["cp",16,10],["cp",17,11],["cp",18,12],["cp",19,13],["cp",20,14],["cp",21,15],["cp",0,16],["cp",1,17],[18,0,66,"21e3c82 (HEAD, master) commit using -a flag, means add then commit."],[19,0,45,"65a2bc8 add hello.h using -f flag. "],[20,0,48,"3366181 ignore object files... "],["cp",5,21],["cp",6,22],["cp",7,23],[24,0,8,"bash-3.2$"]],"x":11,"f":[["cp",8,2],["cp",9,3],["cp",10,4],["cp",11,5],["cp",4,6],["cp",3,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,12],["cp",0,13],["cp",2,18],["cp",3,19],["cp",3,20],["cp",5,21],["cp",4,22],["cp",3,23]],"B":[["cp",8,2],["cp",10,4],["cp",11,5],["cp",4,6],["cp",0,8],["cp",0,10],["cp",0,11],["cp",0,12],["cp",2,18],["cp",5,21],["cp",4,22]],"t":1305119762.89342},{"y":25,"d":[["cp",1,0],["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",6,5],["cp",7,6],["cp",8,7],["cp",9,8],["cp",10,9],["cp",11,10],["cp",12,11],["cp",13,12],["cp",14,13],["cp",15,14],["cp",16,15],["cp",0,16],["cp",18,17],["cp",19,18],["cp",20,19],["cp",4,20],["cp",5,21],["cp",6,22],[23,0,32,"bash-3.2$ exit "],[24,["a"," "]]],"x":1,"f":[["cp",2,1],["cp",3,2],["cp",4,3],["cp",5,4],["cp",3,5],["cp",2,6],["cp",0,7],["cp",1,17],["cp",2,18],["cp",4,20],["cp",3,21],["cp",2,22],["cp",0,23]],"B":[["cp",2,1],["cp",0,2],["cp",4,3],["cp",5,4],["cp",3,5],["cp",0,6],["cp",1,17],["cp",0,18],["cp",4,20],["cp",3,21],["cp",0,22]],"t":1305119768.38188}]} \ No newline at end of file diff --git a/html/part3/smart-and-dump-protocol.html b/html/part3/smart-and-dump-protocol.html new file mode 100644 index 000000000..da5d62898 --- /dev/null +++ b/html/part3/smart-and-dump-protocol.html @@ -0,0 +1,5 @@ +--- +layout: ttyrecord +title: smart-and-dump-protocol +json_file: smart-and-dump-protocol.json +--- diff --git a/html/part3/smart-and-dump-protocol.json b/html/part3/smart-and-dump-protocol.json new file mode 100644 index 000000000..c246fa77a --- /dev/null +++ b/html/part3/smart-and-dump-protocol.json @@ -0,0 +1 @@ +{"width":"80","height":"25","timeline":[{"d":[["r","bash-3.2$ "],["a"," "],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"x":11,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":1,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305020687.94266,"i":1},{"y":1,"d":[[0,10,"p"]],"x":12,"t":1305020688.64734},{"y":1,"d":[[0,11,"w"]],"x":13,"t":1305020688.73494},{"y":1,"d":[[0,12,"d"]],"x":14,"t":1305020688.87085},{"y":2,"x":1,"t":1305020689.50309},{"y":3,"d":[[1,0,24,"/Users/jiangxin/workspace"],[2,0,8,"bash-3.2$"]],"x":11,"t":1305020689.50327},{"y":3,"d":[[2,10,"s"]],"x":12,"t":1305020689.90299},{"y":3,"d":[[2,11,"c"]],"x":13,"t":1305020690.0951},{"y":3,"d":[[2,12,"r"]],"x":14,"t":1305020690.28719},{"y":3,"d":[[2,13,"e"]],"x":15,"t":1305020690.47092},{"y":3,"d":[[2,14,"e"]],"x":16,"t":1305020690.64712},{"y":3,"d":[[2,15,"n"]],"x":17,"t":1305020690.71906},{"y":4,"x":1,"t":1305020691.05594},{"y":1,"d":[["cp",3,0],["cp",0,1],["cp",0,2]],"x":1,"t":1305020691.06221},{"y":1,"x":1,"t":1305020691.37607},{"y":1,"b":[[23,0,5,["a","4"]]],"d":[[23,0,5,"0 bash"],[23,54,76,"@jx - 2011/05/10, 5:44"]],"x":1,"t":1305020691.37931},{"y":1,"d":[[0,0,8,"bash-3.2$"]],"x":11,"t":1305020691.72076},{"y":24,"b":[["cp",23,11],[23,2,5,["a","0"]]],"d":[["cp",23,11],[23,0,9,"- 0 bash"],[23,54,76,["a"," "]]],"x":30,"t":1305020693.19927},{"y":1,"d":[[23,54,76,"@jx - 2011/05/10, 5:44"]],"x":11,"t":1305020693.19934},{"y":1,"d":[[0,10,"g"]],"x":12,"t":1305020694.079},{"y":1,"d":[[0,11,"i"]],"x":13,"t":1305020694.16758},{"y":1,"d":[[0,12,"t"]],"x":14,"t":1305020694.27105},{"y":1,"x":15,"t":1305020694.36679},{"y":1,"d":[[0,14,"c"]],"x":16,"t":1305020694.5272},{"y":1,"d":[[0,15,"l"]],"x":17,"t":1305020694.59117},{"y":1,"d":[[0,16,"o"]],"x":18,"t":1305020694.7351},{"y":1,"d":[[0,17,"n"]],"x":19,"t":1305020694.86304},{"y":1,"d":[[0,18,"e"]],"x":20,"t":1305020694.9752},{"y":1,"x":21,"t":1305020695.13657},{"y":1,"d":[[0,20,"g"]],"x":22,"t":1305020695.43104},{"y":1,"d":[[0,21,"i"]],"x":23,"t":1305020695.55893},{"y":1,"d":[[0,22,"t"]],"x":24,"t":1305020695.783},{"y":1,"d":[[0,23,"@"]],"x":25,"t":1305020697.04712},{"y":1,"d":[[0,24,"g"]],"x":26,"t":1305020697.50298},{"y":1,"d":[[0,25,"i"]],"x":27,"t":1305020697.61484},{"y":1,"d":[[0,26,"t"]],"x":28,"t":1305020697.70289},{"y":1,"d":[[0,27,"."]],"x":29,"t":1305020697.85493},{"y":1,"d":[[0,28,"b"]],"x":30,"t":1305020698.03888},{"y":1,"d":[[0,29,"j"]],"x":31,"t":1305020698.1267},{"y":1,"d":[[0,30,"."]],"x":32,"t":1305020698.36704},{"y":1,"d":[[0,31,"o"]],"x":33,"t":1305020698.56695},{"y":1,"d":[[0,32,"s"]],"x":34,"t":1305020698.71124},{"y":1,"d":[[0,33,"s"]],"x":35,"t":1305020698.87869},{"y":1,"d":[[0,34,"x"]],"x":36,"t":1305020699.05494},{"y":1,"d":[[0,35,"p"]],"x":37,"t":1305020699.13482},{"y":1,"d":[[0,36,"."]],"x":38,"t":1305020699.28677},{"y":1,"d":[[0,37,"c"]],"x":39,"t":1305020699.3429},{"y":1,"d":[[0,38,"o"]],"x":40,"t":1305020699.4868},{"y":1,"d":[[0,39,"m"]],"x":41,"t":1305020699.58263},{"y":1,"d":[[0,40,":"]],"x":42,"t":1305020700.02527},{"y":1,"d":[[11,76,"5"]],"x":42,"t":1305020700.10019},{"y":1,"d":[[23,76,"5"]],"x":42,"t":1305020700.10027},{"y":1,"d":[[0,41,"m"]],"x":43,"t":1305020700.39102},{"y":1,"d":[[0,42,"i"]],"x":44,"t":1305020700.56789},{"y":1,"d":[[0,43,"r"]],"x":45,"t":1305020700.74263},{"y":1,"d":[[0,44,"r"]],"x":46,"t":1305020700.91874},{"y":1,"d":[[0,45,"o"]],"x":47,"t":1305020701.00672},{"y":1,"d":[[0,46,"r"]],"x":48,"t":1305020701.11065},{"y":1,"d":[[0,47,"s"]],"x":49,"t":1305020701.31072},{"y":1,"d":[[0,48,"/"]],"x":50,"t":1305020701.45494},{"y":1,"d":[[0,49,"g"]],"x":51,"t":1305020701.65479},{"y":1,"d":[[0,50,"i"]],"x":52,"t":1305020701.71058},{"y":1,"d":[[0,51,"t"]],"x":53,"t":1305020701.82283},{"y":1,"d":[[0,52,"."]],"x":54,"t":1305020701.9348},{"y":1,"d":[[0,53,"g"]],"x":55,"t":1305020702.08663},{"y":1,"d":[[0,54,"i"]],"x":56,"t":1305020702.16701},{"y":1,"d":[[0,55,"t"]],"x":57,"t":1305020702.2788},{"y":2,"x":1,"t":1305020702.46414},{"y":3,"d":[[1,0,18,"Cloning into git..."]],"x":1,"t":1305020702.47068},{"y":13,"x":1,"t":1305020703.94222},{"y":13,"d":[[2,0,30,"remote: Counting objects: 37699"]],"x":1,"t":1305020704.08927},{"y":13,"b":[[23,0,1,["a","0"]],[23,8,13,["a","4"]]],"d":[[11,8,13,"1 bash"],["cp",11,23]],"x":1,"t":1305020704.83927},{"y":13,"d":[[2,26,30,"68891"]],"x":1,"t":1305020705.08881},{"y":13,"d":[[12,0,8,"bash-3.2$"]],"x":11,"t":1305020705.1739},{"y":13,"d":[[2,26,31,"102643"]],"x":11,"t":1305020706.08879},{"y":13,"d":[[2,27,38,"40068, done."]],"x":11,"t":1305020706.93117},{"y":13,"d":[[12,10,"w"]],"x":12,"t":1305020707.05478},{"y":13,"d":[[3,0,42,"remote: Compressing objects: 0% (1/38121)"]],"x":12,"t":1305020707.12552},{"y":13,"d":[[3,31,"3"],[3,36,45,"144/38121)"]],"x":12,"t":1305020707.16759},{"y":13,"d":[[3,31,38,"6% (2288"]],"x":12,"t":1305020707.21749},{"y":13,"d":[[3,31,38,"9% (3431"],[12,11,"a"]],"x":13,"t":1305020707.26426},{"y":13,"d":[[3,30,38,"12% (4575"]],"x":13,"t":1305020707.31194},{"y":13,"d":[[3,31,38,"6% (6100"]],"x":13,"t":1305020707.36127},{"y":13,"d":[[3,30,38,"20% (7625"]],"x":13,"t":1305020707.40942},{"y":13,"d":[[3,31,38,"3% (8768"],[12,12,"t"]],"x":14,"t":1305020707.44994},{"y":13,"d":[[3,31,38,"6% (9912"]],"x":14,"t":1305020707.4972},{"y":13,"d":[[3,30,46,"30% (11437/38121)"]],"x":14,"t":1305020707.54324},{"y":13,"d":[[3,31,"5"],[3,36,39,"3343"],[12,13,"c"]],"x":15,"t":1305020707.59139},{"y":13,"d":[[3,30,31,"40"],[3,36,39,"5249"]],"x":15,"t":1305020707.63418},{"y":13,"d":[[3,31,"5"],[3,36,39,"7155"],[12,14,"h"]],"x":16,"t":1305020707.68023},{"y":13,"d":[[3,30,31,"51"],[3,36,39,"9442"]],"x":16,"t":1305020707.71976},{"y":13,"d":[[3,31,39,"5% (20967"]],"x":16,"t":1305020707.76262},{"y":13,"x":17,"t":1305020707.83042},{"y":13,"d":[[3,31,"6"],[3,36,39,"1348"]],"x":17,"t":1305020707.84094},{"y":13,"d":[[3,31,"7"],[3,37,39,"729"]],"x":17,"t":1305020707.89669},{"y":13,"d":[[12,16,"-"]],"x":18,"t":1305020707.9424},{"y":13,"d":[[3,31,"8"],[3,36,39,"2111"]],"x":18,"t":1305020707.95051},{"y":13,"d":[[3,31,"9"],[3,37,39,"492"]],"x":18,"t":1305020707.99452},{"y":13,"d":[[3,30,31,"60"],[3,37,39,"873"]],"x":18,"t":1305020708.04031},{"y":13,"d":[[3,31,"1"],[3,36,39,"3254"]],"x":18,"t":1305020708.08566},{"d":[["r","bash-3.2$ git clone git@git.bj.ossxp.com:mirrors/git.git "],["r","Cloning into git... "],["r","remote: Counting objects: 140068, done. "],["r","remote: Compressing objects: 61% (23385/38121) "],["a"," "],"d","d","d","d","d","d",["r","0 bash 1 bash @jx - 2011/05/10, 5:45 "],["r","bash-3.2$ watch - "],["a"," "],"d","d","d","d","d","d","d","d","d",["r","0 bash 1 bash @jx - 2011/05/10, 5:45 "],["a"," "]],"x":18,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":13,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d",["r","44444400000000000000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d","d","d","d","d",["r","00000000444444000000000000000000000000000000000000000000000000000000000000000000"],["a","0"]],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305020708.11223,"i":1},{"y":13,"d":[[3,31,"2"],[3,37,39,"636"]],"x":18,"t":1305020708.14008},{"y":13,"d":[[3,31,"3"],[3,36,39,"4017"],[12,17,"n"]],"x":19,"t":1305020708.17833},{"y":13,"d":[[3,31,"4"],[3,37,39,"398"]],"x":19,"t":1305020708.21768},{"y":13,"d":[[3,31,"5"],[3,37,39,"779"]],"x":19,"t":1305020708.26338},{"y":13,"d":[[3,31,"6"],[3,36,39,"5160"]],"x":19,"t":1305020708.29825},{"y":13,"d":[[3,31,"7"],[3,37,39,"542"]],"x":19,"t":1305020708.33354},{"y":13,"d":[[3,31,"8"],[3,37,39,"923"],[12,18,"1"]],"x":20,"t":1305020708.36659},{"y":13,"d":[[3,31,"9"],[3,36,39,"6304"]],"x":20,"t":1305020708.40473},{"y":13,"d":[[3,30,31,"70"],[3,37,39,"685"]],"x":20,"t":1305020708.44076},{"y":13,"d":[[3,31,"2"],[3,36,39,"7448"]],"x":20,"t":1305020708.49007},{"y":13,"d":[[3,31,"4"],[3,36,39,"8210"]],"x":20,"t":1305020708.5344},{"y":13,"d":[[3,31,"6"],[3,37,39,"972"]],"x":20,"t":1305020708.57439},{"y":13,"d":[[3,31,"8"],[3,36,39,"9735"]],"x":21,"t":1305020708.61578},{"y":13,"d":[[3,30,39,"80% (30497"]],"x":21,"t":1305020708.65164},{"y":13,"d":[[3,31,"2"],[3,36,39,"1260"]],"x":21,"t":1305020708.6952},{"y":13,"d":[[3,31,"3"],[3,37,39,"641"]],"x":21,"t":1305020708.75642},{"y":13,"d":[[3,31,"5"],[3,36,39,"2403"]],"x":21,"t":1305020708.80056},{"y":13,"d":[[3,31,"6"],[3,37,39,"785"]],"x":21,"t":1305020708.87678},{"y":13,"d":[[3,31,"7"],[3,36,39,"3166"],[12,20,"d"]],"x":22,"t":1305020708.9163},{"y":13,"d":[[3,31,"8"],[3,37,39,"547"]],"x":22,"t":1305020708.97437},{"y":13,"d":[[12,21,"u"]],"x":23,"t":1305020709.00653},{"y":13,"d":[[3,31,"9"],[3,37,39,"928"]],"x":23,"t":1305020709.07869},{"y":13,"d":[[3,36,39,"4026"]],"x":24,"t":1305020709.1185},{"y":13,"d":[[3,30,31,"93"],[3,36,39,"5453"]],"x":24,"t":1305020709.16805},{"y":13,"d":[[3,31,"4"],[3,37,39,"834"]],"x":24,"t":1305020709.20602},{"y":13,"d":[[3,31,"5"],[3,36,39,"6215"]],"x":24,"t":1305020709.31873},{"y":13,"d":[[3,31,"6"],[3,37,39,"597"]],"x":24,"t":1305020709.44136},{"y":13,"d":[[12,23,"-"]],"x":25,"t":1305020709.49456},{"y":13,"d":[[12,24,"0"]],"x":26,"t":1305020709.51852},{"y":13,"d":[[3,31,"7"],[3,37,39,"978"]],"x":26,"t":1305020709.56081},{"y":13,"d":[[3,31,"8"],[3,36,39,"7359"]],"x":26,"t":1305020709.68859},{"y":13,"d":[[3,31,"9"],[3,37,39,"740"]],"x":26,"t":1305020709.7178},{"y":13,"d":[[3,29,31,"100"],[3,36,39,"8121"]],"x":26,"t":1305020709.83798},{"y":13,"d":[[3,47,53,", done."],[4,0,36,"Receiving objects: 1% (1401/140068)"]],"x":26,"t":1305020709.88511},{"y":13,"d":[[4,21,28,"2% (2802"]],"x":26,"t":1305020709.92861},{"y":13,"d":[[4,21,28,"3% (4203"]],"x":26,"t":1305020709.97112},{"y":13,"d":[[4,21,26,"4% (56"]],"x":26,"t":1305020710.00993},{"y":13,"d":[[4,21,28,"5% (7004"],[12,24," "]],"x":25,"t":1305020710.05225},{"y":13,"d":[[4,21,28,"6% (8405"]],"x":25,"t":1305020710.09438},{"y":13,"d":[[4,21,26,"7% (98"]],"x":25,"t":1305020710.13448},{"y":13,"d":[[12,24,"s"]],"x":26,"t":1305020710.15901},{"y":13,"d":[[4,21,37,"8% (11206/140068)"]],"x":26,"t":1305020710.18616},{"y":13,"d":[[4,21,"9"],[4,26,29,"2607"]],"x":26,"t":1305020710.22294},{"y":13,"d":[[4,20,21,"10"],[4,26,27,"40"],[12,25,"h"]],"x":27,"t":1305020710.27288},{"y":13,"d":[[4,21,"1"],[4,26,29,"5408"]],"x":27,"t":1305020710.30766},{"y":13,"d":[[4,21,"2"],[4,26,29,"6809"],[4,38,61,", 5.57 MiB | 11.10 MiB/s"]],"x":27,"t":1305020710.34856},{"y":13,"d":[[4,21,"3"],[4,26,27,"82"]],"x":27,"t":1305020710.38754},{"y":13,"d":[[4,21,"4"],[4,26,29,"9610"]],"x":28,"t":1305020710.43127},{"y":13,"d":[[4,21,29,"5% (21011"]],"x":28,"t":1305020710.49145},{"y":13,"d":[[4,21,"6"],[4,26,27,"24"]],"x":28,"t":1305020710.52811},{"y":13,"d":[[4,21,"7"],[4,26,29,"3812"]],"x":28,"t":1305020710.56771},{"y":13,"d":[[12,27,"*"]],"x":29,"t":1305020710.7744},{"y":13,"d":[[4,26,29,"4278"],[4,40,43,"8.01"],[4,51,61,"7.10 MiB/s "]],"x":29,"t":1305020710.96592},{"y":13,"d":[[4,21,"8"],[4,26,29,"5213"]],"x":29,"t":1305020710.9891},{"y":13,"d":[[4,21,"9"],[4,26,27,["a","6"]]],"x":29,"t":1305020711.02635},{"y":13,"d":[[4,20,21,"20"],[4,26,29,"8014"]],"x":29,"t":1305020711.06334},{"y":23,"d":[[12,0,27,"Every 1.0s: du -sh git "],[12,53,76,"Tue May 10 17:45:11 2011"],[14,0,3,"9.8M"],[14,8,10,"git"]],"x":77,"t":1305020711.10739},{"y":23,"d":[[4,21,"1"],[4,26,29,"9415"]],"x":77,"t":1305020711.12442},{"y":23,"d":[[4,21,27,"2% (308"]],"x":77,"t":1305020711.26735},{"y":23,"d":[[4,21,"3"],[4,26,29,"2216"]],"x":77,"t":1305020711.31032},{"y":23,"d":[[4,21,"5"],[4,26,29,"5017"]],"x":77,"t":1305020711.3481},{"y":23,"d":[[4,21,"6"],[4,26,29,"6418"],[4,40,61,"15.58 MiB | 9.57 MiB/s"]],"x":77,"t":1305020711.48293},{"y":23,"d":[[4,21,"7"],[4,26,29,"7819"]],"x":77,"t":1305020711.6498},{"y":23,"d":[[4,21,29,"9% (40620"]],"x":77,"t":1305020711.68024},{"y":23,"d":[[4,20,21,"31"],[4,26,29,"3422"]],"x":77,"t":1305020711.71867},{"y":23,"d":[[4,21,"4"],[4,26,29,"7624"]],"x":77,"t":1305020711.76729},{"y":23,"d":[[4,21,29,"6% (50425"]],"x":77,"t":1305020711.8156},{"y":23,"d":[[4,21,"8"],[4,26,29,"3226"]],"x":77,"t":1305020711.85763},{"y":23,"d":[[4,20,21,"40"],[4,26,29,"6028"]],"x":77,"t":1305020711.90429},{"y":23,"d":[[4,21,"2"],[4,26,29,"8829"]],"x":77,"t":1305020711.93485},{"y":23,"d":[[4,21,29,"4% (61630"],[4,40,44,"21.20"],[4,54,55,"95"]],"x":77,"t":1305020711.96831},{"y":23,"d":[[4,21,"7"],[4,26,29,"5832"]],"x":77,"t":1305020712.01636},{"y":23,"d":[[4,21,"8"],[4,26,29,"7233"]],"x":77,"t":1305020712.06864},{"y":23,"d":[[4,20,29,"50% (70034"],[12,71,"2"],[14,0,2," 23"]],"x":77,"t":1305020712.11361},{"y":23,"d":[[4,21,"2"],[4,26,29,"2836"]],"x":77,"t":1305020712.162},{"y":23,"d":[[4,21,"3"],[4,26,29,"4237"]],"x":77,"t":1305020712.20617},{"y":23,"d":[[4,21,"4"],[4,26,27,"56"]],"x":77,"t":1305020712.34927},{"y":23,"d":[[4,20,29,"60% (84041"]],"x":77,"t":1305020712.39397},{"y":23,"d":[[4,21,"4"],[4,26,29,"9644"]],"x":77,"t":1305020712.43042},{"y":23,"d":[[4,21,29,"6% (92445"]],"x":77,"t":1305020712.46331},{"y":23,"d":[[4,21,"9"],[4,26,29,"6647"],[4,41,44,"6.68"],[4,52,62,"10.14 MiB/s"]],"x":77,"t":1305020712.50744},{"y":23,"d":[[4,20,21,"71"],[4,26,29,"9449"]],"x":77,"t":1305020712.5447},{"y":23,"d":[[4,21,63,"3% (102250/140068), 26.68 MiB | 10.14 MiB/s"]],"x":77,"t":1305020712.58},{"y":23,"d":[[4,21,"6"],[4,27,30,"6452"]],"x":77,"t":1305020712.62606},{"y":23,"d":[[4,21,"8"],[4,27,30,"9254"]],"x":77,"t":1305020712.6616},{"y":23,"d":[[4,20,21,"80"],[4,26,30,"12055"]],"x":77,"t":1305020712.69036},{"y":23,"d":[[4,21,"2"],[4,27,30,"4856"]],"x":77,"t":1305020712.73394},{"y":23,"d":[[4,21,"3"],[4,27,30,"6257"]],"x":77,"t":1305020712.75919},{"y":23,"d":[[4,21,"5"],[4,27,30,"9058"]],"x":77,"t":1305020712.80776},{"y":23,"d":[[4,21,"7"],[4,26,30,"21860"]],"x":77,"t":1305020712.84888},{"y":23,"d":[[4,21,"9"],[4,27,30,"4661"]],"x":77,"t":1305020712.88988},{"y":23,"d":[[4,20,21,"90"],[4,27,30,"6062"]],"x":77,"t":1305020712.91736},{"y":23,"d":[[4,21,"1"],[4,27,28,"74"],[4,41,45,"32.01"],[4,53,63,"9.83 MiB/s "]],"x":77,"t":1305020713.09538},{"y":23,"d":[[4,21,"6"],[4,26,30,"34466"],[12,71,"3"],[14,1,"3"]],"x":77,"t":1305020713.13965},{"y":23,"d":[[4,0,64,"remote: Total 140068 (delta 104201), reused 135829 (delta 100047)"],[5,0,69,"Receiving objects: 100% (140068/140068), 33.98 MiB | 9.83 MiB/s, done."]],"x":77,"t":1305020713.1879},{"y":23,"d":[[6,0,32,"Resolving deltas: 0% (0/104201)"]],"x":77,"t":1305020713.21976},{"y":23,"d":[[6,20,35,"1% (1185/104201)"]],"x":77,"t":1305020713.29949},{"y":23,"d":[[6,20,27,"2% (2087"]],"x":77,"t":1305020713.33608},{"y":23,"d":[[6,20,27,"3% (3135"]],"x":77,"t":1305020713.46701},{"d":[["r","bash-3.2$ git clone git@git.bj.ossxp.com:mirrors/git.git "],["r","Cloning into git... "],["r","remote: Counting objects: 140068, done. "],["r","remote: Compressing objects: 100% (38121/38121), done. "],["r","remote: Total 140068 (delta 104201), reused 135829 (delta 100047) "],["r","Receiving objects: 100% (140068/140068), 33.98 MiB | 9.83 MiB/s, done. "],["r","Resolving deltas: 4% (4183/104201) "],["a"," "],"d","d","d",["r","0 bash 1 bash @jx - 2011/05/10, 5:45 "],["r","Every 1.0s: du -sh git Tue May 10 17:45:13 2011 "],["a"," "],["r"," 33M git "],["a"," "],"d","d","d","d","d","d","d",["r","0 bash 1 bash @jx - 2011/05/10, 5:45 "],["a"," "]],"x":77,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":23,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d",["r","44444400000000000000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d","d","d","d","d",["r","00000000444444000000000000000000000000000000000000000000000000000000000000000000"],["a","0"]],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305020713.50558,"i":1},{"y":23,"d":[[6,20,27,"5% (5217"]],"x":77,"t":1305020713.54964},{"y":23,"d":[[6,20,26,"6% (625"]],"x":77,"t":1305020713.59087},{"y":23,"d":[[6,20,27,"7% (7386"]],"x":77,"t":1305020713.65065},{"y":23,"d":[[6,20,27,"8% (8338"]],"x":77,"t":1305020713.70535},{"y":23,"d":[[6,20,27,"9% (9379"]],"x":77,"t":1305020713.91859},{"y":23,"d":[[6,19,36,"10% (10790/104201)"]],"x":77,"t":1305020714.05249},{"y":23,"d":[[12,71,"4"],[14,0,"4"]],"x":77,"t":1305020714.12437},{"y":23,"d":[[6,20,"1"],[6,25,28,"1517"]],"x":77,"t":1305020714.12902},{"y":23,"d":[[6,20,"2"],[6,25,28,"2530"]],"x":77,"t":1305020714.21412},{"y":23,"d":[[6,26,28,"639"]],"x":77,"t":1305020714.22099},{"y":23,"d":[[6,20,"3"],[6,25,28,"3551"]],"x":77,"t":1305020714.29937},{"y":23,"d":[[6,20,"4"],[6,25,28,"4706"]],"x":77,"t":1305020714.42495},{"y":23,"d":[[6,20,"5"],[6,25,28,"5644"]],"x":77,"t":1305020714.48492},{"y":23,"d":[[6,20,"6"],[6,25,28,"6716"]],"x":77,"t":1305020714.56351},{"y":23,"d":[[6,20,"7"],[6,25,28,"7774"]],"x":77,"t":1305020714.65343},{"y":23,"d":[[6,20,"8"],[6,25,28,"8818"]],"x":77,"t":1305020714.71222},{"y":23,"d":[[6,20,"9"],[6,25,28,"9941"]],"x":77,"t":1305020714.89323},{"y":23,"d":[[6,19,28,"20% (20863"]],"x":77,"t":1305020714.95557},{"y":23,"d":[[6,20,"1"],[6,25,28,"1884"]],"x":77,"t":1305020715.05089},{"y":23,"d":[[12,71,"5"]],"x":77,"t":1305020715.12939},{"y":23,"d":[[6,20,"2"],[6,25,28,"3117"]],"x":77,"t":1305020715.17076},{"y":23,"d":[[6,26,28,"895"]],"x":77,"t":1305020715.22417},{"y":23,"d":[[6,20,"3"],[6,25,28,"4318"]],"x":77,"t":1305020715.43405},{"y":23,"d":[[6,20,"4"],[6,25,28,"5024"]],"x":77,"t":1305020715.64769},{"y":23,"d":[[6,20,"5"],[6,25,27,"623"]],"x":77,"t":1305020715.78998},{"y":23,"d":[[6,20,"6"],[6,25,28,"7260"]],"x":77,"t":1305020715.85821},{"y":23,"d":[[6,20,"7"],[6,25,28,"8158"]],"x":77,"t":1305020715.93716},{"y":23,"d":[[12,71,"6"]],"x":77,"t":1305020716.13549},{"y":23,"d":[[6,20,28,"9% (30221"]],"x":77,"t":1305020716.17214},{"y":23,"d":[[6,19,20,"30"],[6,25,28,"1399"]],"x":77,"t":1305020716.22041},{"y":23,"d":[[6,20,"1"],[6,25,28,"2307"]],"x":77,"t":1305020716.25254},{"y":23,"d":[[6,20,"2"],[6,25,27,"334"]],"x":77,"t":1305020716.28587},{"y":23,"d":[[6,20,"3"],[6,25,28,"4409"]],"x":77,"t":1305020716.33173},{"y":23,"d":[[6,20,"4"],[6,25,28,"5444"]],"x":77,"t":1305020716.38454},{"y":23,"d":[[6,20,"5"],[6,25,28,"6567"]],"x":77,"t":1305020716.45897},{"y":23,"d":[[6,20,"6"],[6,25,27,"798"]],"x":77,"t":1305020716.53602},{"y":23,"d":[[6,20,"7"],[6,25,28,"8593"]],"x":77,"t":1305020716.55782},{"y":23,"d":[[6,20,28,"9% (40690"]],"x":77,"t":1305020716.69331},{"y":23,"d":[[6,19,20,"40"],[6,25,28,"1681"]],"x":77,"t":1305020716.7875},{"y":23,"d":[[6,20,"1"],[6,25,28,"2725"]],"x":77,"t":1305020716.82744},{"y":23,"d":[[6,20,"2"],[6,25,28,"3809"]],"x":77,"t":1305020716.93408},{"y":7,"x":1,"t":1305020716.93435},{"y":7,"d":[[6,20,"3"],[6,25,28,"4820"]],"x":1,"t":1305020716.9842},{"y":7,"d":[[6,20,"4"],[6,25,28,"5856"]],"x":1,"t":1305020717.01996},{"y":7,"d":[[6,20,"5"],[6,25,28,"6934"]],"x":1,"t":1305020717.08574},{"y":7,"d":[[12,71,"7"]],"x":1,"t":1305020717.14109},{"y":7,"d":[[6,20,"6"],[6,25,28,"8090"]],"x":1,"t":1305020717.15105},{"y":7,"d":[[6,26,28,"964"]],"x":1,"t":1305020717.22235},{"y":7,"d":[[6,20,"7"],[6,25,28,"9495"]],"x":1,"t":1305020717.29038},{"y":7,"d":[[6,20,28,"8% (50093"]],"x":1,"t":1305020717.36488},{"y":7,"d":[[6,20,"9"],[6,25,28,"1417"]],"x":1,"t":1305020717.4689},{"y":7,"d":[[6,19,20,"50"],[6,25,28,"2785"]],"x":1,"t":1305020717.58785},{"y":7,"d":[[6,20,"1"],[6,25,28,"3267"]],"x":1,"t":1305020717.63218},{"y":7,"d":[[6,20,"3"],[6,25,28,"5540"]],"x":1,"t":1305020717.83959},{"y":7,"d":[[6,20,"4"],[6,25,28,"6275"]],"x":1,"t":1305020717.90315},{"y":7,"d":[[6,20,"5"],[6,25,28,"7718"]],"x":1,"t":1305020718.11081},{"y":7,"d":[[6,20,"6"],[6,25,28,"8354"],[12,71,"8"]],"x":1,"t":1305020718.15052},{"y":7,"d":[[6,20,28,"7% (60042"]],"x":1,"t":1305020718.28814},{"y":7,"d":[[6,20,"8"],[6,25,28,"1058"]],"x":1,"t":1305020718.35917},{"y":7,"d":[[6,20,"9"],[6,26,28,"671"]],"x":1,"t":1305020718.41107},{"y":7,"d":[[6,19,20,"60"],[6,25,28,"2724"]],"x":1,"t":1305020718.47655},{"y":7,"d":[[6,20,"1"],[6,25,28,"3761"]],"x":1,"t":1305020718.54216},{"y":7,"d":[[6,20,"2"],[6,25,27,"461"]],"x":1,"t":1305020718.6366},{"y":7,"d":[[6,20,"3"],[6,25,28,"5697"]],"x":1,"t":1305020718.80663},{"y":7,"d":[[6,20,"4"],[6,25,28,"7038"]],"x":1,"t":1305020719.1178},{"y":7,"d":[[6,20,"5"],[6,26,28,"843"],[12,71,"9"]],"x":1,"t":1305020719.15872},{"y":7,"d":[[6,25,28,"8617"]],"x":1,"t":1305020719.22452},{"y":7,"d":[[6,20,"6"],[6,25,28,"9439"]],"x":1,"t":1305020719.26766},{"y":7,"d":[[6,20,"7"],[6,26,28,"983"]],"x":1,"t":1305020719.29027},{"y":7,"d":[[6,20,28,"8% (70867"]],"x":1,"t":1305020719.33405},{"y":7,"d":[[6,20,"9"],[6,25,28,"1972"]],"x":1,"t":1305020719.63299},{"y":7,"d":[[6,19,20,"70"],[6,25,28,"3136"]],"x":1,"t":1305020719.682},{"y":7,"d":[[6,20,"1"],[6,25,28,"4402"]],"x":1,"t":1305020719.74529},{"y":7,"d":[[6,20,"2"],[6,25,28,"5164"]],"x":1,"t":1305020719.78149},{"y":7,"d":[[6,20,"3"],[6,25,28,"6402"]],"x":1,"t":1305020719.83806},{"y":7,"d":[[6,20,"4"],[6,25,28,"7130"]],"x":1,"t":1305020719.86386},{"y":7,"d":[[6,20,"5"],[6,25,28,"8258"]],"x":1,"t":1305020719.93337},{"y":7,"d":[[6,20,"6"],[6,25,28,"9256"]],"x":1,"t":1305020720.02577},{"y":7,"d":[[6,20,28,"7% (80320"]],"x":1,"t":1305020720.11178},{"y":7,"d":[[12,70,71,"20"]],"x":1,"t":1305020720.15996},{"y":7,"d":[[6,20,"8"],[6,25,28,"1277"]],"x":1,"t":1305020720.16697},{"y":7,"d":[[6,26,28,"774"]],"x":1,"t":1305020720.22998},{"y":7,"d":[[6,20,"9"],[6,25,27,"243"]],"x":1,"t":1305020720.26596},{"y":7,"d":[[6,19,20,"80"],[6,25,28,"3396"]],"x":1,"t":1305020720.31813},{"y":7,"d":[[6,20,"1"],[6,25,28,"4415"]],"x":1,"t":1305020720.39351},{"y":7,"d":[[6,20,"2"],[6,25,28,"5520"]],"x":1,"t":1305020720.46067},{"y":7,"d":[[6,20,"3"],[6,25,28,"6517"]],"x":1,"t":1305020720.51847},{"y":7,"d":[[6,20,"4"],[6,25,28,"7532"]],"x":1,"t":1305020720.56627},{"y":7,"d":[[6,20,"5"],[6,25,28,"8606"]],"x":1,"t":1305020720.62693},{"y":7,"d":[[6,20,"6"],[6,25,28,"9744"]],"x":1,"t":1305020720.75205},{"y":7,"d":[[6,20,27,"7% (9066"]],"x":1,"t":1305020720.79595},{"y":7,"d":[[6,20,"8"],[6,25,28,"1861"]],"x":1,"t":1305020721.06728},{"y":7,"d":[[6,20,"9"],[6,25,28,"2752"]],"x":1,"t":1305020721.11608},{"y":7,"d":[[12,71,"1"]],"x":1,"t":1305020721.16878},{"y":7,"d":[[6,19,20,"90"],[6,25,28,"3781"]],"x":1,"t":1305020721.20179},{"y":7,"d":[[6,25,28,"4257"]],"x":1,"t":1305020721.2225},{"y":7,"d":[[6,20,"1"],[6,26,28,"941"]],"x":1,"t":1305020721.25745},{"y":7,"d":[[6,20,"2"],[6,25,28,"5873"]],"x":1,"t":1305020721.30115},{"y":7,"d":[[6,20,"3"],[6,25,28,"7029"]],"x":1,"t":1305020721.3836},{"d":[["r","bash-3.2$ git clone git@git.bj.ossxp.com:mirrors/git.git "],["r","Cloning into git... "],["r","remote: Counting objects: 140068, done. "],["r","remote: Compressing objects: 100% (38121/38121), done. "],["r","remote: Total 140068 (delta 104201), reused 135829 (delta 100047) "],["r","Receiving objects: 100% (140068/140068), 33.98 MiB | 9.83 MiB/s, done. "],["r","Resolving deltas: 94% (98122/104201) "],["a"," "],"d","d","d",["r","0 bash 1 bash @jx - 2011/05/10, 5:45 "],["r","Every 1.0s: du -sh git Tue May 10 17:45:21 2011 "],["a"," "],["r","433M git "],["a"," "],"d","d","d","d","d","d","d",["r","0 bash 1 bash @jx - 2011/05/10, 5:45 "],["a"," "]],"x":1,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":7,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d",["r","44444400000000000000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d","d","d","d","d",["r","00000000444444000000000000000000000000000000000000000000000000000000000000000000"],["a","0"]],"f":[["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305020721.4369,"i":1},{"y":7,"d":[[6,20,"5"],[6,26,28,"994"]],"x":1,"t":1305020721.47729},{"y":7,"d":[[6,20,37,"6% (100059/104201)"]],"x":1,"t":1305020721.51565},{"y":7,"d":[[6,20,"7"],[6,26,29,"1222"]],"x":1,"t":1305020721.55977},{"y":7,"d":[[6,20,"8"],[6,26,29,"2123"]],"x":1,"t":1305020721.5905},{"y":7,"d":[[6,20,"9"],[6,26,29,"3165"]],"x":1,"t":1305020721.62645},{"y":8,"d":[[6,18,20,"100"],[6,26,29,"4201"],[6,38,44,", done."]],"x":1,"t":1305020721.6572},{"y":8,"d":[[12,71,"2"],[14,0,2," 48"]],"x":1,"t":1305020722.18091},{"y":8,"d":[[7,0,8,"bash-3.2$"]],"x":11,"t":1305020722.66684},{"y":8,"d":[[12,71,"3"],[14,1,2,["a","5"]]],"x":11,"t":1305020723.1996},{"y":8,"d":[[12,71,"4"]],"x":11,"t":1305020724.21736},{"y":8,"d":[[12,71,"5"]],"x":11,"t":1305020725.23505},{"y":8,"d":[[7,10,"l"]],"x":12,"t":1305020725.45417},{"y":8,"d":[[7,11,"s"]],"x":13,"t":1305020725.53395},{"y":9,"x":1,"t":1305020725.73517},{"y":10,"d":[[8,0,2,"git"],[9,0,8,"bash-3.2$"]],"x":11,"f":[[8,0,2,["a","4"]]],"t":1305020725.73996},{"y":10,"d":[[12,71,"6"]],"x":11,"t":1305020726.25263},{"y":10,"d":[[9,10,"g"]],"x":12,"t":1305020727.26182},{"y":10,"d":[[12,71,"7"]],"x":12,"t":1305020727.27262},{"y":10,"d":[[9,11,"i"]],"x":13,"t":1305020727.34195},{"y":10,"d":[[9,12,"t"]],"x":14,"t":1305020727.44585},{"y":10,"x":15,"t":1305020727.53391},{"y":10,"d":[[9,14,"c"]],"x":16,"t":1305020728.24697},{"y":10,"d":[[12,71,"8"]],"x":16,"t":1305020728.29107},{"y":10,"d":[[9,15,"l"]],"x":17,"t":1305020728.35784},{"y":10,"d":[[9,16,"o"]],"x":18,"t":1305020728.52584},{"y":10,"d":[[9,17,"n"]],"x":19,"t":1305020728.63759},{"y":10,"d":[[9,18,"e"]],"x":20,"t":1305020728.71784},{"y":10,"x":21,"t":1305020728.80565},{"y":10,"d":[[9,20,"g"]],"x":22,"t":1305020729.03805},{"y":10,"d":[[9,21,"i"]],"x":23,"t":1305020729.10988},{"y":10,"d":[[9,22,"t"]],"x":24,"t":1305020729.23782},{"y":10,"d":[[12,71,"9"]],"x":24,"t":1305020729.3086},{"y":10,"d":[[9,22," "]],"x":23,"t":1305020730.006},{"y":10,"d":[[9,21," "]],"x":22,"t":1305020730.14961},{"y":10,"d":[[9,20," "]],"x":21,"t":1305020730.31754},{"y":10,"d":[[12,70,71,"30"]],"x":21,"t":1305020730.32785},{"y":10,"d":[[9,20,"h"]],"x":22,"t":1305020730.58154},{"y":10,"d":[[9,21,"t"]],"x":23,"t":1305020730.7655},{"y":10,"d":[[9,22,"t"]],"x":24,"t":1305020730.9256},{"y":10,"d":[[9,23,"p"]],"x":25,"t":1305020731.05346},{"y":10,"d":[[12,71,"1"]],"x":25,"t":1305020731.34662},{"y":10,"d":[[9,24,":"]],"x":26,"t":1305020731.47775},{"y":10,"d":[[9,25,"/"]],"x":27,"t":1305020731.67739},{"y":10,"d":[[9,26,"/"]],"x":28,"t":1305020731.8294},{"y":10,"d":[[9,27,"g"]],"x":29,"t":1305020732.33351},{"y":10,"d":[[12,71,"2"]],"x":29,"t":1305020732.36538},{"y":10,"d":[[9,28,"i"]],"x":30,"t":1305020732.4225},{"y":10,"d":[[9,29,"t"]],"x":31,"t":1305020732.5414},{"y":10,"d":[[9,30,"."]],"x":32,"t":1305020732.76548},{"y":10,"d":[[9,31,"b"]],"x":33,"t":1305020733.08539},{"y":10,"d":[[9,32,"j"]],"x":34,"t":1305020733.18931},{"y":10,"d":[[9,33,"."]],"x":35,"t":1305020733.37346},{"y":10,"d":[[12,71,"3"]],"x":35,"t":1305020733.38877},{"y":10,"d":[[9,34,"o"]],"x":36,"t":1305020733.57326},{"y":10,"d":[[9,35,"s"]],"x":37,"t":1305020733.68526},{"y":10,"d":[[9,36,"s"]],"x":38,"t":1305020733.8534},{"y":10,"d":[[9,37,"x"]],"x":39,"t":1305020734.0455},{"y":10,"d":[[9,38,"p"]],"x":40,"t":1305020734.14971},{"y":10,"d":[[9,39,"."]],"x":41,"t":1305020734.30163},{"y":10,"d":[[9,40,"c"]],"x":42,"t":1305020734.37477},{"y":10,"d":[[12,71,"4"]],"x":42,"t":1305020734.40748},{"y":10,"d":[[9,41,"o"]],"x":43,"t":1305020734.50959},{"y":10,"d":[[9,42,"m"]],"x":44,"t":1305020734.61369},{"y":10,"d":[[9,43,"/"]],"x":45,"t":1305020734.82941},{"y":10,"d":[[9,44,"m"]],"x":46,"t":1305020735.23776},{"y":10,"d":[[9,45,"i"]],"x":47,"t":1305020735.37378},{"y":10,"d":[[12,71,"5"]],"x":47,"t":1305020735.42479},{"y":10,"d":[[9,46,"r"]],"x":48,"t":1305020735.52555},{"y":10,"d":[[9,47,"r"]],"x":49,"t":1305020735.67774},{"y":10,"d":[[9,48,"o"]],"x":50,"t":1305020735.74969},{"y":10,"d":[[9,49,"r"]],"x":51,"t":1305020735.87762},{"y":10,"d":[[9,50,"s"]],"x":52,"t":1305020736.08562},{"y":10,"d":[[9,51,"/"]],"x":53,"t":1305020736.20526},{"y":10,"d":[[12,71,"6"]],"x":53,"t":1305020736.44282},{"y":10,"d":[[9,52,"g"]],"x":54,"t":1305020736.83755},{"y":10,"d":[[9,53,"i"]],"x":55,"t":1305020736.89338},{"y":10,"d":[[9,54,"t"]],"x":56,"t":1305020737.0213},{"y":10,"d":[[9,55,"."]],"x":57,"t":1305020737.17352},{"y":10,"d":[[9,56,57,"^P"]],"x":59,"t":1305020737.18119},{"y":10,"d":[[9,58,"g"]],"x":60,"t":1305020737.30171},{"y":10,"d":[[12,71,"7"]],"x":60,"t":1305020737.46007},{"y":10,"d":[[9,58," "]],"x":59,"t":1305020737.74958},{"y":10,"d":[[9,56,57,["a"," "]]],"x":57,"t":1305020737.90148},{"y":10,"d":[[9,56,"g"]],"x":58,"t":1305020738.28558},{"y":10,"d":[[9,57,"i"]],"x":59,"t":1305020738.37351},{"y":10,"d":[[12,71,"8"]],"x":59,"t":1305020738.47858},{"y":10,"d":[[9,58,"t"]],"x":60,"t":1305020738.48544},{"y":10,"x":61,"t":1305020739.46967},{"y":10,"d":[[12,71,"9"]],"x":61,"t":1305020739.49607},{"y":10,"d":[[9,60,"g"]],"x":62,"t":1305020739.82923},{"y":10,"d":[[9,61,"i"]],"x":63,"t":1305020739.91762},{"y":10,"d":[[9,62,"t"]],"x":64,"t":1305020740.02958},{"y":10,"d":[[9,63,"-"]],"x":65,"t":1305020740.2531},{"y":10,"d":[[12,0,1,"40"]],"x":65,"t":1305020740.51451},{"y":10,"d":[[9,64,"h"]],"x":66,"t":1305020740.58117},{"y":10,"d":[[9,65,"t"]],"x":67,"t":1305020740.71749},{"y":10,"d":[[9,66,"t"]],"x":68,"t":1305020740.86954},{"y":10,"d":[[9,67,"p"]],"x":69,"t":1305020740.98152},{"y":11,"x":1,"t":1305020741.42948},{"d":[["r","Cloning into git... "],["r","remote: Counting objects: 140068, done. "],["r","remote: Compressing objects: 100% (38121/38121), done. "],["r","remote: Total 140068 (delta 104201), reused 135829 (delta 100047) "],["r","Receiving objects: 100% (140068/140068), 33.98 MiB | 9.83 MiB/s, done. "],["r","Resolving deltas: 100% (104201/104201), done. "],["r","bash-3.2$ ls "],["r","git "],["r","bash-3.2$ git clone http://git.bj.ossxp.com/mirrors/git.git git-http "],["r","Cloning into git-http... "],["a"," "],["r","0 bash 1 bash @jx - 2011/05/10, 5:45 "],["r","40ery 1.0s: du -sh git Tue May 10 17:45:39 2011 "],["a"," "],["r"," 55M git "],["a"," "],"d","d","d","d","d","d","d",["r","0 bash 1 bash @jx - 2011/05/10, 5:45 "],["a"," "]],"x":1,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":11,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d",["r","44444400000000000000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d","d","d","d","d",["r","00000000444444000000000000000000000000000000000000000000000000000000000000000000"],["a","0"]],"f":[["a","7"],"d","d","d","d","d","d",["r","44477777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305020741.44755,"i":1},{"y":11,"d":[[12,71,"1"]],"x":1,"t":1305020741.53192},{"y":11,"d":[[12,71,"2"]],"x":1,"t":1305020742.54971},{"y":11,"d":[[12,71,"3"]],"x":1,"t":1305020743.56748},{"y":23,"x":77,"t":1305020744.39733},{"y":23,"d":[[12,71,"4"]],"x":77,"t":1305020744.5866},{"y":23,"d":[[12,71,"5"]],"x":77,"t":1305020745.60424},{"y":23,"x":1,"t":1305020745.72551},{"y":23,"d":[[22,0,8,"bash-3.2$"]],"x":11,"t":1305020745.72648},{"y":23,"d":[[22,10,27,"watch -n1 du -sh *"]],"x":29,"t":1305020746.32615},{"y":23,"d":[["cp",10,12],["cp",14,13],["cp",10,14],["cp",22,21],["cp",10,22]],"x":1,"t":1305020747.06906},{"y":23,"d":[[12,0,30,"Every 1.0s: du -sh git git-http"],[12,53,76,"Tue May 10 17:45:47 2011"],["cp",10,13],[14,0,2,"55M"],[14,7,9,"git"],[15,0,3,"3.1M"],[15,8,15,"git-http"],["cp",10,21]],"x":77,"t":1305020747.09542},{"y":23,"d":[[12,71,"8"],[15,0,"9"]],"x":77,"t":1305020748.11758},{"y":23,"d":[[12,71,"9"],[15,0,"4"]],"x":77,"t":1305020749.13983},{"y":23,"d":[[12,70,71,"50"],[15,0,"6"]],"x":77,"t":1305020750.1651},{"y":23,"d":[[12,71,"1"],[15,0,2,"5.7"]],"x":77,"t":1305020751.18945},{"y":23,"d":[[12,71,"2"],[15,0,2,"6.4"]],"x":77,"t":1305020752.21332},{"y":23,"d":[[12,71,"3"],[15,0,2,"7.3"]],"x":77,"t":1305020753.23587},{"y":23,"d":[[12,71,"4"],[15,0,2,"8.6"]],"x":77,"t":1305020754.25832},{"y":23,"d":[[12,71,"5"],[15,0,2,"9.8"]],"x":77,"t":1305020755.28087},{"y":23,"d":[[12,71,"6"],[15,0,2," 11"]],"x":77,"t":1305020756.30475},{"y":23,"d":[[12,71,"7"],[15,0,"2"]],"x":77,"t":1305020757.32896},{"y":23,"x":1,"t":1305020758.10908},{"y":23,"d":[[22,0,8,"bash-3.2$"]],"x":11,"t":1305020758.10981},{"y":23,"d":[[22,10,27,"watch -n1 du -sh *"]],"x":29,"t":1305020758.49285},{"y":23,"d":[["cp",10,12],["cp",14,13],["cp",15,14],["cp",10,15],["cp",22,21],["cp",10,22]],"x":1,"t":1305020758.79654},{"y":23,"d":[[12,0,30,"Every 1.0s: du -sh git git-http"],[12,53,76,"Tue May 10 17:45:58 2011"],["cp",10,13],[14,0,15,"55M git "],[15,1,3,"14M"],[15,8,15,"git-http"],["cp",10,21]],"x":77,"t":1305020758.82536},{"y":23,"d":[[12,71,"9"],[15,0,"5"]],"x":77,"t":1305020759.8478},{"y":23,"d":[[11,76,"6"]],"x":77,"t":1305020760.10028},{"y":23,"d":[["cp",11,23]],"x":77,"t":1305020760.10033},{"y":23,"d":[[12,68,71,"6:00"],[15,0,"6"]],"x":77,"t":1305020760.8729},{"y":23,"d":[[12,71,"1"],[15,0,"8"]],"x":77,"t":1305020761.89534},{"y":23,"d":[[12,71,"2"],[15,0,"9"]],"x":77,"t":1305020762.92082},{"y":23,"d":[[12,71,"3"],[15,0,2," 20"]],"x":77,"t":1305020763.94438},{"y":23,"d":[[12,71,"4"],[15,0,"2"]],"x":77,"t":1305020764.96708},{"y":23,"d":[[12,71,"5"],[15,0,"3"]],"x":77,"t":1305020765.99314},{"y":23,"d":[[12,71,"6"],[15,0,"4"]],"x":77,"t":1305020767.01564},{"y":23,"d":[[12,71,"8"],[15,0,"5"]],"x":77,"t":1305020768.03844},{"y":23,"d":[[12,71,"9"],[15,0,"6"]],"x":77,"t":1305020769.06315},{"y":23,"d":[[12,70,71,"10"],[15,0,"8"]],"x":77,"t":1305020770.08619},{"y":23,"d":[[12,71,"1"],[15,0,"9"]],"x":77,"t":1305020771.10925},{"y":23,"d":[[12,71,"2"],[15,0,1," 3"]],"x":77,"t":1305020772.1315},{"y":23,"d":[[12,71,"3"],[15,0,"1"]],"x":77,"t":1305020773.1571},{"y":23,"d":[[12,71,"4"],[15,0,"2"]],"x":77,"t":1305020774.18224},{"y":23,"d":[[12,71,"5"]],"x":77,"t":1305020775.20851},{"y":23,"d":[[12,71,"6"]],"x":77,"t":1305020776.23479},{"y":23,"d":[[12,71,"7"]],"x":77,"t":1305020777.25969},{"y":23,"d":[[12,71,"8"]],"x":77,"t":1305020778.28638},{"y":23,"d":[[12,71,"9"]],"x":77,"t":1305020779.31288},{"y":23,"d":[[12,70,71,"20"]],"x":77,"t":1305020780.33642},{"y":23,"d":[[12,71,"1"]],"x":77,"t":1305020781.35929},{"y":23,"d":[[12,71,"2"],[15,0,"3"]],"x":77,"t":1305020782.38258},{"y":23,"d":[[12,71,"3"],[15,0,"4"]],"x":77,"t":1305020783.40473},{"y":23,"d":[[12,71,"4"],[15,0,"6"]],"x":77,"t":1305020784.42774},{"y":23,"d":[[12,71,"5"],[15,0,"7"]],"x":77,"t":1305020785.45023},{"y":23,"d":[[12,71,"6"],[15,0,"8"]],"x":77,"t":1305020786.47535},{"y":23,"d":[[12,71,"7"],[15,0,"9"]],"x":77,"t":1305020787.49788},{"y":23,"d":[[12,71,"8"],[15,0,2," 41"]],"x":77,"t":1305020788.52089},{"y":23,"d":[[12,71,"9"]],"x":77,"t":1305020789.54481},{"y":23,"d":[[12,70,71,"30"]],"x":77,"t":1305020790.56839},{"y":23,"d":[[12,71,"1"],[15,0,"2"]],"x":77,"t":1305020791.59092},{"y":23,"d":[[12,71,"2"]],"x":77,"t":1305020792.615},{"y":23,"d":[[12,71,"3"],[15,0,"3"]],"x":77,"t":1305020793.64071},{"y":23,"d":[[12,71,"4"],[15,0,"4"]],"x":77,"t":1305020794.66385},{"y":23,"d":[[12,71,"5"],[15,0,"5"]],"x":77,"t":1305020795.68664},{"y":23,"d":[[12,71,"6"]],"x":77,"t":1305020796.70964},{"y":23,"d":[[12,71,"7"],[15,0,"7"]],"x":77,"t":1305020797.73259},{"y":23,"d":[[12,71,"8"]],"x":77,"t":1305020798.75529},{"y":23,"d":[[12,71,"9"],[15,0,"8"]],"x":77,"t":1305020799.77958},{"y":23,"d":[[12,70,71,"40"],[15,0,"9"]],"x":77,"t":1305020800.8026},{"y":23,"d":[[12,71,"1"],[15,0,2," 50"]],"x":77,"t":1305020801.82734},{"y":23,"d":[[12,71,"2"],[15,0,"2"]],"x":77,"t":1305020802.85069},{"y":23,"d":[[12,71,"3"]],"x":77,"t":1305020803.87492},{"y":23,"d":[[12,71,"4"],[15,0,"3"]],"x":77,"t":1305020804.90066},{"y":23,"d":[[12,71,"5"],[15,0,"4"]],"x":77,"t":1305020805.92491},{"y":23,"d":[[12,71,"6"],[15,0,"5"]],"x":77,"t":1305020806.95081},{"y":23,"x":1,"t":1305020807.48336},{"y":23,"d":[[22,0,8,"bash-3.2$"]],"x":11,"t":1305020807.48427},{"y":23,"d":[[22,10,27,"watch -n1 du -sh *"]],"x":29,"t":1305020807.85109},{"y":23,"d":[["cp",10,12],["cp",14,13],["cp",15,14],["cp",10,15],["cp",22,21],["cp",10,22]],"x":1,"t":1305020808.28305},{"y":23,"d":[[12,0,30,"Every 1.0s: du -sh git git-http"],[12,53,76,"Tue May 10 17:46:48 2011"],["cp",10,13],[14,2,15,"M git "],[15,1,3,"57M"],[15,8,15,"git-http"],["cp",10,21]],"x":77,"t":1305020808.31304},{"y":23,"d":[[12,71,"9"]],"x":77,"t":1305020809.33727},{"y":23,"d":[[12,70,71,"50"],[15,0,"8"]],"x":77,"t":1305020810.36156},{"y":23,"d":[[12,71,"1"],[15,0,"9"]],"x":77,"t":1305020811.38642},{"y":23,"d":[[12,71,"2"],[15,0,2," 60"]],"x":77,"t":1305020812.41108},{"y":23,"d":[[12,71,"3"],[15,0,"1"]],"x":77,"t":1305020813.43572},{"y":23,"d":[[12,71,"4"],[15,0,"2"]],"x":77,"t":1305020814.46977},{"y":23,"d":[[12,71,"5"],[15,0,"3"]],"x":77,"t":1305020815.49411},{"y":23,"d":[[12,71,"6"],[15,0,"4"]],"x":77,"t":1305020816.51858},{"y":23,"d":[[12,71,"7"],[15,0,"5"]],"x":77,"t":1305020817.5431},{"y":23,"d":[[12,71,"8"],[15,0,"6"]],"x":77,"t":1305020818.56748},{"y":23,"d":[[12,71,"9"]],"x":77,"t":1305020819.59414},{"y":23,"d":[[11,76,"7"],["cp",11,23]],"x":77,"t":1305020820.10022},{"y":23,"d":[[12,68,71,"7:00"],[15,0,"7"]],"x":77,"t":1305020820.61847},{"y":23,"d":[[12,71,"1"],[15,0,"9"]],"x":77,"t":1305020821.64516},{"y":23,"d":[[12,71,"2"]],"x":77,"t":1305020822.66959},{"y":23,"d":[[12,71,"3"],[15,0,2," 71"]],"x":77,"t":1305020823.69525},{"y":23,"d":[[12,71,"4"],[15,0,"2"]],"x":77,"t":1305020824.722},{"y":23,"d":[[12,71,"5"],[15,0,"3"]],"x":77,"t":1305020825.7466},{"y":23,"d":[[12,71,"6"]],"x":77,"t":1305020826.77136},{"d":[["r","Cloning into git... "],["r","remote: Counting objects: 140068, done. "],["r","remote: Compressing objects: 100% (38121/38121), done. "],["r","remote: Total 140068 (delta 104201), reused 135829 (delta 100047) "],["r","Receiving objects: 100% (140068/140068), 33.98 MiB | 9.83 MiB/s, done. "],["r","Resolving deltas: 100% (104201/104201), done. "],["r","bash-3.2$ ls "],["r","git "],["r","bash-3.2$ git clone http://git.bj.ossxp.com/mirrors/git.git git-http "],["r","Cloning into git-http... "],["a"," "],["r","0 bash 1 bash @jx - 2011/05/10, 5:47 "],["r","Every 1.0s: du -sh git git-http Tue May 10 17:47:07 2011 "],["a"," "],["r","55M git "],["r","471M git-http "],["a"," "],"d","d","d","d","d","d",["r","0 bash 1 bash @jx - 2011/05/10, 5:47 "],["a"," "]],"x":77,"B":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"y":23,"b":[["a","0"],"d","d","d","d","d","d","d","d","d","d",["r","44444400000000000000000000000000000000000000000000000000000000000000000000000000"],["a","0"],"d","d","d","d","d","d","d","d","d","d",["r","00000000444444000000000000000000000000000000000000000000000000000000000000000000"],["a","0"]],"f":[["a","7"],"d","d","d","d","d","d",["r","44477777777777777777777777777777777777777777777777777777777777777777777777777777"],["a","7"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"U":[["a","0"],"d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d","d"],"t":1305020827.79577,"i":1},{"y":23,"d":[[12,71,"8"],[15,0,"5"]],"x":77,"t":1305020828.82697},{"y":23,"d":[[12,71,"9"],[15,0,"6"]],"x":77,"t":1305020829.85243},{"y":23,"d":[[12,70,71,"10"],[15,0,"7"]],"x":77,"t":1305020830.87682},{"y":23,"d":[[12,71,"1"],[15,0,"8"]],"x":77,"t":1305020831.9016},{"y":23,"d":[[12,71,"2"],[15,0,"9"]],"x":77,"t":1305020832.92612},{"y":23,"d":[[12,71,"3"],[15,0,2," 80"]],"x":77,"t":1305020833.95601},{"y":23,"d":[[12,71,"4"],[15,0,"1"]],"x":77,"t":1305020834.98765},{"y":23,"d":[[12,71,"5"],[15,0,"2"]],"x":77,"t":1305020836.01256},{"y":23,"d":[[12,71,"7"],[15,0,"3"]],"x":77,"t":1305020837.04063},{"y":23,"d":[[12,71,"8"],[15,0,"4"]],"x":77,"t":1305020838.06611},{"y":23,"d":[[12,71,"9"],[15,0,"5"]],"x":77,"t":1305020839.09294},{"y":23,"d":[[12,70,71,"20"],[15,0,"6"]],"x":77,"t":1305020840.1214},{"y":23,"d":[[12,71,"1"],[15,0,"7"]],"x":77,"t":1305020841.14762},{"y":23,"d":[[12,71,"2"],[15,0,"8"]],"x":77,"t":1305020842.17679},{"y":23,"d":[[12,71,"3"],[15,0,"9"]],"x":77,"t":1305020843.20771},{"y":23,"d":[[12,71,"4"]],"x":77,"t":1305020844.2389},{"y":23,"d":[[12,71,"5"]],"x":77,"t":1305020845.27331},{"y":23,"d":[[12,71,"6"]],"x":77,"t":1305020846.30506},{"y":23,"d":[[22,76,78,"du:"]],"x":80,"t":1305020847.33273},{"y":23,"d":[[12,0,30,"980M git-http "],[12,53,76," 7 "],["cp",10,14],["cp",10,15],["cp",22,19],[20,0,79,"git-http/.git/objects/pack/pack-fe360d0e6ba0a81b6b7cb22f81575326aaf6347f.pack.te"],[21,0,28,"mp: No such file or directory"],["cp",10,22]],"x":77,"t":1305020847.33445},{"y":23,"d":[[12,71,"8"],[15,1,2,"90"]],"x":77,"t":1305020848.36702},{"y":23,"x":1,"t":1305020849.02604},{"y":23,"d":[[22,0,8,"bash-3.2$"]],"x":11,"t":1305020849.03105},{"y":23,"d":[[22,10,27,"watch -n1 du -sh *"]],"x":29,"t":1305020849.62577},{"y":23,"d":[["cp",10,12],["cp",15,14],["cp",10,15],["cp",19,18],["cp",20,19],["cp",21,20],["cp",22,21],["cp",10,22]],"x":1,"t":1305020850.29},{"y":23,"d":[[10,0,8,"bash-3.2$"]],"x":1,"t":1305020850.30728},{"y":23,"d":[[12,0,30,"Every 1.0s: du -sh git git-http"],[12,53,76,"Tue May 10 17:47:30 2011"],[14,0,2,"55M"],[14,7,9,"git"],[15,0,3,"107M"],[15,8,15,"git-http"],["cp",13,18],["cp",13,19],["cp",13,20],["cp",13,21]],"x":77,"t":1305020850.34856},{"y":23,"d":[[12,71,"1"]],"x":77,"t":1305020851.39061},{"y":23,"d":[[12,71,"2"]],"x":77,"t":1305020852.43289},{"y":23,"d":[[12,71,"3"]],"x":77,"t":1305020853.47156},{"y":23,"x":1,"t":1305020853.56218},{"y":23,"d":[["cp",10,22]],"x":11,"t":1305020853.5631},{"y":23,"d":[[22,10,"l"]],"x":12,"t":1305020854.28968},{"y":23,"d":[["cp",6,22]],"x":13,"t":1305020854.38556},{"y":23,"x":14,"t":1305020854.97763},{"y":23,"d":[[22,13,"-"]],"x":15,"t":1305020855.14541},{"y":23,"d":[[22,14,"F"]],"x":16,"t":1305020855.46582},{"y":23,"d":[["cp",13,12],["cp",14,13],["cp",15,14],["cp",12,15],["cp",22,21],["cp",12,22]],"x":1,"t":1305020855.63477},{"y":23,"d":[["cp",13,12],["cp",14,13],["cp",15,14],["cp",21,20],[21,0,18,"git/ git-http/"],["cp",10,22]],"x":11,"f":[[21,0,2,["a","4"]],[21,10,17,["a","4"]]],"t":1305020855.63995},{"y":23,"d":[[22,10,"d"]],"x":12,"t":1305020856.47338},{"y":23,"d":[[22,11,"u"]],"x":13,"t":1305020856.55347},{"y":23,"x":14,"t":1305020856.64983},{"y":23,"d":[[22,13,"-"]],"x":15,"t":1305020856.83331},{"y":23,"d":[[22,14,"s"]],"x":16,"t":1305020856.94549},{"y":23,"d":[[22,15,"h"]],"x":17,"t":1305020857.06552},{"y":23,"x":18,"t":1305020857.16122},{"y":23,"d":[[22,17,"*"]],"x":19,"t":1305020857.39371},{"y":23,"d":[["cp",13,12],["cp",14,13],["cp",20,19],["cp",21,20],["cp",22,21],["cp",13,22]],"x":1,"f":[["cp",21,20],["cp",0,21]],"t":1305020857.64944},{"y":23,"d":[["cp",13,12],["cp",19,17],["cp",20,18],["cp",21,19],[20,0,3," 55M"],[20,8,18,"git "],[21,0,17,"107M git-http "],["cp",10,22]],"x":11,"f":[["cp",20,18],["cp",0,20]],"t":1305020857.69576},{"y":5,"b":[["cp",0,11],["cp",0,23]],"d":[["cp",12,0],["cp",0,1],["cp",0,2],[3,0,64,"[detached] "],["cp",0,4],["cp",0,5],["cp",0,6],["cp",0,7],["cp",0,8],["cp",0,9],["cp",0,10],["cp",0,11],["cp",0,17],["cp",0,18],["cp",0,19],["cp",0,20],["cp",0,21],["cp",0,22],["cp",0,23]],"x":1,"f":[["cp",0,7],["cp",0,18]],"t":1305020860.23317},{"y":5,"d":[[4,0,8,"bash-3.2$"]],"x":11,"t":1305020860.23471},{"y":6,"d":[[4,10,13,"exit"]],"x":1,"t":1305020861.12965}]} \ No newline at end of file From b463424c35bb27027c8eb686cabd3c192edb3164 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Mon, 5 Dec 2011 10:22:43 +0800 Subject: [PATCH 70/84] short description for this repo. --- README.md | 5 + README.mkd | 291 ----------------------------------------------------- 2 files changed, 5 insertions(+), 291 deletions(-) create mode 100644 README.md delete mode 100644 README.mkd diff --git a/README.md b/README.md new file mode 100644 index 000000000..550bedc54 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +The errata, screencasting and other resources for the book [GotGit](http://gotgit.github.com/gotgit/), +a book on Git in Chinese. + +The book 'GotGit' (ISBN 978-7-111-34967-9) is written by [Jiang Xin](http://weibo.com/gotgit/) +and published by China Machine Press at Jun 2011. diff --git a/README.mkd b/README.mkd deleted file mode 100644 index 517c724bb..000000000 --- a/README.mkd +++ /dev/null @@ -1,291 +0,0 @@ ----- - -目录 - - * 本书介绍 - * 样章试读 - * 如何购买 - * 在线资源 - * 业界评价 - * 本书勘误 - * 操作回放 - ----- - - - -## 关于本书 - -Git权威指南封面 - -《Git权威指南》一书由机工华章于 2011年6月底出版,作者是 -[北京群英汇信息技术有限公司](http://www.ossxp.com/) -高级顾问 [蒋鑫](http://weibo.com/gotgit/)。 注意本书是原创,不是翻译的哦。 - -网上能够找到很多Git资料和电子书,包括《[Git社区书](http://book.git-scm.com/)》, -以及《[ProGit](http://progit.org/book/)》等,都是非常好、非常系统的教程, -也正是这些教程引领了我的Git学习之路。那么我写的Git书有什么特别之处呢? -以下是我认为这本书的优势: - -* 降低跨越的难度。 - 我曾经因为Git的古怪而放弃Git,改用Mercurial(Hg)。 - 因此一本成功的Git书要兼顾版本控制老用户的体验, - 即要照顾到那些拥有其他版本控制工具使用经验的用户的使用习惯和需求。 - -* 独特的讲故事的方式。 - 我有着自己讲故事的方式,这是我多年来为不同公司做 Subversion 和 Git - 培训和技术支持所积累的经验。 - (顺便说一句,书出了可以继续找我做培训哦,面对面的交流可比读书有意思多了)。8) - -* 介绍了众多实用的Git协同模型。 - 是什么将我由Mercurial拉回Git的呢?是Topgit, - 一个对Git特性分支管理做了封装的上层工具。 - 我对这款工具感触良多,而且也透彻的研究和改造了这一工具, - 相信我们在开源软件定制开发中用到的这一独特的Git协同模式也同样适用于他人。 - -* 子模组不堪大任,我找到了更好的多版本库协同模型 —— 来自于Android的Repo。 - 在给客户培训Git过程中,我发现客户在Android驱动开发中采用的独特的开发模式: - Repo + Gerrit,于是深入其中发现别有洞天。 - 我还对 Repo 进行了扩展,以便让其有更广阔的适用范围。 - -* 改进的 Gitosis 及 Gitolite。 - 基于SSH的Git服务器软件,在使用中我们对其做了很多改造,更加符合用户的使用习惯。 - -* 我开发的一款备份工具 Gistore。 - 我为这款工具起的名字来自于这两个单词的组合:Git + Store。 - 是用Python开发的以Git为后端的备份工具。 - 在该工具的开发中,我获得了更多的Git使用经验。 - - - -## 样章试读 - -您可以从下面的网址获取本书部分章节的电子版: - -* 新浪微盘 - - -* 或 China-pub 样章试读 - - - - - -## 如何购买 - -* China-pub 互动出版网 - - -* 卓越网 - - -* 当当网 - - -* 京东商城 - - - - -* 中关村图书大厦网上书店 - - -* 广购书城:广州购书中心网上书店 - - -* 北京图书大厦网络书店 - - - - - -## 在线资源 - -* 官方网站 - - - > 采用Git方式维护的官方网站,欢迎大家一起参与其中。 - -* 新浪微群 - - - > 关于本书以及相关技术的讨论,还有本书的样章提供下载。 - -* 作者微博 - - - > 欢迎大家通过新浪微博与我交流,有什么意见和建议@我。 - -* 邮件列表 - - - > 社交网站140字的限制让复杂的交流显得吃力,这个邮件列表可以弥补不足。 - - - - -* 资源下载 - - * 代码示例下载 - [本地下载](download) - - * 演示版本库1 - - - * 演示版本库2 (Hello world) - - - * 本资料库 - - - - -## 业界评价(以书评时间的先后为序) - - - -**Junio C Hamano** - - * “我是Junio C Hamano,Git的主要维护者。我当年写了一本针对日本读者的Git书, - 当我把我签名的书送给Linus时,他对我说:“除了截图和命令行示例外, - 什么也看不懂(Linus不懂日文)”。基于同样的原因,虽然我不能了解这本书的全貌, - 但是我可以看出这本书涵盖了非常广泛的主题,并且看出蒋鑫对这本书的用心。 - 我非常高兴能够看到这本书的出版,感谢向世界传播Git。” - - * 八卦:同时向 Git 社区大佬 Junio 和 Linus 发送本书章节目录的翻译稿, - 其中的翻译错误让人忍俊不住(感谢表妹和男友鹏辉)。 - 本书发行后,会同时给 Junio 和 Linus 邮寄一本签名版, - 并争取“等价”交换一本他们的自传或图书。 - - - -**范凯**,CSDN平台开发总监/Javaeye创始人 - - * “仔细拜读了本书前三篇共20章的内容,在我看来,这本书非常棒。 - 作者在软件版本管理控制系统方面有超过10年的经验, - 对版本管理系统有非常深入的认识,实践经验也十分丰富。尤为难得的是, - 本书文笔很流畅,虽然是技术书籍,但是作者娓娓道来,阅读体验很好。 - Git的学习门槛较高,包括我们公司在内的很多企业都将版本管理系统转向了Git, - 这本书能给我们带来帮助,强烈推荐。” - - * 八卦:为了能够获得CSDN评价,发动有限的社会资源向CSDN的老大传声,收效甚微。 - 最后我厚着二皮脸直接向CSDN 蒋总发送秋天的菠菜,... - 我给范凯发送了本书前三篇的内容作为样章(300页), - 没想到范凯在百忙中居然全部读完,之后才写撰写书评,让我佩服他的严谨。 - 编辑等待CSDN的书评一直很心急,也许当初我只发前言就好了。 8) - - - -**许晓斌**,《Maven实战》的作者,Git的重度使用者 - - * “这是我读过的关于Git最好的书。将复杂的Git解释得清晰透彻绝非易事, - 蒋鑫做到了,更让人惊喜的是他还分享了大量的经验总结。 - 我多年来积累的许多疑惑在读罢该书后一一得以解开。 - 如果你正在使用,或者打算使用Git,本书当然是必备的。 - 你也可以抱着Subversion/CVS不放, - 不过哪天有人拿起这本书敲你头的时候可别怪我没提醒过你。” - - * 八卦:许晓斌对本书帮助良多,大概是除了我和编辑之外, - 仅有的在本书上市前完整看过书稿的人。面对《Git权威指南》出版社一排书稿, - 大概又想到了当初自己书稿被编排的惨痛体验了吧... ;) - - - -**冯铃**,清华大学计算机科学与技术系“长江学者”特聘教授 - - * “Git是当前开源社区最流行的版本控制系统,代表了版本控制的未来。 - 每一个有志于计算机编程的学习者都应该学习和掌握这一工具,它不但 - 用于追踪编程者的思考过程,还是打开开源软件世界的金钥匙,更可以 - 通过版本控制掌握与他人协同工作的技能。本书是一本耐读原创之书, - 因为其涵盖的内容之广足可以让一名程序员在成长的不同阶段都可以从 - 中汲取丰富营养。” - - - -**徐继哲**,[哲思社区](http://www.zeuux.org/) 创始人 - - * “目前市面上关于Git的书不在少数,但迄今为止, - 国内外还没有一本书能在广度和深度上达到本书的水平, - 也许在今后相当长的一段时间内也不会有。如果你是一位软件开发者, - 强烈建议你学习并使用Git;如果你要学习Git,本书无疑是你最佳的选择。” - - * 八卦:现在可能要为 [招商银行](http://www.zeuux.org/event/content/1/) 正一下名了, - 招行一卡通专业版已经可以在Linux或Mac下的Windows虚拟机中通过UKey证书(非文件证书)运行啦, - 见[招行官方在微博中的回复](http://weibo.com/1687508662/eBU5pDV6bWK)。 - - - -## 本书勘误 - -查看:[本书勘误](errata.html)。 - -您发现了新的错误么?贡献出来吧,这厢有礼了。Orz - -1. 记录您发现的问题。 - 访问 [缺陷追踪系统(Github)](https://github.com/gotgit/gotgit/issues/new) 或 [缺陷追踪系统(Redmine)](http://redmine.ossxp.com/redmine/projects/gotgit/issues/new) 。 -1. 修改本Git版本库中的勘误表。 - 版本库地址: 。 - 您的贡献可以使用 Github 的 pull request 方式通知我,或者上[新浪微博](http://weibo.com/gotgit/)@我。 - - - - -## 操作回放 - -本书的部分操作用 ttyrec 录制,查看请访问:[《Git权威指南》——操作回放](screencast.html)。 -读者除了可以看到“活”的操作外,还可以从回放当中复制操作的代码。 - -如果该网页不存在、无法访问,或是您想在本地回放,或者想在其中添加您自己的操作回放, -有两种方式: - -方式一:你可以从 Github 上克隆本版本库,编译相关网页。 - - - -* 克隆版本库。 - - $ git clone git://github.com/gotgit/gotgit.git - -* 确认系统中安装了 ruby 和 perl,并通过 rubygems 安装 redcarpet。 - - $ gem install redcarpet - -* 执行编译。 - - $ rake - -* 点击生成的页面:[《Git权威指南》——操作回放](screencast.html)。 - -方式二:版本库中本来就保存了一份已编译文档,只不过缺省没有克隆出来。 - -> 如果您的系统上缺乏相应的工具软件而无法成功编译, - 在版本库中实际上保存了一份已经编译好的文件,可以通过Git下载, - 并检出到工作区。 - - - -* 克隆版本库。 - - $ git clone git://github.com/gotgit/gotgit.git - -* 添加新的配置,以便获取首次克隆未获取到的远程分支。 - - $ git config --add remote.origin.fetch +refs/remotes/*:refs/remotes/* - -* 执行获取操作。 - - $ git fetch - -* 检出分支 refs/remotes/compiled 分支中的内容到工作区。 - - $ git checkout compiled -- . - -* 执行重置,将已编译文档撤出暂存区,当然工作区中仍然保留。 - - $ git reset - -* 点击检出的页面:[《Git权威指南》——操作回放](screencast.html)。 - -如果您自己想把自己录制的操作与他人共享,可以将录制的文件以 ".ttyrec" 扩展名保存到 ttyrec 目录下。 -执行 rake 命令,可以自动生成新的播放页面。 - From b93bbd6a50953607065b32d6aac033eb7adda9cb Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Mon, 5 Dec 2011 10:35:33 +0800 Subject: [PATCH 71/84] new task jekyll --- Rakefile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index e61ca347e..a4047c91c 100644 --- a/Rakefile +++ b/Rakefile @@ -63,6 +63,11 @@ task :json desc 'create index.html and other html files for ttyplay.' task :html => [:html_chunks, :html_screencast ] +desc 'build site using jekyll.' +task :jekyll do + system "jekyll" +end + task :html_chunks do FileList["html/**/*.json"].each do |t| title = File.basename(t).sub(/\.[^.]+$/, '') @@ -162,4 +167,4 @@ task :clean_html do end end -task :default => [:json, :html] +task :default => [:json, :html, :jekyll] From cdf4a953182bc9533a15280633198e67705faba9 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Mon, 5 Dec 2011 10:37:19 +0800 Subject: [PATCH 72/84] change section name. --- _layouts/master.html | 2 +- recommends.md | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/_layouts/master.html b/_layouts/master.html index eb98e2b97..1eb4ffd12 100644 --- a/_layouts/master.html +++ b/_layouts/master.html @@ -37,7 +37,7 @@

目录

diff --git a/recommends.md b/recommends.md index b44683d36..5734d0400 100644 --- a/recommends.md +++ b/recommends.md @@ -1,11 +1,11 @@ --- layout: master -title: 业界评价 +title: 封底推荐 --- -## 业界评价(以书评时间的先后为序) +## 封底推荐(以书评时间的先后为序) @@ -73,8 +73,3 @@ title: 业界评价 国内外还没有一本书能在广度和深度上达到本书的水平, 也许在今后相当长的一段时间内也不会有。如果你是一位软件开发者, 强烈建议你学习并使用Git;如果你要学习Git,本书无疑是你最佳的选择。” - - * 八卦:现在可能要为 [招商银行](http://www.zeuux.org/event/content/1/) 正一下名了, - 招行一卡通专业版已经可以在Linux或Mac下的Windows虚拟机中通过UKey证书(非文件证书)运行啦, - 见[招行官方在微博中的回复](http://weibo.com/1687508662/eBU5pDV6bWK)。 - From ab2981b8fa2626c35c2a5acee66a20583b52cbda Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Mon, 5 Dec 2011 10:48:56 +0800 Subject: [PATCH 73/84] Add javascrpt click_more.js for bookstore... --- _layouts/master_with_jquery.html | 6 ------ bookstore.md | 3 ++- demo.md | 1 + 3 files changed, 3 insertions(+), 7 deletions(-) delete mode 100644 _layouts/master_with_jquery.html diff --git a/_layouts/master_with_jquery.html b/_layouts/master_with_jquery.html deleted file mode 100644 index 4820b2d74..000000000 --- a/_layouts/master_with_jquery.html +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: master -javascripts: [ "/javascripts/jquery.js", "/javascripts/jquery.github.js" ] ---- - -{{ content }} diff --git a/bookstore.md b/bookstore.md index d3d33e2f9..dc2d01db7 100644 --- a/bookstore.md +++ b/bookstore.md @@ -1,6 +1,7 @@ --- -layout: master_with_jquery +layout: master title: 如何购买 +javascripts: [ "/javascripts/jquery.js", "html/inc/click_more.js" ] --- diff --git a/demo.md b/demo.md index c06e9f460..69266831b 100644 --- a/demo.md +++ b/demo.md @@ -1,6 +1,7 @@ --- layout: master title: 操作回放 +javascripts: [ "/javascripts/jquery.js", "html/inc/click_more.js" ] --- From dd52f14bb619e8fb5929aa206dee13a27553b95e Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Mon, 5 Dec 2011 11:47:14 +0800 Subject: [PATCH 74/84] Update css, javascript and inner links for pages. --- _layouts/master.html | 11 ++++--- _layouts/ttyrecord.html | 5 +-- demo.md | 67 ----------------------------------------- errata-others.md | 19 ++---------- errata.md | 1 + html/inc/common.css | 22 -------------- index.md | 57 ++++++++++++++++++++--------------- 7 files changed, 45 insertions(+), 137 deletions(-) delete mode 100644 demo.md diff --git a/_layouts/master.html b/_layouts/master.html index 1eb4ffd12..7d44d3c2d 100644 --- a/_layouts/master.html +++ b/_layouts/master.html @@ -11,6 +11,7 @@ {% for script in page.javascripts %} {% endfor %} + @@ -35,11 +36,11 @@

World Hello

diff --git a/_layouts/ttyrecord.html b/_layouts/ttyrecord.html index 13fcec9ce..fd6c8b90b 100644 --- a/_layouts/ttyrecord.html +++ b/_layouts/ttyrecord.html @@ -1,7 +1,8 @@ --- layout: master -stylesheets: [ "/gotgit/html/inc/common.css", "/gotgit/html/inc/tty.css" ] -javascripts: [ "/gotgit/html/inc/prototype.js", "/gotgit/html/inc/showtty.js" ] +stylesheets: [ "../../html/inc/common.css", "../../html/inc/tty.css" ] +javascripts: [ "../../html/inc/prototype.js", "../../html/inc/showtty.js" ] +relpath: ../../ ---
diff --git a/demo.md b/demo.md deleted file mode 100644 index 69266831b..000000000 --- a/demo.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -layout: master -title: 操作回放 -javascripts: [ "/javascripts/jquery.js", "html/inc/click_more.js" ] ---- - - - -## 操作回放 - -本书的部分操作用 ttyrec 录制,查看请访问:[《Git权威指南》——操作回放](screencast.html)。 -读者除了可以看到“活”的操作外,还可以从回放当中复制操作的代码。 - -如果该网页不存在、无法访问,或是您想在本地回放,或者想在其中添加您自己的操作回放, -有两种方式: - -方式一:你可以从 Github 上克隆本版本库,编译相关网页。 - - - -* 克隆版本库。 - - $ git clone git://github.com/gotgit/gotgit.git - -* 确认系统中安装了 ruby 和 perl,并通过 rubygems 安装 redcarpet。 - - $ gem install redcarpet - -* 执行编译。 - - $ rake - -* 点击生成的页面:[《Git权威指南》——操作回放](screencast.html)。 - -方式二:版本库中本来就保存了一份已编译文档,只不过缺省没有克隆出来。 - -> 如果您的系统上缺乏相应的工具软件而无法成功编译, - 在版本库中实际上保存了一份已经编译好的文件,可以通过Git下载, - 并检出到工作区。 - - - -* 克隆版本库。 - - $ git clone git://github.com/gotgit/gotgit.git - -* 添加新的配置,以便获取首次克隆未获取到的远程分支。 - - $ git config --add remote.origin.fetch +refs/remotes/*:refs/remotes/* - -* 执行获取操作。 - - $ git fetch - -* 检出分支 refs/remotes/compiled 分支中的内容到工作区。 - - $ git checkout compiled -- . - -* 执行重置,将已编译文档撤出暂存区,当然工作区中仍然保留。 - - $ git reset - -* 点击检出的页面:[《Git权威指南》——操作回放](screencast.html)。 - -如果您自己想把自己录制的操作与他人共享,可以将录制的文件以 ".ttyrec" 扩展名保存到 ttyrec 目录下。 -执行 rake 命令,可以自动生成新的播放页面。 - diff --git a/errata-others.md b/errata-others.md index 938dad5eb..4da949df9 100644 --- a/errata-others.md +++ b/errata-others.md @@ -1,25 +1,12 @@ --- layout: master title: 勘误表 +stylesheets: [ "/html/inc/errata.css" ] --- -## 参与勘误 +### 主要勘误 -您发现了新的错误么?贡献出来吧,这厢有礼了。Orz - -1. 记录您发现的问题。 - - 访问 [缺陷追踪系统(Github)](https://github.com/gotgit/gotgit/issues/new) 报告问题。 - -2. 修改本Git版本库中的勘误表。 - - * 在 GitHub 上从本版本库 派生后,直接修改勘误表。 - * 将您的修改通过 Github 的 Pull Request 工具通知我。 - * 您还可以直接通过 [新浪微博](http://weibo.com/gotgit/) @群英汇蒋鑫。 - -## 勘误表 - -说明:为突出字体加粗,用棕色字体显示加粗字体。 +主要勘误参见 ,本文列举一般性印刷错误。编辑建议不要将两个勘误合并一起。 ;) ### 文字错误 diff --git a/errata.md b/errata.md index 49cbd84f3..be4b3f530 100644 --- a/errata.md +++ b/errata.md @@ -1,6 +1,7 @@ --- layout: master title: 勘误表 +stylesheets: [ "/html/inc/errata.css" ] --- ## 参与勘误 diff --git a/html/inc/common.css b/html/inc/common.css index eac1cf006..0da48bd5c 100755 --- a/html/inc/common.css +++ b/html/inc/common.css @@ -1,25 +1,3 @@ -/* Stylesheet for ossxp documents at: http://www.ossxp.com/doc/ */ - -html,body{min-height:100%;} -body{color:#4e4e4e; padding: 0;} - -/* body with background color */ -body { - text-align:center; /* for IE */ - margin:0 auto; /* for the rest */ - background:#39424b; -} - -/* content: align center with fixed width */ -div.document -{ - text-align:left; - width:780px; /* or a percentage, or whatever */ - margin:0 auto 0 auto; - padding:1em; - background:#ffffff; -} - /* header and footer: align center with fixed width */ div.header, div.footer { diff --git a/index.md b/index.md index 44ff59ef9..af2ce5724 100644 --- a/index.md +++ b/index.md @@ -51,42 +51,50 @@ title: 关于本书 ## 在线资源 -* 官方网站 - +* 官方网站 - > 采用Git方式维护的官方网站,欢迎大家一起参与其中。 + -* 新浪微群 - + 采用Git方式维护的官方网站,欢迎大家一起参与其中。 - > 关于本书以及相关技术的讨论,还有本书的样章提供下载。 +* 新浪微群 -* 作者微博 - + - > 欢迎大家通过新浪微博与我交流,有什么意见和建议@我。 + 关于本书以及相关技术的讨论,还有本书的样章提供下载。 -* 邮件列表 - +* 作者微博 - > 社交网站140字的限制让复杂的交流显得吃力,这个邮件列表可以弥补不足。 + + + 欢迎大家通过新浪微博与我交流,有什么意见和建议@我。 + +* 邮件列表 + + + + 社交网站140字的限制让复杂的交流显得吃力,这个邮件列表可以弥补不足。 * 资源下载 - * 代码示例下载 - [本地下载](download) + * 代码示例下载 + + [本地下载](download) - * 演示版本库1 - + * 演示版本库1 - * 演示版本库2 (Hello world) - + - * 本资料库 - + * 演示版本库2 (Hello world) + + + + * 本资料库 + + @@ -95,11 +103,10 @@ title: 关于本书 您可以从下面的网址获取本书部分章节的电子版: -* 新浪微盘 - - -* 或 China-pub 样章试读 - +* 新浪微盘 + +* 或 China-pub 样章试读 + From de879b557b7cc8438de62078dacbc6ddbbcb78ed Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Mon, 5 Dec 2011 12:08:35 +0800 Subject: [PATCH 75/84] Add demo.md for greasemonkey test. --- demo.md | 33 +++++++++++++++++++++++++++++++++ html/inc/click_more.js | 3 ++- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 demo.md diff --git a/demo.md b/demo.md new file mode 100644 index 000000000..c42c402a6 --- /dev/null +++ b/demo.md @@ -0,0 +1,33 @@ +--- +layout: master +title: 如何购买 +--- + + + +## 如何购买 + +* China-pub 互动出版网 + + +* 卓越网 + + +* 当当网 + + +* 京东商城 + + + + +* 中关村图书大厦网上书店 + + +* 广购书城:广州购书中心网上书店 + + +* 北京图书大厦网络书店 + + + diff --git a/html/inc/click_more.js b/html/inc/click_more.js index 8c668fe8f..8776c59b6 100644 --- a/html/inc/click_more.js +++ b/html/inc/click_more.js @@ -2,7 +2,8 @@ // @name Click more for toggle // @namespace gotgit // @description Add a toogle effect at the location where anchor with a click-more css. -// @include http://www.ossxp.com/doc/gotgit/demo* +// @include http://www.worldhello.net/gotgit/demo* +// @include http://gotgit.github.com/gotgit/demo* // @require http://code.jquery.com/jquery-1.6.2.min.js // ==/UserScript== From c0bb0a8c9d91671151c1f40fdf7befdfb4710c25 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Mon, 5 Dec 2011 14:28:25 +0800 Subject: [PATCH 76/84] Bugfix: IE does not known TEXT_NODE and Text. --- html/inc/click_more.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/html/inc/click_more.js b/html/inc/click_more.js index 8776c59b6..062a2166d 100644 --- a/html/inc/click_more.js +++ b/html/inc/click_more.js @@ -1,9 +1,10 @@ // ==UserScript== // @name Click more for toggle -// @namespace gotgit +// @namespace gotgit // @description Add a toogle effect at the location where anchor with a click-more css. // @include http://www.worldhello.net/gotgit/demo* // @include http://gotgit.github.com/gotgit/demo* +// @include http://www.ossxp.com/doc/gotgit/demo* // @require http://code.jquery.com/jquery-1.6.2.min.js // ==/UserScript== @@ -14,7 +15,8 @@ $(function(){ $('.click-more').each(function(i) { contentNode = this.parentNode.nextSibling; - if (contentNode instanceof Text) { + if (contentNode.nodeType == + (typeof(Node) === "undefined" ? 3: Node.TEXT_NODE)) { contentNode = contentNode.nextSibling; } contentNode.parentNode.removeChild(contentNode); From 96aae6ab8ccbf744cf38da91301771cc5615d265 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Mon, 5 Dec 2011 14:44:11 +0800 Subject: [PATCH 77/84] Update demo.md from bookstore.md --- Rakefile | 8 ++++++-- bookstore.md | 33 +++++++++++++++++++-------------- demo.md | 33 +++++++++++++++++++-------------- 3 files changed, 44 insertions(+), 30 deletions(-) diff --git a/Rakefile b/Rakefile index a4047c91c..3cc7eb446 100644 --- a/Rakefile +++ b/Rakefile @@ -61,11 +61,11 @@ desc 'compile ttyrec files to json files' task :json desc 'create index.html and other html files for ttyplay.' -task :html => [:html_chunks, :html_screencast ] +task :html => [:html_chunks, :html_screencast, "demo.md" ] desc 'build site using jekyll.' task :jekyll do - system "jekyll" + sh "jekyll" end task :html_chunks do @@ -108,6 +108,10 @@ task :html_screencast => [:html_chunks] do end end +file "demo.md" => "bookstore.md" do |t| + sh "sed -e '/^javascripts/ d' < #{t.prerequisites} > #{t.name}" +end + def mkd2html args begin require 'redcarpet' diff --git a/bookstore.md b/bookstore.md index dc2d01db7..f568ddb1c 100644 --- a/bookstore.md +++ b/bookstore.md @@ -8,27 +8,32 @@ javascripts: [ "/javascripts/jquery.js", "html/inc/click_more.js" ] ## 如何购买 -* China-pub 互动出版网 - +* China-pub 互动出版网 -* 卓越网 - + -* 当当网 - +* 卓越网 -* 京东商城 - + + +* 当当网 + + + +* 京东商城 + + -* 中关村图书大厦网上书店 - +* 中关村图书大厦网上书店 + + -* 广购书城:广州购书中心网上书店 - +* 广购书城:广州购书中心网上书店 -* 北京图书大厦网络书店 - + +* 北京图书大厦网络书店 + diff --git a/demo.md b/demo.md index c42c402a6..a0b9640a5 100644 --- a/demo.md +++ b/demo.md @@ -7,27 +7,32 @@ title: 如何购买 ## 如何购买 -* China-pub 互动出版网 - +* China-pub 互动出版网 -* 卓越网 - + -* 当当网 - +* 卓越网 -* 京东商城 - + + +* 当当网 + + + +* 京东商城 + + -* 中关村图书大厦网上书店 - +* 中关村图书大厦网上书店 + + -* 广购书城:广州购书中心网上书店 - +* 广购书城:广州购书中心网上书店 -* 北京图书大厦网络书店 - + +* 北京图书大厦网络书店 + From a337a9cb088b82e10c653920f4bc227dbe51b30d Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Mon, 5 Dec 2011 17:23:09 +0800 Subject: [PATCH 78/84] Add update to the 1st and 2nd print. --- errata.md | 85 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 66 insertions(+), 19 deletions(-) diff --git a/errata.md b/errata.md index be4b3f530..21b59278b 100644 --- a/errata.md +++ b/errata.md @@ -2,11 +2,10 @@ layout: master title: 勘误表 stylesheets: [ "/html/inc/errata.css" ] +javascripts: [ "/javascripts/jquery.js", "html/inc/click_more.js" ] --- -## 参与勘误 - -您发现了新的错误么?贡献出来吧,这厢有礼了。Orz +您发现了新的错误么?可以通过下面方式贡献: 1. 记录您发现的问题。 @@ -14,23 +13,71 @@ stylesheets: [ "/html/inc/errata.css" ] 2. 修改本Git版本库中的勘误表。 - * 在 GitHub 上从本版本库 派生后,直接修改勘误表。 - * 将您的修改通过 Github 的 Pull Request 工具通知我。 - * 您还可以直接通过 [新浪微博](http://weibo.com/gotgit/) @群英汇蒋鑫。 + * 在 GitHub 上从本版本库 派生后,直接修改勘误表文件 ``errata.md`` 。 + * 您的修改可以通过 Github 的 Pull Request 工具通知我。 + * 还可以直接通过 [新浪微博](http://weibo.com/gotgit/) @群英汇蒋鑫。 + +## 第一版• 第二印 + +### 勘误(进行中) + +页码 | 位置 | 错误描述 | 原文 | 修正为 | 缺陷追踪 +-------:| ------------------------ | ------------------- | ---------------------------- | ---------------------------- | -------- +文前IX页| 第8行 | 官方网站URL变更 | http://www.ossxp.com/doc/gotgit/ | http://www.worldhello.net/gotgit/ | + 30 | 第18,19行共两处 | 反引号错印为单引号 | 'brew --prefix' | \`brew --prefix\` | [#146][bug2-146] + 30 | 倒数第5行 | 命令提示符和点号之间有空格 | $**. \`brew --prefix\`/etc/bash\_completion** | $ **. \`brew --prefix\`/etc/bash\_completion** | [#152][bug2-152] + 146 | 倒数第3行 | 命令 ``$ git rev-list --oneline F^! D`` 的结果中应该有Commit G | - | - | [GitHub#11][bug-11] + 229 | 第18,23,28行 | 用户输入字母未加粗 | Use (m)odified or (d)eleted file, or (a)bort? 用户输入 | Use (m)odified or (d)eleted file, or (a)bort? **用户输入** | [#155][bug2-155] + +### 更新(进行中) + +* “第30章 Gitolite 服务架设”拟更新如下: + + 1. [Gitolite服务架设](http://www.worldhello.net/2011/11/30/02-gitolite-install.html) + 2. [Gitolite版本库镜像](http://www.worldhello.net/2011/11/30/03-gitolite-mirror.html) + 3. [Gitolite通配符版本库自定义授权](http://www.worldhello.net/2011/11/30/04-gitolite-getperms-setperms.html) + 4. [Gitolite管理员定义命令](http://www.worldhello.net/2011/11/30/05-gitolite-adc.html) + +## 第一版• 第一印 + +### 勘误 + + + +页码 | 位置 | 错误描述 | 原文 | 修正为 | 缺陷追踪 +-------:| ------------------------- | ------------------- | ---------------------------- | ---------------------------- | -------- + 30 | 倒数第5,7,11,12行等6处 | 反引号错印为单引号 | 'brew --prefix' | \`brew --prefix\` | [#146][bug2-146] + 30 | 倒数第5行 | 反引号错印、未加粗、缺少命令提示符 | 'brew --prefix'/etc/bash\_completion | $ **. \`brew --prefix\`/etc/bash\_completion** | [#152][bug2-152] + 66 | 倒数第11行 | “作者”误为“提交者” | Author(提交者) | Author(作者) | [GitHub#2][bug-2] + 144 | 第1行 | 行首多了一个反引号 | \`$ **git rev-parse A^{tree} A:** | $ **git rev-parse A^{tree} A:** | [#153][bug2-153] + 218 | 第8行 | Git后多了个字母's' | Gits标识出合并冲突, | Git标识出合并冲突, | [#159][bug2-159] + 265 | 最后1行 | 单词 'world' 少了字母 's' | 用户在使用1.0版的hello-word | 用户在使用1.0版的hello-world | [GitHub#5][bug-5] + 369 | 第21行 | 丢了一个项目的“目”字 | 但 `-i` 参数仅当对一个项执行时才有效。 | 但 `-i` 参数仅当对一个项目执行时才有效。 | [GitHub#3][bug-3] + 516 | 倒数第15行 | 反引号错印为双引号 | **oldtag="cat"** | **oldtag=\`cat\`** | [#151][bug2-151] + +### 更新 -## 勘误表 + -说明:为突出字体加粗,用棕色字体显示加粗字体。 +页码 | 位置 | 原内容 | 更新内容 +-------:| ------------------------ | ---------------------------- | ---------------------------- + 489 | 倒数第4行之前 | - | GitHub的流行一方面是因其简便的Git版本库创建和托管流程,另一方面还在于其提供了实用的协同工具(如在线Fork + Pull Request),极大地方便了团队协同和项目管理。GitHub的丰富功能足可以单独再写一本书,帮我来完善它吧。网址: http://gotgit.github.com/gotgithub/ 。 +307,311,312 | 多处替换 | 金字塔(式协同模型) | 社交网络(式协同模型) + 311 | 倒数第4行 | 金字塔模型的含义是, | 社交网络的含义是针对版本库的修改在信任的个体(程序员)间传递。金字塔的含义是, + 463 | 第17行 | 虽然演示用的是本地地址(localhost),但是操作远程服务器也是可以的,只要拥有管理员权限。 | 命令中的user是Gerrit上注册的第一个账号ID,host是刚刚架设的Gerrit服务器地址(域名或IP)。 + 463 | 第19行 | $ **``ssh -p 29418 localhost gerrit gsql``** | $ **``ssh -p 29418 user@host gerrit gsql``** + 467 | 第3行 | 在 Gerrit 个人配置界面中设置了公钥之后,就可以连接 Gerrit 的 SSH 服务器执行命令,示例使用的是本机localhost,其实也可以使用远程IP地址。只是对于远程主机需要确认端口不要被防火墙拦截,Gerrit的SSH服务器使用特殊的端口,默认是29418。 | 在Gerrit个人配置界面中设置了公钥之后,就可以连接Gerrit的SSH服务器(默认端口29418)执行命令。以下示例中Gerrit服务器地址为host,用户ID是在Gerrit中创建的管理员ID(如gerrit)。如果SSH命令的登录ID和系统登录ID相同,用户ID还可省略。 +467-473 | 多处将 ``localhost`` 替换为 ``gerrit@host`` | $ ssh -p 29418 localhost gerrit ls-projects | $ ssh -p 29418 gerrit@host gerrit ls-projects +477,478,483,486 | 多处将 ``localhost`` 替换为 ``jiangxin@host`` | ssh://localhost:29418/hello.git | ssh://jiangxin@host:29418/hello.git -| 页码 | 位置 | 原文/错误描述 | 修正为 | 缺陷追踪 | -| ------:| ------------------------- | ---------------------------- | ---------------------------- | ---------------------------------------------------- | -| 30 | 倒数第5,7,11,12行等6处 | 'brew --prefix' | \`brew --prefix\` | [#146](http://redmine.ossxp.com/redmine/issues/146) | -| 30 | 倒数第5行 | 'brew --prefix'/etc/bash\_completion | $ **. \`brew --prefix\`/etc/bash\_completion** | [#152](http://redmine.ossxp.com/redmine/issues/152) | -| 66 | 倒数第11行 | Author(提交者) | Author(作者) | [GitHub#2](http://github.com/gotgit/gotgit/issues/2) | -| 144 | 第1行 | \`$ **git rev-parse A^{tree} A:** | $ **git rev-parse A^{tree} A:** | [#153](http://redmine.ossxp.com/redmine/issues/153) | -| 146 | | ``$ git rev-list --oneline F^! D`` 的结果中应该有Commit G | | [GitHub#11](http://github.com/gotgit/gotgit/issues/11) | -| 218 | 第8行 | 况下,Gits标识出合并冲突, | 况下,Git标识出合并冲突, | [#159](http://redmine.ossxp.com/redmine/issues/159) | -| 265 | 最后1行 | 用户在使用1.0版的hello-word | 用户在使用1.0版的hello-world | [GitHub#5](http://github.com/gotgit/gotgit/issues/5) | -| 369 | 第21行 | 但 `-i` 参数仅当对一个项执行时才有效。 | 但 `-i` 参数仅当对一个项目执行时才有效。 | [GitHub#3](http://github.com/gotgit/gotgit/issues/3) | -| 516 | 倒数第15行 | **oldtag="cat"** | **oldtag=\`cat\`** | [#151](http://redmine.ossxp.com/redmine/issues/151) | + [bug-2]: http://github.com/gotgit/gotgit/issues/2 + [bug-3]: http://github.com/gotgit/gotgit/issues/3 + [bug-5]: http://github.com/gotgit/gotgit/issues/5 + [bug-11]: http://github.com/gotgit/gotgit/issues/11 + [bug2-146]: http://redmine.ossxp.com/redmine/issues/146 + [bug2-151]: http://redmine.ossxp.com/redmine/issues/151 + [bug2-152]: http://redmine.ossxp.com/redmine/issues/152 + [bug2-153]: http://redmine.ossxp.com/redmine/issues/153 + [bug2-155]: http://redmine.ossxp.com/redmine/issues/155 + [bug2-159]: http://redmine.ossxp.com/redmine/issues/159 From c64948bd1ea793ab348d798cb7a1bfad37472ddb Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Mon, 5 Dec 2011 19:35:43 +0800 Subject: [PATCH 79/84] underscore as class and id in css should be hyphen. --- _layouts/master.html | 16 ++++++++-------- html/templates/index.erb | 12 ++++++------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/_layouts/master.html b/_layouts/master.html index 7d44d3c2d..fc0bd5ff0 100644 --- a/_layouts/master.html +++ b/_layouts/master.html @@ -22,17 +22,17 @@

World Hello

-
+
-
+
{{ content }}
diff --git a/html/templates/index.erb b/html/templates/index.erb index e0e65c71c..4d605c87f 100644 --- a/html/templates/index.erb +++ b/html/templates/index.erb @@ -17,12 +17,12 @@
From 3ea2d25092c7d7804ab9bd168ba6993c459feeb7 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Mon, 5 Dec 2011 20:17:39 +0800 Subject: [PATCH 80/84] Update layout. --- _layouts/master.html | 33 +++++++++++++++++++-------------- html/templates/scast.erb | 4 ++-- screencast.html | 6 +++--- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/_layouts/master.html b/_layouts/master.html index fc0bd5ff0..594b7870e 100644 --- a/_layouts/master.html +++ b/_layouts/master.html @@ -32,25 +32,30 @@

World Hello

-
- + diff --git a/html/templates/scast.erb b/html/templates/scast.erb index 6980bd4de..4a36cd3e6 100644 --- a/html/templates/scast.erb +++ b/html/templates/scast.erb @@ -24,9 +24,9 @@ parts = { '1' => '第1篇:初识Git', <% ttyrec_list.keys.sort.each do |key| %> <% if parts.member?(key) %> -

<%= parts[key] %>

+

<%= parts[key] %>

<% else %> -

<%= key %>

+

<%= key %>

<% end %>