mirror of
				https://github.com/django/django.git
				synced 2025-11-04 05:35:37 +00:00 
			
		
		
		
	git-svn-id: http://code.djangoproject.com/svn/django/trunk@8506 bcc190cf-cafb-0310-a4f2-bffc1f526a37
		
			
				
	
	
		
			88 lines
		
	
	
		
			No EOL
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			No EOL
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Adds xref targets to the top of files."""
 | 
						|
 | 
						|
import sys
 | 
						|
import os
 | 
						|
 | 
						|
testing = False
 | 
						|
 | 
						|
DONT_TOUCH = (
 | 
						|
        './index.txt',
 | 
						|
        )
 | 
						|
 | 
						|
def target_name(fn):
 | 
						|
    if fn.endswith('.txt'):
 | 
						|
        fn = fn[:-4]
 | 
						|
    return '_' + fn.lstrip('./').replace('/', '-')
 | 
						|
 | 
						|
def process_file(fn, lines):
 | 
						|
    lines.insert(0, '\n')
 | 
						|
    lines.insert(0, '.. %s:\n' % target_name(fn))
 | 
						|
    try:
 | 
						|
        f = open(fn, 'w')
 | 
						|
    except IOError:
 | 
						|
        print("Can't open %s for writing. Not touching it." % fn)
 | 
						|
        return
 | 
						|
    try:
 | 
						|
        f.writelines(lines)
 | 
						|
    except IOError:
 | 
						|
        print("Can't write to %s. Not touching it." % fn)
 | 
						|
    finally:
 | 
						|
        f.close()
 | 
						|
 | 
						|
def has_target(fn):
 | 
						|
    try:
 | 
						|
        f = open(fn, 'r')
 | 
						|
    except IOError:
 | 
						|
        print("Can't open %s. Not touching it." % fn)
 | 
						|
        return (True, None)
 | 
						|
    readok = True
 | 
						|
    try:
 | 
						|
        lines = f.readlines()
 | 
						|
    except IOError:
 | 
						|
        print("Can't read %s. Not touching it." % fn)
 | 
						|
        readok = False
 | 
						|
    finally:
 | 
						|
        f.close()
 | 
						|
        if not readok:
 | 
						|
            return (True, None)
 | 
						|
 | 
						|
    #print fn, len(lines)
 | 
						|
    if len(lines) < 1:
 | 
						|
        print("Not touching empty file %s." % fn)
 | 
						|
        return (True, None)
 | 
						|
    if lines[0].startswith('.. _'):
 | 
						|
        return (True, None)
 | 
						|
    return (False, lines)
 | 
						|
 | 
						|
def main(argv=None):
 | 
						|
    if argv is None:
 | 
						|
        argv = sys.argv
 | 
						|
 | 
						|
    if len(argv) == 1:
 | 
						|
        argv.extend('.')
 | 
						|
 | 
						|
    files = []
 | 
						|
    for root in argv[1:]:
 | 
						|
        for (dirpath, dirnames, filenames) in os.walk(root):
 | 
						|
            files.extend([(dirpath, f) for f in filenames])
 | 
						|
    files.sort()
 | 
						|
    files = [os.path.join(p, fn) for p, fn in files if fn.endswith('.txt')]
 | 
						|
    #print files
 | 
						|
 | 
						|
    for fn in files:
 | 
						|
        if fn in DONT_TOUCH:
 | 
						|
            print("Skipping blacklisted file %s." % fn)
 | 
						|
            continue
 | 
						|
 | 
						|
        target_found, lines = has_target(fn)
 | 
						|
        if not target_found:
 | 
						|
            if testing:
 | 
						|
                print '%s: %s' % (fn, lines[0]),
 | 
						|
            else:
 | 
						|
                print "Adding xref to %s" % fn
 | 
						|
                process_file(fn, lines)
 | 
						|
        else:
 | 
						|
            print "Skipping %s: already has a xref" % fn
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    sys.exit(main()) |