diff --git a/config/dpkg/changelog b/config/dpkg/changelog index 2d94186799..cb91bc4089 100644 --- a/config/dpkg/changelog +++ b/config/dpkg/changelog @@ -2,4 +2,4 @@ python-plaso (1.2.1-1) unstable; urgency=low * Auto-generated - -- Log2Timeline Wed, 03 Jun 2015 13:12:18 -0700 + -- Log2Timeline Wed, 03 Jun 2015 22:22:10 +0200 diff --git a/docs/conf.py b/docs/conf.py index b187e4b8a4..890b1d859d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -13,6 +13,7 @@ # # Valid options are documented at http://sphinx-doc.org/config.html. +from __future__ import print_function import os import sys import time @@ -92,9 +93,9 @@ def __add__(self, other): PIP_INSTALLED_MODULES = set( [u'google.protobuf', u'six', u'pyparsing', u'construct']) modules_to_mock = set(modules_to_mock).difference(PIP_INSTALLED_MODULES) -print u'Mocking modules' +print(u'Mocking modules') for module_name in modules_to_mock: - print module_name + print(module_name) sys.modules.update((module_name, Mock()) for module_name in modules_to_mock) diff --git a/plaso/frontend/psort.py b/plaso/frontend/psort.py index 4fef192c3a..33d9219e81 100644 --- a/plaso/frontend/psort.py +++ b/plaso/frontend/psort.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- """The psort front-end.""" +from __future__ import print_function import collections import multiprocessing import logging @@ -564,7 +565,8 @@ def _ConsumeItem(self, analysis_report, **unused_kwargs): report_string = analysis_report.GetString() try: - print report_string.encode(self._preferred_encoding) + # TODO: move this print to the psort tool or equivalent. + print(report_string.encode(self._preferred_encoding)) except UnicodeDecodeError: logging.error( u'Unable to print report due to an unicode decode error. ' diff --git a/plaso/lib/objectfilter.py b/plaso/lib/objectfilter.py index a114a44f31..9ce07f7c63 100644 --- a/plaso/lib/objectfilter.py +++ b/plaso/lib/objectfilter.py @@ -40,7 +40,7 @@ def __init__(self, code, color="white", doors=3): for car in fleet: if compiled_filter.Matches(car): - print "Car %s matches the supplied filter." % car.code + print("Car %s matches the supplied filter." % car.code) The filter expression contains two subexpressions joined by an AND operator: "color is grey" and "doors >= 3" diff --git a/plaso/lib/objectfilter_test.py b/plaso/lib/objectfilter_test.py index ddfb50bfa9..0d50df6c9d 100644 --- a/plaso/lib/objectfilter_test.py +++ b/plaso/lib/objectfilter_test.py @@ -173,17 +173,12 @@ def setUp(self): def testBinaryOperators(self): for operator, test_data in self.operator_tests.items(): for test_unit in test_data: - # TODO: why is there a print statement here? - print (u'Testing {0:s} with {1!s} and {2!s}'.format( - operator, test_unit[0], test_unit[1])) kwargs = {'arguments': test_unit[1], 'value_expander': self.value_expander} ops = operator(**kwargs) self.assertEqual(test_unit[0], ops.Matches(self.file)) if hasattr(ops, 'FlipBool'): ops.FlipBool() - # TODO: why is there a print statement here? - print u'Testing negative matching.' self.assertEqual(not test_unit[0], ops.Matches(self.file)) def testExpand(self): diff --git a/setup.py b/setup.py index ece9d58e97..c85b67e366 100755 --- a/setup.py +++ b/setup.py @@ -6,6 +6,7 @@ sudo python setup.py install """ +from __future__ import print_function import glob import locale import os @@ -27,8 +28,8 @@ version_tuple = (sys.version_info[0], sys.version_info[1]) if version_tuple < (2, 7) or version_tuple >= (3, 0): - print (u'Unsupported Python version: {0:s}, version 2.7 or higher and ' - u'lower than 3.x required.').format(sys.version) + print((u'Unsupported Python version: {0:s}, version 2.7 or higher and ' + u'lower than 3.x required.').format(sys.version)) sys.exit(1) diff --git a/utils/check_dependencies.py b/utils/check_dependencies.py index fe544223d7..497b749ca7 100755 --- a/utils/check_dependencies.py +++ b/utils/check_dependencies.py @@ -2,6 +2,7 @@ # -*- coding: utf-8 -*- """Script to check for the availability and version of dependencies.""" +from __future__ import print_function import sys # Change PYTHONPATH to include plaso. @@ -16,5 +17,5 @@ u'https://sites.google.com/a/kiddaland.net/plaso/developer' u'/building-the-tool') - print u'See: {0:s} on how to set up plaso.'.format(build_instructions_url) - print u'' + print(u'See: {0:s} on how to set up plaso.'.format(build_instructions_url)) + print(u'') diff --git a/utils/create_authors.py b/utils/create_authors.py index 05ddc9e4e2..b1623226f7 100644 --- a/utils/create_authors.py +++ b/utils/create_authors.py @@ -2,8 +2,9 @@ # -*- coding: utf-8 -*- """This file simply creates the AUTHOR file based on parser content.""" -import os +from __future__ import print_function import fnmatch +import os def ProcessFile(file_path): @@ -63,4 +64,4 @@ def ProcessFile(file_path): out_file.write('\n'.join(authors)) out_file.write('\n') - print 'Added {0:d} authors from files.'.format(len(authors)) + print(u'Added {0:d} authors from files.'.format(len(authors))) diff --git a/utils/download_patch_set.py b/utils/download_patch_set.py deleted file mode 100644 index 7def82e234..0000000000 --- a/utils/download_patch_set.py +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -"""This file contains a simple utility to fetch content of code reviews.""" -import os -import json -import urllib2 -import sys -import subprocess -import tempfile - - -def DownloadPatchSet(cl_number): - """Returns the name of the patch file for a given CL. - - Args: - cl_number: The CL number for the code review. - - Returns: - The name fo the patch file, or a None if unable to download - the patch. - """ - try: - test_cl = int(cl_number) - if cl_number != str(test_cl): - return - except ValueError: - return - - url = 'https://codereview.appspot.com/api/{0}/'.format(cl_number) - url_object = urllib2.urlopen(url) - - if url_object.code != 200: - return - - data = url_object.read() - - try: - data_obj = json.loads(data) - except ValueError: - return - - patches = data_obj.get('patchsets', []) - last_patch = patches.pop() - - patch_url = 'https://codereview.appspot.com/download/issue{}_{}.diff'.format( - cl_number, last_patch) - - patch_object = urllib2.urlopen(patch_url) - if patch_object.code != 200: - return - - patch_data = patch_object.read() - patch_file_name = '' - with tempfile.NamedTemporaryFile(delete=False) as patch_file_object: - patch_file_object.write(patch_data) - patch_file_name = patch_file_object.name - - return patch_file_name - - -if __name__ == '__main__': - if len(sys.argv) != 2: - print 'Need to provide a CL number.' - sys.exit(1) - - code_review_number = sys.argv[1] - patch_file = DownloadPatchSet(code_review_number) - - if not patch_file: - print 'Unable to download a patch set, exiting.' - sys.exit(1) - - branch_name = 'review_{}'.format(code_review_number) - branch_exit = os.system('git checkout -b {}'.format(branch_name)) - if branch_exit: - print 'Unable to create a new branch, exiting.' - sys.exit(1) - - patch_exit = os.system('patch -p1 < {}'.format(patch_file)) - if patch_exit: - print 'Unable to patch files.' - sys.exit(1) - - git_add = subprocess.Popen( - 'git status -s', shell=True, stdout=subprocess.PIPE) - git_to_add = [] - for git_line in git_add.stdout: - if git_line.startswith('??'): - git_to_add.append(git_line[3:-1]) - - os.system('git add -A') - print 'Files added to git branch' - os.system('git commit -a "Committing CL to branch"') - - os.remove(patch_file) - - print 'Patch downloaded and applied, branch {} created.'.format( - branch_name) - print 'Remember to delete branch when done testing/inspecting.' - print 'git checkout master && git branch -D {}'.format(branch_name) - diff --git a/utils/doxygen.conf b/utils/doxygen.conf deleted file mode 100644 index e1caf6e2fc..0000000000 --- a/utils/doxygen.conf +++ /dev/null @@ -1,1781 +0,0 @@ -# Doxyfile 1.7.6.1 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" "). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or sequence of words) that should -# identify the project. Note that if you do not use Doxywizard you need -# to put quotes around the project name if it contains spaces. - -PROJECT_NAME = "Plaso - SuperTimeline at it's best." - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 1.0.2 - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer -# a quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = "Generate and analyse a super timeline." - -# With the PROJECT_LOGO tag one can specify an logo or icon that is -# included in the documentation. The maximum height of the logo should not -# exceed 55 pixels and the maximum width should not exceed 200 pixels. -# Doxygen will copy the logo to the output directory. - -PROJECT_LOGO = "config/logo.jpg" - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = "doc" - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful if your file system -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = YES - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = YES - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding -# "class=itcl::class" will allow you to use the command class in the -# itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = YES - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this -# tag. The format is ext=language, where ext is a file extension, and language -# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, -# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions -# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also makes the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and -# unions are shown inside the group in which they are included (e.g. using -# @ingroup) instead of on a separate page (for HTML and Man pages) or -# section (for LaTeX and RTF). - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and -# unions with only public data fields will be shown inline in the documentation -# of the scope in which they are defined (i.e. file, namespace, or group -# documentation), provided this scope is documented. If set to NO (the default), -# structs, classes, and unions are shown on a separate page (for HTML and Man -# pages) or section (for LaTeX and RTF). - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penalty. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will roughly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols. - -SYMBOL_CACHE_SIZE = 0 - -# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be -# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given -# their name and scope. Since this can be an expensive process and often the -# same symbol appear multiple times in the code, doxygen keeps a cache of -# pre-resolved symbols. If the cache is too small doxygen will become slower. -# If the cache is too large, memory is wasted. The cache size is given by this -# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespaces are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to -# do proper type resolution of all parameters of a function it will reject a -# match between the prototype and the implementation of a member function even -# if there is only one candidate or it is obvious which candidate to choose -# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen -# will still accept a match between prototype and implementation in such cases. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or macro consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and macros in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. -# This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. The create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. -# You can optionally specify a file name after the option, if omitted -# DoxygenLayout.xml will be used as the name of the layout file. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files -# containing the references data. This must be a list of .bib files. The -# .bib extension is automatically appended if omitted. Using this command -# requires the bibtex tool to be installed. See also -# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style -# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this -# feature you need bibtex and perl available in the search path. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_NO_PARAMDOC option can be enabled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = "plaso" - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh -# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py -# *.f90 *.f *.for *.vhd *.vhdl - -FILE_PATTERNS = "*.py" - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = YES - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = "*_test.py" - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. -# If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = "python /usr/bin/doxypy" - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. -# Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. -# The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty or if -# non of the patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = YES - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) -# and it is also possible to disable source filtering for a specific pattern -# using *.ext= (so without naming a filter). This option only has effect when -# FILTER_SOURCE_FILES is enabled. - -FILTER_SOURCE_PATTERNS = - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. -# Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 8 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. Note that when using a custom header you are responsible -# for the proper inclusion of any scripts and style sheets that doxygen -# needs, which is dependent on the configuration options used. -# It is advised to generate a default header using "doxygen -w html -# header.html footer.html stylesheet.css YourConfigFile" and then modify -# that header. Note that the header is subject to change so you typically -# have to redo this when upgrading to a newer version of doxygen or when -# changing the value of configuration settings such as GENERATE_TREEVIEW! - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# style sheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that -# the files will be copied as-is; there are no commands or markers available. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. -# Doxygen will adjust the colors in the style sheet and background images -# according to this color. Hue is specified as an angle on a colorwheel, -# see http://en.wikipedia.org/wiki/Hue for more information. -# For instance the value 0 represents red, 60 is yellow, 120 is green, -# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. -# The allowed range is 0 to 359. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of -# the colors in the HTML output. For a value of 0 the output will use -# grayscales only. A value of 255 will produce the most vivid colors. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to -# the luminance component of the colors in the HTML output. Values below -# 100 gradually make the output lighter, whereas values above 100 make -# the output darker. The value divided by 100 is the actual gamma applied, -# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, -# and 100 does not change the gamma. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = NO - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = YES - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -# that can be used as input for Qt's qhelpgenerator to generate a -# Qt Compressed Help (.qch) of the generated HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -# add. For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see -# -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) -# at top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. Since the tabs have the same information as the -# navigation tree you can set this option to NO if you already set -# GENERATE_TREEVIEW to YES. - -DISABLE_INDEX = YES - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. -# Since the tree basically has the same information as the tab index you -# could consider to set DISABLE_INDEX to NO when enabling this option. - -GENERATE_TREEVIEW = YES - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values -# (range [0,1..20]) that doxygen will group on one line in the generated HTML -# documentation. Note that a value of 0 will completely suppress the enum -# values from appearing in the overview section. - -ENUM_VALUES_PER_LINE = 4 - -# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list. - -USE_INLINE_TREES = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -# links to external symbols imported via tag files in a separate window. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are -# not supported properly for IE 6.0, but are supported on all modern browsers. -# Note that when changing this option you need to delete any form_*.png files -# in the HTML output before the changes have effect. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax -# (see http://www.mathjax.org) which uses client side Javascript for the -# rendering instead of using prerendered bitmaps. Use this if you do not -# have LaTeX installed or if you want to formulas look prettier in the HTML -# output. When enabled you also need to install MathJax separately and -# configure the path to it using the MATHJAX_RELPATH option. - -USE_MATHJAX = NO - -# When MathJax is enabled you need to specify the location relative to the -# HTML output directory using the MATHJAX_RELPATH option. The destination -# directory should contain the MathJax.js script. For instance, if the mathjax -# directory is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the -# mathjax.org site, so you can quickly see the result without installing -# MathJax, but it is strongly recommended to install a local copy of MathJax -# before deployment. - -MATHJAX_RELPATH = http://www.mathjax.org/mathjax - -# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension -# names that should be enabled during MathJax rendering. - -MATHJAX_EXTENSIONS = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = YES - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a PHP enabled web server instead of at the web client -# using Javascript. Doxygen will generate the search PHP script and index -# file to put on the web server. The advantage of the server -# based approach is that it scales better to large projects and allows -# full text search. The disadvantages are that it is more difficult to setup -# and does not have live searching capabilities. - -SERVER_BASED_SEARCH = NO - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4 - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for -# the generated latex document. The footer should contain everything after -# the last chapter. If it is left blank doxygen will generate a -# standard footer. Notice: only use this tag if you know what you are doing! - -LATEX_FOOTER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -# The LATEX_BIB_STYLE tag can be used to specify the style to use for the -# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See -# http://en.wikipedia.org/wiki/BibTeX for more info. - -LATEX_BIB_STYLE = plain - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load style sheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. -# This is useful -# if you want to understand what is going on. -# On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# pointed to by INCLUDE_PATH will be searched when a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition that -# overrules the definition found in the source code. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all references to function-like macros -# that are alone on a line, have an all uppercase name, and do not end with a -# semicolon, because these will confuse the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option also works with HAVE_DOT disabled, but it is recommended to -# install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = NO - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is -# allowed to run in parallel. When set to 0 (the default) doxygen will -# base this on the number of processors available in the system. You can set it -# explicitly to a value larger than 0 to get control over the balance -# between CPU load and processing speed. - -DOT_NUM_THREADS = 0 - -# By default doxygen will use the Helvetica font for all dot files that -# doxygen generates. When you want a differently looking font you can specify -# the font name using DOT_FONTNAME. You need to make sure dot is able to find -# the font, which can be done by putting it in a standard location or by setting -# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the -# directory containing the font. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the Helvetica font. -# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to -# set the path where dot can find it. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will generate a graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are svg, png, jpg, or gif. -# If left blank png will be used. If you choose svg you need to set -# HTML_FILE_EXTENSION to xhtml in order to make the SVG files -# visible in IE 9+ (other browsers do not have this requirement). - -DOT_IMAGE_FORMAT = png - -# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to -# enable generation of interactive SVG images that allow zooming and panning. -# Note that this requires a modern browser other than Internet Explorer. -# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you -# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files -# visible. Older versions of IE do not have SVG support. - -INTERACTIVE_SVG = NO - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the -# \mscfile command). - -MSCFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = YES - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES diff --git a/utils/git-cl b/utils/git-cl deleted file mode 100755 index b7e431c5f0..0000000000 --- a/utils/git-cl +++ /dev/null @@ -1,871 +0,0 @@ -#!/usr/bin/python -# git-cl -- a git-command for integrating reviews on Rietveld -# Copyright (C) 2008 Evan Martin - -import getpass -import optparse -import os -import re -import readline -import subprocess -import sys -import tempfile -import textwrap -import upload -import urllib2 - -try: - import readline -except ImportError: - pass - -DEFAULT_SERVER = 'codereview.appspot.com' -PREDCOMMIT_HOOK = '.git/hooks/pre-cl-dcommit' -PREUPLOAD_HOOK = '.git/hooks/pre-cl-upload' - -def DieWithError(message): - print >>sys.stderr, message - sys.exit(1) - - -def RunCommand(cmd, error_ok=False, error_message=None, exit_code=False, - redirect_stdout=True): - # Useful for debugging: - # print >>sys.stderr, ' '.join(cmd) - if redirect_stdout: - stdout = subprocess.PIPE - else: - stdout = None - proc = subprocess.Popen(cmd, stdout=stdout) - output = proc.communicate()[0] - if exit_code: - return proc.returncode - if not error_ok and proc.returncode != 0: - DieWithError('Command "%s" failed.\n' % (' '.join(cmd)) + - (error_message or output)) - return output - - -def RunGit(args, **kwargs): - cmd = ['git'] + args - return RunCommand(cmd, **kwargs) - - -class Settings: - def __init__(self): - self.server = None - self.cc = None - self.root = None - self.is_git_svn = None - self.svn_branch = None - self.tree_status_url = None - self.viewvc_url = None - - def GetServer(self, error_ok=False): - if not self.server: - if not error_ok: - error_message = ('You must configure your review setup by running ' - '"git cl config".') - self.server = self._GetConfig('rietveld.server', - error_message=error_message) - else: - self.server = self._GetConfig('rietveld.server', error_ok=True) - return self.server - - def GetCCList(self): - if self.cc is None: - self.cc = self._GetConfig('rietveld.cc', error_ok=True) - return self.cc - - def GetRoot(self): - if not self.root: - self.root = os.path.abspath(RunGit(['rev-parse', '--show-cdup']).strip()) - return self.root - - def GetIsGitSvn(self): - """Return true if this repo looks like it's using git-svn.""" - if self.is_git_svn is None: - # If you have any "svn-remote.*" config keys, we think you're using svn. - self.is_git_svn = RunGit(['config', '--get-regexp', r'^svn-remote\.'], - exit_code=True) == 0 - return self.is_git_svn - - def GetSVNBranch(self): - if self.svn_branch is None: - if not self.GetIsGitSvn(): - raise "Repo doesn't appear to be a git-svn repo." - - # Try to figure out which remote branch we're based on. - # Strategy: - # 1) find all git-svn branches and note their svn URLs. - # 2) iterate through our branch history and match up the URLs. - - # regexp matching the git-svn line that contains the URL. - git_svn_re = re.compile(r'^\s*git-svn-id: (\S+)@', re.MULTILINE) - - # Get the refname and svn url for all refs/remotes/*. - remotes = RunGit(['for-each-ref', '--format=%(refname)', - 'refs/remotes']).splitlines() - svn_refs = {} - for ref in remotes: - match = git_svn_re.search(RunGit(['cat-file', '-p', ref])) - if match: - svn_refs[match.group(1)] = ref - - if len(svn_refs) == 1: - # Only one svn branch exists -- seems like a good candidate. - self.svn_branch = svn_refs.values()[0] - elif len(svn_refs) > 1: - # We have more than one remote branch available. We don't - # want to go through all of history, so read a line from the - # pipe at a time. - # The -100 is an arbitrary limit so we don't search forever. - cmd = ['git', 'log', '-100', '--pretty=medium'] - proc = subprocess.Popen(cmd, stdout=subprocess.PIPE) - for line in proc.stdout: - match = git_svn_re.match(line) - if match: - url = match.group(1) - if url in svn_refs: - self.svn_branch = svn_refs[url] - proc.stdout.close() # Cut pipe. - break - - if not self.svn_branch: - raise "Can't guess svn branch -- try specifying it on the command line" - - return self.svn_branch - - def GetTreeStatusUrl(self, error_ok=False): - if not self.tree_status_url: - error_message = ('You must configure your tree status URL by running ' - '"git cl config".') - self.tree_status_url = self._GetConfig('rietveld.tree-status-url', - error_ok=error_ok, - error_message=error_message) - return self.tree_status_url - - def GetViewVCUrl(self): - if not self.viewvc_url: - self.viewvc_url = self._GetConfig('rietveld.viewvc-url', error_ok=True) - return self.viewvc_url - - def _GetConfig(self, param, **kwargs): - return RunGit(['config', param], **kwargs).strip() - - -settings = Settings() - - -did_migrate_check = False -def CheckForMigration(): - """Migrate from the old issue format, if found. - - We used to store the branch<->issue mapping in a file in .git, but it's - better to store it in the .git/config, since deleting a branch deletes that - branch's entry there. - """ - - # Don't run more than once. - global did_migrate_check - if did_migrate_check: - return - - gitdir = RunGit(['rev-parse', '--git-dir']).strip() - storepath = os.path.join(gitdir, 'cl-mapping') - if os.path.exists(storepath): - print "old-style git-cl mapping file (%s) found; migrating." % storepath - store = open(storepath, 'r') - for line in store: - branch, issue = line.strip().split() - RunGit(['config', 'branch.%s.rietveldissue' % ShortBranchName(branch), - issue]) - store.close() - os.remove(storepath) - did_migrate_check = True - - -def IssueURL(issue): - """Get the URL for a particular issue.""" - return 'http://%s/%s' % (settings.GetServer(), issue) - - -def ShortBranchName(branch): - """Convert a name like 'refs/heads/foo' to just 'foo'.""" - return branch.replace('refs/heads/', '') - - -class Changelist: - def __init__(self, branchref=None): - # Poke settings so we get the "configure your server" message if necessary. - settings.GetServer() - self.branchref = branchref - if self.branchref: - self.branch = ShortBranchName(self.branchref) - else: - self.branch = None - self.upstream_branch = None - self.has_issue = False - self.issue = None - self.has_description = False - self.description = None - - def GetBranch(self): - """Returns the short branch name, e.g. 'master'.""" - if not self.branch: - self.branchref = RunGit(['symbolic-ref', 'HEAD']).strip() - self.branch = ShortBranchName(self.branchref) - return self.branch - def GetBranchRef(self): - """Returns the full branch name, e.g. 'refs/heads/master'.""" - self.GetBranch() # Poke the lazy loader. - return self.branchref - - def GetUpstreamBranch(self): - if self.upstream_branch is None: - branch = self.GetBranch() - upstream_branch = RunGit(['config', 'branch.%s.merge' % branch], - error_ok=True).strip() - if upstream_branch: - remote = RunGit(['config', 'branch.%s.remote' % branch]).strip() - # We have remote=origin and branch=refs/heads/foobar; convert to - # refs/remotes/origin/foobar. - self.upstream_branch = upstream_branch.replace('heads', - 'remotes/' + remote) - - if not self.upstream_branch: - # Fall back on trying a git-svn upstream branch. - if settings.GetIsGitSvn(): - self.upstream_branch = settings.GetSVNBranch() - - if not self.upstream_branch: - DieWithError("""Unable to determine default branch to diff against. -Either pass complete "git diff"-style arguments, like - git cl upload origin/master -or verify this branch is set up to track another (via the --track argument to -"git checkout -b ...").""") - - return self.upstream_branch - - def GetIssue(self): - if not self.has_issue: - CheckForMigration() - issue = RunGit(['config', self._IssueSetting()], error_ok=True).strip() - if issue: - self.issue = issue - else: - self.issue = None - self.has_issue = True - return self.issue - - def GetIssueURL(self): - return IssueURL(self.GetIssue()) - - def GetDescription(self, pretty=False): - if not self.has_description: - if self.GetIssue(): - url = self.GetIssueURL() + '/description' - self.description = urllib2.urlopen(url).read().strip() - self.has_description = True - if pretty: - wrapper = textwrap.TextWrapper() - wrapper.initial_indent = wrapper.subsequent_indent = ' ' - return wrapper.fill(self.description) - return self.description - - def GetPatchset(self): - if not self.has_patchset: - patchset = RunGit(['config', self._PatchsetSetting()], - error_ok=True).strip() - if patchset: - self.patchset = patchset - else: - self.patchset = None - self.has_patchset = True - return self.patchset - - def SetPatchset(self, patchset): - """Set this branch's patchset. If patchset=0, clears the patchset.""" - if patchset: - RunGit(['config', self._PatchsetSetting(), str(patchset)]) - else: - RunGit(['config', '--unset', self._PatchsetSetting()]) - self.has_patchset = False - - def SetIssue(self, issue): - """Set this branch's issue. If issue=0, clears the issue.""" - if issue: - RunGit(['config', self._IssueSetting(), str(issue)]) - else: - RunGit(['config', '--unset', self._IssueSetting()]) - self.SetPatchset(0) - self.has_issue = False - - def CloseIssue(self): - def GetUserCredentials(): - email = raw_input('Email: ').strip() - password = getpass.getpass('Password for %s: ' % email) - return email, password - - rpc_server = upload.HttpRpcServer(settings.GetServer(), - GetUserCredentials, - host_override=settings.GetServer(), - save_cookies=True) - # You cannot close an issue with a GET. - # We pass an empty string for the data so it is a POST rather than a GET. - data = [("description", self.description),] - ctype, body = upload.EncodeMultipartFormData(data, []) - rpc_server.Send('/' + self.GetIssue() + '/close', body, ctype) - - def _IssueSetting(self): - """Return the git setting that stores this change's issue.""" - return 'branch.%s.rietveldissue' % self.GetBranch() - - def _PatchsetSetting(self): - """Return the git setting that stores this change's most recent patchset.""" - return 'branch.%s.rietveldpatchset' % self.GetBranch() - - -def GetCodereviewSettingsInteractively(): - """Prompt the user for settings.""" - server = settings.GetServer(error_ok=True) - prompt = 'Rietveld server (host[:port])' - prompt += ' [%s]' % (server or DEFAULT_SERVER) - newserver = raw_input(prompt + ': ') - if not server and not newserver: - newserver = DEFAULT_SERVER - if newserver and newserver != server: - RunGit(['config', 'rietveld.server', newserver]) - - def SetProperty(initial, caption, name): - prompt = caption - if initial: - prompt += ' ("x" to clear) [%s]' % initial - new_val = raw_input(prompt + ': ') - if new_val == 'x': - RunGit(['config', '--unset-all', 'rietveld.' + name], error_ok=True) - elif new_val and new_val != initial: - RunGit(['config', 'rietveld.' + name, new_val]) - - SetProperty(settings.GetCCList(), 'CC list', 'cc') - SetProperty(settings.GetTreeStatusUrl(error_ok=True), 'Tree status URL', - 'tree-status-url') - SetProperty(settings.GetViewVCUrl(), 'ViewVC URL', 'viewvc-url') - - # TODO: configure a default branch to diff against, rather than this - # svn-based hackery. - - -def LoadCodereviewSettingsFromFile(file): - """Parse a codereview.settings file.""" - settings = {} - for line in file.read().splitlines(): - if not line or line.startswith("#"): - continue - k, v = line.split(": ", 1) - settings[k] = v - - def GetProperty(name): - return settings.get(name) - - def SetProperty(name, setting, unset_error_ok=False): - fullname = 'rietveld.' + name - if setting in settings: - RunGit(['config', fullname, settings[setting]]) - else: - RunGit(['config', '--unset-all', fullname], error_ok=unset_error_ok) - - SetProperty('server', 'CODE_REVIEW_SERVER') - # Only server setting is required. Other settings can be absent. - # In that case, we ignore errors raised during option deletion attempt. - SetProperty('cc', 'CC_LIST', unset_error_ok=True) - SetProperty('tree-status-url', 'STATUS', unset_error_ok=True) - SetProperty('viewvc-url', 'VIEW_VC', unset_error_ok=True) - hooks = {} - if GetProperty('GITCL_PREUPLOAD'): - hooks['preupload'] = GetProperty('GITCL_PREUPLOAD') - if GetProperty('GITCL_PREDCOMMIT'): - hooks['predcommit'] = GetProperty('GITCL_PREDCOMMIT') - return hooks - - -def CmdConfig(args): - def DownloadToFile(url, filename): - filename = os.path.join(settings.GetRoot(), filename) - if os.path.exists(filename): - print '%s exists, skipping' % filename - return False - contents = urllib2.urlopen(url).read() - file = open(filename, 'w') - file.write(contents) - file.close() - os.chmod(filename, 0755) - return True - - parser = optparse.OptionParser( - usage='git cl config [repo root containing codereview.settings]') - (options, args) = parser.parse_args(args) - if len(args) == 0: - GetCodereviewSettingsInteractively() - return - - url = args[0] - if not url.endswith('codereview.settings'): - url = os.path.join(url, 'codereview.settings') - - # Load Codereview settings and download hooks (if available). - hooks = LoadCodereviewSettingsFromFile(urllib2.urlopen(url)) - for key, filename in (('predcommit', PREDCOMMIT_HOOK), - ('preupload', PREUPLOAD_HOOK)): - if key in hooks: - DownloadToFile(hooks[key], filename) - - -def CmdStatus(args): - parser = optparse.OptionParser(usage='git cl status [options]') - parser.add_option('--field', help='print only specific field (desc|id|url)') - (options, args) = parser.parse_args(args) - - # TODO: maybe make show_branches a flag if necessary. - show_branches = not options.field - - if show_branches: - branches = RunGit(['for-each-ref', '--format=%(refname)', 'refs/heads']) - if branches: - print 'Branches associated with reviews:' - for branch in sorted(branches.splitlines()): - cl = Changelist(branchref=branch) - print " %10s: %s" % (cl.GetBranch(), cl.GetIssue()) - - cl = Changelist() - if options.field: - if options.field.startswith('desc'): - print cl.GetDescription() - elif options.field == 'id': - print cl.GetIssue() - elif options.field == 'url': - print cl.GetIssueURL() - else: - print - print 'Current branch:', - if not cl.GetIssue(): - print 'no issue assigned.' - return 0 - print cl.GetBranch() - print 'Issue number:', cl.GetIssue(), '(%s)' % cl.GetIssueURL() - print 'Issue description:' - print cl.GetDescription(pretty=True) - - -def CmdIssue(args): - parser = optparse.OptionParser(usage='git cl issue [issue_number]') - parser.description = ('Set or display the current code review issue. ' + - 'Pass issue number 0 to clear the current issue.') - (options, args) = parser.parse_args(args) - - cl = Changelist() - if len(args) > 0: - cl.SetIssue(int(args[0])) - print 'Issue number:', cl.GetIssue(), '(%s)' % cl.GetIssueURL() - - -def UserEditedLog(starting_text): - """Given some starting text, let the user edit it and return the result.""" - editor = os.getenv('EDITOR', 'vi') - - (file_handle, filename) = tempfile.mkstemp() - file = os.fdopen(file_handle, 'w') - file.write(starting_text) - file.close() - - ret = subprocess.call(editor + ' ' + filename, shell=True) - if ret != 0: - os.remove(filename) - return - - file = open(filename) - text = file.read() - file.close() - os.remove(filename) - stripcomment_re = re.compile(r'^#.*$', re.MULTILINE) - return stripcomment_re.sub('', text).strip() - - -def RunHook(hook, upstream_branch='origin', error_ok=False): - """Run a given hook if it exists. By default, we fail on errors.""" - hook = '%s/%s' % (settings.GetRoot(), hook) - if not os.path.exists(hook): - return - output = RunCommand([hook, upstream_branch], error_ok).strip() - if output != '': - print output - - -def CmdPresubmit(args): - """Reports what presubmit checks on the change would report.""" - parser = optparse.OptionParser( - usage='git cl presubmit [options]') - (options, args) = parser.parse_args(args) - - if RunGit(['diff-index', 'HEAD']): - print 'Cannot presubmit with a dirty tree. You must commit locally first.' - return 1 - - print '*** Presubmit checks for UPLOAD would report: ***' - RunHook(PREUPLOAD_HOOK, error_ok=True) - - print '*** Presubmit checks for DCOMMIT would report: ***' - RunHook(PREDCOMMIT_HOOK, error_ok=True) - - -def CmdUpload(args): - parser = optparse.OptionParser( - usage='git cl upload [options] [args to "git diff"]') - parser.add_option('--bypass-hooks', action='store_true', dest='bypass_hooks', - help='bypass upload presubmit hook') - parser.add_option('-m', dest='message', help='message for patch') - parser.add_option('-r', '--reviewers', - help='reviewer email addresses') - parser.add_option('--send-mail', action='store_true', - help='send email to reviewer immediately') - (options, args) = parser.parse_args(args) - - if RunGit(['diff-index', 'HEAD']): - print 'Cannot upload with a dirty tree. You must commit locally first.' - return 1 - - cl = Changelist() - if args: - base_branch = args[0] - else: - # Default to diffing against the "upstream" branch. - base_branch = cl.GetUpstreamBranch() - args = [base_branch + "..."] - - if not options.bypass_hooks: - RunHook(PREUPLOAD_HOOK, upstream_branch=base_branch, error_ok=False) - - # --no-ext-diff is broken in some versions of Git, so try to work around - # this by overriding the environment (but there is still a problem if the - # git config key "diff.external" is used). - env = os.environ.copy() - if 'GIT_EXTERNAL_DIFF' in env: del env['GIT_EXTERNAL_DIFF'] - subprocess.call(['git', 'diff', '--no-ext-diff', '--stat', '-M'] + args, - env=env) - - upload_args = ['--assume_yes'] # Don't ask about untracked files. - upload_args.extend(['--server', settings.GetServer()]) - if options.reviewers: - upload_args.extend(['--reviewers', options.reviewers]) - upload_args.extend(['--cc', settings.GetCCList()]) - if options.message: - upload_args.extend(['--message', options.message]) - if options.send_mail: - if not options.reviewers: - DieWithError("Must specify reviewers to send email.") - upload_args.append('--send_mail') - if cl.GetIssue(): - upload_args.extend(['--issue', cl.GetIssue()]) - print ("This branch is associated with issue %s. " - "Adding patch to that issue." % cl.GetIssue()) - else: - # Construct a description for this change from the log. - # We need to convert diff options to log options. - log_args = [] - if len(args) == 1 and not args[0].endswith('.'): - log_args = [args[0] + '..'] - elif len(args) == 2: - log_args = [args[0] + '..' + args[1]] - else: - log_args = args[:] # Hope for the best! - desc = RunGit(['log', '--pretty=format:%s\n\n%b'] + log_args) - initial_text = """# Enter a description of the change. -# This will displayed on the codereview site. -# The first line will also be used as the subject of the review.""" - desc = UserEditedLog(initial_text + '\n' + desc) - if not desc: - print "Description empty; aborting." - return 1 - subject = desc.splitlines()[0] - upload_args.extend(['--message', subject]) - upload_args.extend(['--description', desc]) - issue, patchset = upload.RealMain(['upload'] + upload_args + args) - if not cl.GetIssue(): - cl.SetIssue(issue) - cl.SetPatchset(patchset) - - -def CmdDCommit(args): - parser = optparse.OptionParser( - usage='git cl dcommit [options] [git-svn branch to apply against]') - parser.add_option('--bypass-hooks', action='store_true', dest='bypass_hooks', - help='bypass upload presubmit hook') - parser.add_option('-m', dest='message', - help="override review description") - parser.add_option('-f', action='store_true', dest='force', - help="force yes to questions (don't prompt)") - parser.add_option('-c', dest='contributor', - help="external contributor for patch (appended to " + - "description)") - parser.add_option('--tbr', action='store_true', dest='tbr', - help="short for 'to be reviewed', commit branch " + - "even without uploading for review") - (options, args) = parser.parse_args(args) - - cl = Changelist() - - if not args: - # Default to merging against our best guess of the upstream branch. - args = [cl.GetUpstreamBranch()] - - base_branch = args[0] - - if RunGit(['diff-index', 'HEAD']): - print 'Cannot dcommit with a dirty tree. You must commit locally first.' - return 1 - - # This rev-list syntax means "show all commits not in my branch that - # are in base_branch". - upstream_commits = RunGit(['rev-list', '^' + cl.GetBranchRef(), - base_branch]).splitlines() - if upstream_commits: - print ('Base branch "%s" has %d commits ' - 'not in this branch.' % (base_branch, len(upstream_commits))) - print 'Run "git merge %s" before attempting to dcommit.' % base_branch - return 1 - - if not options.force and not options.bypass_hooks: - RunHook(PREDCOMMIT_HOOK, upstream_branch=base_branch, error_ok=False) - - # Check the tree status if the tree status URL is set. - status = GetTreeStatus() - if 'closed' == status: - print ('The tree is closed. Please wait for it to reopen. Use ' - '"git cl dcommit -f" to commit on a closed tree.') - return 1 - elif 'unknown' == status: - print ('Unable to determine tree status. Please verify manually and ' - 'use "git cl dcommit -f" to commit on a closed tree.') - - description = options.message - if not options.tbr: - # It is important to have these checks early. Not only for user - # convenience, but also because the cl object then caches the correct values - # of these fields even as we're juggling branches for setting up the commit. - if not cl.GetIssue(): - print 'Current issue unknown -- has this branch been uploaded?' - print 'Use --tbr to commit without review.' - return 1 - - if not description: - description = cl.GetDescription() - - if not description: - print 'No description set.' - print 'Visit %s/edit to set it.' % (cl.GetIssueURL()) - return 1 - - description += "\n\nReview URL: %s" % cl.GetIssueURL() - else: - # Submitting TBR. Get a description now. - if not description: - description = UserEditedLog('TBR: ') - - if not description: - print "Description empty; aborting." - return 1 - - if options.contributor: - description += "\nPatch from %s." % options.contributor - print 'Description:', repr(description) - - branches = [base_branch, cl.GetBranchRef()] - if not options.force: - subprocess.call(['git', 'diff', '--stat'] + branches) - raw_input("About to commit; enter to confirm.") - - # We want to squash all this branch's commits into one commit with the - # proper description. - # We do this by doing a "merge --squash" into a new commit branch, then - # dcommitting that. - MERGE_BRANCH = 'git-cl-commit' - # Delete the merge branch if it already exists. - if RunGit(['show-ref', '--quiet', '--verify', 'refs/heads/' + MERGE_BRANCH], - exit_code=True) == 0: - RunGit(['branch', '-D', MERGE_BRANCH]) - - # We might be in a directory that's present in this branch but not in the - # trunk. Move up to the top of the tree so that git commands that expect a - # valid CWD won't fail after we check out the merge branch. - rel_base_path = RunGit(['rev-parse', '--show-cdup']).strip() - if rel_base_path: - os.chdir(rel_base_path) - - # Stuff our change into the merge branch. - # We wrap in a try...finally block so if anything goes wrong, - # we clean up the branches. - try: - RunGit(['checkout', '-q', '-b', MERGE_BRANCH, base_branch]) - RunGit(['merge', '--squash', cl.GetBranchRef()]) - RunGit(['commit', '-m', description]) - # dcommit the merge branch. - output = RunGit(['svn', 'dcommit', '--no-rebase']) - finally: - # And then swap back to the original branch and clean up. - RunGit(['checkout', '-q', cl.GetBranch()]) - RunGit(['branch', '-D', MERGE_BRANCH]) - - if cl.has_issue and output.find("Committed r") != -1: - print "Closing issue (you may be prompted for your codereview password)..." - viewvc_url = settings.GetViewVCUrl() - if viewvc_url: - revision = re.compile(".*?\nCommitted r(\d+)", - re.DOTALL).match(output).group(1) - cl.description = (cl.description + - "\n\nCommitted: " + viewvc_url + revision) - cl.CloseIssue() - cl.SetIssue(0) - - -def CmdPatch(args): - parser = optparse.OptionParser(usage=('git cl patch [options] ' - '')) - parser.add_option('-b', dest='newbranch', - help='create a new branch off trunk for the patch') - parser.add_option('-f', action='store_true', dest='force', - help='with -b, clobber any existing branch') - parser.add_option('--reject', action='store_true', dest='reject', - help='allow failed patches and spew .rej files') - parser.add_option('-n', '--no-commit', action='store_true', dest='nocommit', - help="don't commit after patch applies") - (options, args) = parser.parse_args(args) - if len(args) != 1: - return parser.print_help() - input = args[0] - - if re.match(r'\d+', input): - # Input is an issue id. Figure out the URL. - issue = input - fetch = "curl --silent http://%s/%s" % (settings.GetServer(), issue) - grep = "grep -E -o '/download/issue[0-9]+_[0-9]+.diff'" - pipe = subprocess.Popen("%s | %s" % (fetch, grep), shell=True, - stdout=subprocess.PIPE) - path = pipe.stdout.read().strip() - url = 'http://%s%s' % (settings.GetServer(), path) - else: - # Assume it's a URL to the patch. - match = re.match(r'http://.*?/issue(\d+)_\d+.diff', input) - if match: - issue = match.group(1) - url = input - else: - print "Must pass an issue ID or full URL for 'Download raw patch set'" - return 1 - - if options.newbranch: - if options.force: - RunGit(['branch', '-D', options.newbranch], error_ok=True) - RunGit(['checkout', '-b', options.newbranch]) - - # Switch up to the top-level directory, if necessary, in preparation for - # applying the patch. - top = RunGit(['rev-parse', '--show-cdup']).strip() - if top: - os.chdir(top) - - # Construct a pipeline to feed the patch into "git apply". - # We use "git apply" to apply the patch instead of "patch" so that we can - # pick up file adds. - # 1) Fetch the patch. - fetch = "curl --silent %s" % url - # 2) Munge the patch. - # Git patches have a/ at the beginning of source paths. We strip that out - # with a sed script rather than the -p flag to patch so we can feed either - # Git or svn-style patches into the same apply command. - gitsed = "sed -e 's|^--- a/|--- |; s|^+++ b/|+++ |'" - # 3) Apply the patch. - # The --index flag means: also insert into the index (so we catch adds). - apply = "git apply --index -p0" - if options.reject: - apply += " --reject" - subprocess.check_call(' | '.join([fetch, gitsed, apply]), shell=True) - - # If we had an issue, commit the current state and register the issue. - if not options.nocommit: - RunGit(['commit', '-m', 'patch from issue %s' % issue]) - cl = Changelist() - cl.SetIssue(issue) - print "Committed patch." - else: - print "Patch applied to index." - -def CmdRebase(args): - # Provide a wrapper for git svn rebase to help avoid accidental - # git svn dcommit. - RunGit(['svn', 'rebase'], redirect_stdout=False) - -def GetTreeStatus(): - """Fetches the tree status and returns either 'open', 'closed', - 'unknown' or 'unset'.""" - url = settings.GetTreeStatusUrl(error_ok=True) - if url: - status = urllib2.urlopen(url).read().lower() - if status.find('closed') != -1 or status == '0': - return 'closed' - elif status.find('open') != -1 or status == '1': - return 'open' - return 'unknown' - - return 'unset' - -def CmdTreeStatus(args): - status = GetTreeStatus() - if 'unset' == status: - print 'You must configure your tree status URL by running "git cl config".' - return 2 - - print "The tree is %s" % status - if status != 'open': - return 1 - return 0 - -def CmdUpstream(args): - cl = Changelist() - print cl.GetUpstreamBranch() - -COMMANDS = [ - ('config', 'edit configuration for this tree', CmdConfig), - ('dcommit', 'commit the current changelist via git-svn', CmdDCommit), - ('issue', 'show/set current branch\'s issue number', CmdIssue), - ('patch', 'patch in a code review', CmdPatch), - ('presubmit', 'run presubmit tests on the current changelist', CmdPresubmit), - ('rebase', 'rebase current branch on top of svn repo', CmdRebase), - ('status', 'show status of changelists', CmdStatus), - ('tree', 'show the status of the tree', CmdTreeStatus), - ('upload', 'upload the current changelist to codereview', CmdUpload), - ('upstream', 'print the name of the upstream branch, if any', CmdUpstream), -] - - -def Usage(name): - print 'usage: %s ' % name - print 'commands are:' - for name, desc, _ in COMMANDS: - print ' %-10s %s' % (name, desc) - sys.exit(1) - - -def main(argv): - if len(argv) < 2: - Usage(argv[0]) - - command = argv[1] - for name, _, func in COMMANDS: - if name == command: - return func(argv[2:]) - print 'unknown command: %s' % command - Usage(argv[0]) - - -if __name__ == '__main__': - sys.exit(main(sys.argv))