From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: patch vs. overwrite in bzr [was: Next pretest, and regressions policy] Date: Thu, 05 Apr 2012 18:53:27 +0300 Message-ID: <83zkaqb2fc.fsf@gnu.org> References: <87k42cwys8.fsf@gnu.org> <87limhuldm.fsf@gnu.org> <871uo7g4j6.fsf@gnu.org> <87iphjhbm8.fsf@wanadoo.es> <87398lgrat.fsf_-_@niu.edu> <871uo5c7r0.fsf@wanadoo.es> <87pqbpj5j3.fsf@altern.org> <83hawzctfq.fsf@gnu.org> <87k41u4poa.fsf@gnu.org> Reply-To: Eli Zaretskii NNTP-Posting-Host: plane.gmane.org X-Trace: dough.gmane.org 1333690261 25017 80.91.229.3 (6 Apr 2012 05:31:01 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Fri, 6 Apr 2012 05:31:01 +0000 (UTC) Cc: emacs-devel@gnu.org To: Bastien Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Apr 06 07:31:00 2012 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1SG1lA-0005L5-Lg for ged-emacs-devel@m.gmane.org; Fri, 06 Apr 2012 07:30:56 +0200 Original-Received: from localhost ([::1]:51365 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SG1l6-00017p-Rx for ged-emacs-devel@m.gmane.org; Fri, 06 Apr 2012 01:30:52 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:46178) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SFp0C-0004kU-IN for emacs-devel@gnu.org; Thu, 05 Apr 2012 11:53:38 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SFp04-0007kz-Jm for emacs-devel@gnu.org; Thu, 05 Apr 2012 11:53:36 -0400 Original-Received: from mtaout21.012.net.il ([80.179.55.169]:35265) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SFozw-0007jl-1s; Thu, 05 Apr 2012 11:53:20 -0400 Original-Received: from conversion-daemon.a-mtaout21.012.net.il by a-mtaout21.012.net.il (HyperSendmail v2007.08) id <0M2000C00K4LBA00@a-mtaout21.012.net.il>; Thu, 05 Apr 2012 18:53:10 +0300 (IDT) Original-Received: from HOME-C4E4A596F7 ([84.229.252.114]) by a-mtaout21.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0M2000CMRK4L21G0@a-mtaout21.012.net.il>; Thu, 05 Apr 2012 18:53:10 +0300 (IDT) In-reply-to: <87k41u4poa.fsf@gnu.org> X-012-Sender: halo1@inter.net.il X-detected-operating-system: by eggs.gnu.org: Solaris 10 (beta) X-Received-From: 80.179.55.169 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:149415 Archived-At: > From: Bastien > Cc: ofv@wanadoo.es, emacs-devel@gnu.org > Date: Thu, 05 Apr 2012 09:13:09 +0200 > > I have a local "emacs-merge" branch, stemming from hotfix. This local > branch has a directory "emacs" that reproduce part of the hierarchy of > Emacs files, that part which contains Org files. > > doc > misc > ChangeLog > org.texi > etc > org > OrgOdtContentTemplate.xml > OrgOdtStyles.xml > README > refcards > orgcard.pdf > orgcard.tex > lisp > org > ChangeLog > [org/ob..el]x109 > > Then the sync process is this: > > 1. Check for org-related changes in Emacs trunk > > 2. Backport them to the hotfix branch > > 3. Copy the files from the hotfix branch to the emacs dir in my local > emacs-merge branch, and get a diff from there. > > 4. Clean up the patch so that it applies correctly in Emacs trunk. > > 5. Fix merge conflicts in the hotfix branch and go back to 3 if needed. > > 6. Commit the diff on the "org" bzr branch (bound to the remote Emacs > trunk) when things look fine. > > Suggestions against this workflow are welcome. Well, I'm not sure I get all the details of your setup, so it's possible that I will say something silly; apologies in advance. But IIUC, you could get away with less branches and less manual work. So here we go: Setup: . A bound bzr branch, let's call it emacs-trunk, where you don't make any changes, just merge before committing upstream, to the Emacs master repository. . A local bzr branch, let's call it emacs-org, which will be the branch that you sync with one of your git branches. From this branch you will merge to emacs-trunk before committing upstream. . A git branch that corresponds to emacs-org, I think this could be your hotfix branch, as I don't understand why you need the emacs-merge branch. Below I assume that you have the bzr-tiplog plugin installed. It provides the functionality similar to git-reflog, and lets you skip the error-prone step of remembering or keeping notes about the last bzr revision you sync'ed with (see below); the only revision id's you will ever need to remember is tip:0 and tip:1. The sync process proceeds in cycles. Each cycle begins when you sync from Emacs repo to Org as follows: cd emacs-trunk bzr update cd ../emacs-org bzr merge --pull ../emacs-trunk Now emacs-org is synchronized with the Emacs trunk. Next, produce the org-related changes since your last synchronization: bzr diff -r tip:1..tip:0 lisp/org > patches (If there are files outside lisp/org that you are interested in, perhaps etc/NEWS or doc/misc/org.texi, mention them as well; bzr will produce diffs only for those files and directories, leaving out stuff you don't care about.) The file `patches' produced above includes files that are added, removed, and renamed, but not in the form of diffs (I think). So to make sure you don't miss those changes, do also this: bzr status -r tip:1..tip:0 lisp/org (again, add any other directories you are interested in), and examine the output for any non-text changes. Now sync your git branch, by (a) applying `patches' with Patch, and (b) performing any file operations. The latter should be done by hand, or you could perhaps write some simple script to parse the output of "bzr status" and do it for you. After this, you develop Org normally. I understand you have other branches, so you probably will wish to use git commands to merge the changes into them as well, and then back to the branch that you will later sync with bzr. I suggest to perform the steps above as frequent as you can, to avoid diverging too much from the Emacs trunk. That will make the second part of the cycle easier. I'd expect that more often than not, you will find that no changes were done that pertain to Org, so I don't think the burden will be too heavy. The advantage is that your code will be very similar to what the Emacs trunk has, so all your testing will not need to be redone when you merge with the latest trunk below. So time passes, and you decide you are ready to commit to the Emacs repo. Then, just overwrite the files in emacs-org with the corresponding files in your git branch (using rsync or some such), and type these bzr commands: cd emacs-org bzr commit -m "sync'ed with git revision 12345abcd" You now have a bzr branch that is synchronized with your git branch. Now find out how much you diverged from the trunk since the last resync: cd ../emacs-trunk bzr update bzr diff -r branch:../emacs-org.. lisp/org If the diffs this shows are insignificant enough, you can simply merge into trunk and commit: bzr merge ../emacs-org bzr ci -m "Merge from Org repo." If, however, enough time has passed since the last sync, and the diffs are non-trivial, you will have to merge back to emacs-org and retest: cd ../emacs-org bzr merge ../emacs-trunk # build and test cd ../emacs-trunk bzr merge ../emacs-org bzr ci -m "Merge from Org repo." This completes the cycle, and you are ready to begin the next one. HTH