Difference between revisions of "X-Cart:To apply a patch manually"
(→Understanding the process) |
(→What is diff file?) |
||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | ==What is diff file?== | + | ==What is diff (patch) file?== |
− | [http://en.wikipedia.org/wiki/Diff Diff] files | + | [http://en.wikipedia.org/wiki/Diff Diff] (or patch) is a file that displays the changes made per line for text files, and in particular, for X-Cart source files. |
+ | |||
+ | Diff can include changes for several files. The name of each modified file is specified under a header line that may look something like this: | ||
+ | |||
+ | <pre>Index: include/func/func.category.php</pre> | ||
+ | |||
+ | The above header line indicates that the diff displays the changes for <xcart_dir>/include/func/func.category.php file. | ||
+ | |||
+ | Each header line is then followed with one or several [http://en.wikipedia.org/wiki/Hunk "hunks"]. Each "hunk" starts with a line that may look something like this: | ||
<pre>@@ -942,8 +940,7 @@</pre> | <pre>@@ -942,8 +940,7 @@</pre> | ||
Line 13: | Line 21: | ||
Then follows the file code that includes lines marked with the "+" and "-" signs. | Then follows the file code that includes lines marked with the "+" and "-" signs. | ||
+ | |||
Lines marked with "+" are the lines that you need to add in the file to be patched. | Lines marked with "+" are the lines that you need to add in the file to be patched. | ||
+ | |||
Lines marked with "-" are the lines that you need to remove from the file to be patched. | Lines marked with "-" are the lines that you need to remove from the file to be patched. | ||
− | |||
− | |||
− | |||
− | |||
==Example of diff file== | ==Example of diff file== | ||
Line 125: | Line 131: | ||
<pre> | <pre> | ||
− | + | 'c.rpos' | |
− | + | ); | |
− | + | $search_condition = | |
− | + | $join_tbl = array(); | |
− | + | if ($current_area == 'A' || $current_area == 'P') { | |
</pre> | </pre> | ||
Line 138: | Line 144: | ||
<pre> | <pre> | ||
− | + | 'c.rpos' | |
− | + | ); | |
− | + | $search_condition = $join_tbl = array(); | |
− | + | if ($current_area == 'A' || $current_area == 'P') { | |
</pre> | </pre> | ||
Line 149: | Line 155: | ||
The built-in patch/upgrade utility basically works in the same way. | The built-in patch/upgrade utility basically works in the same way. | ||
− | |||
[[Category:X-Cart user manual]] | [[Category:X-Cart user manual]] | ||
− | |||
[[Category:X-Cart user manual]] | [[Category:X-Cart user manual]] |
Latest revision as of 11:40, 1 October 2011
Contents
What is diff (patch) file?
Diff (or patch) is a file that displays the changes made per line for text files, and in particular, for X-Cart source files.
Diff can include changes for several files. The name of each modified file is specified under a header line that may look something like this:
Index: include/func/func.category.php
The above header line indicates that the diff displays the changes for <xcart_dir>/include/func/func.category.php file.
Each header line is then followed with one or several "hunks". Each "hunk" starts with a line that may look something like this:
@@ -942,8 +940,7 @@
where:
- 942 - indicates the number of the first line in the original code (before patch application)
- 8 - indicates the number of lines in the original code (before patch application)
- 940 - indicates the number of the first line in the changed code (after patch application)
- 7 - indicates the number of lines in the changed code (after patch application)
Then follows the file code that includes lines marked with the "+" and "-" signs.
Lines marked with "+" are the lines that you need to add in the file to be patched.
Lines marked with "-" are the lines that you need to remove from the file to be patched.
Example of diff file
Index: include/func/func.category.php @@ -585,9 +585,7 @@ $cat = abs(intval($cat)); - $to_search = - $search_condition = - $join_tbl = array(); + $to_search = $search_condition = $join_tbl = array(); $from = "$sql_tbl[categories] AS node "; @@ -942,8 +940,7 @@ 'c.rpos' ); - $search_condition = - $join_tbl = array(); + $search_condition = $join_tbl = array(); if ($current_area == 'A' || $current_area == 'P') {
General instructions
1. Open the diff file in a text editor.
2. Edit the file (in our example, include/func/func.category.php):
- Find the lines marked with "-" in the text of the patch and remove them.
- Insert the lines marked with "+" in the text of the patch.
In our example, the original code (before applying the patch) would look like:
line 585: line 586: $cat = abs(intval($cat)); line 587: line 588: $to_search = line 589: $search_condition = line 590: $join_tbl = array(); line 591: line 593: $from = "$sql_tbl[categories] AS node "; line 594: ... line 942: 'c.rpos' line 943: ); line 944: line 945: $search_condition = line 946: $join_tbl = array(); line 947: line 948: if ($current_area == 'A' || $current_area == 'P') { line 949:
Total lines: 9 and 8 in each hunk correspondingly.
The changed code (after applying the patch) would look like:
line 585: line 586: $cat = abs(intval($cat)); line 587: line 588: $to_search = $search_condition = $join_tbl = array(); line 589: line 590: $from = "$sql_tbl[categories] AS node "; line 591: ... line 940: 'c.rpos' line 941: ); line 942: line 943: $search_condition = $join_tbl = array(); line 944: line 945: if ($current_area == 'A' || $current_area == 'P') { line 946:
Total lines: 7 and 7 in each hunk correspondingly.
Understanding the process
In simple words, the patch application procedure for each hunk is as follows:
- Search for the code to be replaced around (above and below) the expected line.
- If found, change it to the new code.
Let us take another look at the second hunk of the example patch provided above to understand the process:
@@ -942,8 +940,7 @@ 'c.rpos' ); - $search_condition = - $join_tbl = array(); + $search_condition = $join_tbl = array(); if ($current_area == 'A' || $current_area == 'P') {
- Original code to search for (8 lines of code around the line 942):
'c.rpos' ); $search_condition = $join_tbl = array(); if ($current_area == 'A' || $current_area == 'P') {
- New code to change to (7 lines of code):
'c.rpos' ); $search_condition = $join_tbl = array(); if ($current_area == 'A' || $current_area == 'P') {
The built-in patch/upgrade utility basically works in the same way.