Re: [PATCH general-docs] update DevGuide for Mercurial
Mike Kupfer <[email protected]> Sun, 19 Jul 2015 15:51:54 -0700
| Newsgroups | gmane.emacs.xemacs.patches |
|---|---|
| Message-ID | <[email protected]> |
--=-=-= Content-Type: text/plain Mats and Stephen, thanks for reviewing the patch and for your comments. I've attached 2 patches. One is for just the changes since the first patch, the other contains the whole patch. Stephen J. Turnbull wrote: > Mats Lidell writes: > > > In the patch you have kept cvs-manager but on our web page we refer to > > MercurialAdministrator which links or [email protected]! (This refers to > > access rights for the xemacs repository. Isn't that what the cvs mail > > address was about. Access rights?) > > Yes. Okay, I replaced the references to the cvs-manager email address. I couldn't find a corresponding alias for Mercurial access, so I put in direct references to Mike S. and Stephen. By the way, http://www.xemacs.org/Develop/jobs.html still refers to CVS. > > > - I left in the @cindex tags that refer to CVS. Should those just be > > > changed from "CVS" to "Mercurial"? > > Either that, or the whole paragraph indexed be removed if it doesn't > apply to Mercurial. I mostly just changed the index term from CVS to Mercurial, and I added a few new @cindex tags for Mercurial and bitbucket.org. One notable exception: there's a node that was inherited from the MH-E DevGuide about updating the CVS repo on Savannah. I removed the CVS index tags, without replacement, but I didn't change any of the text in the node. (There's a note in it about how it might have something useful for XEmacs.) > > > - There was some email back in May about CNAMEs and Bitbucket--are any > > > changes needed to the DevGuide to deal with that? > > We should change any references to "hg.xemacs.org" to "bitbucket.com", I > think. Ah, okay, now I get it. There weren't any references to hg.xemacs.org. > > > - I didn't change the process rule in Section 5.10 that says "(t)he > > > log message should refer unambiguously to the 'COMMIT' message, > > > preferably via the RFC 2822 message ID". This is something we don't > > > seem to be doing, so should that text remain? > > > > No. I think you should remove it. It is good if the dev guide tries to > > be close to what we actually are doing. > > Do remove [it]. Done. cheers, mike --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=incremental-patch.diff Content-Description: incremental patch diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,25 @@ +2015-07-19 Mike Kupfer <[email protected]> + + Incorporate review feedback from Mats and Stephen. + + * texi/xemacs/xemacs-devguide.texi: + (Commit Access, Welcoming New Reviewers): Fix references to CVS + Manager. + (Tagging Releases, Creating Tarballs): Fix @cindex entries to + refer to Mercurial instead of CVS. + (Updating the Emacs Repository): Remove @cindex entries related + to the Emacs repo on Savannah. + (Updating the Online Documentation): Replace references to CVS + with references to Mercurial. + (Commit Access, Getting Started as a Package Maintainer) + (Updating and Merging with Mercurial) + (Committing and Pushing a Package Change) + (Updating a Package to a New Upstream Version) + (Create the Patch): Add new Mercurial and/or bitbucket @cindex + entries. + (Committing the Patch): Fix instructions for sending the commit + email. + 2015-07-10 Mike Kupfer <[email protected]> * texi/xemacs/xemacs-devguide.texi: Update to better reflect the diff --git a/texi/xemacs/xemacs-devguide.texi b/texi/xemacs/xemacs-devguide.texi --- a/texi/xemacs/xemacs-devguide.texi +++ b/texi/xemacs/xemacs-devguide.texi @@ -11,7 +11,7 @@ @c Developer's Guide variables. @set DEVGUIDE @cite{XEmacs Developer's Guide} @set EDITION 0.8 -@set UPDATED 2015-07-10 +@set UPDATED 2015-07-19 @set UPDATE-MONTH July, 2015 @c Other variables. @@ -696,9 +696,10 @@ @cindex xemacs-design mailing list @cindex mailing lists, xemacs-design @cindex committer +@cindex bitbucket.org If you think that you may contribute enough to want write access to the source -repositories, request access from the @email{cvs-manager@@xemacs.org,CVS +repositories, request access from the @email{mike@@xemacs.org,Mercurial Administrator} and get an account on @i{bitbucket.org}. Generally speaking, if you have contributed to the @value{PROJECT} mailing lists and @i{comp.emacs.xemacs} newsgroup over @@ -950,6 +951,9 @@ @node Getting Started as a Package Maintainer, Updating and Merging with Mercurial, The Package Maintainer Role, XEmacs Package Maintainer @subsection Getting Started as a Package Maintainer +@cindex bitbucket.org +@cindex Mercurial recipes + The first step is to clone the package from the source repository. The XEmacs packages are organized using Mercurial subrepositories (aka @@ -1057,6 +1061,8 @@ @node Updating and Merging with Mercurial, Committing and Pushing a Package Change, Getting Started as a Package Maintainer, XEmacs Package Maintainer @subsection Updating and Merging with Mercurial +@cindex Mercurial recipes + Although the package maintainer is normally the only person to update a package, it's possible that the repo on Bitbucket will contain changes that aren't in your local repo. If this happens, you will @@ -1087,6 +1093,8 @@ @node Committing and Pushing a Package Change, Updating a Package to a New Upstream Version, Updating and Merging with Mercurial, XEmacs Package Maintainer @subsection Committing and Pushing a Package Change +@cindex Mercurial recipes + Normally you will just push changes from your package (sub)repo, not the top-level packages repo. You can use @samp{hg stat} to check for uncommitted changes. After your final commit, you can use @@ -1102,6 +1110,8 @@ @node Updating a Package to a New Upstream Version, Advice to Package Maintainers, Committing and Pushing a Package Change, XEmacs Package Maintainer @subsection Updating a Package to a New Upstream Version +@cindex Mercurial recipes + If the XEmacs package sources are exactly the same as the upstream sources, updating to a new upstream version is easy: just copy in the new sources and update @samp{AUTHOR_VERSION} in the @file{Makefile}. @@ -1549,12 +1559,11 @@ practice we have had no dissents. So in most cases, where the new developer has been an active participant on one or more of the development lists, or has specific expertise of value to XEmacs, you -would simply recommend the new developer on xemacs-review. In the usual -case of no opposition ("lazy consensus"), the next step is to get an SSH -key, and ask one of the CVS maintainers (currently Adrian Aichner, -Norbert Koch, and Stephen Turnbull, mail alias cvs-manager@@xemacs.org) -to add the key to the authorized_keys file for the xemacs account at -SunSITE. +would simply recommend the new developer on xemacs-review. In the +usual case of no opposition ("lazy consensus"), the next step is to +get an account on Bitbucket, and ask one of the Mercurial +administrators (currently Mike Sperber and Stephen Turnbull) to grant +access to the new recruit. Your aliases at xemacs.org have already been set up for some time. For your information, they are @@ -1574,8 +1583,8 @@ You already have commit privileges in the XEmacs repository at bitbucket.org. If you have any trouble due to extensions of your -permissions, let the CVS Managers know at cvs-manager@@xemacs.org. -The directions at +permissions, let one of the Mercurial Administrators (Mike Sperber or +Stephen Turnbull) know. The directions at http://www.xemacs.org/Develop/hgaccess.html @@ -2021,6 +2030,8 @@ @node Create the Patch, Submit the Patch, Add a ChangeLog Entry, The Work Flow @section Create the Patch +@cindex Mercurial recipes + (The following lines describe the current patch creation standard for developers without commit access, committers, and reviewers alike. An optional alternative procedure for @emph{reviewers only} was @@ -2223,13 +2234,8 @@ Once the patch has been approved, it should be pushed to the source repository as soon -as possible. The committer should prepare a commit message using the -keyword @samp{COMMIT} as a reply to the approval message. (In the case -of @emph{commit-and-review}, there is no way to reply, so this -requirement is meaningless.) The changeset log message should refer -unambiguously to the @samp{COMMIT} message, preferably via the RFC 2822 -message ID. (The mailing list archives may lag up to 24 hours, so using -an URL is infeasible.) +as possible. The committer should also send a commit message using the +keyword @samp{COMMIT} as a reply to the approval message. @menu * Proposed Alternative Procedure:: @@ -3561,7 +3567,7 @@ @section Tagging Releases @cindex tags -@cindex CVS, tag +@cindex Mercurial, tag @cindex version numbers It is critical that a snapshot of the software is created each time @@ -3592,14 +3598,13 @@ @cindex Creating Tarballs @cindex modules -@cindex CVS, modules @cindex tarballs, naming @cindex tarballs, making @cindex tarballs, naming @cindex tags -@cindex CVS, tags +@cindex Mercurial, tags @cindex Makefile targets, dist @cindex version numbers @@ -3643,11 +3648,6 @@ The Emacs repository is updated by the project admin. Other developers may skip this section. -@cindex gnu.org -@cindex CVS Emacs Repository -@cindex Emacs CVS Repository -@cindex Savannah - The project admin must have an account on the @i{gnu.org} machines, and must also be given access to the Emacs CVS repository. This can be accomplished by following these steps: @@ -3682,8 +3682,6 @@ by checking out the module with a sticky tag and should be done in any case. -@cindex CVS, co - First, check out the Emacs source: @example @@ -3884,10 +3882,11 @@ @cindex Updating the Online Documentation @cindex online documentation, updating @cindex documentation, updating online -@cindex CVS, update - -The entire XEmacs web site is kept in CVS, and automatically rebuilt by -the commit trigger. +@cindex bitbucket.org +@cindex Mercurial, use in web site + +The entire XEmacs web site is kept in a Mercurial repo on Bitbucket, +and automatically rebuilt by the commit trigger. Thus, the basic procedure is similar to working on XEmacs source code. @@ -3907,7 +3906,7 @@ produced HTML is reasonably correct. @item -Commit the workspace. +Commit and push the workspace. @end enumerate The XEmacs online documentation is mostly written in the @file{genpage} --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=full-patch.diff Content-Description: full patch diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,35 @@ +2015-07-19 Mike Kupfer <[email protected]> + + Incorporate review feedback from Mats and Stephen. + + * texi/xemacs/xemacs-devguide.texi: + (Commit Access, Welcoming New Reviewers): Fix references to CVS + Manager. + (Tagging Releases, Creating Tarballs): Fix @cindex entries to + refer to Mercurial instead of CVS. + (Updating the Emacs Repository): Remove @cindex entries related + to the Emacs repo on Savannah. + (Updating the Online Documentation): Replace references to CVS + with references to Mercurial. + (Commit Access, Getting Started as a Package Maintainer) + (Updating and Merging with Mercurial) + (Committing and Pushing a Package Change) + (Updating a Package to a New Upstream Version) + (Create the Patch): Add new Mercurial and/or bitbucket @cindex + entries. + (Committing the Patch): Fix instructions for sending the commit + email. + +2015-07-10 Mike Kupfer <[email protected]> + + * texi/xemacs/xemacs-devguide.texi: Update to better reflect the + current Mercurial-based workflow. Remove most references to CVS. + Add information for package maintainers, some of which is + independent of Mercurial. + (Updating and Merging with Mercurial): New. + (Committing and Pushing a Package Change): New. + (Updating a Package to a New Upstream Version): New. + 2014-05-15 Norbert Koch <[email protected]> * Makefile (VERSION): XEmacs package 1.08 released. diff --git a/texi/xemacs/xemacs-devguide.texi b/texi/xemacs/xemacs-devguide.texi --- a/texi/xemacs/xemacs-devguide.texi +++ b/texi/xemacs/xemacs-devguide.texi @@ -10,9 +10,9 @@ @c Developer's Guide variables. @set DEVGUIDE @cite{XEmacs Developer's Guide} -@set EDITION 0.7 -@set UPDATED 2009-02-24 -@set UPDATE-MONTH February, 2009 +@set EDITION 0.8 +@set UPDATED 2015-07-19 +@set UPDATE-MONTH July, 2015 @c Other variables. @set XEMACSORG XEmacs.ORG @@ -26,7 +26,6 @@ @set DESIGN-LIST the @email{xemacs-design@@xemacs.org,XEmacs Design} mailing list @set REVIEW-LIST the @email{xemacs-review@@xemacs.org,XEmacs Review} mailing list @set PATCHES-LIST the @email{xemacs-patches@@xemacs.org,XEmacs Patches} mailing list -@set CVS-LIST the @email{xemacs-cvs@@xemacs.org,XEmacs CVS Notices} mailing list @set BUILDREPORTS-LIST the @email{xemacs-buildreports@@xemacs.org,XEmacs Build Reports} mailing list @copying @@ -166,7 +165,6 @@ * Project Website:: * Mercurial Repository:: -* CVS Repository:: * comp.emacs.xemacs:: * xemacs-beta:: * xemacs-design:: @@ -582,7 +580,7 @@ @item Postmaster @itemx Webmaster -@itemx CVS Manager +@itemx Repository Manager Administrators of the various Internet-based services important to XEmacs users and developers. @c #### Write nodes for these posts! @@ -647,7 +645,7 @@ @c MH-E says that committers may be _assigned_ bugs A @dfn{committer} is one who is authorized to check in approved changes -into the CVS repository, including changes to private branches they may +into the source repository, including changes to private branches they may maintain. Note that, in contrast to the use of this term on many projects, being a committer is simply an administrative convenience; committers must wait for approval to check in changes. @@ -669,14 +667,13 @@ @subsection Commit Access @cindex commit access -@cindex cvs.xemacs.org committer accounts +@cindex bitbucket.org committer accounts There are a few minor prerequisites to get out of the way. The first is -to get an account on @i{alioth.debian.org} so that you can access the -XEmacs 21.5 Mercurial repository, the second is to -@email{cvs-manager@@xemacs.org,request an account at -@i{cvs.xemacs.org}} to access the CVS repository of packages, and the -third is to @uref{http://www.xemacs.org/Lists/#xemacs-beta, subscribe to +to get an account on @i{bitbucket.org} so that you can access the +Mercurial repositories for XEmacs core code and packages. +The second is to +@uref{http://www.xemacs.org/Lists/#xemacs-beta, subscribe to the XEmacs Beta mailing list}. @cindex XEmacs User's Guide @@ -699,14 +696,14 @@ @cindex xemacs-design mailing list @cindex mailing lists, xemacs-design @cindex committer - -If you think that you may contribute enough to want access to the CVS or -Mercurial -repositories, request access from the @email{cvs-manager@@xemacs.org,CVS -Administrator} and get an account on @i{alioth.debian.org}. +@cindex bitbucket.org + +If you think that you may contribute enough to want write access to the source +repositories, request access from the @email{mike@@xemacs.org,Mercurial +Administrator} and get an account on @i{bitbucket.org}. Generally speaking, if you have contributed to the @value{PROJECT} mailing lists and @i{comp.emacs.xemacs} newsgroup over -the years, you will be given CVS privileges within a few days. If you +the years, you will be given write privileges within a few days. If you are new, you may need to find a sponsor on the @value{BOARD} to vouch for you. @@ -772,36 +769,14 @@ have Usenet access. Here are a few guidelines that should make things run fairly smoothly -for all those involved. - -CVS -=== - -Getting hold of your code from CVS: ----------------------------------- - CVS_RSH=ssh - cvs -z3 -d :ext:xemacs@@cvs.xemacs.org:/pack/xemacscvs co redtape - -Which will get just the redtape package. You can get all the packages -with the module name "packages". I'd strongly suggest that you get the -whole packages tree as usually packages require some functionality from -other packages. But be warned, the packages tree is quite big (120+ MB -as of 2007/02). - -Committing patches to CVS: -------------------------- - My recommendation would be to use the excellent PCL-CVS - package. It makes life a whole lot easier. - - Also, 'patcher.el' and 'patch-keywords.el' from the xemacs-devel - package are both excellent libraries that can make things a lot - easier for you when it comes to creating and submitting patches. +for all those involved. See the section ``XEmacs Package Maintainer'' +in the XEmacs Developer Guide for additional information and tips. Building ======== For a quick start to building packages, see INSTALL under the packages/ -dir you've checked out from CVS. +dir where you set up a local source tree. Patches ======= @@ -841,14 +816,14 @@ As the XEmacs Packages Release Manager, I'd like to add a couple of things here: - 1) The packages CVS repository is a "stable" branch, please + 1) The packages repository is a "stable" branch, please do all that you can to keep it that way. 2) In the Makefile you'll see "VERSION=" and "AUTHOR_VERSION=", please don't ever alter the former. We do that as part of the package release process. - 3) When you update redtape in CVS it'd be great if you could + 3) When you update redtape on Bitbucket it'd be great if you could either drop me a quick email or post to xemacs-beta saying that redtape is ready for release. @@ -856,13 +831,13 @@ ----------------------------------------------------- You - hack hack hack - - cvs diff -u > cool-new-patch.diff + - hg diff > cool-new-patch.diff - submit to xemacs-patches - unless there are objections, or if it's "obviously correct", - commit to CVS + commit and push to Bitbucket Us - - cvs update + - hg pull -u - build new version of redtape - upload to the "Pre-Release" directory of ftp.xemacs.org - announce release on xemacs-beta @@ -930,6 +905,9 @@ @menu * The Package Maintainer Role:: * Getting Started as a Package Maintainer:: +* Updating and Merging with Mercurial:: +* Committing and Pushing a Package Change:: +* Updating a Package to a New Upstream Version:: * Advice to Package Maintainers:: @end menu @@ -970,28 +948,42 @@ -@node Getting Started as a Package Maintainer, Advice to Package Maintainers, The Package Maintainer Role, XEmacs Package Maintainer +@node Getting Started as a Package Maintainer, Updating and Merging with Mercurial, The Package Maintainer Role, XEmacs Package Maintainer @subsection Getting Started as a Package Maintainer -The first step is to check out the package from CVS in -read-write mode. This is done as follows: +@cindex bitbucket.org +@cindex Mercurial recipes + +The first step is to clone the package from the source repository. + +The XEmacs packages are organized using Mercurial subrepositories (aka +subrepos). This means that each package lives in its own Mercurial +repo, plus there's one more repo at the top level. Although it's +possible to clone a single package repo, it's better to clone the +entire tree, so that you get the build infrastructure that the top +level provides. The simplest way to do this is as follows: @example -export CVSROOT=:ext:xemacs@@cvs.xemacs.org:/pack/xemacscvs -export CVS_RSH=/usr/bin/ssh -cvs checkout packages +hg clone https://bitbucket.org/xemacs/xemacs-packages mypackages @end example -This will take a while, and about 120MB of space. It's possible to do +This will take a while, and about 210MB of space. It's possible to do without most of the packages (for example, most modes can delete all of the mule-packages subtree), but the Lisp programming language makes it very easy to call functions in one package from another, and -interdependencies are frequent. Unless one is really really tight for -space, it's best to start by just checking out the whole thing, and -prune it back later. - -The package developer is welcome to change anything in the subtree that -contains the package. However, there are a couple of administrative +interdependencies are frequent. + +The next step is to configure any packages that you want to change so +that they can be pushed back to Bitbucket. In the @file{.hg/hgrc} for +each such package, change the https URL to an ssh URL, i.e., + +@example +default=ssh://hg@@bitbucket.org/xemacs/@var{package_name} +@end example + +The package developer is welcome to change anything in the repo for +his or her +package. However, there are a couple of administrative files that are conceptually the "property" of the package system. These are @file{package-info.in} and the @file{Makefile}. There is almost surely no need to change either at this time, except to change the @@ -1005,18 +997,22 @@ == VERSION}; ask the package release engineer about it if that seems attractive. -So now you can (with the above environment settings) +So now you can @example -cd packages/xemacs-packages/@var{package_name} +cd mypackages/xemacs-packages/@var{package_name} xemacs Makefile # change MAINTAINER to your name and address -# make a patch with cvs diff > my.patch and send it to XEmacs Patches -cvs commit -m "Update MAINTAINER name and address." Makefile +# make a patch with hg diff > my.patch and send it to XEmacs Patches +hg commit -m "Update MAINTAINER name and address." Makefile +hg push @end example which is a good test that everything is working. You can find out -more about CVS and the XEmacs repository at @url{http://cvs.xemacs.org}. +more about Mercurial and the XEmacs repository at +@url{http://www.xemacs.org/Develop/hgaccess.html}. Additional +documentation on Mercurial Subrepositories is at +@url{http://mercurial.selenic.com/wiki/Subrepository}. Many maintainers who have a separate repository for the upstream project do not send patches, but simply announce a synch to upstream. However, @@ -1030,11 +1026,8 @@ is set to something useful. Now you can build a test package by simply typing @kbd{make bindist}. -Then copy the updated upstream files over the existing ones. Try -making a package with make bindist. Use the new code, too, to see if -you find any bugs. If not, you can commit the new files to CVS. - -When you make a commit, you should notify the package release engineer, +When you push a change to the master packages repository, you should +notify the package release engineer, currently @email{viteno@@xemacs.org,Norbert Koch}, about your intentions. Norbert is pretty aggressive about making new packages and putting them up for download. If you don't want that after a given @@ -1046,7 +1039,6 @@ @example @var{firstname.lastname}@@xemacs.org -@var{cvsuser}@@xemacs.org @end example You can use these publically as you see fit, or not. The package @@ -1066,9 +1058,124 @@ about the XEmacs package in upstream project channels rather than XEmacs channels. - - -@node Advice to Package Maintainers, , Getting Started as a Package Maintainer, XEmacs Package Maintainer +@node Updating and Merging with Mercurial, Committing and Pushing a Package Change, Getting Started as a Package Maintainer, XEmacs Package Maintainer +@subsection Updating and Merging with Mercurial + +@cindex Mercurial recipes + +Although the package maintainer is normally the only person to update +a package, it's possible that the repo on Bitbucket will contain +changes that aren't in your local repo. If this happens, you will +need to merge in those changes before pushing your changes. + +As a general recommendation, you should commit your local changes +before pulling from the parent repository. Having your changes +committed means they will not be lost in case something goes awry +during the merge process. + +If you need to run @samp{hg merge}, you should do an @samp{hg commit} +after you have finished merging the changes. This will make it easier +to distinguish additional work from changes that resulted from the +merge. + +Assuming you have the entire package tree, the most reliable way to get an +update is to do @samp{hg pull -u} in the top-level repository. The +@samp{-u} (or +a separate @samp{hg update}) is necessary to pull the subrepo updates from +the parent repository. + +If a merge is needed in your package subrepo, Mercurial will indicate it +when processing your subrepo +with the string @samp{+1 heads}. You can then use +the normal @samp{hg merge} and @samp{hg commit} commands within the subrepo. + + +@node Committing and Pushing a Package Change, Updating a Package to a New Upstream Version, Updating and Merging with Mercurial, XEmacs Package Maintainer +@subsection Committing and Pushing a Package Change + +@cindex Mercurial recipes + +Normally you will just push changes from your package (sub)repo, not +the top-level packages repo. You can use @samp{hg stat} to check for +uncommitted changes. After your final commit, you can use +@samp{hg outgoing} to list the changeset(s) that you will be pushing. + +If your push fails with an error message about creating multiple +heads, that usually means that changes have been made in the parent +repo since the last time you pulled from it. It's usually best to +pull down those changes and (re)run @samp{hg merge}. Retest as needed, +review your changes, commit, and try again to push. + + +@node Updating a Package to a New Upstream Version, Advice to Package Maintainers, Committing and Pushing a Package Change, XEmacs Package Maintainer +@subsection Updating a Package to a New Upstream Version + +@cindex Mercurial recipes + +If the XEmacs package sources are exactly the same as the upstream +sources, updating to a new upstream version is easy: just copy in the +new sources and update @samp{AUTHOR_VERSION} in the @file{Makefile}. +Build, test, commit, and push. + +Often, though, the XEmacs package has diverged from upstream. In this +situation, the package maintainer can keep a pristine copy of the +most recent upstream version (i.e., the version that the XEmacs +package is based on). Updating to a new upstream version then +involves the following steps: + +@enumerate +@item +Diff the new upstream version against the previous upstream version to +generate a patch file. + +@item +If necessary, massage the patch file to reflect the XEmacs file +layout, or to remove diffs for files that are not in the XEmacs +package. + +@item +Make sure that your repository has the latest changesets from +Bitbucket. + +@item +Apply the patch and resolve any conflicts by hand. + +@item +Manually register any new files with Mercurial (@samp{hg add}) and remove +any files that have been deleted (@samp{hg rm --after}). + +@item +Build your package (and optionally build the entire package tree). +Test as seems appropriate. + +@item +When you are ready (e.g., after testing), commit and push the new +version as described in the previous section. + +@end enumerate + +After pushing, monitor @uref{http://www.contactor.se/~matsl/smoketest/, +the package smoketest} in case your changes break the build of other +packages. + +@heading ChangeLog files + +Many upstream packages provide their own @file{ChangeLog} files. You +may wish to rename those to @file{ChangeLog.upstream} (or some +variation), so that they are separate from the XEmacs @file{ChangeLog} +files. You can refer to the upstream @file{ChangeLog} file in the +@file{ChangeLog} entry that you create when updating to a new upstream +release. For example: + +@example + YYYY-MM-DD J. Random Hacker <jrh@@xemacs.org> + + * Sync with foobar 2.7. + Please see the ChangeLog.upstream files for details. +@end example + + +@node Advice to Package Maintainers, , Updating a Package to a New Upstream Version, XEmacs Package Maintainer @subsection Advice to Package Maintainers This section contains some as yet unorganized advice to package @@ -1083,8 +1190,9 @@ the @file{xemacs-base} package, for example. Therefore the recommended procedure is to check out the whole package tree, configure @file{Local.rules}, and do a full build with @kbd{make} from the top. -(After that you should keep the tree up-to-date with @kbd{cvs update --dP} and occasionally do a @kbd{make} to keep things in order.) Having +(After that you should keep the tree up-to-date, +@xref{Updating and Merging with Mercurial}, and +occasionally do a @kbd{make} to keep things in order.) Having done this once, you can thereafter normally simply do @kbd{make} and @kbd{make bindist} in your package's top directory. @@ -1094,6 +1202,36 @@ process @emph{are} welcome, but they must account for the need to provide macro definitions and autoloads. +@heading Cloning from your local copy + +The clone command in @ref{Getting Started as a Package Maintainer} +produces a packages tree that can be +built, but because of the way the subrepositories are laid out, you +cannot clone it further. If you wish to create further clones, you +should create one more directory layer, e.g., + +@example +mkdir mypackages +cd mypackages +hg clone https://bitbucket.org/xemacs/xemacs-packages +@end example + +and then run the following script. In the example above, you would +run it from the @file{mypackages/xemacs-packages} directory. + +@example +#! /bin/sh +top=$(basename $(pwd)) +for d in mule-packages xemacs-packages; do + for f in $d/*; do + [ -d $f ] && ln -s $top/$f .. + done +done +mv ../Sun ../sun +mv ../hm--html-menus ../hm-html-menus +@end example + + @heading Lisp macros and autoloads Lisp provides @dfn{macros}, which involve @dfn{expansion}, which means @@ -1135,6 +1273,19 @@ since make itself and simply starting XEmacs to do the compilation are pretty time-consuming. +@heading Maintaining Package Metadata + +If you change the packages that your package depends on, or if you +change the libraries that your package provides, you will need to edit +one or more files to reflect those changes. + +To update the packages that your package depends on, edit the +@samp{REQUIRES} list in the package's +@file{Makefile}. + +To update the list of libraries that your package provides, edit the +@samp{provides} clause in the package's @file{package-info.in}. + @heading For the future Some attempts have been made to track the dependencies on macros and @@ -1145,6 +1296,37 @@ just build the packages, and set up dependencies when errors occur. +@heading XEmacs-Specific Changes + +You can make XEmacs-specific changes easier to find by tagging them +with this comment: + +@example +;; XEmacs change +@end example + +Of course, the more variances there are between the upstream code and +the XEmacs package, the harder it will be to update to new upstream +versions. So the general recommendation is to work with the upstream +developers to get any such changes incorporated into the upstream code +base. + +@heading Changes to Other Packages or Top-Level + +Sometimes your changes may require changes to code that you don't own. +For example, API changes in a new release of your package may break +other packages. Also, the top-level repo has some package-specific +data, like whether the sources are in the package's top-level +directory or in a @file{lisp} subdirectory@footnote{See +@samp{package-directory-map} in @file{package-compile.el}.}. +So it's possible you will need +to make changes in the top-level repo as well. + +If you need to make changes in code that you don't own, send mail to +XEmacs Beta to ask for assistance. Describe the changes that you want +to make (and why) and ask for instructions on how to proceed. + + @heading Getting Help with Your Package If you want advice on the code itself, just post it to XEmacs Patches, @@ -1209,7 +1391,7 @@ @cindex nonexistence of authoritative maintainer A @dfn{reviewer} is a developer who may approve or veto patches proposed -for application to the CVS trunk. They are expected to subscribe to +for application to the XEmacs core code. They are expected to subscribe to @value{PATCHES-LIST}, the channel for submission of patches to the XEmacs code base and documentation sources. The collection of reviewers constitutes the @dfn{XEmacs Review Board}, which is responsible for @@ -1377,12 +1559,11 @@ practice we have had no dissents. So in most cases, where the new developer has been an active participant on one or more of the development lists, or has specific expertise of value to XEmacs, you -would simply recommend the new developer on xemacs-review. In the usual -case of no opposition ("lazy consensus"), the next step is to get an SSH -key, and ask one of the CVS maintainers (currently Adrian Aichner, -Norbert Koch, and Stephen Turnbull, mail alias cvs-manager@@xemacs.org) -to add the key to the authorized_keys file for the xemacs account at -SunSITE. +would simply recommend the new developer on xemacs-review. In the +usual case of no opposition ("lazy consensus"), the next step is to +get an account on Bitbucket, and ask one of the Mercurial +administrators (currently Mike Sperber and Stephen Turnbull) to grant +access to the new recruit. Your aliases at xemacs.org have already been set up for some time. For your information, they are @@ -1401,22 +1582,22 @@ mailing list administrator at xemacs-mailmaint@@xemacs.org. You already have commit privileges in the XEmacs repository at -cvs.xemacs.org. If you have any trouble due to extensions of your -permissions, let the CVS Managers know at cvs-manager@@xemacs.org. -The directions at - - http://www.xemacs.org/Develop/cvsaccess.html +bitbucket.org. If you have any trouble due to extensions of your +permissions, let one of the Mercurial Administrators (Mike Sperber or +Stephen Turnbull) know. The directions at + + http://www.xemacs.org/Develop/hgaccess.html seem to be pretty clear. XEmacs uses facilities at Tux.org (mailing lists, FTP archive, and web -site), at SunSITE.dk (CVS repository, web site). There is also a web -site mirror at SourceForge, but this is rarely of interest to anyone -except the webmaster. If you need access to these resources, let me -know (for Tux) or Adrian (for SunSITE). The administrators on both -sites are very helpful within the constraints of their security -policies, and if there is a reasonable need, they generally respond by -providing access. +site), in addition to the source code management provided by +Bitbucket. There is also a web site mirror at SourceForge, but this +is rarely of interest to anyone except the webmaster. If you need +access to Tux.org, let me know. The administrators are +very helpful within the constraints of their security policies, and if +there is a reasonable need, they generally respond by providing +access. If you have any questions, feel free to ask any of the reviewers directly (see http://www.xemacs.org/Develop/jobs.html) or post to @@ -1516,10 +1697,10 @@ @item Create the patch. Dot the i's, cross the t's. Make sure that it's easy to add to the code -base. The best way is by using @code{cvs diff -uN} against the tip of +base. The best way is by using @code{hg diff} against the tip of the branch or trunk you intend to have the patch applied to. The -exception is ChangeLog patches, which may be generated using @code{cvs -diff -U 0 ChangeLog}, or submitted as plain test. +exception is ChangeLog patches, which may be generated using @code{hg +diff -U 0 ChangeLog}, or submitted as plain text. @item Submit the patch. Compose the message, especially the Subject: header, so it's easy to @@ -1614,9 +1795,8 @@ @section Get the Sources Maybe the developer has never worked on XEmacs before. In that case, -he'll need to check out the @samp{xemacs} tree from the Mercurial -repository (@pxref{Mercurial Repository}), or the package tree from the -CVS repository (@pxref{CVS Repository}. True, he may already have the +he'll need to check out the source tree from the Mercurial +repository (@pxref{Mercurial Repository}). True, he may already have the whole package because he built from source after downloading a tarball. However, tarballs often lag current development by many months, and there's nothing that turns a maintainer off like a patch that doesn't @@ -1720,7 +1900,7 @@ Each module should have its own @file{ChangeLog}. Change logs are cool because they summarize all the changes in one place, and provide -visibility to the changes to those who do not have access to the CVS +visibility to the changes to those who do not have access to the source repository. Here is an example @file{ChangeLog} entry: @@ -1808,7 +1988,7 @@ @cindex log messages @cindex ChangeLog -Log messages for Mercurial or CVS checkins +Log messages for Mercurial checkins should be taken from @file{ChangeLog}. Given the @file{ChangeLog} in the previous section, here is what the log for @file{fixhtml} might look like: @@ -1830,12 +2010,9 @@ information will be encoded in the tags. At worst, setting the log information will be a cut and paste -operation. At best, it will be a keystroke or two. In pcl-cvs, you can -simply hit @kbd{C} (@code{cvs-mode-commit-setup}) and you'll get a -buffer in @code{log-edit-mode} initialized with the appropriate -entries from the change log. Or, you can suck in the change log -entries with @kbd{C-c C-a} (@code{log-edit-insert-changelog}) if you -use VC. +operation. At best, it will be a keystroke or two. Currently cut and +paste is required because the XEmacs version of VC does not support +Mercurial. I specify the following for @code{log-edit-hook} to make life easier: @@ -1853,19 +2030,21 @@ @node Create the Patch, Submit the Patch, Add a ChangeLog Entry, The Work Flow @section Create the Patch +@cindex Mercurial recipes + (The following lines describe the current patch creation standard for developers without commit access, committers, and reviewers alike. An optional alternative procedure for @emph{reviewers only} was adopted in first quarter 2005.) Patches should be created using a standard diff(1) such as provided by -GNU diffutils, or implemented by CVS. A patch should be a +GNU diffutils, or implemented by Mercurial. A patch should be a @dfn{changeset}, that is, it should collect all of the related changes required to implement the improvement in a single file or message. The patch must be a context diff to avoid spurious commits. The @samp{diff --urN} format produced by GNU diff or recent CVS versions is strongly +-urN} format produced by GNU diff is strongly preferred (except for @file{ChangeLog}; see below). @strong{N.B.} If -you use older diffs or CVS (eg, version CVS 1.10), please check for the +you use older diffs, please check for the presence of full relative paths in three places: the @samp{Index}, @samp{---}, and @samp{+++} lines. If the latter do not have the appropriate relative paths, patch(1) will invariably @emph{fail} to find @@ -1880,12 +2059,6 @@ format for the @file{ChangeLog} diff. These should be prepended to the changeset. -Didier Verna's @file{patcher.el} is an excellent utility for creating -patches for submission to XEmacs. It can also submit the patch and -commit the changes to CVS as appropriate. -It is available in the @file{xemacs-devel} package. - - @node Submit the Patch, Patch Review, Create the Patch, The Work Flow @section Submit the Patch @@ -1899,7 +2072,7 @@ adopted in first quarter 2005.) Send the patch by email to @value{PATCHES-LIST}. The subject line -should indicate the branch or CVS module in square brackets at the +should indicate the branch or package in square brackets at the beginning of the field. Some developers like to include the keyword @samp{PATCH}; it is optional. After the square brackets, some mnemonic reference to the nature of the patch should be given. This might @@ -1951,10 +2124,6 @@ [etc, etc] @end example -Didier Verna's @file{patcher.el} is an excellent utility for creating -patches for submission to XEmacs. It can also submit the patch and -commit the changes to CVS as appropriate. - @menu * Optional Alternate Procedure for Reviewers:: @end menu @@ -1967,7 +2136,8 @@ Patches that are self-approved by a reviewer, and are either expected to be non-controversial or are part of a project that has the general approval of the @value{BOARD}, may optionally omit the email submission. -Instead, the responsible reviewer simply commits the patch, and the CVS +Instead, the responsible reviewer simply commits the patch, and the +repository commit-trigger will automatically generate and post the patch to @value{PATCHES-LIST}. This may be referred to as @dfn{implicit self-approval}. @@ -2062,14 +2232,10 @@ @cindex patch, committing a @cindex committing a patch -Once the patch has been approved, it should be checked in to CVS as soon -as possible. The committer should prepare a commit message using the -keyword @samp{COMMIT} as a reply to the approval message. (In the case -of @emph{commit-and-review}, there is no way to reply, so this -requirement is meaningless.) The CVS log message should refer -unambiguously to the @samp{COMMIT} message, preferably via the RFC 2822 -message ID. (The mailing list archives may lag up to 24 hours, so using -an URL is infeasible.) +Once the patch has been approved, it should be pushed to the source +repository as soon +as possible. The committer should also send a commit message using the +keyword @samp{COMMIT} as a reply to the approval message. @menu * Proposed Alternative Procedure:: @@ -2080,7 +2246,7 @@ @node Proposed Alternative Procedure, , Committing the Patch, Committing the Patch @subsection Proposed Alternative Procedure -In the case of implicit self-approval, the CVS log message should +In the case of implicit self-approval, the changeset log message should describe the rationale for the patch, and list the affected modules and subdirectories in the tree. This should be enough to point reviewers to the relevant ChangeLog diffs, which will automatically be included. @@ -2209,7 +2375,7 @@ @strong{Write this node!} Get mailing list and newsgroup information from the @uref{http://www.xemacs.org/Lists/, mailing list page}, -available as the module @emph{xemacsweb} @ref{CVS Repository}. +available as the module @emph{xemacsweb}. There should also be a node for the Emacs Wiki. @@ -2218,7 +2384,6 @@ @menu * Project Website:: * Mercurial Repository:: -* CVS Repository:: * comp.emacs.xemacs:: * xemacs-beta:: * xemacs-design:: @@ -2244,13 +2409,13 @@ @c #### this probably belongs elsewhere? this subtree is more user-oriented. To install your updates into the XEmacs Web space at @value{XEMACSORG}, -simply check out the @file{xemacsweb} module @ref{CVS Repository}, make +simply check out the @file{xemacsweb} module, make your changes, and check it in. The commit script takes care of generating the HTML and pushing the changes to the web servers' document spaces. -@node Mercurial Repository, CVS Repository, Project Website, XEmacs Resources on the Internet +@node Mercurial Repository, comp.emacs.xemacs, Project Website, XEmacs Resources on the Internet @section Mercurial Repository @cindex Mercurial Repository @@ -2261,7 +2426,7 @@ browser on the HTTP URL. @table @uref -@item http://hg.debian.org/xemacs/xemacs-beta +@item https://bitbucket.org/xemacs/xemacs-beta The branch from which beta releases are made. Direct commits are not allowed. Only the gatekeepers (pulling approved patches from the @file{xemacs} branch) and the Beta Release Manager may commit @@ -2269,10 +2434,10 @@ in a buildable state. It should lag the @file{xemacs} branch by less than a week, unless a patch is found to break the build. -@item http://hg.debian.org/xemacs/xemacs +@item https://bitbucket.org/xemacs/xemacs A public-access URL for the bleeding edge. -@item hg://hg.debian.org//xemacs/xemacs +@item ssh://hg@@bitbucket.org/xemacs/xemacs The commit access URL for the bleeding edge. Although you cannot easily push changesets that would create a new head, committers who use named branches should take care not to push from branches other than @@ -2281,20 +2446,7 @@ @end table -@node CVS Repository, comp.emacs.xemacs, Mercurial Repository, XEmacs Resources on the Internet -@section CVS Repository - -@cindex CVS Repository - -@c #### update the specific links for convenience!! -The @uref{http://cvs.xemacs.org/,CVS Repository} -contains several modules. You can view the repository with ViewCVS from -a link on repository's home page, and there is a link to an explanation -of how to use CVS in the CVS Repository. - - - -@node comp.emacs.xemacs, xemacs-beta, CVS Repository, XEmacs Resources on the Internet +@node comp.emacs.xemacs, xemacs-beta, Mercurial Repository, XEmacs Resources on the Internet @section The Usenet Newsgroup comp.emacs.xemacs @strong{Write me!} @@ -3281,7 +3433,7 @@ @cindex src @cindex Debian -When the @code{src} module is released (@pxref{CVS Repository}), the +When the @code{src} module is released, the file @file{NEWS} needs to be updated. Separate the old news with the new with a @kbd{C-l} and follow the existing format for documenting user-visible changes only including New Features, New @@ -3392,7 +3544,7 @@ often depend on the syntax of this file to work correctly. In beta releases, there is an optional variable @samp{xemacs_extra_name} which is a string that is appended to the version string. It is currently -automatically updated, and used to identify the date of a CVS checkout. +automatically updated, and used to identify the Mercurial changeset. Except in cases involving creation of a new stable branch, update of the version information simply requires bumping @samp{emacs_beta_version} @@ -3415,18 +3567,17 @@ @section Tagging Releases @cindex tags -@cindex CVS, tag +@cindex Mercurial, tag @cindex version numbers It is critical that a snapshot of the software is created each time -the software is released. In CVS, this is performed with tags. +the software is released. With Mercurial, this is performed with tags. Every series of stable releases must have a branch tag of the form @i{release-M-N}. The trunk has no branch tag. Every release must have a fixed tag of the form @i{release-M-N-B}, where @var{M} is the major number, @var{N} is the minor number, and @var{B} is the beta release or -patch number. A hyphen is used since one cannot use dots in CVS tag -names. +patch number. A hyphen is used for historical reasons. The stable release branch tag doubles as a tag of the most recent release. While this is not quite true during the process of @@ -3446,47 +3597,17 @@ @section Creating Tarballs @cindex Creating Tarballs -@cindex CVS Repository @cindex modules -@cindex CVS, modules @cindex tarballs, naming -The modules in the CVS Repository (@pxref{CVS Repository}) map to the -distribution tarballs as follows: - -@quotation -@multitable @columnfractions .4 .6 - -@item @strong{Module} -@tab @strong{Tarball} - -@item Full distro -@tab xemacs-X.Y.Z.tar.gz - -@item Patch -@tab xemacs-X.Y.Z-X.Y.(++Z).patch.gz - -@item Sources only -@tab xemacs-X.Y.Z-src.tar.gz - -@item Compiled Lisp -@tab xemacs-X.Y.Z-elc.tar.gz - -@item Formatted Info -@tab xemacs-X.Y.Z-info.tar.gz - -@end multitable -@end quotation @cindex tarballs, making @cindex tarballs, naming @cindex tags -@cindex CVS, tags +@cindex Mercurial, tags @cindex Makefile targets, dist @cindex version numbers -The tarballs listed in the table above are built as follows: - @strong{Write me!} @node Creating @value{XEMACSORG} Releases, Updating the Tracker, Creating Tarballs, File Releases @@ -3527,11 +3648,6 @@ The Emacs repository is updated by the project admin. Other developers may skip this section. -@cindex gnu.org -@cindex CVS Emacs Repository -@cindex Emacs CVS Repository -@cindex Savannah - The project admin must have an account on the @i{gnu.org} machines, and must also be given access to the Emacs CVS repository. This can be accomplished by following these steps: @@ -3566,8 +3682,6 @@ by checking out the module with a sticky tag and should be done in any case. -@cindex CVS, co - First, check out the Emacs source: @example @@ -3768,10 +3882,11 @@ @cindex Updating the Online Documentation @cindex online documentation, updating @cindex documentation, updating online -@cindex CVS, update - -The entire XEmacs web site is kept in CVS, and automatically rebuilt by -the commit trigger. +@cindex bitbucket.org +@cindex Mercurial, use in web site + +The entire XEmacs web site is kept in a Mercurial repo on Bitbucket, +and automatically rebuilt by the commit trigger. Thus, the basic procedure is similar to working on XEmacs source code. @@ -3791,7 +3906,7 @@ produced HTML is reasonably correct. @item -Commit the workspace. +Commit and push the workspace. @end enumerate The XEmacs online documentation is mostly written in the @file{genpage} @@ -3799,7 +3914,7 @@ special commands processed by the @code{genpage} script, and a consistent overall format enforced by use of template files. Some of the material, such as the online versions of the @emph{XEmacs User's -Guide} is generated directly from Texinfo, and checked in to CVS as HTML +Guide} is generated directly from Texinfo, and checked in as HTML rather than @file{genpage} source. The validator used by @code{make validate} is based on the PSGML --=-=-= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ XEmacs-Patches mailing list [email protected] http://lists.xemacs.org/mailman/listinfo/xemacs-patches --=-=-=--