64 @keyparam bundle name of a bundle file (string) |
64 @keyparam bundle name of a bundle file (string) |
65 @keyparam qdiff flag indicating qdiff command shall be used (boolean) |
65 @keyparam qdiff flag indicating qdiff command shall be used (boolean) |
66 @return flag indicating a successful start of the diff command |
66 @return flag indicating a successful start of the diff command |
67 (boolean) |
67 (boolean) |
68 """ |
68 """ |
|
69 if qdiff: |
|
70 args = self.vcs.initCommand("qdiff") |
|
71 else: |
|
72 args = self.vcs.initCommand("diff") |
|
73 |
|
74 if self.vcs.hasSubrepositories(): |
|
75 args.append("--subrepos") |
|
76 |
|
77 if bundle: |
|
78 args.append('--repository') |
|
79 args.append(bundle) |
|
80 elif ( |
|
81 self.vcs.bundleFile and |
|
82 os.path.exists(self.vcs.bundleFile) |
|
83 ): |
|
84 args.append('--repository') |
|
85 args.append(self.vcs.bundleFile) |
|
86 |
|
87 if versions is not None: |
|
88 rev1 = self.__getVersionArg(versions[0]) |
|
89 rev2 = None |
|
90 if len(versions) == 2: |
|
91 rev2 = self.__getVersionArg(versions[1]) |
|
92 |
|
93 if rev1 is not None or rev2 is not None: |
|
94 args.append('-r') |
|
95 if rev1 is not None and rev2 is not None: |
|
96 args.append('{0}:{1}'.format(rev1, rev2)) |
|
97 elif rev2 is None: |
|
98 args.append(rev1) |
|
99 elif rev1 is None: |
|
100 args.append(':{0}'.format(rev2)) |
|
101 |
|
102 if isinstance(fn, list): |
|
103 dname, fnames = self.vcs.splitPathList(fn) |
|
104 self.vcs.addArguments(args, fn) |
|
105 else: |
|
106 dname, fname = self.vcs.splitPath(fn) |
|
107 args.append(fn) |
|
108 |
|
109 self.__oldFile = "" |
|
110 self.__oldFileLine = -1 |
|
111 self.__fileSeparators = [] |
|
112 self.__output = [] |
|
113 self.__errors = [] |
|
114 |
69 with E5OverrideCursor(): |
115 with E5OverrideCursor(): |
70 if qdiff: |
|
71 args = self.vcs.initCommand("qdiff") |
|
72 else: |
|
73 args = self.vcs.initCommand("diff") |
|
74 |
|
75 if self.vcs.hasSubrepositories(): |
|
76 args.append("--subrepos") |
|
77 |
|
78 if bundle: |
|
79 args.append('--repository') |
|
80 args.append(bundle) |
|
81 elif ( |
|
82 self.vcs.bundleFile and |
|
83 os.path.exists(self.vcs.bundleFile) |
|
84 ): |
|
85 args.append('--repository') |
|
86 args.append(self.vcs.bundleFile) |
|
87 |
|
88 if versions is not None: |
|
89 rev1 = self.__getVersionArg(versions[0]) |
|
90 rev2 = None |
|
91 if len(versions) == 2: |
|
92 rev2 = self.__getVersionArg(versions[1]) |
|
93 |
|
94 if rev1 is not None or rev2 is not None: |
|
95 args.append('-r') |
|
96 if rev1 is not None and rev2 is not None: |
|
97 args.append('{0}:{1}'.format(rev1, rev2)) |
|
98 elif rev2 is None: |
|
99 args.append(rev1) |
|
100 elif rev1 is None: |
|
101 args.append(':{0}'.format(rev2)) |
|
102 |
|
103 if isinstance(fn, list): |
|
104 dname, fnames = self.vcs.splitPathList(fn) |
|
105 self.vcs.addArguments(args, fn) |
|
106 else: |
|
107 dname, fname = self.vcs.splitPath(fn) |
|
108 args.append(fn) |
|
109 |
|
110 self.__oldFile = "" |
|
111 self.__oldFileLine = -1 |
|
112 self.__fileSeparators = [] |
|
113 self.__output = [] |
|
114 self.__errors = [] |
|
115 |
|
116 out, err = self.__hgClient.runcommand(args) |
116 out, err = self.__hgClient.runcommand(args) |
117 |
117 |
118 if err: |
118 if err: |
119 self.__errors = err.splitlines(True) |
119 self.__errors = err.splitlines(True) |
120 |
120 |
121 if out: |
121 if out: |
122 for line in out.splitlines(True): |
122 self.__output = out.splitlines(True) |
123 self.__processOutputLine(line) |
123 for lineno, line in enumerate(self.__output): |
|
124 if line.startswith(("--- ", "+++ ")): |
|
125 self.__processFileLine(lineno, line) |
124 if self.__hgClient.wasCanceled(): |
126 if self.__hgClient.wasCanceled(): |
125 break |
127 break |
126 |
128 |
127 self.__finish() |
129 self.__finish() |
128 |
130 |
158 f = "__NULL__" |
160 f = "__NULL__" |
159 else: |
161 else: |
160 f = f.split("/", 1)[1] |
162 f = f.split("/", 1)[1] |
161 return f |
163 return f |
162 |
164 |
163 def __processFileLine(self, line): |
165 def __processFileLine(self, lineno, line): |
164 """ |
166 """ |
165 Private slot to process a line giving the old/new file. |
167 Private slot to process a line giving the old/new file. |
166 |
168 |
167 @param line line to be processed (string) |
169 @param lineno line number of line to be processed |
|
170 @type int |
|
171 @param line line to be processed |
|
172 @type str |
168 """ |
173 """ |
169 if line.startswith('---'): |
174 if line.startswith('---'): |
170 self.__oldFileLine = len(self.__output) |
175 self.__oldFileLine = lineno |
171 self.__oldFile = self.__extractFileName(line) |
176 self.__oldFile = self.__extractFileName(line) |
172 else: |
177 else: |
173 newFile = self.__extractFileName(line) |
178 newFile = self.__extractFileName(line) |
174 if self.__oldFile == "__NULL__": |
179 if self.__oldFile == "__NULL__": |
175 self.__fileSeparators.append( |
180 self.__fileSeparators.append( |
176 (newFile, newFile, self.__oldFileLine)) |
181 (newFile, newFile, self.__oldFileLine)) |
177 else: |
182 else: |
178 self.__fileSeparators.append( |
183 self.__fileSeparators.append( |
179 (self.__oldFile, newFile, self.__oldFileLine)) |
184 (self.__oldFile, newFile, self.__oldFileLine)) |
180 |
|
181 def __processOutputLine(self, line): |
|
182 """ |
|
183 Private method to process the lines of output. |
|
184 |
|
185 @param line output line to be processed (string) |
|
186 """ |
|
187 if ( |
|
188 line.startswith("--- ") or |
|
189 line.startswith("+++ ") |
|
190 ): |
|
191 self.__processFileLine(line) |
|
192 |
|
193 self.__output.append(line) |
|