1 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.1//EN"
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3 <html xmlns=
"http://www.w3.org/1999/xhtml" xml:
lang=
"en">
5 <meta http-equiv=
"Content-Type" content=
"text/html; charset=UTF-8" />
6 <meta name=
"generator" content=
"AsciiDoc 8.5.2" />
7 <title>directory listing API
</title>
8 <style type=
"text/css">
10 p
, li
, dt
, dd
, div
, pre
, h1
, h2
, h3
, h4
, h5
, h6
{
12 border: 1px solid red;
17 margin: 1em 5% 1em 5%;
22 text-decoration: underline
;
42 h1
, h2
, h3
, h4
, h5
, h6
{
44 font-family: sans-serif
;
51 border-bottom: 2px solid silver
;
69 border: 1px solid silver
;
88 font-family: sans-serif
;
94 span#revnumber
, span#revdate
, span#revremark
{
95 font-family: sans-serif
;
99 font-family: sans-serif
;
101 border-top: 2px solid silver
;
107 padding-bottom: 0.5em;
111 padding-bottom: 0.5em;
116 margin-bottom: 1.5em;
118 div
.tableblock
, div
.imageblock
, div
.exampleblock
, div
.verseblock
,
119 div
.quoteblock
, div
.literalblock
, div
.listingblock
, div
.sidebarblock
,
120 div
.admonitionblock
{
122 margin-bottom: 1.5em;
124 div
.admonitionblock
{
126 margin-bottom: 2.0em;
131 div
.content
{ /* Block element content. */
135 /* Block element titles. */
136 div
.title
, caption
.title
{
138 font-family: sans-serif
;
142 margin-bottom: 0.5em;
148 td div
.title:first-child
{
151 div
.content div
.title:first-child
{
154 div
.content
+ div
.title
{
158 div
.sidebarblock
> div
.content
{
160 border: 1px solid silver
;
164 div
.listingblock
> div
.content
{
165 border: 1px solid silver
;
170 div
.quoteblock
, div
.verseblock
{
174 border-left: 5px solid
#dddddd;
178 div
.quoteblock
> div
.attribution
{
183 div
.verseblock
> div
.content
{
186 div
.verseblock
> div
.attribution
{
190 /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
191 div
.verseblock
+ div
.attribution
{
195 div
.admonitionblock
.icon
{
199 text-decoration: underline
;
201 padding-right: 0.5em;
203 div
.admonitionblock td
.content
{
205 border-left: 3px solid
#dddddd;
208 div
.exampleblock
> div
.content
{
209 border-left: 3px solid
#dddddd;
213 div
.imageblock div
.content
{ padding-left: 0; }
214 span
.image img
{ border-style: none
; }
215 a
.image:visited
{ color: white
; }
219 margin-bottom: 0.8em;
232 list-style-position: outside
;
235 list-style-type: decimal
;
238 list-style-type: lower-alpha
;
241 list-style-type: upper-alpha
;
244 list-style-type: lower-roman
;
247 list-style-type: upper-roman
;
250 div
.compact ul
, div
.compact ol
,
251 div
.compact p
, div
.compact p
,
252 div
.compact div
, div
.compact div
{
254 margin-bottom: 0.1em;
257 div
.tableblock
> table
{
258 border: 3px solid
#527bbd;
260 thead
, p
.table
.header
{
261 font-family: sans-serif
;
273 /* Because the table frame attribute is overriden by CSS in most browsers. */
274 div
.tableblock
> table
[frame
="void"] {
277 div
.tableblock
> table
[frame
="hsides"] {
278 border-left-style: none
;
279 border-right-style: none
;
281 div
.tableblock
> table
[frame
="vsides"] {
282 border-top-style: none
;
283 border-bottom-style: none
;
289 margin-bottom: 0.8em;
292 padding-bottom: 15px;
294 dt
.hdlist1
.strong
, td
.hdlist1
.strong
{
300 padding-right: 0.8em;
306 div
.hdlist
.compact tr
{
315 .footnote, .footnoteref {
319 span
.footnote
, span
.footnoteref
{
320 vertical-align: super
;
324 margin: 20px 0 20px 0;
328 #footnotes div
.footnote
{
334 border-top: 1px solid silver
;
344 div#footer-badges
{ display: none
; }
348 margin-bottom: 2.5em;
353 font-family: sans-serif
;
357 margin-bottom: 0.1em;
360 div
.toclevel1
, div
.toclevel2
, div
.toclevel3
, div
.toclevel4
{
376 /* Workarounds for IE6's broken and incomplete CSS2. */
378 div
.sidebar-content
{
380 border: 1px solid silver
;
383 div
.sidebar-title
, div
.image-title
{
385 font-family: sans-serif
;
388 margin-bottom: 0.5em;
391 div
.listingblock div
.content
{
392 border: 1px solid silver
;
397 div
.quoteblock-attribution
{
402 div
.verseblock-content
{
405 div
.verseblock-attribution
{
410 div
.exampleblock-content
{
411 border-left: 3px solid
#dddddd;
415 /* IE6 sets dynamically generated links as visited. */
416 div#toc
a:visited
{ color: blue
; }
418 <script type=
"text/javascript">
420 window
.onload = function(){asciidoc
.footnotes();}
421 var asciidoc
= { // Namespace.
423 /////////////////////////////////////////////////////////////////////
424 // Table Of Contents generator
425 /////////////////////////////////////////////////////////////////////
427 /* Author: Mihai Bazon, September 2002
428 * http://students.infoiasi.ro/~mishoo
430 * Table Of Content generator
433 * Feel free to use this script under the terms of the GNU General Public
434 * License, as long as you do not remove or alter this notice.
437 /* modified by Troy D. Hanson, September 2006. License: GPL */
438 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
441 toc: function (toclevels
) {
443 function getText(el
) {
445 for (var i
= el
.firstChild
; i
!= null; i
= i
.nextSibling
) {
446 if (i
.nodeType
== 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
448 else if (i
.firstChild
!= null)
454 function TocEntry(el
, text
, toclevel
) {
457 this.toclevel
= toclevel
;
460 function tocEntries(el
, toclevels
) {
461 var result
= new Array
;
462 var re
= new RegExp('[hH]([2-'+(toclevels
+1)+'])');
463 // Function that scans the DOM tree for header elements (the DOM2
464 // nodeIterator API would be a better technique but not supported by all
466 var iterate = function (el
) {
467 for (var i
= el
.firstChild
; i
!= null; i
= i
.nextSibling
) {
468 if (i
.nodeType
== 1 /* Node.ELEMENT_NODE */) {
469 var mo
= re
.exec(i
.tagName
);
470 if (mo
&& (i
.getAttribute("class") || i
.getAttribute("className")) != "float") {
471 result
[result
.length
] = new TocEntry(i
, getText(i
), mo
[1]-1);
481 var toc
= document
.getElementById("toc");
482 var entries
= tocEntries(document
.getElementById("content"), toclevels
);
483 for (var i
= 0; i
< entries
.length
; ++i
) {
484 var entry
= entries
[i
];
485 if (entry
.element
.id
== "")
486 entry
.element
.id
= "_toc_" + i
;
487 var a
= document
.createElement("a");
488 a
.href
= "#" + entry
.element
.id
;
489 a
.appendChild(document
.createTextNode(entry
.text
));
490 var div
= document
.createElement("div");
492 div
.className
= "toclevel" + entry
.toclevel
;
493 toc
.appendChild(div
);
495 if (entries
.length
== 0)
496 toc
.parentNode
.removeChild(toc
);
500 /////////////////////////////////////////////////////////////////////
501 // Footnotes generator
502 /////////////////////////////////////////////////////////////////////
504 /* Based on footnote generation code from:
505 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
508 footnotes: function () {
509 var cont
= document
.getElementById("content");
510 var noteholder
= document
.getElementById("footnotes");
511 var spans
= cont
.getElementsByTagName("span");
514 for (i
=0; i
<spans
.length
; i
++) {
515 if (spans
[i
].className
== "footnote") {
517 // Use [\s\S] in place of . so multi-line matches work.
518 // Because JavaScript has no s (dotall) regex flag.
519 note
= spans
[i
].innerHTML
.match(/\s*\[([\s\S]*)]\s*/)[1];
520 noteholder
.innerHTML
+=
521 "<div class='footnote' id='_footnote_" + n
+ "'>" +
522 "<a href='#_footnoteref_" + n
+ "' title='Return to text'>" +
523 n
+ "</a>. " + note
+ "</div>";
525 "[<a id='_footnoteref_" + n
+ "' href='#_footnote_" + n
+
526 "' title='View footnote' class='footnote'>" + n
+ "</a>]";
527 var id
=spans
[i
].getAttribute("id");
528 if (id
!= null) refs
["#"+id
] = n
;
532 noteholder
.parentNode
.removeChild(noteholder
);
534 // Process footnoterefs.
535 for (i
=0; i
<spans
.length
; i
++) {
536 if (spans
[i
].className
== "footnoteref") {
537 var href
= spans
[i
].getElementsByTagName("a")[0].getAttribute("href");
538 href
= href
.match(/#.*/)[0]; // Because IE return full URL.
541 "[<a href='#_footnote_" + n
+
542 "' title='View footnote' class='footnote'>" + n
+ "</a>]";
554 <h1>directory listing API
</h1>
558 <div class=
"sectionbody">
559 <div class=
"paragraph"><p>The directory listing API is used to enumerate paths in the work tree,
560 optionally taking
<tt>.git/info/exclude
</tt> and
<tt>.gitignore
</tt> files per
561 directory into account.
</p></div>
564 <h2 id=
"_data_structure">Data structure
</h2>
565 <div class=
"sectionbody">
566 <div class=
"paragraph"><p><tt>struct dir_struct
</tt> structure is used to pass directory traversal
567 options to the library and to record the paths discovered. The notable
568 options are:
</p></div>
569 <div class=
"dlist"><dl>
571 <tt>exclude_per_dir
</tt>
575 The name of the file to be read in each directory for excluded
576 files (typically
<tt>.gitignore
</tt>).
580 <tt>collect_ignored
</tt>
584 Include paths that are to be excluded in the result.
588 <tt>show_ignored
</tt>
592 The traversal is for finding just ignored files, not unignored
597 <tt>show_other_directories
</tt>
601 Include a directory that is not tracked.
605 <tt>hide_empty_directories
</tt>
609 Do not include a directory that is not tracked and is empty.
617 If set, recurse into a directory that looks like a git
618 directory. Otherwise it is shown as a directory.
622 The result of the enumeration is left in these fields
629 An array of
<tt>struct dir_entry
</tt>, each element of which describes
638 The number of members in
<tt>entries[]
</tt> array.
646 Internal use; keeps track of allocation of
<tt>entries[]
</tt> array.
651 <h2 id=
"_calling_sequence">Calling sequence
</h2>
652 <div class=
"sectionbody">
653 <div class=
"paragraph"><p>Note: index may be looked at for .gitignore files that are CE_SKIP_WORKTREE
654 marked. If you to exclude files, make sure you have loaded index first.
</p></div>
655 <div class=
"ulist"><ul>
658 Prepare
<tt>struct dir_struct dir
</tt> and clear it with
<tt>memset(
&dir,
0,
664 Call
<tt>add_exclude()
</tt> to add single exclude pattern,
665 <tt>add_excludes_from_file()
</tt> to add patterns from a file
666 (e.g.
<tt>.git/info/exclude
</tt>), and/or set
<tt>dir.exclude_per_dir
</tt>. A
667 short-hand function
<tt>setup_standard_excludes()
</tt> can be used to set up
668 the standard set of exclude settings.
673 Set options described in the Data Structure section above.
678 Call
<tt>read_directory()
</tt>.
683 Use
<tt>dir.entries[]
</tt>.
687 <div class=
"paragraph"><p>(JC)
</p></div>
690 <div id=
"footnotes"><hr /></div>
692 <div id=
"footer-text">
693 Last updated
2011-
09-
21 23:
01:
14 PDT