Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit73ec9e9

Browse files
committed
fixes#114 - decompressing deltas - refactoring
1 parent507ced4 commit73ec9e9

File tree

2 files changed

+72
-65
lines changed

2 files changed

+72
-65
lines changed

‎CHANGELOG.md‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ This project uses a custom versioning scheme (and not [Semantic Versioning](http
99

1010
###Changed
1111

12+
##[4.10]
13+
14+
###Changed
15+
16+
* bugfixing on new UnifiedDiff reader / writer for multifile useage
17+
* bugfix for wrong DiffRow type while transforming from a patch that removed a line in one changeset
18+
1219
##[4.9]
1320

1421
###Changed

‎java-diff-utils/src/main/java/com/github/difflib/text/DiffRowGenerator.java‎

Lines changed: 65 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -225,89 +225,89 @@ public List<DiffRow> generateDiffRows(final List<String> original, Patch<String>
225225
intendPos =0;
226226
finalList<AbstractDelta<String>>deltaList =patch.getDeltas();
227227

228-
decompressDeltas(deltaList);
228+
for (AbstractDelta<String>originalDelta :deltaList) {
229+
for (AbstractDelta<String>delta :decompressDeltas(originalDelta)) {
230+
endPos =transformDeltaIntoDiffRow(original,endPos,diffRows,delta);
231+
}
232+
}
229233

230-
for (AbstractDelta<String>delta :deltaList) {
231-
Chunk<String>orig =delta.getSource();
232-
Chunk<String>rev =delta.getTarget();
234+
// Copy the final matching chunk if any.
235+
for (Stringline :original.subList(endPos,original.size())) {
236+
diffRows.add(buildDiffRow(Tag.EQUAL,line,line));
237+
}
238+
returndiffRows;
239+
}
233240

234-
for (Stringline :original.subList(endPos,orig.getPosition())) {
235-
diffRows.add(buildDiffRow(Tag.EQUAL,line,line));
236-
}
241+
/**
242+
* Transforms one patch delta into a DiffRow object.
243+
*/
244+
privateinttransformDeltaIntoDiffRow(finalList<String>original,intendPos,List<DiffRow>diffRows,AbstractDelta<String>delta) {
245+
Chunk<String>orig =delta.getSource();
246+
Chunk<String>rev =delta.getTarget();
247+
248+
for (Stringline :original.subList(endPos,orig.getPosition())) {
249+
diffRows.add(buildDiffRow(Tag.EQUAL,line,line));
250+
}
237251

238-
// Inserted DiffRow
239-
if (delta.getType() ==DeltaType.INSERT) {
240-
endPos =orig.last() +1;
252+
switch (delta.getType()) {
253+
caseINSERT:
241254
for (Stringline :rev.getLines()) {
242255
diffRows.add(buildDiffRow(Tag.INSERT,"",line));
243256
}
244-
continue;
245-
}
246-
247-
// Deleted DiffRow
248-
if (delta.getType() ==DeltaType.DELETE) {
249-
endPos =orig.last() +1;
257+
break;
258+
caseDELETE:
250259
for (Stringline :orig.getLines()) {
251260
diffRows.add(buildDiffRow(Tag.DELETE,line,""));
252261
}
253-
continue;
254-
}
255-
256-
if (showInlineDiffs) {
257-
diffRows.addAll(generateInlineDiffs(delta));
258-
}else {
259-
for (intj =0;j <Math.max(orig.size(),rev.size());j++) {
260-
diffRows.add(buildDiffRow(Tag.CHANGE,
261-
orig.getLines().size() >j ?orig.getLines().get(j) :"",
262-
rev.getLines().size() >j ?rev.getLines().get(j) :""));
262+
break;
263+
default:
264+
if (showInlineDiffs) {
265+
diffRows.addAll(generateInlineDiffs(delta));
266+
}else {
267+
for (intj =0;j <Math.max(orig.size(),rev.size());j++) {
268+
diffRows.add(buildDiffRow(Tag.CHANGE,
269+
orig.getLines().size() >j ?orig.getLines().get(j) :"",
270+
rev.getLines().size() >j ?rev.getLines().get(j) :""));
271+
}
263272
}
264-
}
265-
endPos =orig.last() +1;
266273
}
267274

268-
// Copy the final matching chunk if any.
269-
for (Stringline :original.subList(endPos,original.size())) {
270-
diffRows.add(buildDiffRow(Tag.EQUAL,line,line));
271-
}
272-
returndiffRows;
275+
returnorig.last() +1;
273276
}
274277

275278
/**
276-
* Decompresses ChangeDeltas with different source and target size to a ChangeDelta with same size and
277-
* a following InsertDelta or DeleteDelta. With this problems of building DiffRows getting smaller.
278-
* @param deltaList
279+
* Decompresses ChangeDeltas with different source and target size to a
280+
* ChangeDelta with same size and a following InsertDelta or DeleteDelta.
281+
* With this problems of building DiffRows getting smaller.
282+
*
283+
* @param deltaList
279284
*/
280-
privatevoiddecompressDeltas(finalList<AbstractDelta<String>>deltaList) {
281-
for (intidx =0;idx <deltaList.size();idx++) {
282-
AbstractDelta<String>delta =deltaList.get(idx);
283-
if (delta.getType() ==DeltaType.CHANGE &&delta.getSource().size() !=delta.getTarget().size()) {
284-
//System.out.println("decompress this " + delta);
285-
286-
List<AbstractDelta<String>>corrected =newArrayList<>();
287-
intminSize =Math.min(delta.getSource().size(),delta.getTarget().size());
288-
Chunk<String>orig =delta.getSource();
289-
Chunk<String>rev =delta.getTarget();
290-
291-
deltaList.set(idx,newChangeDelta<String>(
292-
newChunk<>(orig.getPosition(),orig.getLines().subList(0,minSize)),
293-
newChunk<>(rev.getPosition(),rev.getLines().subList(0,minSize))));
294-
295-
if (orig.getLines().size() <rev.getLines().size()) {
296-
deltaList.add(idx +1,newInsertDelta<String>(
297-
newChunk<>(orig.getPosition() +minSize,Collections.emptyList()),
298-
newChunk<>(rev.getPosition() +minSize,rev.getLines().subList(minSize,rev.getLines().size()))));
299-
}else {
300-
deltaList.add(idx +1,newDeleteDelta<String>(
301-
newChunk<>(orig.getPosition() +minSize,orig.getLines().subList(minSize,orig.getLines().size())),
302-
newChunk<>(rev.getPosition() +minSize,Collections.emptyList())));
303-
}
304-
305-
//System.out.println(" to " + corrected);
285+
privateList<AbstractDelta<String>>decompressDeltas(AbstractDelta<String>delta) {
286+
if (delta.getType() ==DeltaType.CHANGE &&delta.getSource().size() !=delta.getTarget().size()) {
287+
List<AbstractDelta<String>>deltas =newArrayList<>();
288+
//System.out.println("decompress this " + delta);
289+
290+
intminSize =Math.min(delta.getSource().size(),delta.getTarget().size());
291+
Chunk<String>orig =delta.getSource();
292+
Chunk<String>rev =delta.getTarget();
293+
294+
deltas.add(newChangeDelta<String>(
295+
newChunk<>(orig.getPosition(),orig.getLines().subList(0,minSize)),
296+
newChunk<>(rev.getPosition(),rev.getLines().subList(0,minSize))));
297+
298+
if (orig.getLines().size() <rev.getLines().size()) {
299+
deltas.add(newInsertDelta<String>(
300+
newChunk<>(orig.getPosition() +minSize,Collections.emptyList()),
301+
newChunk<>(rev.getPosition() +minSize,rev.getLines().subList(minSize,rev.getLines().size()))));
302+
}else {
303+
deltas.add(newDeleteDelta<String>(
304+
newChunk<>(orig.getPosition() +minSize,orig.getLines().subList(minSize,orig.getLines().size())),
305+
newChunk<>(rev.getPosition() +minSize,Collections.emptyList())));
306306
}
307-
idx++;
307+
returndeltas;
308308
}
309-
310-
//System.out.println("got now " + deltaList);
309+
310+
returnCollections.singletonList(delta);
311311
}
312312

313313
privateDiffRowbuildDiffRow(Tagtype,Stringorgline,Stringnewline) {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp