Author: svn-role Date: Wed Mar 18 04:00:47 2015 New Revision: 1667438 URL: http://svn.apache.org/r1667438 Log: Merge the 1.7.x-r1644595 branch:
* r1644158, r1644530, r1644595, r1644599, r1652744 Fix patch output for reordered hunks, part of issue 4533. Justification: Output is invalid. Branch: ^/subversion/branches/1.7.x-r1644595 Votes: +1: philip, stefan2, brane Modified: subversion/branches/1.7.x/ (props changed) subversion/branches/1.7.x/STATUS subversion/branches/1.7.x/subversion/libsvn_client/patch.c subversion/branches/1.7.x/subversion/tests/cmdline/patch_tests.py Propchange: subversion/branches/1.7.x/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Wed Mar 18 04:00:47 2015 @@ -89,6 +89,7 @@ /subversion/branches/1.7.x-r1580626:1580636-1590207 /subversion/branches/1.7.x-r1594157:1594673-1643028 /subversion/branches/1.7.x-r1641564:1641574-1642630 +/subversion/branches/1.7.x-r1644595:1644692-1667437 /subversion/branches/1.7.x-r1646797:1646806-1664786 /subversion/branches/1.7.x-san-cert:1614969-1615212 /subversion/branches/1.7.x-serf-1.3.x-Windows:1543441-1589564 @@ -153,4 +154,4 @@ /subversion/branches/tree-conflicts:868291-873154 /subversion/branches/tree-conflicts-notify:873926-874008 /subversion/branches/uris-as-urls:1060426-1064427 -/subversion/trunk:1146013,1146121,1146219,1146222,1146274,1146492,1146555,1146606,1146620,1146684,1146762,1146781,1146832,1146834,1146870,1146899,1146904,1147293,1147299,1147309,1147882,1148071,1148083,1148094,1148131,1148374,1148424,1148566,1148588,1148652,1148662,1148699,1148853,1148877,1148882,1148936,1149103,1149105,1149135,1149141,1149160,1149228,1149240,1149343,1149371-1149372,1149377,1149398,1149401,1149539,1149572,1149627,1149675,1149701,1149713,1150242,1150254,1150260-1150261,1150266,1150302,1150327,1150344,1150368,1150372,1150441,1150506,1150812,1150853,1151036,1151177,1151610,1151854,1151906,1151911,1152129,1152140,1152189-1152190,1152267,1152282,1152286,1152726,1152809,1153138,1153141,1153416,1153540,1153566,1153799,1153807,1153968,1154009,1154023,1154115,1154119,1154121,1154144,1154155,1154159,1154165,1154215,1154225,1154273,1154278,1154379,1154382,1154461,1154717-1154718,1154733,1154908,1154982,1155015,1155044,1155124,1155131,1155160,1155313,1155334,1155391,1155404,115 6085,1156098,1156216,1156218,1156312,1156527,1156717,1156721,1156750,1156827,1156838,1157416,1158187,1158193-1158194,1158196,1158201,1158207,1158209-1158210,1158217,1158285,1158288,1158303,1158309,1158407,1158419,1158421,1158436,1158455,1158616-1158617,1158634,1158854,1158875,1158886,1158893,1158896,1158919,1158923-1158924,1158929,1158963,1159093,1159098,1159101,1159132,1159136,1159148,1159230,1159275,1159400,1159686,1159760,1159772,1160605,1160671,1160682,1160704-1160705,1160756,1161063,1161080,1161185,1161210,1161683,1161721,1162024,1162033,1162201,1162516,1162880,1162974,1162995,1163243,1163372,1163383,1163557,1163792,1163953,1164027,1164116,1164386,1164426,1164517,1164535,1164554,1164580,1164614,1164645,1164760,1164765,1164929,1166267,1166500,1166555,1166678,1167062,1167173,1167209,1167269,1167503,1167659,1167681,1169524,1169531,1169650,1171708,1173111,1173425,1173639,1174051,1174060,1174342,1174652,1174761,1174797-1174798,1174806,1175888,1176915,1176949,1177001,1177492,1177732, 1178280,1178282,1178942,1179680,1179767,1179776,1180154,1181090,1181110,1181155,1181215,1181609,1181666,1182115,1182527,1182771,1182904,1182909,1183054,1183263,1183347,1185222,1185242,1185280,1185282,1185730,1185738,1185746,1185763,1185768,1185886,1185911,1185918,1186059,1186092,1186101,1186107,1186109,1186121,1186231,1186240,1186422,1186434,1186732,1186755,1186784,1186815,1186928,1186944,1186981,1186983,1187311,1187676,1187695,1188609,1188652,1188677,1188762,1188774,1189190,1189261,1189395,1189580,1189665,1190463,1195480,1197135,1197998,1199876,1199950,1200277,1200837,1200896,1201002,1201072,1201419,1201824,1202132,1202135,1202187,1202333,1202630,1202807,1203546,1203651,1203653,1203977,1204167,1204478,1204610,1204673,1205188,1205193,1205209,1205726,1205839,1205848,1205968,1206523,1206533,1206576,1206718-1206719,1206724,1206741,1206748,1207555,1207656,1207663,1207808,1207823,1207858,1207949,1208840,1209631,1209654,1210147,1210195,1210913,1211048,1211483,1211859,1211885,1212476,12124 82,1212484,1213331,1213673,1213681,1213690,1213711,1213716,1214139,1215260,1215288,1215374-1215375,1215379,1220740,1220742,1220750,1220861,1221178,1221303,1221767,1221780,1221793,1222521,1222628,1222644,1222693,1222699,1225491,1226597,1227146,1227237,1227250,1227352,1227372,1227384-1227385,1227900,1228340,1229252,1229303,1229677,1229833,1229980,1230212,1230714,1230798,1231029,1231944-1231945,1232202,1232207,1232221-1232222,1232267,1232413,1233292,1235264,1235296,1235302,1235736,1236163,1236173,1236283,1236343,1237720,1237779,1238121,1239382,1239596,1239631,1239655,1239747,1240314,1240485,1240619,1240752,1241530,1241553,1241599,1241626,1241713,1241726,1242116,1242537,1242607,1242759,1242770,1242794,1243694,1243840,1243920,1243976,1244303,1244317,1244466,1244551,1245284-1245285,1245711,1245738,1245746,1245764,1245809,1245817,1245929,1245935,1291429,1291446,1291520,1291594,1291680,1291685,1291700,1291704,1291726,1291729,1291797,1291810,1291941,1292090,1292248,1292255,1292260,1292296,12 92322,1292507,1292516,1292768,1292827,1292926,1293229,1293577,1293945,1293972,1293976,1293998,1294134,1294136,1294147,1294236,1294470,1294586,1295007,1295303,1295372,1295418,1296251,1296303,1296369,1296691,1297522,1298343,1300265,1302399,1302417,1302539,1302588,1302591,1302613,1305853,1306111,1306275,1306334,1307177,1309865,1309992,1310378,1310428,1310535,1310594,1311702,1311747,1311935,1325361,1327474,1327490,1327495,1327979,1328002,1328038,1328144,1328267-1328268,1328353,1328846-1328847,1328852,1328878,1329388,1329417,1329876,1330258,1330382,1330444,1330520,1335104,1335555,1337441,1338291,1338297,1338314,1338688,1338708,1338713,1338739,1338748,1338810,1339159,1339164,1340556,1341012,1341031,1341034,1341076,1341544,1341560,1342984,1344864-1344865,1344869,1345482,1345740,1346765,1348822,1349215,1349367,1349371,1349380,1349778,1351117,1351772,1352031,1352068,1353572,1354626,1354652,1354876,1354907,1355340,1361007,1361019,1361341,1362508,1365519,1365549,1365554,1365556,1365592,1367498 ,1368065,1368128,1368197-1368198,1371282,1374198,1374800,1374802,1375052,1375089,1376414,1378847,1380175,1380295,1380697,1382843,1383029,1383466,1383483,1383946,1386594,1386601,1387226,1387943,1388975,1389364,1389499,1389658,1389851,1389878,1389928,1390653,1390965,1391020,1391022,1391641,1391935,1392502,1392599,1393061,1393156,1393165,1393542,1393551,1393598,1394519,1396285,1398100,1399174,1401915,1402417,1402421,1403258,1403583,1403588,1403691,1403964,1403982,1404912,1405922,1407131,1407812,1408650,1409146,1409939,1410106,1410203,1413402,1419670-1419681,1421011,1421103,1421380,1421541,1422053,1422100,1423585,1423646,1423837,1423840,1423848,1424977,1425368,1426138,1426264,1426752,1426830,1427197,1427210,1427278,1429201,1434128,1434405,1434414,1434418,1434435,1434476,1434750,1435361,1438602,1438683,1441810,1443763,1443929,1445753,1451678,1452617,1452780,1452967,1453780,1454088,1454217,1455352,1458341,1459599,1461278,1461562,1461580,1461701,1461743,1462041,1462293,1462300,1462302,1462 321,1462334,1465975,1476359,1477730,1481010,1481627,1482282,1483781,1485350,1490684,1496127,1503528,1507044,1512432,1512471-1512472,1513463,1513472,1514763,1515119,1515237,1515992,1515997,1516023-1516024,1516051-1516052,1516565,1516806,1518184,1520529,1520532,1520539,1522892,1524869,1527103,1527105,1535551,1535591,1537360,1537415,1537555,1537700,1539309,1541705,1541790,1542042,1542069,1542071,1542119,1542129,1542610,1544295,1544302-1544303,1544316,1545835,1545845,1550691,1550772,1551579,1557320,1560690,1561237,1563066-1563068,1564215,1564576,1564966,1564969,1565531,1566503,1567492,1567494,1568180,1568349,1568872,1569069,1574868,1577200,1577739,1577755,1580626,1580650,1587968,1588772,1590212,1591123,1594156,1595431,1600909,1615219,1615255-1615256,1636874,1637826,1640730,1640862,1640873,1641564,1643033,1643409,1643437,1643457,1643793,1643810,1643972,1646785-1646786,1646797,1651759,1667233,1667235 +/subversion/trunk:1146013,1146121,1146219,1146222,1146274,1146492,1146555,1146606,1146620,1146684,1146762,1146781,1146832,1146834,1146870,1146899,1146904,1147293,1147299,1147309,1147882,1148071,1148083,1148094,1148131,1148374,1148424,1148566,1148588,1148652,1148662,1148699,1148853,1148877,1148882,1148936,1149103,1149105,1149135,1149141,1149160,1149228,1149240,1149343,1149371-1149372,1149377,1149398,1149401,1149539,1149572,1149627,1149675,1149701,1149713,1150242,1150254,1150260-1150261,1150266,1150302,1150327,1150344,1150368,1150372,1150441,1150506,1150812,1150853,1151036,1151177,1151610,1151854,1151906,1151911,1152129,1152140,1152189-1152190,1152267,1152282,1152286,1152726,1152809,1153138,1153141,1153416,1153540,1153566,1153799,1153807,1153968,1154009,1154023,1154115,1154119,1154121,1154144,1154155,1154159,1154165,1154215,1154225,1154273,1154278,1154379,1154382,1154461,1154717-1154718,1154733,1154908,1154982,1155015,1155044,1155124,1155131,1155160,1155313,1155334,1155391,1155404,115 6085,1156098,1156216,1156218,1156312,1156527,1156717,1156721,1156750,1156827,1156838,1157416,1158187,1158193-1158194,1158196,1158201,1158207,1158209-1158210,1158217,1158285,1158288,1158303,1158309,1158407,1158419,1158421,1158436,1158455,1158616-1158617,1158634,1158854,1158875,1158886,1158893,1158896,1158919,1158923-1158924,1158929,1158963,1159093,1159098,1159101,1159132,1159136,1159148,1159230,1159275,1159400,1159686,1159760,1159772,1160605,1160671,1160682,1160704-1160705,1160756,1161063,1161080,1161185,1161210,1161683,1161721,1162024,1162033,1162201,1162516,1162880,1162974,1162995,1163243,1163372,1163383,1163557,1163792,1163953,1164027,1164116,1164386,1164426,1164517,1164535,1164554,1164580,1164614,1164645,1164760,1164765,1164929,1166267,1166500,1166555,1166678,1167062,1167173,1167209,1167269,1167503,1167659,1167681,1169524,1169531,1169650,1171708,1173111,1173425,1173639,1174051,1174060,1174342,1174652,1174761,1174797-1174798,1174806,1175888,1176915,1176949,1177001,1177492,1177732, 1178280,1178282,1178942,1179680,1179767,1179776,1180154,1181090,1181110,1181155,1181215,1181609,1181666,1182115,1182527,1182771,1182904,1182909,1183054,1183263,1183347,1185222,1185242,1185280,1185282,1185730,1185738,1185746,1185763,1185768,1185886,1185911,1185918,1186059,1186092,1186101,1186107,1186109,1186121,1186231,1186240,1186422,1186434,1186732,1186755,1186784,1186815,1186928,1186944,1186981,1186983,1187311,1187676,1187695,1188609,1188652,1188677,1188762,1188774,1189190,1189261,1189395,1189580,1189665,1190463,1195480,1197135,1197998,1199876,1199950,1200277,1200837,1200896,1201002,1201072,1201419,1201824,1202132,1202135,1202187,1202333,1202630,1202807,1203546,1203651,1203653,1203977,1204167,1204478,1204610,1204673,1205188,1205193,1205209,1205726,1205839,1205848,1205968,1206523,1206533,1206576,1206718-1206719,1206724,1206741,1206748,1207555,1207656,1207663,1207808,1207823,1207858,1207949,1208840,1209631,1209654,1210147,1210195,1210913,1211048,1211483,1211859,1211885,1212476,12124 82,1212484,1213331,1213673,1213681,1213690,1213711,1213716,1214139,1215260,1215288,1215374-1215375,1215379,1220740,1220742,1220750,1220861,1221178,1221303,1221767,1221780,1221793,1222521,1222628,1222644,1222693,1222699,1225491,1226597,1227146,1227237,1227250,1227352,1227372,1227384-1227385,1227900,1228340,1229252,1229303,1229677,1229833,1229980,1230212,1230714,1230798,1231029,1231944-1231945,1232202,1232207,1232221-1232222,1232267,1232413,1233292,1235264,1235296,1235302,1235736,1236163,1236173,1236283,1236343,1237720,1237779,1238121,1239382,1239596,1239631,1239655,1239747,1240314,1240485,1240619,1240752,1241530,1241553,1241599,1241626,1241713,1241726,1242116,1242537,1242607,1242759,1242770,1242794,1243694,1243840,1243920,1243976,1244303,1244317,1244466,1244551,1245284-1245285,1245711,1245738,1245746,1245764,1245809,1245817,1245929,1245935,1291429,1291446,1291520,1291594,1291680,1291685,1291700,1291704,1291726,1291729,1291797,1291810,1291941,1292090,1292248,1292255,1292260,1292296,12 92322,1292507,1292516,1292768,1292827,1292926,1293229,1293577,1293945,1293972,1293976,1293998,1294134,1294136,1294147,1294236,1294470,1294586,1295007,1295303,1295372,1295418,1296251,1296303,1296369,1296691,1297522,1298343,1300265,1302399,1302417,1302539,1302588,1302591,1302613,1305853,1306111,1306275,1306334,1307177,1309865,1309992,1310378,1310428,1310535,1310594,1311702,1311747,1311935,1325361,1327474,1327490,1327495,1327979,1328002,1328038,1328144,1328267-1328268,1328353,1328846-1328847,1328852,1328878,1329388,1329417,1329876,1330258,1330382,1330444,1330520,1335104,1335555,1337441,1338291,1338297,1338314,1338688,1338708,1338713,1338739,1338748,1338810,1339159,1339164,1340556,1341012,1341031,1341034,1341076,1341544,1341560,1342984,1344864-1344865,1344869,1345482,1345740,1346765,1348822,1349215,1349367,1349371,1349380,1349778,1351117,1351772,1352031,1352068,1353572,1354626,1354652,1354876,1354907,1355340,1361007,1361019,1361341,1362508,1365519,1365549,1365554,1365556,1365592,1367498 ,1368065,1368128,1368197-1368198,1371282,1374198,1374800,1374802,1375052,1375089,1376414,1378847,1380175,1380295,1380697,1382843,1383029,1383466,1383483,1383946,1386594,1386601,1387226,1387943,1388975,1389364,1389499,1389658,1389851,1389878,1389928,1390653,1390965,1391020,1391022,1391641,1391935,1392502,1392599,1393061,1393156,1393165,1393542,1393551,1393598,1394519,1396285,1398100,1399174,1401915,1402417,1402421,1403258,1403583,1403588,1403691,1403964,1403982,1404912,1405922,1407131,1407812,1408650,1409146,1409939,1410106,1410203,1413402,1419670-1419681,1421011,1421103,1421380,1421541,1422053,1422100,1423585,1423646,1423837,1423840,1423848,1424977,1425368,1426138,1426264,1426752,1426830,1427197,1427210,1427278,1429201,1434128,1434405,1434414,1434418,1434435,1434476,1434750,1435361,1438602,1438683,1441810,1443763,1443929,1445753,1451678,1452617,1452780,1452967,1453780,1454088,1454217,1455352,1458341,1459599,1461278,1461562,1461580,1461701,1461743,1462041,1462293,1462300,1462302,1462 321,1462334,1465975,1476359,1477730,1481010,1481627,1482282,1483781,1485350,1490684,1496127,1503528,1507044,1512432,1512471-1512472,1513463,1513472,1514763,1515119,1515237,1515992,1515997,1516023-1516024,1516051-1516052,1516565,1516806,1518184,1520529,1520532,1520539,1522892,1524869,1527103,1527105,1535551,1535591,1537360,1537415,1537555,1537700,1539309,1541705,1541790,1542042,1542069,1542071,1542119,1542129,1542610,1544295,1544302-1544303,1544316,1545835,1545845,1550691,1550772,1551579,1557320,1560690,1561237,1563066-1563068,1564215,1564576,1564966,1564969,1565531,1566503,1567492,1567494,1568180,1568349,1568872,1569069,1574868,1577200,1577739,1577755,1580626,1580650,1587968,1588772,1590212,1591123,1594156,1595431,1600909,1615219,1615255-1615256,1636874,1637826,1640730,1640862,1640873,1641564,1643033,1643409,1643437,1643457,1643793,1643810,1643972,1644158,1644530,1644595,1644599,1646785-1646786,1646797,1651759,1652744,1667233,1667235 Modified: subversion/branches/1.7.x/STATUS URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/STATUS?rev=1667438&r1=1667437&r2=1667438&view=diff ============================================================================== --- subversion/branches/1.7.x/STATUS (original) +++ subversion/branches/1.7.x/STATUS Wed Mar 18 04:00:47 2015 @@ -163,12 +163,3 @@ Veto-blocked changes: Approved changes: ================= - - * r1644158, r1644530, r1644595, r1644599, r1652744 - Fix patch output for reordered hunks, part of issue 4533. - Justification: - Output is invalid. - Branch: - ^/subversion/branches/1.7.x-r1644595 - Votes: - +1: philip, stefan2, brane Modified: subversion/branches/1.7.x/subversion/libsvn_client/patch.c URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/subversion/libsvn_client/patch.c?rev=1667438&r1=1667437&r2=1667438&view=diff ============================================================================== --- subversion/branches/1.7.x/subversion/libsvn_client/patch.c (original) +++ subversion/branches/1.7.x/subversion/libsvn_client/patch.c Wed Mar 18 04:00:47 2015 @@ -1858,6 +1858,56 @@ send_patch_notification(const patch_targ return SVN_NO_ERROR; } +static void +svn_sort__array(apr_array_header_t *array, + int (*comparison_func)(const void *, + const void *)) +{ + qsort(array->elts, array->nelts, array->elt_size, comparison_func); +} + +/* Implements the callback for svn_sort__array. Puts hunks that match + before hunks that do not match, puts hunks that match in order + based on postion matched, puts hunks that do not match in order + based on original position. */ +static int +sort_matched_hunks(const void *a, const void *b) +{ + const hunk_info_t *item1 = *((const hunk_info_t * const *)a); + const hunk_info_t *item2 = *((const hunk_info_t * const *)b); + svn_boolean_t matched1 = !item1->rejected && !item1->already_applied; + svn_boolean_t matched2 = !item2->rejected && !item2->already_applied; + svn_linenum_t original1, original2; + + if (matched1 && matched2) + { + /* Both match so use order matched in file. */ + if (item1->matched_line > item2->matched_line) + return 1; + else if (item1->matched_line == item2->matched_line) + return 0; + else + return -1; + } + else if (matched2) + /* Only second matches, put it before first. */ + return 1; + else if (matched1) + /* Only first matches, put it before second. */ + return -1; + + /* Neither matches, sort by original_start. */ + original1 = svn_diff_hunk_get_original_start(item1->hunk); + original2 = svn_diff_hunk_get_original_start(item2->hunk); + if (original1 > original2) + return 1; + else if (original1 == original2) + return 0; + else + return -1; +} + + /* Apply a PATCH to a working copy at ABS_WC_PATH and put the result * into temporary files, to be installed in the working copy later. * Return information about the patch target in *PATCH_TARGET, allocated @@ -1939,6 +1989,10 @@ apply_one_patch(patch_target_t **patch_t APR_ARRAY_PUSH(target->content->hunks, hunk_info_t *) = hi; } + /* Hunks are applied in the order determined by the matched line and + this may be different from the order of the original lines. */ + svn_sort__array(target->content->hunks, sort_matched_hunks); + /* Apply or reject hunks. */ for (i = 0; i < target->content->hunks->nelts; i++) { Modified: subversion/branches/1.7.x/subversion/tests/cmdline/patch_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/subversion/tests/cmdline/patch_tests.py?rev=1667438&r1=1667437&r2=1667438&view=diff ============================================================================== --- subversion/branches/1.7.x/subversion/tests/cmdline/patch_tests.py (original) +++ subversion/branches/1.7.x/subversion/tests/cmdline/patch_tests.py Wed Mar 18 04:00:47 2015 @@ -4070,6 +4070,243 @@ def patch_git_with_index_line(sbox): 1, # check-props 1) # dry-run +@XFail() +@Issue(4533) +def patch_hunk_avoid_reorder(sbox): + """avoid reordering hunks""" + + sbox.build() + wc_dir = sbox.wc_dir + + sbox.simple_append('A/mu', + 'AA\n' 'BB\n' 'CC\n' 'DD\n' 'EE\n' 'FF\n' + 'TT\n' 'UU\n' 'VV\n' 'WW\n' 'XX\n' 'YY\n' + 'GG\n' 'HH\n' 'II\n' 'JJ\n' 'KK\n' 'LL\n' + '33333\n' '33333\n' '33333\n' + '33333\n' '33333\n' '33333\n' + '33333\n' '33333\n' '33333\n' + '33333\n' '33333\n' '33333\n' + 'MM\n' 'NN\n' 'OO\n' 'PP\n' 'QQ\n' 'RR\n' + 'SS\n' 'TT\n' 'UU\n' 'VV\n' 'WW\n' 'XX\n' + 'YY\n' 'ZZ\n', truncate=True) + sbox.simple_commit() + + # two hunks, first matches at offset +18, second matches at both -13 + # and +18 but we want the second match as it is after the first + unidiff_patch = [ + "Index: A/mu\n" + "===================================================================\n", + "--- A/mu\t(revision 1)\n", + "+++ A/mu\t(working copy)\n", + "@@ -13,6 +13,7 @@\n", + " MM\n", + " NN\n", + " OO\n", + "+11111\n", + " PP\n", + " QQ\n", + " RR\n", + "@@ -20,6 +20,7 @@\n", + " TT\n", + " UU\n", + " VV\n", + "+22222\n", + " WW\n", + " XX\n", + " YY\n", + ] + + patch_file_path = make_patch_path(sbox) + svntest.main.file_write(patch_file_path, ''.join(unidiff_patch)) + + expected_output = [ + 'U %s\n' % sbox.ospath('A/mu'), + '> applied hunk @@ -13,6 +13,7 @@ with offset 18\n', + '> applied hunk @@ -20,6 +20,7 @@ with offset 18\n' + ] + expected_disk = svntest.main.greek_state.copy() + expected_disk.tweak('A/mu', contents= + 'AA\n' 'BB\n' 'CC\n' 'DD\n' 'EE\n' 'FF\n' + 'TT\n' 'UU\n' 'VV\n' 'WW\n' 'XX\n' 'YY\n' + 'GG\n' 'HH\n' 'II\n' 'JJ\n' 'KK\n' 'LL\n' + '33333\n' '33333\n' '33333\n' + '33333\n' '33333\n' '33333\n' + '33333\n' '33333\n' '33333\n' + '33333\n' '33333\n' '33333\n' + 'MM\n' 'NN\n' 'OO\n' '11111\n' 'PP\n' 'QQ\n' 'RR\n' + 'SS\n' 'TT\n' 'UU\n' 'VV\n' '22222\n' 'WW\n' 'XX\n' + 'YY\n' 'ZZ\n') + expected_status = svntest.actions.get_virginal_state(wc_dir, 1) + expected_status.tweak('A/mu', status='M ', wc_rev=2) + expected_skip = wc.State('', { }) + svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path), + expected_output, expected_disk, + expected_status, expected_skip) + + sbox.simple_revert('A/mu') + + # change patch so second hunk matches at both -14 and +17, we still + # want the second match + unidiff_patch = [ + "Index: A/mu\n" + "===================================================================\n", + "--- A/mu\t(revision 1)\n", + "+++ A/mu\t(working copy)\n", + "@@ -13,6 +13,7 @@\n", + " MM\n", + " NN\n", + " OO\n", + "+11111\n", + " PP\n", + " QQ\n", + " RR\n", + "@@ -21,6 +21,7 @@\n", + " TT\n", + " UU\n", + " VV\n", + "+22222\n", + " WW\n", + " XX\n", + " YY\n", + ] + + patch_file_path = make_patch_path(sbox) + svntest.main.file_write(patch_file_path, ''.join(unidiff_patch)) + + expected_output = [ + 'U %s\n' % sbox.ospath('A/mu'), + '> applied hunk @@ -13,6 +13,7 @@ with offset 18\n', + '> applied hunk @@ -21,6 +21,7 @@ with offset 17\n' + ] + expected_disk = svntest.main.greek_state.copy() + expected_disk.tweak('A/mu', contents= + 'AA\n' 'BB\n' 'CC\n' 'DD\n' 'EE\n' 'FF\n' + 'TT\n' 'UU\n' 'VV\n' 'WW\n' 'XX\n' 'YY\n' + 'GG\n' 'HH\n' 'II\n' 'JJ\n' 'KK\n' 'LL\n' + '33333\n' '33333\n' '33333\n' + '33333\n' '33333\n' '33333\n' + '33333\n' '33333\n' '33333\n' + '33333\n' '33333\n' '33333\n' + 'MM\n' 'NN\n' 'OO\n' '11111\n' 'PP\n' 'QQ\n' 'RR\n' + 'SS\n' 'TT\n' 'UU\n' 'VV\n' '22222\n' 'WW\n' 'XX\n' + 'YY\n' 'ZZ\n') + expected_status = svntest.actions.get_virginal_state(wc_dir, 1) + expected_status.tweak('A/mu', status='M ', wc_rev=2) + expected_skip = wc.State('', { }) + svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path), + expected_output, expected_disk, + expected_status, expected_skip) + + sbox.simple_revert('A/mu') + + # change patch so second hunk matches at both -12 and +19, we still + # want the second match + unidiff_patch = [ + "Index: A/mu\n" + "===================================================================\n", + "--- A/mu\t(revision 1)\n", + "+++ A/mu\t(working copy)\n", + "@@ -13,6 +13,7 @@\n", + " MM\n", + " NN\n", + " OO\n", + "+11111\n", + " PP\n", + " QQ\n", + " RR\n", + "@@ -19,6 +19,7 @@\n", + " TT\n", + " UU\n", + " VV\n", + "+22222\n", + " WW\n", + " XX\n", + " YY\n", + ] + + patch_file_path = make_patch_path(sbox) + svntest.main.file_write(patch_file_path, ''.join(unidiff_patch)) + + expected_output = [ + 'U %s\n' % sbox.ospath('A/mu'), + '> applied hunk @@ -13,6 +13,7 @@ with offset 18\n', + '> applied hunk @@ -19,6 +19,7 @@ with offset 19\n' + ] + expected_disk = svntest.main.greek_state.copy() + expected_disk.tweak('A/mu', contents= + 'AA\n' 'BB\n' 'CC\n' 'DD\n' 'EE\n' 'FF\n' + 'TT\n' 'UU\n' 'VV\n' 'WW\n' 'XX\n' 'YY\n' + 'GG\n' 'HH\n' 'II\n' 'JJ\n' 'KK\n' 'LL\n' + '33333\n' '33333\n' '33333\n' + '33333\n' '33333\n' '33333\n' + '33333\n' '33333\n' '33333\n' + '33333\n' '33333\n' '33333\n' + 'MM\n' 'NN\n' 'OO\n' '11111\n' 'PP\n' 'QQ\n' 'RR\n' + 'SS\n' 'TT\n' 'UU\n' 'VV\n' '22222\n' 'WW\n' 'XX\n' + 'YY\n' 'ZZ\n') + expected_status = svntest.actions.get_virginal_state(wc_dir, 1) + expected_status.tweak('A/mu', status='M ', wc_rev=2) + expected_skip = wc.State('', { }) + svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path), + expected_output, expected_disk, + expected_status, expected_skip) + +@Issue(4533) +def patch_hunk_reorder(sbox): + """hunks that reorder""" + + sbox.build() + wc_dir = sbox.wc_dir + + sbox.simple_append('A/mu', + 'AA\n' 'BB\n' 'CC\n' 'DD\n' 'EE\n' 'FF\n' 'GG\n' + 'HH\n' 'II\n' 'JJ\n' 'KK\n' 'LL\n' 'MM\n' 'NN\n', + truncate=True) + sbox.simple_commit() + + # Two hunks match in opposite order + unidiff_patch = [ + "Index: A/mu\n" + "===================================================================\n", + "--- A/mu\t(revision 1)\n", + "+++ A/mu\t(working copy)\n", + "@@ -2,6 +2,7 @@\n", + " II\n", + " JJ\n", + " KK\n", + "+11111\n", + " LL\n", + " MM\n", + " NN\n", + "@@ -9,6 +10,7 @@\n", + " BB\n", + " CC\n", + " DD\n", + "+22222\n", + " EE\n", + " FF\n", + " GG\n", + ] + + patch_file_path = make_patch_path(sbox) + svntest.main.file_write(patch_file_path, ''.join(unidiff_patch)) + + expected_output = [ + 'U %s\n' % sbox.ospath('A/mu'), + '> applied hunk @@ -9,6 +10,7 @@ with offset -7\n', + '> applied hunk @@ -2,6 +2,7 @@ with offset 7\n', + ] + expected_disk = svntest.main.greek_state.copy() + expected_disk.tweak('A/mu', contents= + 'AA\n' 'BB\n' 'CC\n' 'DD\n' '22222\n' 'EE\n' 'FF\n' 'GG\n' + 'HH\n' 'II\n' 'JJ\n' 'KK\n' '11111\n' 'LL\n' 'MM\n' 'NN\n') + expected_status = svntest.actions.get_virginal_state(wc_dir, 1) + expected_status.tweak('A/mu', status='M ', wc_rev=2) + expected_skip = wc.State('', { }) + svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path), + expected_output, expected_disk, + expected_status, expected_skip) + ######################################################################## #Run the tests @@ -4114,6 +4351,8 @@ test_list = [ None, patch_target_no_eol_at_eof, patch_add_and_delete, patch_git_with_index_line, + patch_hunk_avoid_reorder, + patch_hunk_reorder, ] if __name__ == '__main__':