Thread (5 messages) 5 messages, 2 authors, 2011-09-10

how diff between hardlink trees works?

From: Vaibhav Jain <hidden>
Date: 2011-09-10 02:50:51

Thanks a lot!
Now it got clear to me.


On Fri, Sep 9, 2011 at 7:47 PM, Kai Meyer [off-list ref] wrote:
**
On 09/09/2011 12:39 PM, Vaibhav Jain wrote:



On Fri, Sep 9, 2011 at 11:12 AM, Kai Meyer [off-list ref] wrote:
quoted
  On 09/09/2011 09:05 AM, Vaibhav Jain wrote:

 Hi,

I am not able to understand how diff between two trees of which one is
just contains hardlinks to another's files (cp -al )ing
works.I am asking this question here because I need to build a custom
kernel for which I need to generate patch. So the
documentation suggests to create a hardlink copy of the kernel source tree
using cp -al and then make changes to
one of the trees and run a diff.I am wondering that if files are hardlinks
then changes to one copy will affect another in which case
diff should give no output.
Also, the patch I created looks a little odd as it contains complete
modified files instead of just the differences.
Please help!

Thanks
Vaibhav Jain


_______________________________________________
Kernelnewbies mailing listKernelnewbies at kernelnewbies.orghttp://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

 Make the hard link copy like normal. Then delete the directory that you
are making changes to (in the hard link directory), then copy the files over
with out hard links. That way "most" of the kernel tree is hard linked, and
just the portion you want to work on is a copy. That way the diff will work.

Otherwise, skip the hard link part all together, and just make a full
copy. Uses lots of disk space and takes longer to diff.

-Kai Meyer

Hi Kai,

Thanks for the reply. I need just one more favour.
Could you please look at this document describing the procedure to build
custom fedora kernel. It mentions the step to create hardlink to generate
but doesn't
talk about deleting anything ?I just need to confirm if the article is not
accurate or if there is
any error in my understanding.
Whenever I follow it I get a patch that contains all of the content of the
changed files rather than just the changes.

Here is the relevant portion :
 Copy the Source Tree and Generate a Patch

This step is for applying a patch to the kernel source. If a patch is not
needed, proceed to "Configure Kernel Options".

Copy the source tree to preserve the original tree while making changes to
the copy:

cp -r ~/rpmbuild/BUILD/kernel-2.6.$ver.$fedver/linux-2.6.$ver.$arch ~/rpmbuild/BUILD/kernel-2.6.$ver$fedver.orig
cp -al ~/rpmbuild/BUILD/kernel-2.6.$ver.$fedver.orig ~/rpmbuild/BUILD/kernel-2.6.$ver.$fedver.new


* The second cp command hardlinks the .orig and .new trees to make diffrun faster. Most text editors know how to break the hardlink correctly to
avoid problems.*

Using vim on FC14, it treated the hard link as a hard link and thus the
above technique failed. It was necessary to repeat the original copy used
for the .orig directory for the .new directory. Note that this uses twice
the space.

Make changes directly to the code in the .new source tree, or copy in a
modified file. This file might come from a developer who has requested a
test, from the upstream kernel sources, or from a different distribution.

After the .new source tree is modified, generate a patch. To generate the
patch, run diff against the entire .new and .orig source trees with the
following command:

cd ~/rpmbuild/BUILD
diff -uNrp kernel-2.6.$ver.$fedver.orig kernel-2.6.$ver.$fedver.new > ../SOURCES/linux-2.6-my-new-patch.patch


Thanks
Vaibhav


_______________________________________________
Kernelnewbies mailing listKernelnewbies at kernelnewbies.orghttp://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


The article says this:

"Using vim on FC14, it treated the hard link as a hard link and thus the
above technique failed. It was necessary to repeat the original copy used
for the .orig directory for the .new directory. Note that this uses twice
the space."
It means to say that some editors, like VIM, edit files in-place, and some
files copy the original contents into some other buffer (memory or temporary
file), and then effectively delete the file you're editing, and copy the
modified file into place. The hard-link instructions are a "trick" to save
time and space when you are modifying large code base, like the kernel. If
your favorite editor is behaving like the observed behavor of VIM, then you
will need to delete the hard link file, and put a regular copy of the file
in place before making changes.

-Kai Meyer
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20110909/53009801/attachment.html 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help