blob: 67d17700887ce5468048fd2704b7f0ab5a760b42 [file] [log] [blame]
<!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 &gt; 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&gt;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>