Development:How to create a patch: Difference between revisions
(Adding instructions for new files) |
|||
Line 64: | Line 64: | ||
This should add the correct code to the patch, so that someone applying the patch to their working copy will have a new file created at the right place (hopefully!). | This should add the correct code to the patch, so that someone applying the patch to their working copy will have a new file created at the right place (hopefully!). | ||
If your patch, for some reason, contains a lot of white space changes in many files, you might want to add -Bbw to the diff call. Make sure these changes are really not significant (like adding or removing a space at the end of a line - editors like Eclipse sometimes do this automatically). This can make a patch a lot smaller, and thus easier to review. The complete call would then be | |||
cvs diff -uNawbB > patch.txt | |||
==Creating a patch using Tortoise CVS== | ==Creating a patch using Tortoise CVS== |
Revision as of 08:00, 1 July 2008
If you have made some changes to the code that you would like to share with the community, particularly if you want to send them to one of the core developers for possible inclusion in Moodle Core, it is very helpful if you can provide them as a patch file. Sometimes also called a diff file.
This page explains how you can make a patch file. Patch is a standard format, and there are many options for how to create one. Pick the one that is easiest for you.
Note, I have not been able to test most of these instructions. They are about right, but I am hoping that as people use them, they will fill in any gaps, correct any details, and so on.Tim Hunt 08:40, 25 June 2007 (CDT)
Introduction: what does a patch file look like
This is a simple example:
Index: lang/en_utf8/quiz.php =================================================================== RCS file: /cvsroot/moodle/moodle/lang/en_utf8/quiz.php,v retrieving revision 1.57.2.10 diff -u -r1.57.2.10 quiz.php --- lang/en_utf8/quiz.php 29 May 2007 17:47:25 -0000 1.57.2.10 +++ lang/en_utf8/quiz.php 25 Jun 2007 12:58:34 -0000 @@ -252,7 +255,6 @@ $string['indivresp'] = 'Responses of Individuals to Each Item'; $string['info'] = 'Info'; $string['introduction'] = 'Introduction'; -$string['invalidcategory'] = 'Category ID is invalid'; $string['invalidnumericanswer'] = 'One of the answers you entered was not a valid number.'; $string['invalidnumerictolerance'] = 'One of the tolerances you entered was not a valid number.'; $string['invalidsource'] = 'The source is not accepted as valid.'; @@ -375,8 +377,10 @@ $string['questiontypesetupoptions'] = 'Setup options for question types:'; $string['quiz:attempt'] = 'Attempt quizzes'; $string['quiz:deleteattempts'] = 'Delete quiz attempts'; +$string['quiz:emailconfirmsubmission'] = 'Receive own quiz submission notification'; +$string['quiz:emailnotifysubmission'] = 'Receive student quiz submission notifications'; $string['quiz:grade'] = 'Grade quizzes manually'; -$string['quiz:ignoretimelimits'] = 'Ignores time limit on quizzes'; +$string['quiz:ignoretimelimits'] = 'Ignores time limit on quizs'; $string['quiz:manage'] = 'Manage quizzes'; $string['quiz:preview'] = 'Preview quizzes'; $string['quiz:view'] = 'View quiz information';
At the top it says which file is being affected. Changes to several files can be included in one patch. Lines added are shown with a '+', lines removed are shown with a '-', lines changed are shown as the old line being removed and the new one added.
Patch files are good because they only show the changed parts of the file. This has two advantages: it easy to understand the change; and if other parts of the same files change between the patch being made an being used, there is no problem, the patch will still apply.
Creating a patch using diff
diff is the a linux command line program, and is where patch files originated. It requires that you have two copies of the code, one with your changes, and one without. Suppose these two copies are in folders called 'standard_moodle' and 'my_moodle' which are subdirectories of the current folder. Then to create the patch, type:
diff -ur standard_moodle my_moodle > patch.txt
Creating a patch using CVS (command line)
It is easier if you are using CVS to manage your development, because you don't need to keep the copy of 'standard_moodle'. CVS takes care of that for you. In you workspace (sandbox) type:
cvs diff -uN > patch.txt
If you have unversioned files to include in your patch, you will notice that the above command simply adds the file's name to the top of your patch, prefixed with a question mark. This is because your new file is not tagged for adding to the repository. Just do
cvs add newfile
Then
cvs diff -uNa > patch.txt
This should add the correct code to the patch, so that someone applying the patch to their working copy will have a new file created at the right place (hopefully!).
If your patch, for some reason, contains a lot of white space changes in many files, you might want to add -Bbw to the diff call. Make sure these changes are really not significant (like adding or removing a space at the end of a line - editors like Eclipse sometimes do this automatically). This can make a patch a lot smaller, and thus easier to review. The complete call would then be
cvs diff -uNawbB > patch.txt
Creating a patch using Tortoise CVS
Tortoise CVS is a Windows GUI front end for CVS. To create a patch, right-click on a folder in CVS, and choose CVS -> Make patch ... from the context menu.
Creating a patch using Eclipse
See Development:Setting_up_Eclipse#Creating_a_patch. Eclipse makes creating patches really easy, once you have got it set up correctly.
Creating a patch using WinMerge
WinMerge is a nice windows GUI for comparing folders. In this sense it is like the original command-line 'diff' program. You need a copy of 'standard_moodle' and 'my_moodle'. Use File -> Open... to open the two versions for comparison. This will give you a nice view of what you have changed. Then do Tools -> Generate patch .... In the dialogue box, make sure you select Style: Unified in the Format box.