LEFT | RIGHT |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 | 2 |
3 # This file is part of Adblock Plus <https://adblockplus.org/>, | 3 # This file is part of Adblock Plus <https://adblockplus.org/>, |
4 # Copyright (C) 2006-present eyeo GmbH | 4 # Copyright (C) 2006-present eyeo GmbH |
5 # | 5 # |
6 # Adblock Plus is free software: you can redistribute it and/or modify | 6 # Adblock Plus is free software: you can redistribute it and/or modify |
7 # it under the terms of the GNU General Public License version 3 as | 7 # it under the terms of the GNU General Public License version 3 as |
8 # published by the Free Software Foundation. | 8 # published by the Free Software Foundation. |
9 # | 9 # |
10 # Adblock Plus is distributed in the hope that it will be useful, | 10 # Adblock Plus is distributed in the hope that it will be useful, |
(...skipping 29 matching lines...) Expand all Loading... |
40 | 40 |
41 from src.vcs import Vcs | 41 from src.vcs import Vcs |
42 | 42 |
43 logging.basicConfig() | 43 logging.basicConfig() |
44 logger = logging.getLogger('eyeo-depup') | 44 logger = logging.getLogger('eyeo-depup') |
45 | 45 |
46 | 46 |
47 class DepUpdate(object): | 47 class DepUpdate(object): |
48 """The main class used to process dependency updates. | 48 """The main class used to process dependency updates. |
49 | 49 |
50 TODO: CLARIFY ME! | 50 DepUpdate provides an argument parser and subcommand routing for the |
51 | 51 commands 'diff', 'issue', 'changes' and 'commit'. Each command may require |
| 52 it's own set of parameters and parse them accordingly. |
| 53 |
| 54 When parsing is successufl and all required parameters are provided, |
| 55 DepUpdate will execute the corresponding command and will either print the |
| 56 output to STDOUT or to the given filename. |
52 """ | 57 """ |
53 | 58 |
54 VCS_EXECUTABLE = ('hg', '--config', 'defaults.log=', '--config', | 59 VCS_EXECUTABLE = ('hg', '--config', 'defaults.log=', '--config', |
55 'defaults.pull=') | 60 'defaults.pull=') |
56 ISSUE_NUMBER_REGEX = re.compile(r'\b(issue|fixes)\s+(\d+)\b', re.I) | 61 ISSUE_NUMBER_REGEX = re.compile(r'\b(issue|fixes)\s+(\d+)\b', re.I) |
57 NOISSUE_REGEX = re.compile(r'^noissue\b', re.I) | 62 NOISSUE_REGEX = re.compile(r'^noissue\b', re.I) |
58 | 63 |
59 def __init__(self, *args): | 64 def __init__(self, *args): |
60 """Construct a DepUpdate object. | 65 """Construct a DepUpdate object. |
61 | 66 |
62 During initialization, DepUpdate will invoke the appropriate VCS to | 67 During initialization, DepUpdate will invoke the appropriate VCS to |
63 fetch a list of changes, parse them and (if not otherwise specified) | 68 fetch a list of changes, parse them and (if not otherwise specified) |
64 get the matching revisions from the mirrored repository. | 69 get the matching revisions from the mirrored repository. |
65 | 70 |
66 Parameters: *args - Passed down to the argparse.ArgumentParser instance | 71 Parameters: *args - Passed down to the argparse.ArgumentParser instance |
67 | 72 |
68 """ | 73 """ |
69 self._cwd = os.getcwd() | 74 self._cwd = os.getcwd() |
70 | 75 |
71 self.root_repo = Vcs.factory(self._cwd) | |
72 | |
73 self._base_revision = None | 76 self._base_revision = None |
74 self._parsed_changes = None | 77 self._parsed_changes = None |
75 self.arguments = None | 78 self.arguments = None |
76 | 79 |
77 self._dep_config = None | 80 self._dep_config = None |
78 | 81 |
79 default_template = os.path.join( | 82 default_template = os.path.join( |
80 os.path.dirname(os.path.realpath(__file__)), 'templates', | 83 os.path.dirname(os.path.realpath(__file__)), 'templates', |
81 'default.trac') | 84 'default.trac') |
82 | 85 |
83 # Initialize and run the internal argument parser | 86 # Initialize and run the internal argument parser |
84 self._make_arguments(default_template, *args) | 87 self._make_arguments(default_template, *args) |
85 | 88 |
86 # Check if root repository is dirty | 89 # Check if root repository is dirty |
| 90 self.root_repo = Vcs.factory(self._cwd) |
87 if not self.root_repo.repo_is_clean(): | 91 if not self.root_repo.repo_is_clean(): |
88 logger.error('Your repository is dirty') | 92 logger.error('Your repository is dirty') |
89 exit(1) | 93 exit(1) |
90 | 94 |
91 # Initialize the main VCS and the list of changes | 95 # Initialize the main VCS and the list of changes |
92 self._main_vcs = Vcs.factory(os.path.join(self._cwd, | 96 self._main_vcs = Vcs.factory(os.path.join(self._cwd, |
93 self.arguments.dependency)) | 97 self.arguments.dependency)) |
94 self.changes = self._main_vcs.change_list(self.base_revision, | 98 self.changes = self._main_vcs.change_list(self.base_revision, |
95 self.arguments.new_revision) | 99 self.arguments.new_revision) |
96 if len(self.changes) == 0: | 100 if len(self.changes) == 0: |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 # Add the command and options for creating an issue body | 185 # Add the command and options for creating an issue body |
182 issue_parser = subs.add_parser( | 186 issue_parser = subs.add_parser( |
183 'issue', parents=[options_parser, advanced_parser], | 187 'issue', parents=[options_parser, advanced_parser], |
184 help='Render an issue body', | 188 help='Render an issue body', |
185 description=('Render an issue subject and an issue body, ' | 189 description=('Render an issue subject and an issue body, ' |
186 'according to the given template.')) | 190 'according to the given template.')) |
187 issue_parser.add_argument( | 191 issue_parser.add_argument( |
188 '-t', '--template', dest='tmpl_path', | 192 '-t', '--template', dest='tmpl_path', |
189 default=default_template, | 193 default=default_template, |
190 help=('The template to use. Defaults to the provided ' | 194 help=('The template to use. Defaults to the provided ' |
191 'default.trac (Used only with -i/--issue).') | 195 'default.trac.') |
192 ) | 196 ) |
193 | 197 |
194 # Add the command for printing a list of changes | 198 # Add the command for printing a list of changes |
195 subs.add_parser( | 199 subs.add_parser( |
196 'changes', parents=[options_parser, advanced_parser], | 200 'changes', parents=[options_parser, advanced_parser], |
197 help='Generate a list of commits between two revisions', | 201 help='Generate a list of commits between two revisions', |
198 description=('Generate a list of commit hashes and commit ' | 202 description=('Generate a list of commit hashes and commit ' |
199 "messages between the dependency's current " | 203 "messages between the dependency's current " |
200 'revision and a given new revision.')) | 204 'revision and a given new revision.')) |
201 | 205 |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
457 if self.arguments.lookup_inotes: | 461 if self.arguments.lookup_inotes: |
458 self.lookup_integration_notes() | 462 self.lookup_integration_notes() |
459 | 463 |
460 output = action_map[self.arguments.action]() | 464 output = action_map[self.arguments.action]() |
461 if self.arguments.filename is not None: | 465 if self.arguments.filename is not None: |
462 with io.open(self.arguments.filename, 'w', encoding='utf-8') as fp: | 466 with io.open(self.arguments.filename, 'w', encoding='utf-8') as fp: |
463 fp.write(output) | 467 fp.write(output) |
464 print('Output writen to ' + self.arguments.filename) | 468 print('Output writen to ' + self.arguments.filename) |
465 else: | 469 else: |
466 print(output) | 470 print(output) |
LEFT | RIGHT |