दो विकल्प मैं के बारे में सोच सकते हैं:
- दूरस्थ परियोजना (जो आप पहले से ही के बारे में पता) के लिए एक
svn:externals
लिंक जोड़ें।
- रिमोट सबवर्जन रिपॉजिटरीज़ से फ़ाइलों को शामिल करने के लिए कस्टम निर्देश के साथ स्फिंक्स बढ़ाएं।
मैं स्फिंक्स आंतरिक पर कोई विशेषज्ञ नहीं हूं लेकिन एक त्वरित विस्तार को एक साथ जोड़ने में सक्षम था जो रिमोट सबवर्जन रिपोजिटरी से फ़ाइलों को एम्बेड करता है।
एक्सटेंशन svninclude
निर्देश जोड़ता है जो 1 तर्क लेता है, भंडार का यूआरएल जहां आपके दस्तावेज़ स्थित हैं। यह प्रोजेक्ट रूट में स्थित एक अस्थायी निर्देशिका _svncache
में इस भंडार को जांचता है, और उसके बाद प्रत्येक फ़ाइल की सामग्री को पढ़ने और पार्सर की स्थिति मशीन में डालने के लिए आगे बढ़ता है।
यहां svninclude.py
एक्सटेंशन के लिए कोड है। यह अतिसंवेदनशील है और इस समय जांच में कोई त्रुटि नहीं है। इस मुझे पता है आप को लागू करने की योजना है और यदि आप अटक मैं कुछ अतिरिक्त युक्तियाँ प्रदान कर सकते हैं:
import os, re, subprocess, sys
from docutils import nodes, statemachine
from docutils.parsers.rst import directives
from sphinx.util.compat import Directive, directive_dwim
class SvnInclude(Directive):
has_content = True
required_arguments = 1
optional_arguments = 0
final_argument_whitespace = False
def _setup_repo(self, repo):
env = self.state.document.settings.env
path = os.path.normpath(env.doc2path(env.docname, base=None))
cache = os.path.join(os.path.dirname(path), '_svncache')
root = os.path.join(cache, re.sub('[\W\-]+', '_', repo))
if not os.path.exists(root):
os.makedirs(root)
subprocess.call(['svn', 'co', repo, root])
return root
def run(self):
root = self._setup_repo(self.arguments[0])
for path in self.content:
data = open(os.path.join(root, path), 'rb').read()
lines = statemachine.string2lines(data)
self.state_machine.insert_input(lines, path)
return []
def setup(app):
app.add_directive('svninclude', directive_dwim(SvnInclude))
यहाँ मार्कअप का उदाहरण आप अपने index.rst
(या अन्य फ़ाइल) में शामिल होता है:
.. svninclude:: http://svn.domain.com/svn/project
one.rst
doc/two.rst
जहां पथ one.rst
और doc/two.rst
उपवर्तन यूआरएल के सापेक्ष हैं, उदाहरण के लिए http://svn.domain.com/svn/project/one.rst
।
आप निश्चित रूप से svninclude.py
को पैकेज करना चाहते हैं और इसे अपने पायथन पथ में स्थापित करना चाहते हैं। यहां बताया गया है कि मैं यह परीक्षण करने के लिए किया था है:
- जोड़ा गया
'svninclude'
source/conf.py
में extensions
सूची में।
- प्रोजेक्ट रूट में
svninclude.py
रखा गया।
फिर भाग गया:
% PYTHONPATH=. sphinx-build -b html ./source ./build
+1 अच्छा कोडिंग के लिए! लेकिन svn: बाहरी शायद यहां सबसे सरल है। इसके बारे में सोचते हुए, एक और पोर्टेबल मध्य-जमीन केवल http के माध्यम से डेटा लाने के लिए होगी, तो आप इसे गिट/एचजी/सीवी/अपाचे/व्हाट्नॉट के साथ सेवा कर सकते हैं। :) – Macke
धन्यवाद - हाँ, एक्सटेंशन को दूरस्थ HTTP सर्वर से फ़ाइलों को डाउनलोड/एम्बेड करने के लिए आसानी से संशोधित किया जा सकता है ('svn co' के बजाय)। – samplebias