git-object-browser 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. data/README.md +17 -0
  2. data/htdocs/{css → common/css}/angular-ui.min.css +0 -0
  3. data/htdocs/{css → common/css}/bootstrap-responsive.css +0 -0
  4. data/htdocs/{css → common/css}/bootstrap-responsive.min.css +0 -0
  5. data/htdocs/{css → common/css}/bootstrap.css +0 -0
  6. data/htdocs/{css → common/css}/bootstrap.min.css +0 -0
  7. data/htdocs/{css → common/css}/font-awesome-ie7.css +0 -0
  8. data/htdocs/{css → common/css}/font-awesome.css +0 -0
  9. data/htdocs/{css → common/css}/main.css +0 -0
  10. data/htdocs/{font → common/font}/fontawesome-webfont.eot +0 -0
  11. data/htdocs/{font → common/font}/fontawesome-webfont.svg +0 -0
  12. data/htdocs/{font → common/font}/fontawesome-webfont.ttf +0 -0
  13. data/htdocs/{font → common/font}/fontawesome-webfont.woff +0 -0
  14. data/htdocs/{img → common/img}/glyphicons-halflings-white.png +0 -0
  15. data/htdocs/{img → common/img}/glyphicons-halflings.png +0 -0
  16. data/htdocs/common/js/main.js +495 -0
  17. data/htdocs/{js → common/js}/vendor/angular-bootstrap-prettify.min.js +0 -0
  18. data/htdocs/{js → common/js}/vendor/angular-bootstrap.min.js +0 -0
  19. data/htdocs/{js → common/js}/vendor/angular-cookies.min.js +0 -0
  20. data/htdocs/{js → common/js}/vendor/angular-loader.min.js +0 -0
  21. data/htdocs/{js → common/js}/vendor/angular-resource.min.js +0 -0
  22. data/htdocs/{js → common/js}/vendor/angular-sanitize.min.js +0 -0
  23. data/htdocs/{js → common/js}/vendor/angular-ui-ieshiv.min.js +0 -0
  24. data/htdocs/{js → common/js}/vendor/angular-ui.min.js +0 -0
  25. data/htdocs/{js → common/js}/vendor/angular.js +0 -0
  26. data/htdocs/{js → common/js}/vendor/angular.min.js +0 -0
  27. data/htdocs/{js → common/js}/vendor/bootstrap.js +0 -0
  28. data/htdocs/{js → common/js}/vendor/bootstrap.min.js +0 -0
  29. data/htdocs/{js → common/js}/vendor/html5shiv.js +0 -0
  30. data/htdocs/{js → common/js}/vendor/jquery-1.8.2.min.js +0 -0
  31. data/htdocs/{templates → common/templates}/directory.html +2 -2
  32. data/htdocs/common/templates/error.html +6 -0
  33. data/htdocs/{templates → common/templates}/file.html +0 -0
  34. data/htdocs/{templates → common/templates}/git.html +0 -0
  35. data/htdocs/{templates → common/templates}/index.html +1 -1
  36. data/htdocs/{templates → common/templates}/index_entry.html +0 -0
  37. data/htdocs/{templates → common/templates}/info_refs.html +2 -2
  38. data/htdocs/{templates → common/templates}/loading.html +0 -0
  39. data/htdocs/{templates → common/templates}/notfound.html +1 -2
  40. data/htdocs/{templates → common/templates}/object.html +1 -1
  41. data/htdocs/{templates → common/templates}/objects.html +3 -3
  42. data/htdocs/{templates → common/templates}/pack_file.html +1 -1
  43. data/htdocs/common/templates/pack_index.html +39 -0
  44. data/htdocs/{templates → common/templates}/packed_object.html +4 -4
  45. data/htdocs/{templates → common/templates}/packed_refs.html +2 -2
  46. data/htdocs/{templates → common/templates}/ref.html +0 -0
  47. data/htdocs/common/templates/reflog.html +29 -0
  48. data/htdocs/config.js +6 -0
  49. data/htdocs/default.js +7 -0
  50. data/htdocs/index.html +52 -20
  51. data/lib/git-object-browser.rb +12 -4
  52. data/lib/git-object-browser/dumper/directories_dumper.rb +42 -0
  53. data/lib/git-object-browser/dumper/index_dumper.rb +20 -7
  54. data/lib/git-object-browser/dumper/info_refs_dumper.rb +37 -0
  55. data/lib/git-object-browser/dumper/main.rb +188 -81
  56. data/lib/git-object-browser/dumper/objects_dumper.rb +46 -0
  57. data/lib/git-object-browser/dumper/pack_indexes_dumper.rb +85 -0
  58. data/lib/git-object-browser/dumper/packed_objects_dumper.rb +36 -0
  59. data/lib/git-object-browser/dumper/packed_refs_dumper.rb +37 -0
  60. data/lib/git-object-browser/dumper/plain_files_dumper.rb +74 -0
  61. data/lib/git-object-browser/dumper/refs_dumper.rb +46 -0
  62. data/lib/git-object-browser/main.rb +22 -6
  63. data/lib/git-object-browser/models/directory.rb +5 -3
  64. data/lib/git-object-browser/models/git_date.rb +26 -0
  65. data/lib/git-object-browser/models/git_object.rb +1 -1
  66. data/lib/git-object-browser/models/pack_file.rb +1 -1
  67. data/lib/git-object-browser/models/pack_index.rb +139 -25
  68. data/lib/git-object-browser/models/packed_object.rb +1 -1
  69. data/lib/git-object-browser/models/reflog.rb +54 -0
  70. data/lib/git-object-browser/models/wrapped_object.rb +40 -0
  71. data/lib/git-object-browser/server/git_servlet.rb +130 -100
  72. data/lib/git-object-browser/server/main.rb +1 -1
  73. data/lib/git-object-browser/version.rb +1 -1
  74. metadata +62 -50
  75. data/htdocs/js/main.js +0 -285
  76. data/htdocs/templates/pack_index.html +0 -37
  77. data/lib/git-object-browser/dumper/object_dumper.rb +0 -20
  78. data/lib/git-object-browser/dumper/pack_index_dumper.rb +0 -21
  79. data/lib/git-object-browser/dumper/packed_object_dumper.rb +0 -19
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -8,8 +8,8 @@
8
8
  <th>mtime</th>
9
9
  </thead>
10
10
  <tbody>
11
- <tr data-ng-repeat="entry in object.entries">
12
- <td><i data-entry-icon="entry.type"></i> <a href="/#/{{$parent.path}}/{{entry.basename}}">{{entry.basename}}</a>
11
+ <tr data-ng-repeat="entry in object.entries" data-ng-class="{error: diff[path + '/' + entry.basename]}">
12
+ <td><i data-entry-icon="entry.type"></i> <a href="#{{basedir}}/{{path}}/{{entry.basename}}">{{entry.basename}}</a>
13
13
  </td>
14
14
  <td>
15
15
  {{entry.size}}
@@ -0,0 +1,6 @@
1
+ <article>
2
+ <h1>Error</h1>
3
+
4
+ <p>status: {{status}}</p>
5
+ <p>path: <a href="{{path}}">{{path}}</a></p>
6
+ </article>
File without changes
File without changes
@@ -30,7 +30,7 @@
30
30
  </thead>
31
31
  <tbody>
32
32
  <tr data-ng-repeat="entry in object.entries">
33
- <td><i class="icon-file"></i> <a href="#/.git/index?sha1={{entry.sha1}}">{{entry.path}}</a></td>
33
+ <td><i class="icon-file"></i> <a href="#{{basedir}}/.git/index?sha1={{entry.sha1}}">{{entry.path}}</a></td>
34
34
  <td><a href="#" data-ref-href="entry">{{entry.sha1}}</a></td>
35
35
  </tr>
36
36
  </tbody>
@@ -18,10 +18,10 @@
18
18
  <i data-entry-icon="'commit'"></i> <a data-ref-href="entry.tag_sha1">{{entry.tag_sha1}}</a>
19
19
  </span>
20
20
  </td>
21
- <td><a href="#/.git/{{entry.ref}}">{{entry.ref}}</a></td>
21
+ <td><a href="#{{basedir}}/.git/{{entry.ref}}">{{entry.ref}}</a></td>
22
22
  </tr>
23
23
  </tbody>
24
24
  </table>
25
25
 
26
- <a href="#/.git/packed-refs" data-ng-show="limited">Show All</a>
26
+ <a href="#{{basedir}}/.git/packed-refs" data-ng-show="limited">Show All</a>
27
27
  </article>
File without changes
@@ -1,7 +1,6 @@
1
1
  <article>
2
2
  <h1>Not Found</h1>
3
3
 
4
- <p>.git/{{path}}</p>
5
-
4
+ <p><a href="{{path}}">{{path}}</a></p>
6
5
 
7
6
  </article>
@@ -26,7 +26,7 @@
26
26
  <tr data-ng-repeat="prop in object.properties">
27
27
  <th>{{prop.key}}</th>
28
28
  <td data-ng-switch="prop.type">
29
- <span data-ng-switch-when="sha1"><a href="#/.git/{{prop.path}}">{{prop.value}}</a></span>
29
+ <span data-ng-switch-when="sha1"><a href="#{{basedir}}/.git/{{prop.path}}">{{prop.value}}</a></span>
30
30
  <span data-ng-switch-when="user">{{prop.value}} <small style="color:#aaa">{{prop.date}}</small></span>
31
31
  <span data-ng-switch-default>{{prop.value}}</span>
32
32
  </td>
@@ -1,14 +1,14 @@
1
1
  <h1><i class="icon-folder-open"></i> {{path}} <small>Directory</small></h1>
2
2
 
3
- <p><i class="icon-folder-open"></i> <a href="#/.git/objects/pack">pack</a></p>
3
+ <p><i class="icon-folder-open"></i> <a href="#{{basedir}}/.git/objects/pack">pack</a></p>
4
4
 
5
5
  <table class="table table-bordered table-hover">
6
6
  <tbody>
7
7
  <tr data-ng-repeat="rows in objectTable">
8
- <td data-ng-repeat="cel in rows">
8
+ <td data-ng-repeat="cel in rows" data-ng-style="{background: diff['.git/objects/' + cel.basename]}">
9
9
  <span data-ng-switch="cel.type">
10
10
  <span data-ng-switch-when="empty"><span style="color:#eee">{{cel.basename}}</span></span>
11
- <span data-ng-switch-default><a href="/#/.git/objects/{{cel.basename}}">{{cel.basename}}</a></span>
11
+ <span data-ng-switch-default><a href="#{{basedir}}/.git/objects/{{cel.basename}}">{{cel.basename}}</a></span>
12
12
  </span>
13
13
  </td>
14
14
  </tr>
@@ -9,7 +9,7 @@
9
9
  <th>number of objects</th><td>{{object.object_number}}</a></td>
10
10
  </tr>
11
11
  <tr>
12
- <th>object entries</th><td><a href="#/{{indexUrl}}">see index</a></a></td>
12
+ <th>object entries</th><td><a href="#{{basedir}}/{{indexUrl}}">see index</a></a></td>
13
13
  </tr>
14
14
  </table>
15
15
  </article>
@@ -0,0 +1,39 @@
1
+ <article data-ng-controller="PackIndexCtrl" data-scroll-bottom="scrollBottom()">
2
+ <h1 style="font-size:1.8em;"><i data-entry-icon="'index'"></i> {{path}} <small>Pack Index</small></h1>
3
+
4
+ <table class="table table-striped">
5
+ <thead>
6
+ <tr>
7
+ <th><a href="#{{basedir}}/{{path}}?order=sha1">#</a></th>
8
+ <th>fanout</th>
9
+ <th>sha1</th>
10
+ <th>crc32</th>
11
+ <th><a href="#{{basedir}}/{{path}}?order=offset">offset</a></th>
12
+ <th>type</th>
13
+ <th>size</th>
14
+ </tr>
15
+ </thead>
16
+ <tbody>
17
+ <tr data-ng-repeat="(i, entry) in object.entries">
18
+ <td>{{entry.index}}</td>
19
+
20
+ <td>
21
+ <span data-ng-show="entry.fanout_max"><i class="icon-arrow-up"></i> {{entry.fanout_min}} - {{entry.fanout_max}}</span>
22
+ <span data-ng-show="entry.fanout_min && ! entry.fanout_max"><i class="icon-arrow-up"></i> {{entry.fanout_min}}</span>
23
+ </td>
24
+ <td>{{entry.sha1}}</td>
25
+ <td>{{entry.crc32}}</td>
26
+ <td><a href="#{{basedir}}/{{packUrl}}?offset={{entry.offset}}">{{entry.offset}}</a></td>
27
+ <td><i data-entry-icon="entry.type"></i> {{entry.type}}
28
+ <span data-ng-show="entry.base_offset"><a href="#{{basedir}}/{{packUrl}}?offset={{entry.base_offset}}">{{entry.base_offset}}</a></span>
29
+ <span data-ng-show="entry.base_sha1"><a data-ref-href="entry.base_sha1">{{entry.base_sha1.substr(0,6)}}</a></span>
30
+ </td>
31
+ <td>{{entry.size}}</td>
32
+ </tr>
33
+ </tbody>
34
+ </table>
35
+
36
+ <p data-ng-show="loading">Loading...</p>
37
+
38
+ </article>
39
+
@@ -6,7 +6,7 @@
6
6
  <li class="active"><a href="#parsed" data-toggle="tab">Parsed</a></li>
7
7
  <li data-ng-show="object.object.content"><a href="#plain" data-toggle="tab">Plain</a></li>
8
8
  <li data-ng-show="object.delta_commands"><a href="#deltas" data-toggle="tab">Deltas</a></li>
9
- <li><a href="#/{{path.replace('.pack', '.idx')}}"><i class="icon-list"></i> Index</a></li>
9
+ <li><a href="#{{basedir}}/{{path.replace('.pack', '.idx')}}"><i class="icon-list"></i> Index</a></li>
10
10
  </ul>
11
11
 
12
12
  <div class="tab-content">
@@ -20,11 +20,11 @@
20
20
  </tr>
21
21
  <tr>
22
22
  <th>offset</th>
23
- <td><a href="#/{{path}}?offset={{object.offset}}">{{object.offset}}</a></td>
23
+ <td><a href="#{{basedir}}/{{path}}?offset={{object.offset}}">{{object.offset}}</a></td>
24
24
  </tr>
25
25
  <tr data-ng-show="object.base_offset">
26
26
  <th>base offset</th>
27
- <td><a href="#/{{path}}?offset={{object.base_offset}}">{{object.base_offset}}</a></td>
27
+ <td><a href="#{{basedir}}/{{path}}?offset={{object.base_offset}}">{{object.base_offset}}</a></td>
28
28
  </tr>
29
29
  <tr data-ng-show="object.base_offset">
30
30
  <th>delta type</th>
@@ -47,7 +47,7 @@
47
47
  <tr data-ng-repeat="prop in object.object.properties">
48
48
  <th>{{prop.key}}</th>
49
49
  <td data-ng-switch="prop.type">
50
- <span data-ng-switch-when="sha1"><a href="#/.git/{{prop.path}}">{{prop.value}}</a></span>
50
+ <span data-ng-switch-when="sha1"><a href="#{{basedir}}/.git/{{prop.path}}">{{prop.value}}</a></span>
51
51
  <span data-ng-switch-when="user">{{prop.value}} <small style="color:#aaa">{{prop.date}}</small></span>
52
52
  <span data-ng-switch-default>{{prop.value}}</span>
53
53
  </td>
@@ -26,11 +26,11 @@
26
26
  <i data-entry-icon="'commit'"></i> <a data-ref-href="entry.tag_sha1">{{entry.tag_sha1}}</a>
27
27
  </span>
28
28
  </td>
29
- <td><a href="#/.git/packed-refs?ref={{entry.ref}}">{{entry.ref}}</a></td>
29
+ <td><a href="#{{basedir}}/.git/packed-refs?ref={{entry.ref}}">{{entry.ref}}</a></td>
30
30
  </tr>
31
31
  </tbody>
32
32
  </table>
33
- <a href="#/.git/packed-refs" data-ng-show="limited">Show All</a>
33
+ <a href="#{{basedir}}/.git/packed-refs" data-ng-show="limited">Show All</a>
34
34
 
35
35
  </div>
36
36
  <div class="tab-pane" id="plain">
File without changes
@@ -0,0 +1,29 @@
1
+ <article>
2
+ <h1><i data-entry-icon="'reflog'"></i> {{path}} <small>Reflog</small></h1>
3
+
4
+ <div class="tabbable">
5
+ <ul class="nav nav-tabs">
6
+ <li class="active"><a href="#parsed" data-toggle="tab">Parsed</a></li>
7
+ <li><a href="#plain" data-toggle="tab">Plain</a></li>
8
+ </ul>
9
+ <div class="tab-content">
10
+ <div class="tab-pane active" id="parsed">
11
+
12
+ <pre data-ng-repeat="entry in object.entries">
13
+ <a data-ref-href="entry.sha1_from">{{entry.sha1_from}}</a> <a data-ref-href="entry.sha1_to">{{entry.sha1_to}}</a>
14
+ {{entry.name}} &lt;{{entry.email}}&gt; {{entry.date}}
15
+
16
+ {{entry.message}}
17
+ </pre>
18
+
19
+ </div>
20
+ <div class="tab-pane" id="plain">
21
+
22
+ <pre>{{object.content}}</pre>
23
+
24
+ </div>
25
+ </div>
26
+ </div>
27
+
28
+
29
+ </article>
data/htdocs/config.js ADDED
@@ -0,0 +1,6 @@
1
+ /*
2
+ config.steps = [
3
+ { name: 'step1', label: 'step 1 - git init' },
4
+ { name: 'step2', label: 'step 2 - git add foo.txt' }
5
+ };
6
+ */
data/htdocs/default.js ADDED
@@ -0,0 +1,7 @@
1
+ // Edit config.js instead of this file.
2
+ // This file will be rewritten by git object-browser command.
3
+ var config = {
4
+ "loadNote": false,
5
+ "loadDiff": false,
6
+ "steps" : []
7
+ };
data/htdocs/index.html CHANGED
@@ -10,21 +10,38 @@
10
10
  <meta name="description" content="">
11
11
  <meta name="viewport" content="width=device-width">
12
12
 
13
- <link rel="stylesheet" href="css/bootstrap.min.css">
13
+ <link rel="stylesheet" href="common/css/bootstrap.min.css">
14
14
  <style>
15
15
  body {
16
16
  padding-top: 60px;
17
17
  padding-bottom: 40px;
18
18
  }
19
+
20
+ .sidenote {
21
+ margin-top: 10px;
22
+ margin-left: 10px;
23
+ border: solid 1px #ccc;
24
+ padding: 18px;
25
+ -webkit-border-radius: 5px;
26
+ -moz-border-radius: 5px;
27
+ border-radius: 5px;
28
+ }
29
+
30
+ .sidenote h3 {
31
+ margin: 0;
32
+ margin-bottom: 10px;
33
+ line-height: 20px;
34
+ font-size: 1em;
35
+ }
19
36
  </style>
20
- <link rel="stylesheet" href="css/bootstrap-responsive.min.css">
21
- <link rel="stylesheet" href="css/main.css">
22
- <link rel="stylesheet" href="css/angular-ui.min.css">
23
- <link rel="stylesheet" href="css/font-awesome.css">
37
+ <link rel="stylesheet" href="common/css/bootstrap-responsive.min.css">
38
+ <link rel="stylesheet" href="common/css/main.css">
39
+ <link rel="stylesheet" href="common/css/angular-ui.min.css">
40
+ <link rel="stylesheet" href="common/css/font-awesome.css">
24
41
 
25
42
  <!--[if lt IE 9]>
26
43
  <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
27
- <script>window.html5 || document.write('<script src="js/vendor/html5shiv.js"><\/script>')</script>
44
+ <script>window.html5 || document.write('<script src="common/js/vendor/html5shiv.js"><\/script>')</script>
28
45
  <![endif]-->
29
46
  </head>
30
47
  <body data-ng-app="GitObjectBrowser">
@@ -43,9 +60,19 @@
43
60
  <span class="icon-bar"></span>
44
61
  </a>
45
62
  <a class="brand" href="/"><i class="icon-comment icon-white"></i> GOB</a>
46
- <div class="nav-collapse collapse">
63
+ <div class="nav-collapse collapse" data-ng-controller="MenuCtrl">
47
64
  <ul class="nav">
48
- <li class="active"><a href="/">Home</a></li>
65
+ <li class="active" data-ng-show="steps.length == 0" style="display:none"><a href="/">Home</a></li>
66
+
67
+ <li class="dropdown" data-ng-show="steps.length > 0" style="display:none">
68
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">Steps <b class="caret"></b></a>
69
+ <ul class="dropdown-menu">
70
+ <li data-ng-repeat="step in steps"><a data-ng-href="#/{{step.name}}/.git/" data-ng-click="">{{step.label}}</a></li>
71
+ </ul>
72
+ </li>
73
+ <li data-ng-show="steps.length > 0" style="display:none"><a data-ng-click="stepPrev()" href=""><i class="icon-chevron-left"></i>Prev</a></li>
74
+ <li data-ng-show="steps.length > 0" style="display:none"><a data-ng-click="stepNext()" href="">Next<i class="icon-chevron-right"></i></a></li>
75
+
49
76
  <li class="dropdown">
50
77
  <a href="#" class="dropdown-toggle" data-toggle="dropdown">Documents <b class="caret"></b></a>
51
78
  <ul class="dropdown-menu">
@@ -82,13 +109,16 @@
82
109
  <div class="span3">
83
110
  <ul class="nav nav-list">
84
111
  <li class="nav-header">Git Object Browser</li>
85
- <li class=""><a href="/#/.git/"><i data-entry-icon="'directory'"></i>.git</a></li>
86
- <li class=""><a href="/#/.git/objects"><i data-entry-icon="'directory'"></i> objects</a></li>
87
- <li class=""><a href="/#/.git/objects/pack"><i data-entry-icon="'directory'"></i> pack</a></li>
88
- <li class=""><a href="/#/.git/refs"><i data-entry-icon="'directory'"></i> refs</a></li>
89
- <li class=""><a href="/#/.git/HEAD"><i data-entry-icon="'ref'"></i> HEAD</a></li>
90
- <li class=""><a href="/#/.git/index"><i data-entry-icon="'index'"></i> index</a></li>
112
+ <li class=""><a href="#{{basedir}}/.git/"><i data-entry-icon="'directory'"></i>.git</a></li>
113
+ <li class=""><a href="#{{basedir}}/.git/objects"><i data-entry-icon="'directory'"></i> objects</a></li>
114
+ <li class=""><a href="#{{basedir}}/.git/objects/pack"><i data-entry-icon="'directory'"></i> pack</a></li>
115
+ <li class=""><a href="#{{basedir}}/.git/refs"><i data-entry-icon="'directory'"></i> refs</a></li>
116
+ <li class=""><a href="#{{basedir}}/.git/HEAD"><i data-entry-icon="'ref'"></i> HEAD</a></li>
117
+ <li class=""><a href="#{{basedir}}/.git/index"><i data-entry-icon="'index'"></i> index</a></li>
91
118
  </ul>
119
+
120
+ <article class="sidenote" data-ng-bind-html-unsafe="note" style="display:none" data-ng-show="note">
121
+ </article>
92
122
  </div>
93
123
 
94
124
  <div class="span9">
@@ -103,12 +133,14 @@
103
133
  </div> <!-- /container -->
104
134
 
105
135
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
106
- <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.8.2.min.js"><\/script>')</script>
107
- <script src="js/vendor/bootstrap.min.js"></script>
108
- <script src="js/vendor/angular.js"></script>
109
- <script src="js/vendor/angular-resource.min.js"></script>
110
- <script src="js/vendor/angular-ui.min.js"></script>
136
+ <script>window.jQuery || document.write('<script src="common/js/vendor/jquery-1.8.2.min.js"><\/script>')</script>
137
+ <script src="common/js/vendor/bootstrap.min.js"></script>
138
+ <script src="common/js/vendor/angular.js"></script>
139
+ <script src="common/js/vendor/angular-resource.min.js"></script>
140
+ <script src="common/js/vendor/angular-ui.min.js"></script>
111
141
 
112
- <script src="js/main.js"></script>
142
+ <script src="default.js"></script>
143
+ <script src="config.js"></script>
144
+ <script src="common/js/main.js"></script>
113
145
  </body>
114
146
  </html>
@@ -13,9 +13,9 @@ require 'stringio'
13
13
  require 'optparse'
14
14
 
15
15
  require "git-object-browser/main"
16
- require "git-object-browser/models/ref"
17
16
  require "git-object-browser/models/bindata"
18
17
  require "git-object-browser/models/directory"
18
+ require "git-object-browser/models/git_date"
19
19
  require "git-object-browser/models/git_object"
20
20
  require "git-object-browser/models/index"
21
21
  require "git-object-browser/models/index_entry"
@@ -27,13 +27,21 @@ require "git-object-browser/models/pack_index"
27
27
  require "git-object-browser/models/packed_object"
28
28
  require "git-object-browser/models/packed_refs"
29
29
  require "git-object-browser/models/plain_file"
30
+ require "git-object-browser/models/ref"
31
+ require "git-object-browser/models/reflog"
32
+ require "git-object-browser/models/wrapped_object"
30
33
  require "git-object-browser/server/main"
31
34
  require "git-object-browser/server/git_servlet"
32
35
 
33
36
  require "git-object-browser/dumper/main"
34
- require "git-object-browser/dumper/object_dumper"
37
+ require "git-object-browser/dumper/objects_dumper"
35
38
  require "git-object-browser/dumper/index_dumper"
36
- require "git-object-browser/dumper/pack_index_dumper"
37
- require "git-object-browser/dumper/packed_object_dumper"
39
+ require "git-object-browser/dumper/directories_dumper"
40
+ require "git-object-browser/dumper/plain_files_dumper"
41
+ require "git-object-browser/dumper/refs_dumper"
42
+ require "git-object-browser/dumper/packed_refs_dumper"
43
+ require "git-object-browser/dumper/pack_indexes_dumper"
44
+ require "git-object-browser/dumper/packed_objects_dumper"
45
+ require "git-object-browser/dumper/info_refs_dumper"
38
46
 
39
47
  GitObjectBrowser::Main.new().execute if __FILE__ == $0
@@ -0,0 +1,42 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module GitObjectBrowser
4
+
5
+ module Dumper
6
+
7
+ class DirectoriesDumper
8
+
9
+ def initialize(root, outdir)
10
+ @root = root
11
+ @outdir = outdir
12
+ end
13
+
14
+ def dump
15
+ dirs = ['']
16
+ Dir.chdir(@root) do
17
+ Dir.glob("**/*") do |path|
18
+ next if path == 'dump' # FIXME
19
+ dirs << path if File.directory?(path)
20
+ end
21
+ end
22
+
23
+ dirs.each do |path|
24
+ outfile = File.join(@outdir, (path == '') ? '_git.json' : "#{ path }.json")
25
+ FileUtils.mkdir_p(File.dirname(outfile))
26
+
27
+ puts "Write: #{path}\n"
28
+ obj_file = File.join(@root, path)
29
+ File.open(outfile, "w") do |output|
30
+ dump_object(path, output)
31
+ end
32
+ end
33
+ end
34
+
35
+ def dump_object(path, output)
36
+ obj = GitObjectBrowser::Models::Directory.new(@root, path)
37
+ wrapped = GitObjectBrowser::Models::WrappedObject.new(nil, path, obj)
38
+ output << JSON.pretty_generate(wrapped.to_hash)
39
+ end
40
+ end
41
+ end
42
+ end