eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffGenerator.py

changeset 7779
757334671130
parent 7775
4a1db75550bd
child 7900
72b88fb20261
child 7924
8a96736d465e
equal deleted inserted replaced
7778:eb01ab7aeb06 7779:757334671130
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)

eric ide

mercurial