Difference between revisions of "X-Cart:To apply a patch manually"
| m (→What is diff file?) |  (→What is diff file?) | ||
| (9 intermediate revisions by 2 users 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 7: | Line 15: | ||
| where: | where: | ||
| − | * 942 - indicates the number of the first line in the original code (before  | + | * 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) | * 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) | * 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) | * 7 - indicates the number of lines in the changed code (after patch application) | ||
| − | Then follows the file code  | + | 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== | ==Example of diff file== | ||
| Line 22: | Line 30: | ||
| <pre>Index: include/func/func.category.php | <pre>Index: include/func/func.category.php | ||
| @@ -585,9 +585,7 @@ | @@ -585,9 +585,7 @@ | ||
| − | + | ||
| − | + | $cat = abs(intval($cat)); | |
| − | + | ||
| -    $to_search = | -    $to_search = | ||
| -    $search_condition = | -    $search_condition = | ||
| -    $join_tbl = array(); | -    $join_tbl = array(); | ||
| +    $to_search = $search_condition = $join_tbl = array(); | +    $to_search = $search_condition = $join_tbl = array(); | ||
| − | + | ||
| − | + | $from = "$sql_tbl[categories] AS node "; | |
| − | + | ||
| @@ -942,8 +940,7 @@ | @@ -942,8 +940,7 @@ | ||
| − | + | 'c.rpos' | |
| − | + | ); | |
| − | + | ||
| -    $search_condition = | -    $search_condition = | ||
| -    $join_tbl = array(); | -    $join_tbl = array(); | ||
| +    $search_condition = $join_tbl = array(); | +    $search_condition = $join_tbl = array(); | ||
| − | + | ||
| − | + | if ($current_area == 'A' || $current_area == 'P') { | |
| </pre> | </pre> | ||
| Line 46: | Line 54: | ||
| ==General instructions== | ==General instructions== | ||
| − | 1. Open the diff file in a text editor | + | 1. Open the diff file in a text editor. | 
| − | 2. Edit the file (in our example, include/func/func.category.php): | + | 2. Edit the file (in our example, <u>include/func/func.category.php</u>): | 
| − | :* Find the lines | + | :* Find the lines marked with "-" in the text of the patch and remove them. | 
| − | :* Insert the lines | + | :* Insert the lines marked with "+" in the text of the patch. | 
| − | In our example, the original code (before the patch  | + | In our example, the original code (before applying the patch) would look like: | 
| <pre> | <pre> | ||
| Line 77: | Line 85: | ||
| Total lines: 9 and 8 in each hunk correspondingly. | Total lines: 9 and 8 in each hunk correspondingly. | ||
| − | The changed code (after the patch  | + | The changed code (after applying the patch) would look like: | 
| <pre> | <pre> | ||
| Line 98: | Line 106: | ||
| Total lines: 7 and 7 in each hunk correspondingly. | 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: | ||
| + | |||
| + | <pre> | ||
| + | @@ -942,8 +940,7 @@ | ||
| + | 'c.rpos' | ||
| + | ); | ||
| + | |||
| + | -    $search_condition = | ||
| + | -    $join_tbl = array(); | ||
| + | +    $search_condition = $join_tbl = array(); | ||
| + | |||
| + | if ($current_area == 'A' || $current_area == 'P') { | ||
| + | </pre> | ||
| + | |||
| + | * Original code to search for (8 lines of code around the line 942): | ||
| + | |||
| + | <pre> | ||
| + | 'c.rpos' | ||
| + | ); | ||
| + | |||
| + | $search_condition = | ||
| + | $join_tbl = array(); | ||
| + | |||
| + | if ($current_area == 'A' || $current_area == 'P') { | ||
| + | |||
| + | </pre> | ||
| + | |||
| + | * New code to change to (7 lines of code): | ||
| + | |||
| + | <pre> | ||
| + | 'c.rpos' | ||
| + | ); | ||
| + | |||
| + | $search_condition = $join_tbl = array(); | ||
| + | |||
| + | if ($current_area == 'A' || $current_area == 'P') { | ||
| + | |||
| + | </pre> | ||
| + | |||
| + | 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.
