Left: | ||
Right: |
OLD | NEW |
---|---|
(Empty) | |
1 # This file is part of Adblock Plus <https://adblockplus.org/>, | |
2 # Copyright (C) 2006-2016 Eyeo GmbH | |
3 # | |
4 # Adblock Plus is free software: you can redistribute it and/or modify | |
5 # it under the terms of the GNU General Public License version 3 as | |
6 # published by the Free Software Foundation. | |
7 # | |
8 # Adblock Plus 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 Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | |
15 | |
16 import sys | |
17 | |
18 | |
19 def rietveld_to_git(lines): | |
20 """Convert patch from Rietveld format to Git format. | |
21 | |
22 Rietveld format looks similar to SVN patch format but it can also | |
23 contain Git extensions if it was produced by `upload.py` run from | |
24 a project managed by Git or Mercurial. The output format is the | |
25 original Git patch as produced by `git diff` or `hg diff --git`. | |
26 It can be applied by `hg import` or `git apply`. | |
27 | |
28 Arguments: | |
29 lines -- lines of the patch. | |
30 Returns: | |
31 Lines of the converted patch. | |
32 """ | |
33 # States of the conversion state machine. | |
34 NORMAL, INDEX, METAINFO = range(3) | |
35 # Double line that SVN uses to separate file name from patch content. | |
36 SVN_SEPARATOR = '=' * 67 | |
37 # Template for the line from Git diff which is replaced during SVN | |
38 # conversion. | |
39 GIT_PART_HEAD = 'diff --git a/{} b/{}\n' | |
40 | |
41 state = NORMAL | |
42 new_name = None | |
43 | |
44 for line in lines: | |
45 if state is NORMAL: | |
46 if line.startswith('Index: '): | |
47 new_name = line[7:].strip('\n') | |
48 state = INDEX | |
49 else: | |
50 yield line | |
51 elif state is INDEX: | |
52 if line.startswith(SVN_SEPARATOR): | |
53 state = METAINFO | |
54 else: | |
55 yield 'Index: {}\n'.format(new_name) | |
56 yield line | |
57 state = NORMAL | |
58 elif state is METAINFO: | |
59 if line.startswith('rename from '): | |
60 # File renamed. | |
61 old_name = line[12:].strip('\n') | |
62 yield GIT_PART_HEAD.format(old_name, new_name) | |
63 elif line.startswith('copy from '): | |
64 # File copied. | |
65 old_name = line[10:].strip('\n') | |
66 yield GIT_PART_HEAD.format(old_name, new_name) | |
67 else: | |
68 # File added or removed or changed. | |
69 yield GIT_PART_HEAD.format(new_name, new_name) | |
70 yield line | |
71 state = NORMAL | |
72 | |
73 | |
74 def script(): | |
Sebastian Noack
2016/05/12 21:44:26
This seems to be an unconventional name for an ent
Vasily Kuznetsov
2016/05/12 23:25:16
Quickly testing is still pretty easy after `setup.
Sebastian Noack
2016/05/12 23:48:51
I'm just curious is this common practice? Most Pyt
Vasily Kuznetsov
2016/05/17 15:57:30
if __name__ == '__main__' allows running the scrip
Sebastian Noack
2016/05/17 16:04:09
I don't have a strong opinion here.
| |
75 for line in rietveld_to_git(sys.stdin): | |
76 sys.stdout.write(line) | |
OLD | NEW |