Skip to content

Instantly share code, notes, and snippets.

@ahal
Last active July 11, 2018 17:03
Show Gist options
  • Save ahal/a892861172d1d755c63c1f62e6c94181 to your computer and use it in GitHub Desktop.
Save ahal/a892861172d1d755c63c1f62e6c94181 to your computer and use it in GitHub Desktop.
Sample Patch
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Diff to HTML by rtfpessoa</title>
<!--
Diff to HTML (template.html)
Author: rtfpessoa
-->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/styles/github.min.css">
<style>
.d2h-wrapper{text-align:left}.d2h-file-header{padding:5px 10px;border-bottom:1px solid #d8d8d8;background-color:#f7f7f7}.d2h-file-stats{display:flex;margin-left:auto;font-size:14px}.d2h-lines-added{text-align:right;border:1px solid #b4e2b4;border-radius:5px 0 0 5px;color:#399839;padding:2px;vertical-align:middle}.d2h-lines-deleted{text-align:left;border:1px solid #e9aeae;border-radius:0 5px 5px 0;color:#c33;padding:2px;vertical-align:middle;margin-left:1px}.d2h-file-name-wrapper{display:flex;align-items:center;width:100%;font-family:"Source Sans Pro","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15px}.d2h-file-name{white-space:nowrap;text-overflow:ellipsis;overflow-x:hidden;line-height:21px}.d2h-file-wrapper{border:1px solid #ddd;border-radius:3px;margin-bottom:1em}.d2h-diff-table{width:100%;border-collapse:collapse;font-family:Menlo,Consolas,monospace;font-size:13px}.d2h-diff-tbody>tr>td{height:20px;line-height:20px}.d2h-files-diff{display:block;width:100%;height:100%}.d2h-file-diff{overflow-x:scroll;overflow-y:hidden}.d2h-file-side-diff{display:inline-block;overflow-x:scroll;overflow-y:hidden;width:50%;margin-right:-4px;margin-bottom:-8px}.d2h-code-line{display:inline-block;white-space:nowrap;padding:0 10px;margin-left:80px}.d2h-code-side-line{display:inline-block;white-space:nowrap;padding:0 10px;margin-left:50px}.d2h-code-line del,.d2h-code-side-line del{display:inline-block;margin-top:-1px;text-decoration:none;background-color:#ffb6ba;border-radius:.2em}.d2h-code-line ins,.d2h-code-side-line ins{display:inline-block;margin-top:-1px;text-decoration:none;background-color:#97f295;border-radius:.2em;text-align:left}.d2h-code-line-prefix{display:inline;background:0 0;padding:0;word-wrap:normal;white-space:pre}.d2h-code-line-ctn{display:inline;background:0 0;padding:0;word-wrap:normal;white-space:pre}.line-num1{box-sizing:border-box;float:left;width:40px;overflow:hidden;text-overflow:ellipsis;padding-left:3px}.line-num2{box-sizing:border-box;float:right;width:40px;overflow:hidden;text-overflow:ellipsis;padding-left:3px}.d2h-code-linenumber{box-sizing:border-box;position:absolute;width:86px;padding-left:2px;padding-right:2px;background-color:#fff;color:rgba(0,0,0,.3);text-align:right;border:solid #eee;border-width:0 1px 0 1px;cursor:pointer}.d2h-code-side-linenumber{box-sizing:border-box;position:absolute;width:56px;padding-left:5px;padding-right:5px;background-color:#fff;color:rgba(0,0,0,.3);text-align:right;border:solid #eee;border-width:0 1px 0 1px;cursor:pointer;overflow:hidden;text-overflow:ellipsis}.d2h-del{background-color:#fee8e9;border-color:#e9aeae}.d2h-ins{background-color:#dfd;border-color:#b4e2b4}.d2h-info{background-color:#f8fafd;color:rgba(0,0,0,.3);border-color:#d5e4f2}.d2h-file-diff .d2h-del.d2h-change{background-color:#fdf2d0}.d2h-file-diff .d2h-ins.d2h-change{background-color:#ded}.d2h-file-list-wrapper{margin-bottom:10px}.d2h-file-list-wrapper a{text-decoration:none;color:#3572b0}.d2h-file-list-wrapper a:visited{color:#3572b0}.d2h-file-list-header{text-align:left}.d2h-file-list-title{font-weight:700}.d2h-file-list-line{display:flex;text-align:left}.d2h-file-list{display:block;list-style:none;padding:0;margin:0}.d2h-file-list>li{border-bottom:#ddd solid 1px;padding:5px 10px;margin:0}.d2h-file-list>li:last-child{border-bottom:none}.d2h-file-switch{display:none;font-size:10px;cursor:pointer}.d2h-icon-wrapper{line-height:31px}.d2h-icon{vertical-align:middle;margin-right:10px;fill:currentColor}.d2h-deleted{color:#c33}.d2h-added{color:#399839}.d2h-changed{color:#d0b44c}.d2h-moved{color:#3572b0}.d2h-tag{display:flex;font-size:10px;margin-left:5px;padding:0 2px;background-color:#fff}.d2h-deleted-tag{border:#c33 1px solid}.d2h-added-tag{border:#399839 1px solid}.d2h-changed-tag{border:#d0b44c 1px solid}.d2h-moved-tag{border:#3572b0 1px solid}.selecting-left .d2h-code-line,.selecting-left .d2h-code-line *,.selecting-left .d2h-code-side-line,.selecting-left .d2h-code-side-line *,.selecting-right td.d2h-code-linenumber,.selecting-right td.d2h-code-linenumber *,.selecting-right td.d2h-code-side-linenumber,.selecting-right td.d2h-code-side-linenumber *{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.selecting-left .d2h-code-line ::-moz-selection,.selecting-left .d2h-code-line::-moz-selection,.selecting-left .d2h-code-side-line ::-moz-selection,.selecting-left .d2h-code-side-line::-moz-selection,.selecting-right td.d2h-code-linenumber::-moz-selection,.selecting-right td.d2h-code-side-linenumber ::-moz-selection,.selecting-right td.d2h-code-side-linenumber::-moz-selection{background:0 0}.selecting-left .d2h-code-line ::selection,.selecting-left .d2h-code-line::selection,.selecting-left .d2h-code-side-line ::selection,.selecting-left .d2h-code-side-line::selection,.selecting-right td.d2h-code-linenumber::selection,.selecting-right td.d2h-code-side-linenumber ::selection,.selecting-right td.d2h-code-side-linenumber::selection{background:0 0}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.3/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/languages/scala.min.js"></script>
<script>
!function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n||e)},l,l.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){(function(global){!function(){var highlightJS=require("./highlight.js-internals.js").HighlightJS,diffJson=null,currentSelectionColumnId=-1;function Diff2HtmlUI(config){var cfg=config||{};cfg.diff?diffJson=Diff2Html.getJsonFromDiff(cfg.diff):cfg.json&&(diffJson=cfg.json),this._initSelection()}Diff2HtmlUI.prototype.draw=function(targetId,config){var cfg=config||{};cfg.inputFormat="json";var $target=this._getTarget(targetId);$target.html(Diff2Html.getPrettyHtml(diffJson,cfg)),cfg.synchronisedScroll&&this.synchronisedScroll($target,cfg)},Diff2HtmlUI.prototype.synchronisedScroll=function(targetId){this._getTarget(targetId).find(".d2h-file-side-diff").scroll(function(){var $this=$(this);$this.closest(".d2h-file-wrapper").find(".d2h-file-side-diff").scrollLeft($this.scrollLeft())})},Diff2HtmlUI.prototype.fileListCloseable=function(targetId,startVisible){var $target=this._getTarget(targetId),hashTag=this._getHashTag(),$showBtn=$target.find(".d2h-show"),$hideBtn=$target.find(".d2h-hide"),$fileList=$target.find(".d2h-file-list");function show(){$showBtn.hide(),$hideBtn.show(),$fileList.show()}function hide(){$hideBtn.hide(),$showBtn.show(),$fileList.hide()}"files-summary-show"===hashTag?show():"files-summary-hide"===hashTag?hide():startVisible?show():hide(),$showBtn.click(show),$hideBtn.click(hide)},Diff2HtmlUI.prototype.highlightCode=function(targetId){this._getTarget(targetId).find(".d2h-file-wrapper").map(function(_i,file){var oldLinesState,newLinesState,$file=$(file),language=$file.data("lang");$file.find(".d2h-code-line-ctn").map(function(_j,line){var lineState,$line=$(line),text=line.textContent,lineParent=line.parentNode;lineState=-1!==lineParent.className.indexOf("d2h-del")?oldLinesState:newLinesState;var result=hljs.getLanguage(language)?hljs.highlight(language,text,!0,lineState):hljs.highlightAuto(text);-1!==lineParent.className.indexOf("d2h-del")?oldLinesState=result.top:(-1!==lineParent.className.indexOf("d2h-ins")||(oldLinesState=result.top),newLinesState=result.top);var originalStream=highlightJS.nodeStream(line);if(originalStream.length){var resultNode=document.createElementNS("http://www.w3.org/1999/xhtml","div");resultNode.innerHTML=result.value,result.value=highlightJS.mergeStreams(originalStream,highlightJS.nodeStream(resultNode),text)}$line.addClass("hljs"),$line.addClass(result.language),$line.html(result.value)})})},Diff2HtmlUI.prototype._getTarget=function(targetId){var $target;return"object"==typeof targetId&&targetId instanceof jQuery?$target=targetId:"string"==typeof targetId?$target=$(targetId):(console.error("Wrong target provided! Falling back to default value 'body'."),console.log("Please provide a jQuery object or a valid DOM query string."),$target=$("body")),$target},Diff2HtmlUI.prototype._getHashTag=function(){var docUrl=document.URL,hashTagIndex=docUrl.indexOf("#"),hashTag=null;return-1!==hashTagIndex&&(hashTag=docUrl.substr(hashTagIndex+1)),hashTag},Diff2HtmlUI.prototype._distinct=function(collection){return collection.filter(function(v,i){return collection.indexOf(v)===i})},Diff2HtmlUI.prototype._initSelection=function(){var body=$("body"),that=this;body.on("mousedown",".d2h-diff-table",function(event){var target=$(event.target),table=target.closest(".d2h-diff-table");target.closest(".d2h-code-line,.d2h-code-side-line").length?(table.removeClass("selecting-left"),table.addClass("selecting-right"),currentSelectionColumnId=1):target.closest(".d2h-code-linenumber,.d2h-code-side-linenumber").length&&(table.removeClass("selecting-right"),table.addClass("selecting-left"),currentSelectionColumnId=0)}),body.on("copy",".d2h-diff-table",function(event){var clipboardData=event.originalEvent.clipboardData,text=that._getSelectedText();clipboardData.setData("text",text),event.preventDefault()})},Diff2HtmlUI.prototype._getSelectedText=function(){var doc=window.getSelection().getRangeAt(0).cloneContents(),nodes=doc.querySelectorAll("tr"),text="",idx=currentSelectionColumnId;return 0===nodes.length?text=doc.textContent:[].forEach.call(nodes,function(tr,i){var td=tr.cells[1===tr.cells.length?0:idx];text+=(i?"\n":"")+td.textContent.replace(/(?:\r\n|\r|\n)/g,"")}),text},module.exports.Diff2HtmlUI=Diff2HtmlUI,global.Diff2HtmlUI=Diff2HtmlUI}()}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./highlight.js-internals.js":2}],2:[function(require,module,exports){!function(){function HighlightJS(){}var ArrayProto=[];function escape(value){return value.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function tag(node){return node.nodeName.toLowerCase()}HighlightJS.prototype.nodeStream=function(node){var result=[];return function _nodeStream(node,offset){for(var child=node.firstChild;child;child=child.nextSibling)3===child.nodeType?offset+=child.nodeValue.length:1===child.nodeType&&(result.push({event:"start",offset:offset,node:child}),offset=_nodeStream(child,offset),tag(child).match(/br|hr|img|input/)||result.push({event:"stop",offset:offset,node:child}));return offset}(node,0),result},HighlightJS.prototype.mergeStreams=function(original,highlighted,value){var processed=0,result="",nodeStack=[];function selectStream(){return original.length&&highlighted.length?original[0].offset!==highlighted[0].offset?original[0].offset<highlighted[0].offset?original:highlighted:"start"===highlighted[0].event?original:highlighted:original.length?original:highlighted}function open(node){result+="<"+tag(node)+ArrayProto.map.call(node.attributes,function(a){return" "+a.nodeName+'="'+escape(a.value)+'"'}).join("")+">"}function close(node){result+="</"+tag(node)+">"}function render(event){("start"===event.event?open:close)(event.node)}for(;original.length||highlighted.length;){var stream=selectStream();if(result+=escape(value.substring(processed,stream[0].offset)),processed=stream[0].offset,stream===original){for(nodeStack.reverse().forEach(close);render(stream.splice(0,1)[0]),(stream=selectStream())===original&&stream.length&&stream[0].offset===processed;);nodeStack.reverse().forEach(open)}else"start"===stream[0].event?nodeStack.push(stream[0].node):nodeStack.pop(),render(stream.splice(0,1)[0])}return result+escape(value.substr(processed))},module.exports.HighlightJS=new HighlightJS}()},{}]},{},[1]);
</script>
<script>
$(document).ready(function() {
var diff2htmlUi = new Diff2HtmlUI();
diff2htmlUi.fileListCloseable("#diff", true);
diff2htmlUi.synchronisedScroll("#diff", false);
diff2htmlUi.highlightCode('#diff');
});
</script>
</head>
<body style="text-align: center; font-family: 'Source Sans Pro',sans-serif;">
<h1>Diff to HTML by <a href="https://github.com/rtfpessoa">rtfpessoa</a></h1>
<div id="diff">
<div class="d2h-file-list-wrapper">
<div class="d2h-file-list-header">
<span class="d2h-file-list-title">Files changed (1)</span>
<a class="d2h-file-switch d2h-hide">hide</a>
<a class="d2h-file-switch d2h-show">show</a>
</div>
<ol class="d2h-file-list">
<li class="d2h-file-list-line">
<span class="d2h-file-name-wrapper">
<span><svg aria-hidden="true" class="d2h-icon d2h-changed" height="16" title="modified" version="1.1"
viewBox="0 0 14 16" width="14">
<path d="M13 1H1C0.45 1 0 1.45 0 2v12c0 0.55 0.45 1 1 1h12c0.55 0 1-0.45 1-1V2c0-0.55-0.45-1-1-1z m0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z"></path>
</svg></span>
<a href="#d2h-731159" class="d2h-file-name">tools/docs/moztreedocs/__init__.py</a>
<span class="d2h-file-stats">
<span class="d2h-lines-added">+31</span>
<span class="d2h-lines-deleted">-27</span>
</span>
</span>
</li>
</ol>
</div><div class="d2h-wrapper">
<div id="d2h-731159" class="d2h-file-wrapper" data-lang="py">
<div class="d2h-file-header">
<span class="d2h-file-name-wrapper">
<span class="d2h-icon-wrapper"><svg aria-hidden="true" class="d2h-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12">
<path d="M6 5H2v-1h4v1zM2 8h7v-1H2v1z m0 2h7v-1H2v1z m0 2h7v-1H2v1z m10-7.5v9.5c0 0.55-0.45 1-1 1H1c-0.55 0-1-0.45-1-1V2c0-0.55 0.45-1 1-1h7.5l3.5 3.5z m-1 0.5L8 2H1v12h10V5z"></path>
</svg></span>
<span class="d2h-file-name">tools/docs/moztreedocs/__init__.py</span>
<span class="d2h-tag d2h-changed d2h-changed-tag">CHANGED</span></span>
</div>
<div class="d2h-files-diff">
<div class="d2h-file-side-diff">
<div class="d2h-code-wrapper">
<table class="d2h-diff-table">
<tbody class="d2h-diff-tbody">
<tr>
<td class="d2h-code-side-linenumber d2h-info"></td>
<td class="d2h-info">
<div class="d2h-code-side-line d2h-info">@@ -3,100 +3,96 @@</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
3
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"># file, # You can obtain one at http:&#x2F;&#x2F;mozilla.org&#x2F;MPL&#x2F;2.0&#x2F;.</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
4
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
5
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">from __future__ import unicode_literals</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
6
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
7
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">import os</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
8
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
9
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">from mozbuild.base import MozbuildObject</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
10
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">from mozbuild.frontend.reader import BuildReader</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
11
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">from mozpack.copier import FileCopier</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
12
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">from mozpack.files import FileFinder</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
13
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">from mozpack.manifests import InstallManifest</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
14
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
15
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">import sphinx</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
16
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">import sphinx.apidoc</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
17
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
18
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">here = os.path.abspath(os.path.dirname(__file__))</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
19
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">build = MozbuildObject.from_environment(cwd=here)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
20
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
21
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">MAIN_DOC_PATH = os.path.join(build.topsrcdir, &#x27;tools&#x27;, &#x27;docs&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
22
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
23
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
24
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">class _SphinxManager(object):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
25
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> &quot;&quot;&quot;Manages the generation of Sphinx documentation for the tree.&quot;&quot;&quot;</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
26
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
27
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> def __init__(self, topsrcdir, main_path):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
28
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> self.topsrcdir = topsrcdir</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
29
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> self.conf_py_path = os.path.join(main_path, &#x27;conf.py&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
30
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> self.index_path = os.path.join(main_path, &#x27;index.rst&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
31
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
32
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> self._trees = {}</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
33
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
34
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> # Instance variables that get set in self.generate_docs()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
35
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> self.staging_dir = None</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
36
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
37
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> def read_build_config(self):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
38
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> &quot;&quot;&quot;Read the active build config and add docs to this instance.&quot;&quot;&quot;</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
39
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> reader = BuildReader()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
40
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> for path, key, value in reader.find_sphinx_variables():</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
41
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> reldir = os.path.dirname(path)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
42
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
43
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> assert key</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
44
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> if key.startswith(&#x27;&#x2F;&#x27;):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
45
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> key = key[1:]</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
46
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> else:</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
47
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> key = os.path.join(reldir, key)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
48
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> self.add_tree(os.path.join(reldir, value), key)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
49
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
50
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> def add_tree(self, source_dir, dest_dir):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
51
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> &quot;&quot;&quot;Add a directory from where docs should be sourced.&quot;&quot;&quot;</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
52
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> if dest_dir in self._trees:</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
53
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> raise Exception(&#x27;%s has already been registered as a destination.&#x27;</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
54
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> % dest_dir)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
55
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
56
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> self._trees[dest_dir] = source_dir</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
57
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
58
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
59
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> def generate_docs(self, app):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
60
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> &quot;&quot;&quot;Generate&#x2F;stage documentation.&quot;&quot;&quot;</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
61
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> self.staging_dir = os.path.join(app.outdir, &#x27;_staging&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
62
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
63
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> app.info(&#x27;Reading Sphinx metadata from build configuration&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
64
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> self.read_build_config()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
65
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> app.info(&#x27;Staging static documentation&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
66
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> self._synchronize_docs()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
67
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> app.info(&#x27;Generating Python API documentation&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
68
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> self._generate_python_api_docs()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
69
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
70
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> def _generate_python_api_docs(self):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
71
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> &quot;&quot;&quot;Generate Python API doc files.&quot;&quot;&quot;</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
72
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> out_dir = os.path.join(self.staging_dir, &#x27;python&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
73
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> base_args = [&#x27;sphinx&#x27;, &#x27;--no-toc&#x27;, &#x27;-o&#x27;, out_dir]</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
74
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
75
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> for p in sorted(self._python_package_dirs):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
76
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> full = os.path.join(self.topsrcdir, p)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
77
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
78
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> finder = FileFinder(full)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
79
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> dirs = {os.path.dirname(f[0]) for f in finder.find(&#x27;**&#x27;)}</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
80
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
81
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> excludes = {d for d in dirs if d.endswith(&#x27;test&#x27;)}</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
82
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
83
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> args = list(base_args)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-info"></td>
<td class="d2h-info">
<div class="d2h-code-side-line d2h-info">@@ -105,36 +101,36 @@ class _SphinxManager(object):</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
105
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
106
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> sphinx.apidoc.main(args)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
107
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
108
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> def _synchronize_docs(self):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
109
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> m = InstallManifest()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
110
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
111
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> m.add_link(self.conf_py_path, &#x27;conf.py&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
112
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
113
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> for dest, source in sorted(self.<del>_trees</del>.items()):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
114
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> source_dir = os.path.join(self.topsrcdir, source)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
115
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> for root, dirs, files in os.walk(source_dir):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
116
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> for f in files:</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
117
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> source_path = os.path.join(root, f)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
118
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> rel_source = source_path[len(source_dir) + 1:]</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
119
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
120
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> m.add_link(source_path, os.path.join(dest, rel_source))</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
121
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
122
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> copier = FileCopier()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
123
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> m.populate_registry(copier)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
124
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> copier.copy(self.staging_dir)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
125
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
126
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> with open(self.index_path, &#x27;rb&#x27;) as fh:</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
127
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> data = fh.read()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
128
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-del">
129
</td>
<td class="d2h-del">
<div class="d2h-code-side-line d2h-del">
<span class="d2h-code-line-prefix">-</span>
<span class="d2h-code-line-ctn"> indexes = [&#x27;%s&#x2F;index&#x27; % p for p in sorted(self.<del>_trees</del>.keys())]</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
130
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> indexes = &#x27;\n &#x27;.join(indexes)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
131
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
132
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> packages = [os.path.basename(p) for p in self._python_package_dirs]</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
133
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> packages = [&#x27;python&#x2F;%s&#x27; % p for p in packages]</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
134
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> packages = &#x27;\n &#x27;.join(sorted(packages))</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
135
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> data = data.format(indexes=indexes, python_packages=packages)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
136
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
137
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> with open(os.path.join(self.staging_dir, &#x27;index.rst&#x27;), &#x27;wb&#x27;) as fh:</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
138
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> fh.write(data)</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="d2h-file-side-diff">
<div class="d2h-code-wrapper">
<table class="d2h-diff-table">
<tbody class="d2h-diff-tbody">
<tr>
<td class="d2h-code-side-linenumber d2h-info"></td>
<td class="d2h-info">
<div class="d2h-code-side-line d2h-info"></div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
3
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"># file, # You can obtain one at http:&#x2F;&#x2F;mozilla.org&#x2F;MPL&#x2F;2.0&#x2F;.</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
4
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
5
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">from __future__ import unicode_literals</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
6
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
7
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">import os</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
8
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
9
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">from mozbuild.base import MozbuildObject</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
10
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">from mozbuild.frontend.reader import BuildReader</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
11
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn">from mozbuild.util import memoize</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
12
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">from mozpack.copier import FileCopier</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
13
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">from mozpack.files import FileFinder</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
14
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">from mozpack.manifests import InstallManifest</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
15
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
16
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">import sphinx</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
17
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">import sphinx.apidoc</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
18
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
19
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">here = os.path.abspath(os.path.dirname(__file__))</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
20
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">build = MozbuildObject.from_environment(cwd=here)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
21
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
22
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">MAIN_DOC_PATH = os.path.join(build.topsrcdir, &#x27;tools&#x27;, &#x27;docs&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
23
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
24
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
25
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn">@memoize</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
26
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn">def read_build_config(docdir):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
27
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> &quot;&quot;&quot;Read the active build config and return the relevant doc paths.</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
28
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
29
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> The return value is cached so re-generating with the same docdir won&#x27;t</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
30
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> invoke the build system a second time.&quot;&quot;&quot;</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
31
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> trees = {}</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
32
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
33
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> reader = BuildReader()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
34
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> for path, key, value in reader.find_sphinx_variables():</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
35
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> reldir = os.path.join(os.path.dirname(path), value)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
36
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
37
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> assert key</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
38
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> if key.startswith(&#x27;&#x2F;&#x27;):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
39
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> key = key[1:]</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
40
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> else:</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
41
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> key = os.path.join(reldir, key)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
42
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
43
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> if key in trees:</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
44
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> raise Exception(&#x27;{} has already been registered as a destination.&#x27;.format(key))</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
45
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> trees[key] = reldir</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
46
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
47
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> return trees</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
48
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
49
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
50
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn">class _SphinxManager(object):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
51
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> &quot;&quot;&quot;Manages the generation of Sphinx documentation for the tree.&quot;&quot;&quot;</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
52
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
53
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> def __init__(self, topsrcdir, main_path):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
54
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> self.topsrcdir = topsrcdir</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
55
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> self.conf_py_path = os.path.join(main_path, &#x27;conf.py&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
56
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> self.index_path = os.path.join(main_path, &#x27;index.rst&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
57
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
58
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> # Instance variables that get set in self.generate_docs()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
59
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> self.staging_dir = None</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
60
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"><ins> self.trees = None</ins></span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
61
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
62
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> def generate_docs(self, app):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
63
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> &quot;&quot;&quot;Generate&#x2F;stage documentation.&quot;&quot;&quot;</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
64
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> self.staging_dir = os.path.join(app.outdir, &#x27;_staging&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
65
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
66
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> app.info(&#x27;Reading Sphinx metadata from build configuration&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
67
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> self.<ins>trees = </ins>read_build_config()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
68
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
69
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> app.info(&#x27;Staging static documentation&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
70
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> self._synchronize_docs()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
71
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> app.info(&#x27;Generating Python API documentation&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
72
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> self._generate_python_api_docs()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
73
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
74
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> def _generate_python_api_docs(self):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
75
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> &quot;&quot;&quot;Generate Python API doc files.&quot;&quot;&quot;</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
76
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> out_dir = os.path.join(self.staging_dir, &#x27;python&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
77
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> base_args = [&#x27;sphinx&#x27;, &#x27;--no-toc&#x27;, &#x27;-o&#x27;, out_dir]</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
78
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
79
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> for p in sorted(self._python_package_dirs):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
80
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> full = os.path.join(self.topsrcdir, p)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
81
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
82
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> finder = FileFinder(full)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
83
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> dirs = {os.path.dirname(f[0]) for f in finder.find(&#x27;**&#x27;)}</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
84
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
85
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> excludes = {d for d in dirs if d.endswith(&#x27;test&#x27;)}</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
86
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
87
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> args = list(base_args)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-info"></td>
<td class="d2h-info">
<div class="d2h-code-side-line d2h-info"></div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
101
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
102
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> sphinx.apidoc.main(args)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
103
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
104
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> def _synchronize_docs(self):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
105
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> m = InstallManifest()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
106
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
107
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> m.add_link(self.conf_py_path, &#x27;conf.py&#x27;)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
108
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
109
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> for dest, source in sorted(self.<ins>trees</ins>.items()):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
110
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> source_dir = os.path.join(self.topsrcdir, source)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
111
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> for root, dirs, files in os.walk(source_dir):</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
112
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> for f in files:</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
113
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> source_path = os.path.join(root, f)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
114
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> rel_source = source_path[len(source_dir) + 1:]</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
115
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
116
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> m.add_link(source_path, os.path.join(dest, rel_source))</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
117
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
118
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> copier = FileCopier()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
119
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> m.populate_registry(copier)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
120
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> copier.copy(self.staging_dir)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
121
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
122
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> with open(self.index_path, &#x27;rb&#x27;) as fh:</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
123
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> data = fh.read()</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
124
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-ins">
125
</td>
<td class="d2h-ins">
<div class="d2h-code-side-line d2h-ins">
<span class="d2h-code-line-prefix">+</span>
<span class="d2h-code-line-ctn"> indexes = [&#x27;%s&#x2F;index&#x27; % p for p in sorted(self.<ins>trees</ins>.keys())]</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
126
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> indexes = &#x27;\n &#x27;.join(indexes)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
127
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
128
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> packages = [os.path.basename(p) for p in self._python_package_dirs]</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
129
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> packages = [&#x27;python&#x2F;%s&#x27; % p for p in packages]</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
130
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> packages = &#x27;\n &#x27;.join(sorted(packages))</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
131
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> data = data.format(indexes=indexes, python_packages=packages)</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
132
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
133
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> with open(os.path.join(self.staging_dir, &#x27;index.rst&#x27;), &#x27;wb&#x27;) as fh:</span>
</div>
</td>
</tr><tr>
<td class="d2h-code-side-linenumber d2h-cntx">
134
</td>
<td class="d2h-cntx">
<div class="d2h-code-side-line d2h-cntx">
<span class="d2h-code-line-prefix"> </span>
<span class="d2h-code-line-ctn"> fh.write(data)</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment