|
86
|
1 # Copyright (C) 2008 Canonical Ltd |
|
|
2 # |
|
|
3 # This program is free software; you can redistribute it and/or modify |
|
|
4 # it under the terms of the GNU General Public License as published by |
|
|
5 # the Free Software Foundation; either version 2 of the License, or |
|
|
6 # (at your option) any later version. |
|
|
7 # |
|
|
8 # This program is distributed in the hope that it will be useful, |
|
|
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
|
11 # GNU General Public License for more details. |
|
|
12 # |
|
|
13 # You should have received a copy of the GNU General Public License |
|
|
14 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
|
15 |
|
|
16 """Import processor that queries the input (and doesn't import).""" |
|
|
17 from __future__ import print_function |
|
|
18 |
|
|
19 |
|
|
20 from fastimport import ( |
|
|
21 commands, |
|
|
22 processor, |
|
|
23 ) |
|
|
24 |
|
|
25 |
|
|
26 class QueryProcessor(processor.ImportProcessor): |
|
|
27 """An import processor that queries the input. |
|
|
28 |
|
|
29 No changes to the current repository are made. |
|
|
30 """ |
|
|
31 |
|
|
32 known_params = ( |
|
|
33 commands.COMMAND_NAMES + |
|
|
34 commands.FILE_COMMAND_NAMES + |
|
|
35 [b'commit-mark'] |
|
|
36 ) |
|
|
37 |
|
|
38 def __init__(self, params=None, verbose=False): |
|
|
39 processor.ImportProcessor.__init__(self, params, verbose) |
|
|
40 self.parsed_params = {} |
|
|
41 self.interesting_commit = None |
|
|
42 self._finished = False |
|
|
43 if params: |
|
|
44 if 'commit-mark' in params: |
|
|
45 self.interesting_commit = params['commit-mark'] |
|
|
46 del params['commit-mark'] |
|
|
47 for name, value in params.items(): |
|
|
48 if value == 1: |
|
|
49 # All fields |
|
|
50 fields = None |
|
|
51 else: |
|
|
52 fields = value.split(',') |
|
|
53 self.parsed_params[name] = fields |
|
|
54 |
|
|
55 def pre_handler(self, cmd): |
|
|
56 """Hook for logic before each handler starts.""" |
|
|
57 if self._finished: |
|
|
58 return |
|
|
59 if self.interesting_commit and cmd.name == 'commit': |
|
|
60 if cmd.mark == self.interesting_commit: |
|
|
61 print(cmd.to_string()) |
|
|
62 self._finished = True |
|
|
63 return |
|
|
64 if cmd.name in self.parsed_params: |
|
|
65 fields = self.parsed_params[cmd.name] |
|
|
66 str = cmd.dump_str(fields, self.parsed_params, self.verbose) |
|
|
67 print("%s" % (str,)) |
|
|
68 |
|
|
69 def progress_handler(self, cmd): |
|
|
70 """Process a ProgressCommand.""" |
|
|
71 pass |
|
|
72 |
|
|
73 def blob_handler(self, cmd): |
|
|
74 """Process a BlobCommand.""" |
|
|
75 pass |
|
|
76 |
|
|
77 def checkpoint_handler(self, cmd): |
|
|
78 """Process a CheckpointCommand.""" |
|
|
79 pass |
|
|
80 |
|
|
81 def commit_handler(self, cmd): |
|
|
82 """Process a CommitCommand.""" |
|
|
83 pass |
|
|
84 |
|
|
85 def reset_handler(self, cmd): |
|
|
86 """Process a ResetCommand.""" |
|
|
87 pass |
|
|
88 |
|
|
89 def tag_handler(self, cmd): |
|
|
90 """Process a TagCommand.""" |
|
|
91 pass |
|
|
92 |
|
|
93 def feature_handler(self, cmd): |
|
|
94 """Process a FeatureCommand.""" |
|
|
95 feature = cmd.feature_name |
|
|
96 if feature not in commands.FEATURE_NAMES: |
|
|
97 self.warning("feature %s is not supported - parsing may fail" |
|
|
98 % (feature,)) |