| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
| <HTML> |
| <HEAD> |
| |
| <meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." > |
| |
| <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"> |
| <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> |
| <LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css"> |
| <title>Working with patches</title> |
| </HEAD> |
| |
| <BODY BGCOLOR="#ffffff"> |
| <H1>Working with patches</H1> |
| |
| <p>Patches allow developers to share work without storing it in a repository. |
| This is helpful when a developer wants to contribute to a project that is shared |
| through a repository but does not have write access to the repository. In this |
| situation, the developer can create a patch and either e-mail it to a developer |
| who does have write access or attach it to a bug in the bug reporting system |
| used by the project, depending on the process defined by the project. A developer |
| that does have write access can then apply the patch to the project and commit |
| the changes.</p> |
| <H2>To create a patch from a CVS project:</H2> |
| <ol> |
| <li>Select the resource that contains the modifications to be included in the |
| patch. You can select resources that reside in multiple projects and at any level |
| as the Create Patch wizard, when run in its default mode, knows how to create a multi-project |
| patch. The patch should also be applied to the same file revisions that it |
| is generated on so steps should be taken to ensure that the patch is applied |
| to the same resource line-up (the easiest way to do this is to create the |
| patch on top of a version).</li> |
| <li>From the popup menu, select <b>Team > Create Patch...</b>. The Create |
| Patch wizard will open.</li> |
| <li>Choose where the patch should be saved: |
| <ol type="a"> |
| <li><i>Save to Clipboard</i> - this will place the patch on the clipboard |
| so it can be pasted into a text editor such as an e-mail program.</li> |
| <li><i>Save to File System</i> - this will place the patch in the specified |
| file in the local file system</li> |
| <li><i>Save in Workspace</i> - this will place the patch in the specified |
| file inside one of the existing workbench projects.</li> |
| </ol>For small patches it may be reasonable to transfer the patch using the clipboard |
| but in most cases the local file system in the best option to use. </li> |
| <li>You can preview and fine tune your patch selection by expanding the Resources tree presented |
| in the Changes pane. Only those elements which are checked will be included in the patch. Click <b>Next</b> to configure how the patch is generated.</li> |
| <li>Choose how to configure the patch: |
| <ol type="a"> |
| <li><i>Diff output format</i> - Allows the choice of several common diff |
| output formats. <i>Unified</i> is the format used by many patch application |
| tools including Eclipse.</li> |
| <li><i>Patch Root</i> - Allows you to specify at what level your patch is rooted at. The choices |
| are <i>Workspace</i>, <i>Project</i> and <i>Selection</i>.<br> |
| <br><i>Workspace</i> allows you to include resources from multiple projects in your patch and is the <em>default</em> option. Workspace |
| patches can be applied to any resource in the workspace - they contain enough information to allow the Apply Patch wizard |
| to figure out which resources need to be patched.<br> |
| <br><i>Project</i> patches are rooted at the project level - which means they can only contain resources from one project and must |
| be applied to the same project.<br> |
| <br><i>Selection</i> patches are rooted at whatever the selected resource is and must be applied to the same resource. |
| </li> |
| </ol> |
| </li> |
| <li>Click <b>Finish</b>. </li> |
| <li>Transfer the patch as appropriate for the project being patched.</li> |
| </ol> |
| <H2>To apply a patch:</H2> |
| <ol> |
| <li>Select the resource that the patch was generated on. This resource should |
| contain the same file revisions as the line-up on which the patch was generated.</li> |
| <li>From the pop-up menu, select <b>Team>Apply Patch...</b>. The Resource |
| Patcher wizard will open.</li> |
| <li>Indicate where the patch is to be found: |
| <ol type="a"> |
| <li><i>File</i> - the patch is in a file on the local file system. Either |
| type in the full path to the file or use the <b>Browse...</b> button to |
| find the file.</li> |
| <li><i>Clipboard</i> - the patch is on the clipboard. <b>Warning:</b> It |
| is safer to use a file based patch. Line endings may not be handled properly |
| if the clipboard is used and the patch was generated on a different platform |
| (i.e. Linux vs. Windows).</li> |
| <li><i>Workspace</i> - the patch has been saved somewhere in the workspace.</li> |
| </ol> Click <b>Next</b> to see the effect of applying the patch.</li> |
| <li> |
| <b>Optional Step</b>: <i>this step only applies if you have a patch rooted at the project or selection level - workspace |
| rooted patches will automatically proceed to the Patch Preview Page.</i> In the Patch Target Specification page, you should |
| select the resource that is to act as the root of the patch. |
| </li> |
| <li>The patch preview page shows whether the patch could be successfully applied |
| to files in your workspace. The top pane shows the list of changes contained in your patch. |
| If you select a leaf item in the tree the bottom pane |
| shows the part of the patch file (known as 'hunk' in patch terminology) in an easy to read |
| side by side presentation. <b>Note:</b> The bottom pane <b>does not</b> show a preview |
| of how resources in your workspace would look after applying the hunk. |
| It just shows the contents of the patch file. |
| |
| |
| <ol type="a"> |
| <li> |
| A checked item indicates that a patch (or hunk) could be successfully |
| applied to a workspace resource. |
| You can exclude patches or individual hunks by unchecking them. |
| </li> |
| |
| <li> |
| A red exclamation mark indicates that there is a problem with a patch or hunk. |
| <br> |
| This happens if the patch is not |
| well formed or the revision of one or more files that the patch were generated |
| on do not match the revisions that the patch is being applied to. |
| <br> |
| You find the reason for the failure in parenthesis. |
| <p> |
| In order to apply the full patch |
| successfully you will have to eliminate the problems (red exclamation marks) and get checked |
| items everywhere by tweaking the options on this wizard page (see 'Options' below).</p> |
| </li> |
| |
| </ol> |
| </li> |
| <li>If all is well, click <b>Finish</b> to apply the patch. The workspace will |
| now contain outgoing changes for each file modified by the patch.</li> |
| </ol> |
| |
| |
| <H3>Options for applying a patch</H3> |
| |
| For getting successful matches of your patch file you have the following options: |
| <ol> |
| |
| <li> |
| Go back to the first page of the Resource Patcher wizard and |
| select the correct resource to which the patch should be applied. |
| </li> |
| |
| <li> |
| If a common prefix of the path names stored in the patch file doesn't match |
| the path names in you current workspace, you can 'Ignore leading path name segments'. |
| </li> |
| |
| <li> |
| Use the 'Ignore whitespace' option to make the matching process |
| independent from whitespace differences between the patch file and files |
| in your workspace. |
| </li> |
| |
| <li> |
| Adjust the 'Maximum fuzz factor' (patch terminology). |
| This factor determines how many lines from the top and bottom of the context |
| will be ignored when locating a match |
| The default is two. |
| </li> |
| |
| <li> |
| Use the 'Reverse patch' option for patch files that already have been applied to your |
| workspace. This option is also useful to undo or redo a patch. |
| </li> |
| |
| <li> |
| For Workspace patches, use the 'Retarget Patch' to select another project in your workspace |
| to apply the patch changes to. To do this, select a project in the top pane and click on the |
| Retarget Patch button. This will launch a dialog with a list of all available projects in your |
| workspace. Select a project and click OK; the patch changes will be applied to your selected project. |
| </li> |
| |
| </ol> |
| |
| |
| <p><img border="0" src="../images/ngrelc.png" alt="Related concepts" ><br> |
| <a href="../concepts/concepts-26.htm">Team programming with CVS</a><br> |
| </p> |
| |
| <p><img border="0" src="../images/ngrelt.png" alt="Related tasks" ><br> |
| <a href="tasks-68.htm">Comparing resources</a> |
| </p> |
| |
| |
| <p><img border="0" src="../images/ngrelr.png" alt="Related reference" ><br> |
| <a href="../reference/ref-47.htm">CVS</a> |
| </p> |
| |
| |
| |
| </BODY> |
| </HTML> |