4 @settitle SXEmacs Policies & Procedures Manual
9 @c Define a macro or 2 (abbrevs)
15 Copyright @copyright{} 2004 - 2010 @sy{}
19 @email{steve@@sxemacs.org, @sy{}}
40 @set UPDATED August 19, 2007
42 @c Things would be a lot easier if everything supported the `@copying'
43 @c command, I wouldn't have to put in these conditionals. --SY.
46 This is the SXEmacs Policies & Procedures Manual.
47 It was last updated @value{UPDATED}.
52 Permission is granted to copy, distribute and/or modify this document
53 under the terms of the GNU General Public Licence, Version 2.
55 Permission is granted to copy and distribute translations of this manual
56 into another language, under the above conditions for modified versions.
60 Permission is granted to process this file through Tex and print the
61 results, provided the printed document carries copying permission
62 notice identical to this one except for the removal of this paragraph
63 (this paragraph not being relevant to the printed manual).
68 @dircategory SXEmacs Development
70 * SPPM:: SXEmacs Policies & Procedures Manual.
74 @title SXEmacs Policies & Procedures Manual
75 @subtitle @value{EDITION} edition, last updated on @value{UPDATED}.
76 @vskip 0pt plus 1filll
81 This is the SXEmacs Policies & Procedures Manual.
82 It was last updated @value{UPDATED}.
87 Permission is granted to copy, distribute and/or modify this document
88 under the terms of the GNU General Public Licence, Version 2.
90 Permission is granted to copy and distribute translations of this manual
91 into another language, under the above conditions for modified versions.
95 Permission is granted to process this file through Tex and print the
96 results, provided the printed document carries copying permission
97 notice identical to this one except for the removal of this paragraph
98 (this paragraph not being relevant to the printed manual).
103 @c Set up the headers and footers for the printed output (postscript).
105 @everyheading @thischapter @|@| @thispage
106 @everyfooting @thistitle @|@| @syc{}
110 @node Top, Mission Statement, (dir), (dir)
113 This is the @value{EDITION} edition of the @cite{SXEmacs Policies & Procedures Manual}
120 This document, as its name implies, is directed towards anyone who is
121 actively involved (or thinking of becoming actively involved) in the
122 development of @uref{http://www.sxemacs.org/, SXEmacs}.
125 * Mission Statement:: Why we do what we do
126 * Online Presence:: Where we make our first impressions
127 * Dispute Resolution:: Arguments can be resolved
128 * Coding Style:: Making sure your code looks like our code
129 * Patches:: Handling contributed code/docs
130 * Feature Requests:: Dealing with feature requests
131 * Support Requests:: Handling support requests
132 * Bug Reports:: Dealing with bug reports
133 * Making Releases:: Getting the finished product to the user
134 * New Features:: Getting new stuff into the code base
135 * Compatibility:: With XEmacs and GNU/Emacs
136 * Copyright and Licencing:: We won't accept just any old licence
137 * Developer Recruitment:: How to get new blood
138 * Making/Altering Policies:: Changing or updating this document
139 * Version Control:: How we keep track of the source
140 * Concept Index:: Concept Index
143 @node Mission Statement, Online Presence, Top, Top
144 @chapter SXEmacs Mission Statement
145 @cindex mission statement
149 Our mission is to@dots{}
152 To provide the Open Source community with a text editing and development
153 environment that is based on XEmacs and is 2nd to none in regards to
154 stability, features, and innovation.
156 To foster a user and developer friendly project environment.
158 And, above all, to have fun doing it.
161 @node Online Presence, Dispute Resolution, Mission Statement, Top
162 @comment node-name, next, previous, up
163 @chapter SXEmacs' Online Presence
169 @cindex sxemacs online
170 @cindex online, sxemacs
172 The SXEmacs project maintains a number of @dfn{online} services.
177 @uref{http://www.sxemacs.org/, The SXEmacs Web Site}
179 @uref{http://downloads.sxemacs.org/, Release and Snapshot Tarballs}
181 @uref{irc://irc.freenode.net/#sxemacs, The SXEmacs IRC channel}
183 @uref{http://issues.sxemacs.org/, The SXEmacs Issue Tracker} @ref{Bug Reports}
184 @ref{Feature Requests} @ref{Support Requests}.
186 @uref{http://store.sxemacs.org/, SXEmacs Merchandise}
190 * Web Site:: Our shop front
191 * Download Site:: Where we keep the tarballs
192 * IRC:: For those who like to talk about it
193 * Merchandise:: Got the software@dots{} Get the T-Shirt
196 @node Web Site, Download Site, Online Presence, Online Presence
197 @comment node-name, next, previous, up
198 @chapter SXEmacs Web Site
201 @cindex www.sxemacs.org
203 The SXEmacs web site content is kept under the same version control
204 system as SXEmacs itself @ref{Version Control}. That means that
205 anyone can submit changes and updates to the site in the same manner
206 that they would for code submissions to SXEmacs @xref{Patches}.
208 There's really not much more to tell about the web site. It is just
209 your normal run-of-the-mill web site. And as everyone knows, HTML
210 blows goats so it doesn't get updated anywhere near as often as it
211 should. We do have a @email{webmaster@@sxemacs.org, Webmaster}, so if
212 you do have any comments about the site, you should direct them there.
213 Or, alternatively, @email{sxemacs-devel@@sxemacs.org, SXEmacs Devel}
216 @node Download Site, IRC, Web Site, Online Presence
217 @comment node-name, next, previous, up
218 @chapter SXEmacs Download Site
225 @uref{http://downloads.sxemacs.org/releases/, SXEmacs release downloads} is
226 where you'll find release tarballs and release to release patches
227 available for download.
229 @uref{http://downloads.sxemacs.org/snapshots/, SXEmacs snapshot downloads}
230 is where you can find snapshot tarballs which are uploaded from time
231 to time. Please note that these snapshots can sometimes be very
234 If you would like something made available for download at the SXEmacs
235 download site, contact @sye{}.
237 @node IRC, Merchandise, Download Site, Online Presence
238 @comment node-name, next, previous, up
239 @chapter SXEmacs on IRC
245 Developers official communcation platform is the mailing list provided
246 at sxemacs.org. However, to discuss problems and assist users more
247 efficiently there is an official IRC channel.
249 SXEmacs IRC channel @dfn{#sxemacs} is located at freenode (formerly
250 known as OPN). Please use following URI to refer to it:
252 @uref{irc://irc.freenode.net/#sxemacs}
254 @subheading Various IRC HowTOs
258 Connecting to the network and joining the channel
260 Fire up your favourite irc client and use:
261 @code{/server irc.freenode.net} to connect to the network and
262 @code{/join #sxemacs} to join the community.
264 HowTo become a respected regular
266 Okay, you've decided to be active on IRC and hopefully help other
267 users. You have joined the channel and idle around thirsting for hard
268 problems by helpless users.
270 In that case you will have to have a reliable (not-changing) nickname
271 that is linked to your person in order to refer to you. This will help
272 us in blaming you if you misdirect users with your answers and even help
273 us to praise you if you convinced RMS to switch to SXEmacs ;)
275 Therefore, freenode provides a mechanism to eternalise yourself via
276 the nickname you carry. Use @code{/nickserv register <password>}
277 to engrave your nickname for your personal use.
279 This nickname is yours from now on. To identify yourself to freenode
280 use @code{/nickserv identify <samepasswordasabove>}
282 Your user mode will be changed to @dfn{+e} in case of successful
285 Whenever you see unscrupulous people carrying your nickname or your
286 nickname is ghosted because of a reconnection, you can just
287 @code{/nickserv ghost <yournickname> <yourpassword>} to send the
288 other client to oblivion.
290 Okay, now that you've registered yourself with freenode, you're
291 nickname can be referred to, independently from whether you are
292 carrying that nick or not. Just do @code{/nickserv info <nickname>}
293 to obtain some information on a nickname you see and like to refer
296 HowTo to be listed in the channel access list
298 There is no influence on this access list on the users and developer's
299 side. It is merely up to the project lead who has control over it.
303 The only way to get one is to ask the project lead (JackaLX).
307 You don't have an IRC client but still want to shoot the breeze with
308 us on IRC? Then we have an answer for you@dots{}
309 @uref{http://www.sxemacs.org/irc.html, Chat from the web}.
312 @node Merchandise,, IRC, Online Presence
313 @comment node-name, next, previous, up
314 @chapter SXEmacs Merchandise
321 @cindex retail therapy
326 At @uref{http://store.sxemacs.org/, The SXEmacs Store} you will find
327 for sale various cool and sexy goodies sporting the SXEmacs logo. The
328 proceeds from all purchases go toward covering the costs involved in
329 the upkeep of the SXEmacs project. Be the first on your street to own
330 a @i{I'm Too Sexy For My Emacs} T-shirt!
332 @node Dispute Resolution, Coding Style, Online Presence, Top
333 @comment node-name, next, previous, up
334 @chapter Dispute Resolution
335 @cindex dispute resolution
336 @cindex resolution, dispute
337 @cindex resolving disputes
338 @cindex disputes, resolving
343 When two people agree on everything, one of them isn't needed.
346 I can't remember where that quote comes from so if anyone reading this
347 knows, please let us know so we can give credit where credit is due.
349 We are all mature adults and most of the time we don't let our egos get
350 in the way of getting things done. But human nature being what it is
351 means that from time to time we'll have conflict or disagreements. In
352 the vast majority of these cases a resolution will come quickly and
353 easily through reasonable discussion.
355 This section is for those rare occasions that will be the exception to
358 In the event of a unresolvable dispute, the SXEmacs Project Lead,
359 @sye{}, will, at his discretion, take one or more of the following
366 Call a @dfn{vote} @ref{Voting}.
368 Call a @dfn{postponement}. This will mean that all parties will be
369 asked to stop discussing the matter until some date in the future. This
370 future date will be given at the time the SXEmacs Project Lead calls the
371 postponement. The idea here is to give everyone a chance to cool down
372 so that reasonable discussion can continue.
376 * Voting:: Deciding things via ballot
379 @node Voting,, Dispute Resolution, Dispute Resolution
380 @comment node-name, next, previous, up
386 Sometimes things are best decided with a vote. This section describes
387 how these votes are to be held.
389 Who may participate in a vote? Anyone subscribed to the SXEmacs
390 Developers' mailing list, @email{sxemacs-devel@@sxemacs.org}.
392 Who may call a vote? The SXEmacs Project Lead, @sye{}. Of course
393 anyone may ask the Project Lead to call a vote.
395 @subsection Mechanics of the Vote
399 The votes will be cast via email on the SXEmacs Developers' mailing
400 list, @email{sxemacs-devel@@sxemacs.org}.
402 The @dfn{ballot paper} will have the email subject
403 @dfn{[Vote] Subject of vote}. The body of this email will contain the
404 details of the ballot. The actual questions or points that make up what
405 is being voted on should be in a form that makes it easy to respond to.
406 In other words they should be either multiple choice or yes/no type
409 Each person wishing to participate in the vote will simply reply
410 @emph{once} to this email. The reply or @dfn{vote} @emph{must} come to
413 Anyone wishing to abstain need not do anything. Just don't reply to the
416 There will be a time limit restriction on voting on any matter. This
417 time limit will be a minimum of one calendar week from the time the vote
418 is declared @dfn{open}. The vote is declared @dfn{open} with the
419 posting of the initial ballot email (with the subject prefix of
424 @subsection Deciding the Outcome
426 As soon as practicable after the vote closes (when the time limit has
427 expired) the SXEmacs Project Lead will tally up all the votes and post
428 the results to the SXEmacs Developers' mailing list,
429 @email{sxemacs-devel@@sxemacs.org}. This post will have the email
430 subject @dfn{[Vote Results] Subject of vote}.
432 For an issue to be decided via vote it must receive the majority of the
433 total number of votes with a minimum of four votes.
452 @node Coding Style, Patches, Dispute Resolution, Top
453 @comment node-name, next, previous, up
454 @chapter Coding Style
456 @cindex style, coding
460 SXEmacs has two main programming languages, Emacs Lisp, and C, therefore
461 we need two sets of coding styles.
463 @subsection Coding Style -- Emacs Lisp
464 @cindex emacs lisp coding style
465 @cindex coding style, emacs lisp
466 @cindex lisp coding style
467 @cindex coding style, lisp
469 Read @pxref{(lispref)Style Tips}
471 Please take particular note of@dots{}
474 Don't make a habit of putting close-parentheses on lines by
475 themselves; Lisp programmers find this disconcerting. Once in a
476 while, when there is a sequence of many consecutive
477 close-parentheses, it may make sense to split them in one or two
481 The only other thing I have to say about lisp coding style is to keep
482 your lines @emph{under} 80 columns in length.
484 @subsection Coding Style -- C
485 @cindex C coding style
486 @cindex coding style, C
489 First off, I'd suggest printing out a copy of the GNU coding standards,
490 and NOT read it. Burn them, it's a great symbolic gesture.
496 * General C Style:: What you should use everywhere
497 * SXEmacs Specific Style:: Our idiosyncrasies
500 @node General C Style, SXEmacs Specific Style, Coding Style, Coding Style
501 @chapter General C Style
502 @cindex C coding style
503 @cindex coding style, C
504 @cindex general coding style
505 @cindex coding style, general
507 SXEmacs C code follows, to a large degree, the coding style of the Linux
508 Kernel source. Much of this section is a verbatim copy of
509 @file{./Documentation/CodingStyle} from the Linux kernel sources.
513 @cindex indentation coding style
514 @cindex coding style, indentation
516 Tabs are 8 characters, and thus indentations are also 8 characters.
517 There are heretic movements that try to make indentations 4 (or even 2!)
518 characters deep, and that is akin to trying to define the value of PI to
521 Rationale: The whole idea behind indentation is to clearly define where
522 a block of control starts and ends. Especially when you've been looking
523 at your screen for 20 straight hours, you'll find it a lot easier to see
524 how the indentation works if you have large indentations.
526 Now, some people will claim that having 8-character indentations makes
527 the code move too far to the right, and makes it hard to read on a
528 80-character terminal screen. The answer to that is that if you need
529 more than 3 levels of indentation, you're screwed anyway, and should
532 In short, 8-char indents make things easier to read, and have the added
533 benefit of warning you when you're nesting your functions too deep.
536 Don't put multiple statements on a single line unless you have something
540 if (condition) do_this;
541 do_something_everytime;
544 Outside of comments and documentation, spaces are never used for
545 indentation, and the above example is deliberately broken.
547 @cindex coding style, whitespace
549 Don't leave whitespace at the end of lines. There is a
550 @file{whitespace.el} which you can get from
551 @uref{http://www.dsmit.com/lisp/}. Use it.
553 @heading Breaking long lines and strings
555 Coding style is all about readability and maintainability using commonly
558 The limit on the length of lines is 80 columns and this is a hard limit.
560 Statements longer than 80 columns will be broken into sensible chunks.
561 Descendants are always substantially shorter than the parent and are placed
562 substantially to the right. The same applies to function headers with a long
563 argument list. Long strings are as well broken into shorter strings.
567 fun(int a, int b, int c)
570 printf("Warning this is a very very very long printf with "
571 "3 parameters a: %u b: %u "
572 "c: %u \n", a, b, c);
578 @heading Placing Braces
580 @cindex coding style, braces
581 The other issue that always comes up in C styling is the placement of
582 braces. Unlike the indent size, there are few technical reasons to
583 choose one placement strategy over the other, but the preferred way, as
584 shown to us by the prophets Kernighan and Ritchie, is to put the opening
585 brace last on the line, and put the closing brace first, thusly:
593 However, there is one special case, namely functions: they have the
594 opening brace at the beginning of the next line, thus:
603 Heretic people all over the world have claimed that this inconsistency
604 is ... well ... inconsistent, but all right-thinking people know that
605 (a) K&R are @emph{right} and (b) K&R are right. Besides, functions are
606 special anyway (you can't nest them in C).
608 Note that the closing brace is empty on a line of its own, @emph{except}
609 in the cases where it is followed by a continuation of the same statement,
610 ie a "while" in a do-statement or an "else" in an if-statement, like this:
615 @} while (condition);
623 @} else if (x > y) @{
632 @cindex coding style, naming
633 C is a Spartan language, and so should your naming be. Unlike Modula-2
634 and Pascal programmers, C programmers do not use cute names like
635 @var{ThisVariableIsATemporaryCounter}. A C programmer would call that
636 variable @var{tmp}, which is much easier to write, and not the least more
637 difficult to understand.
639 HOWEVER, while mixed-case names are frowned upon, descriptive names for
640 global variables are a must. To call a global function "foo" is a
643 GLOBAL variables (to be used only if you _really_ need them) need to
644 have descriptive names, as do global functions. If you have a function
645 that counts the number of hidden buffers, you should call that
646 @code{count_hidden_buffers()} or similar, you should @emph{not} call it
649 Encoding the type of a function into the name (so-called Hungarian
650 notation) is brain damaged - the compiler knows the types anyway and can
651 check those, and it only confuses the programmer. No wonder MicroSoft
652 makes buggy programs.
654 LOCAL variable names should be short, and to the point. If you have
655 some random integer loop counter, it should probably be called @var{i}.
656 Calling it @var{loop_counter} is non-productive, if there is no chance
657 of it being mis-understood. Similarly, @var{tmp} can be just about any
658 type of variable that is used to hold a temporary value.
660 If you are afraid to mix up your local variable names, you have another
661 problem, which is called the @dfn{function-growth-hormone-imbalance
666 @cindex coding style, functions
667 Functions should be short and sweet, and do just one thing. They should
668 fit on one or two screenfuls of text (the ISO/ANSI screen size is 80x24,
669 as we all know), and do one thing and do that well.
671 A function's return type should be put on a line by itself like this:
675 main(int argc, char **argv)
682 This also helps things like @code{etags}.
684 The maximum length of a function is inversely proportional to the
685 complexity and indentation level of that function. So, if you have a
686 conceptually simple function that is just one long (but simple)
687 case-statement, where you have to do lots of small things for a lot of
688 different cases, it's OK to have a longer function.
690 However, if you have a complex function, and you suspect that a
691 less-than-gifted first-year high-school student might not even
692 understand what the function is all about, you should adhere to the
693 maximum limits all the more closely. Use helper functions with
694 descriptive names (you can ask the compiler to in-line them if you think
695 it's performance-critical, and it will probably do a better job of it
696 than you would have done).
698 Another measure of the function is the number of local variables. They
699 shouldn't exceed 5-10, or you're doing something wrong. Re-think the
700 function, and split it into smaller pieces. A human brain can
701 generally easily keep track of about 7 different things, anything more
702 and it gets confused. You know you're brilliant, but maybe you'd like
703 to understand what you did 2 weeks from now.
708 @cindex coding style, commenting
709 @cindex coding style, comments
710 Comments are good, but there is also a danger of over-commenting.
711 @emph{NEVER} try to explain @emph{HOW} your code works in a comment:
712 it's much better to write the code so that the @emph{working} is
713 obvious, and it's a waste of time to explain badly written code.
715 Generally, you want your comments to tell @emph{WHAT} your code does, not
716 @emph{HOW}. Also, try to avoid putting comments inside a function body:
717 if the function is so complex that you need to separately comment parts of
718 it, you should probably go back to section on @dfn{Functions} for a while.
719 You can make small comments to note or warn about something particularly
720 clever (or ugly), but try to avoid excess. Instead, put the comments at
721 the head of the function, telling people what it does, and possibly WHY it
724 A comment in C looks like @code{/* a comment */}. A comment in C++
725 looks like @code{// a comment}. Don't get them confused and don't
726 @emph{ever} use C++ style comments.
728 This style of commenting in C @emph{is} acceptable:
732 * A comment style in C that is quite often used
733 * for multi-line comments.
740 @cindex coding style, macros
741 Names of macros defining constants and labels in enums are capitalised.
744 #define CONSTANT 0x12345
747 Enums are preferred when defining several related constants.
749 CAPITALISED macro names are appreciated but macros resembling functions
750 may be named in lower case.
752 Generally, inline functions are preferable to macros resembling functions.
754 Macros with multiple statements should be enclosed in a do - while block:
757 #define macrofun(a,b,c) \
764 @subheading Things to avoid when using macros:
768 macros that affect control flow:
778 is a @emph{very} bad idea. It looks like a function call but exits the "calling"
779 function; don't break the internal parsers of those who will read the code.
782 macros that depend on having a local variable with a magic name:
785 #define FOO(val) bar(index, val)
788 might look like a good thing, but it's confusing as hell when one reads the
789 code and it's prone to breakage from seemingly innocent changes.
792 macros with arguments that are used as l-values: FOO(x) = y; will
793 bite you if somebody e.g. turns FOO into an inline function.
796 forgetting about precedence: macros defining constants using expressions
797 must enclose the expression in parentheses. Beware of similar issues with
798 macros using parameters.
801 #define CONSTANT 0x4000
802 #define CONSTEXP (CONSTANT | 3)
806 @heading Further Reading
807 @cindex further reading
808 @cindex coding style, further reading
810 The C Programming Language, Second Edition
811 by Brian W. Kernighan and Dennis M. Ritchie.
812 Prentice Hall, Inc., 1988.
813 ISBN 0-13-110362-8 (paperback), 0-13-110370-9 (hardback).
814 @uref{http://cm.bell-labs.com/cm/cs/cbook/}
816 The Practice of Programming
817 by Brian W. Kernighan and Rob Pike.
818 Addison-Wesley, Inc., 1999.
820 @uref{http://cm.bell-labs.com/cm/cs/tpop/}
823 GNU manuals - where in compliance with K&R and this text - for cpp, gcc,
824 gcc internals and indent, all available from @uref{http://www.gnu.org/}
826 WG14 is the international standardization working group for the programming
827 language C, @uref{http://std.dkuug.dk/JTC1/SC22/WG14/}
829 @node SXEmacs Specific Style,,General C Style, Coding Style
831 @chapter SXEmacs Specific Style
832 @cindex sxemacs specific coding style
833 @cindex coding style, sxemacs specific
835 This section was lifted almost word for word from the XEmacs
836 @file{CODING-STANDARDS} by Ben Wing.
838 @heading Specially-prefixed functions/variables:
839 @cindex coding style, function prefix
840 @cindex coding style, variable prefix
841 @cindex coding style, functions
842 @cindex coding style, variables
845 All global C variables whose value is constant and is a symbol begin
846 with a capital Q, e.g. @var{Qkey_press_event}. (The type will always be
850 All other global C variables whose value is a @dfn{Lisp_Object} (this
851 includes variables that forward into Lisp variables plus others like
852 @var{Vselected_console}) begin with a capital V.
855 No C variables whose value is other than a @dfn{Lisp_Object} should begin
856 with a capital V. (This includes C variables that forward into
857 integer or boolean Lisp variables.)
858 All global C variables whose value is a struct Lisp_Subr begin with a
859 capital S. (This only occurs in connection with DEFUN ()).
862 All C functions that are Lisp primitives begin with a capital F,
863 and no others should begin this way.
866 @heading Functions for manipulating Lisp types:
867 @cindex coding style, functions
870 Any function that creates an empty or mostly empty Lisp object
871 should begin allocate_(). (*Not* make_().) (Except, of course,
872 for Lisp primitives, which usually begin Fmake_()).
875 Any function that converts a pointer into an equivalent Lisp_Object
876 should begin make_().
879 Any function that converts a Lisp_Object into its equivalent pointer
880 and checks the type and validity of the object (e.g. making sure
881 it's not dead) should begin decode_().
884 Any function that looks up a Lisp object (e.g. buffer, face) given
885 a symbol or string should begin get_(). (Except, of course, for
886 Lisp primitives, which usually begin Fget_()).
891 Any header-file declarations of the sort
897 go into the @dfn{types} section of @file{lisp.h}.
900 @node Patches, Feature Requests, Coding Style, Top
901 @comment node-name, next, previous, up
904 @cindex contributions
908 Ideally, the best way to get your patches into the SXEmacs code base is
909 to set up your own tla repo for SXEmacs and create a new branch. You
910 can then send your merge requests to the
911 @email{sxemacs-patches@@sxemacs.org, SXEmacs Patches} mailing list.
913 You can even automate the process of sending patches by using
914 @dfn{tla hooks}. Take a look in our @file{contrib} directory for a
915 master hook script plus some example sub-scripts. The @file{README}
916 file there explains it.
918 There are a number of different situations and circumstances that you
919 may find yourself in with regards to contributing to the SXEmacs
920 project. I'll try to cover the main ones here, but please note that
921 they @emph{all} have two things in common@dots{}
925 A diff is always sent to
926 @email{sxemacs-patches@@sxemacs.org, SXEmacs Patches}.
928 The diff is always in @dfn{unified} format
929 @code{diff -u oldfile newfile}
933 * Mirrored branch:: Your own branch of the main repo.
934 * Non-mirrored branch:: As above, but it isn't mirrored anywhere.
935 * Non-branched repo:: A copy of the main repo, not branched or
937 * Vanilla sources (no repo):: Just the source tree that isn't under
941 @node Mirrored branch, Non-mirrored branch, Patches, Patches
942 @comment node-name, next, previous, up
943 @chapter Mirrored branch
945 @cindex contributions
949 Are you in the right place? You have set up your own branch of the
950 SXEmacs arch repository, something like:
951 @dfn{sxemacs--yourname--@cver{}}. And your repository is mirrored
952 somewhere that is accessible to at least the SXEmacs Project Lead
955 Yes? OK, great, read on.
957 The first thing you want to do, if you haven't already is to set up some
958 tla hooks to make life much easier. I highly recommend the hook
959 scripts you'll find in our @file{contrib} directory. The
960 @file{README} there explains it all.
962 Now all you need is to combine @file{hook} with a couple of
963 tiny shell scripts. These are the ones that I use@dots{}
965 For automatic mirroring:
970 echo "Mirroring $@{ARCH_BRANCH@} in $@{ARCH_ARCHIVE@}"
973 "$@{ARCH_ARCHIVE@}" "$@{ARCH_ARCHIVE@}-MIRROR" \
979 For sending commit logs/merge requests:
983 if [ "$ARCH_REVISION" = "" ]; then
984 echo "$0 called without ARCH_REVISION set. Aborting."
988 email="sxemacs-patches@@sxemacs.org"
990 # This is where _other_ people access your repo.
991 location=http://your.archive.mirror/
993 echo "Sending mail to SXEmacs Patches <$@{email@}>"
994 echo " about $@{ARCH_REVISION@} changes."
996 # We may want to start that as a background process if it starts to
999 echo "From: $(tla my-id)"
1000 echo "Date: $(date --rfc-822)"
1001 echo "Subject: [Merge Req] Summary for $@{ARCH_REVISION@}"
1002 echo "To: SXEmacs Patches <$@{email@}>"
1004 echo "Location: $@{ARCH_ARCHIVE@} $@{location@}"
1006 tla cat-archive-log "$@{ARCH_ARCHIVE@}/$@{ARCH_REVISION@}"
1008 cd $@{ARCH_TREE_ROOT@}
1009 dir="$@{ARCH_REVISION@}.changeset-$$"
1010 tla get-changeset "$@{ARCH_REVISION@}" "$@{dir@}"
1011 tla show-changeset --diffs "$@{dir@}"
1013 ) | /usr/sbin/sendmail "$@{email@}"
1018 With all that in place, getting patches in front of the SXEmacs
1019 developers is a snap.
1023 @code{tla star-merge MAIN_SXEmacs_REPO} (to make sure you are working
1024 with up to date sources).
1026 @code{tla commit -s "sync up to mainline"}
1037 BTW, if you've gone to this much effort to set things up, you @emph{are}
1038 subscribed to the sxemacs-patches and sxemacs-devel mailing lists aren't
1042 @node Non-mirrored branch, Non-branched repo, Mirrored branch, Patches
1043 @comment node-name, next, previous, up
1044 @chapter Non-mirrored branch
1046 @cindex contributions
1050 Are you in the right place? You have set up your own branch of the
1051 SXEmacs arch repository, something like:
1052 @dfn{sxemacs--yourname--@cver{}}. But your repository is @emph{not}
1053 mirrored anywhere that is accessible to at least the SXEmacs Project
1056 Yes? OK, great, read on.
1058 Firstly, if you can mirror your archive, please do so. It will make
1059 things so much easier for everyone. We do understand that there may be
1060 some valid reasons why you can't mirror, hence, this section.
1062 This section differs from the previous only in that because you have no
1063 mirror the SXEmacs developers can't pull in your changesets. You will
1064 have to send them to the patches mailing list yourself.
1066 To create a changeset that you can send as a MIME attachment to the
1067 mailing list, take these steps after you have committed your changes to
1072 @code{tla get-changeset patch-n} (@dfn{patch-n} is the patch number you
1074 When that finishes you will find a new directory in your WD, it will be
1075 named something like @file{sxemacs--yourname--@cver{}--patch-1.patches}.
1077 tar/gz that directory
1079 Send the @file{file.tar.gz} as a MIME attachment to the
1080 @email{sxemacs-patches@@sxemacs.org, SXEmacs Patches} mailing list.
1084 @node Non-branched repo, Vanilla sources (no repo), Non-mirrored branch, Patches
1085 @comment node-name, next, previous, up
1086 @chapter Non-branched repo
1088 @cindex contributions
1092 Are you in the right place? You did something like:
1093 @code{tla get steve@@sxemacs.org--@yy{}/sxemacs--main--@cver{} sxemacs}
1094 But for whatever reason you haven't made your own branch of the repo
1095 (perhaps you don't wish to become a regular contributor, which is
1098 Yes? OK, great, read on.
1100 If this is the right section for you then you need not worry about
1101 setting up any tla hooks or stuff like that. Why? Because you won't be
1102 committing anything.
1104 Your hacking cycle will look something like this:
1116 send the log and the output from @code{tla changes --diffs} to the
1117 @email{sxemacs-patches@@sxemacs.org, SXEmacs Patches} mailing list.
1120 @node Vanilla sources (no repo),, Non-branched repo, Patches
1121 @comment node-name, next, previous, up
1122 @chapter Vanilla sources (no repo)
1124 @cindex contributions
1128 Are you in the right place? All you have is a SXEmacs source tarball
1129 and you don't have @file{tla} installed.
1131 Yes? OK, great, read on.
1133 You will have the toughest time of it I'm afraid because you will have
1134 to do everything manually. But it isn't too bad. No worse than for any
1137 Your hacking cycle will look something like this:
1141 Unpack the source tarball somewhere and @emph{don't touch it}. This
1142 will be your pristine sources.
1144 Make a copy of your pristine sources somewhere else. This will be your
1145 working tree where you make your changes.
1147 cd into your working tree and hack hack hack
1149 Jump out of your working tree and do:
1150 @code{diff -urNp pristine-tree working-tree > my-sxemacs.diff}
1152 A note of caution here: Please ensure that you are diff'ing clean
1153 trees. In other words, run @code{make distclean} in your working tree
1154 @emph{before} creating the diff.
1156 Send @file{my-sxemacs.diff} (gzip'd if large) as a MIME attachment
1157 together with a detailed description of your changes to the
1158 @email{sxemacs-patches@@sxemacs.org, SXEmacs Patches} mailing list.
1161 @node Feature Requests, Support Requests, Patches, Top
1162 @comment node-name, next, previous, up
1163 @chapter Feature Requests
1164 @cindex request, feature
1166 From time to time someone will wander into the mailing list or our
1167 IRC channel saying something like "ya know, SXEmacs is cool, but it
1168 would truly @emph{rock} if it had @dfn{fooble-klangers}. How 'bout
1169 it guys? Can somebody please add @dfn{fooble-klangers} to SXEmacs?".
1171 @emph{That's} a @dfn{Feature Request}.
1173 It doesn't matter what a @dfn{fooble-klanger} is. It doesn't matter
1174 if having said @dfn{fooble-klanger} would make SXEmacs rock or not.
1175 What @strong{DOES MATTER} is that we acknowledge the request. And we
1176 acknowledge it quickly.
1178 So how quick is quickly? Anything greater than 48 hours is @emph{slow}.
1179 We should try to get an initial ack out within 24 hours of the feature
1180 request hitting the mailing list@footnote{All legitimate feature requests
1181 should eventually end up on the @uref{http://issues.sxemacs.org/, SXEmacs
1182 Issue Tracker}.}. I totally understand that the 24 hour turn-around
1183 won't always be possible. Often there'll be extenuating circumstances
1184 (I'm writing this right now in the middle of a 2 week period with no
1185 internet connection).
1187 The acknowledgment doesn't need to be anything more than just that, an
1188 acknowledgment. You don't need to have a 100,000 lines of working
1189 code that proves how much @dfn{fooble-klangers} make or don't make
1190 SXEmacs rock before you let the guy know that he isn't talking to a
1193 A feature request can only end up in one of 3 scenarios...
1204 Of those, #3 is @strong{UNACCEPTABLE}! That means, if you see a
1205 feature request that is more than 48 hours old and hasn't been
1206 acknowledged, it is @strong{YOUR} responsibility to do something about
1209 A feature requests on our @uref{http://issues.sxemacs.org/, Issue
1210 Tracker} is a issue that has the @dfn{FeatReq} flag set and the
1211 severity set to @dfn{enhancement}.
1214 @node Support Requests, Bug Reports, Feature Requests, Top
1215 @comment node-name, next, previous, up
1216 @chapter Support Requests
1217 @cindex request, support
1219 Support requests are a call for help from our users and as such have
1220 @emph{top priority}. Much of @xref{Feature Requests}, applies equally
1223 Support requests are @emph{everyone's} responsibility, so if you see
1224 one and you think you can help, do so.
1226 @node Bug Reports, Making Releases, Support Requests, Top
1227 @comment node-name, next, previous, up
1228 @chapter Bug Reports
1231 Bug reports are a @emph{good} thing. They show that people are using
1232 the code that you spent so much time and effort in writing. Bug
1233 reports are an opportunity to improve SXEmacs. Never be scared of bug
1234 reports. Never get annoyed or upset by bug reports. Welcome them.
1235 As a matter of fact, worry if you don't see any bug reports. That
1236 would mean we aren't working hard enough. :-)
1238 All bug reports have to be submitted to our
1239 @uref{http://issues.sxemacs.org/, Issue Tracker}. So it goes without
1240 saying that you already have an account on our Issue Tracker, and if
1241 you don't, go get one @emph{now}.
1243 Because the Issue Tracker is just that, it @dfn{tracks} issues, all
1244 followups and correspondence concerning a bug @emph{must} be added via
1245 the issue tracker itself. @emph{DO NOT} follow up to a bug report on
1246 the mailing list. If a bug report is submitted to the mailing list
1247 initially (because the submitter wasn't aware of our Issue Tracker),
1248 the person submitting the report should be directed to our
1249 @uref{http://issues.sxemacs.org/, Issue Tracker}. If they are
1250 unwilling or unable to do so, one of us will do so.
1252 If a bug report results in a patch and merge request, the summary of
1253 the patch log should contain the text: "(Closes bug #n)", where `n' is
1254 the number that our Issue Tracker has assigned to that bug. The bug
1255 should be marked as "fixed" (stating in which revision) on the Issue
1256 Tracker. It should not be marked "Closed" until just prior to a
1257 release. Closing bugs is the job and responsibility of the project
1258 lead, or whoever is responsible for making releases.
1261 @node Making Releases, New Features, Bug Reports, Top
1262 @comment node-name, next, previous, up
1263 @chapter Making Releases
1266 From time to time, at the project lead's discretion, a "version-0"
1267 revision will be made and tarballs created and made available on
1268 @uref{http://downloads.sxemacs.org/releases/, the SXEmacs download site}.
1270 The decision as to @emph{when} to cut a release is generally
1271 influenced by two factors:
1275 How stable the code base is currently.
1277 Whether the changes since the last release warrant a new release.
1280 The minimum number of revisions between releases is one. The maximum
1281 number of revisions between releases is, well, there is no maximum.
1283 The actual steps involved in cutting a release are:
1287 Finalise things like...
1290 Update @file{etc/NEWS}
1292 Make sure @file{INSTALL}, @file{PROBLEMS} etc are up to date.
1294 Update @file{sxemacs.texi} at@dots{}
1303 @code{tla commit --seal}
1307 (in the release working directory)
1310 tla export /tmp/sxemacs-@cver{}
1314 Clean out the working directory and do autotool preparations.
1317 HAMMER=BHFH ./autogen.sh
1321 Copy the autotool files to the exported tree
1324 for f in $(tla inventory -p); do
1325 cp -va $@{f@} /tmp/sxemacs-@cver{}/$@{f@}
1327 cp -va libltdl /tmp/sxemacs-@cver{}
1334 tla changelog --untagged > /tmp/sxemacs-@cver{}/ChangeLog
1342 tar --create --owner=0 --group=0 --gzip --file \
1343 ~/upload/sxemacs-@cver{}.tar.gz sxemacs-@cver{}
1351 md5sum sxemacs-@cver{}.tar.gz > sxemacs-@cver{}.tar.gz.md5
1358 gpg --detach-sign --armor \
1359 --output sxemacs-@cver{}.tar.gz.asc sxemacs-@cver{}.tar.gz
1363 Create a diff against the previous version.
1367 Unpack the previous release's tarball
1370 diff -urNp sxemacs-@pver{} sxemacs-@cver{} > sxemacs-@pver{}-@cver{}.diff
1371 gzip sxemacs-@pver{}-@cver{}.diff
1376 Create md5 and gpg sig for diff file.
1378 See items describing this for the release tarball.
1381 Move the tarball, diff, GnuPG sigs, and md5sums to
1382 @uref{http://downloads.sxemacs.org/releases/, SXEmacs Download Site}.
1385 Rename the @file{LATEST-IS-foo} file.
1387 mv LATEST-IS-@pver{} LATEST-IS-@cver{}
1391 Update www.sxemacs.org:
1395 Update @file{download.html}
1397 Add @file{ChangeLog-@cver{}} to the website
1399 Update @file{index.html}
1403 Send a release announcement to @email{sxemacs-devel@@sxemacs.org,
1404 SXEmacs Devel} and comp.emacs.xemacs.
1407 Make a new release and announcement on Freshmeat (our FM id: 52281)
1410 Create next version:
1413 tla tag -S sxemacs--main--@cver{}--version-0 sxemacs--main--@nver{}
1415 tla get sxemacs--main--@nver{} /path/to/WDs/sxemacs--main--@nver{}
1417 tla changelog --dir /path/to/WDs/sxemacs--main--@nver{} --untagged \
1418 steve@@sxemacs.org--@yy{}/sxemacs--main--@cver{} > \
1419 ./ChangeLog.d/ChangeLog-@cver{}
1421 tla add ChangeLog.d/ChangeLog-@cver{}
1425 Update the codename in @file{autogen.sh}
1427 Update the versioning macros in this document.
1429 Commit the first patch to the next version.
1433 @node New Features, Compatibility, Making Releases, Top
1434 @comment node-name, next, previous, up
1435 @chapter New Features
1436 @cindex feature, new
1438 How do you get a new feature into SXEmacs? It's not hard, but
1439 remember this, we look at any new feature in this order of
1444 Tested working code.
1446 A plan of action with @dfn{Proof of concept} code.
1448 A plan of action with a willingness to write the code.
1450 An idea with a willingness to move it to a real plan and then to
1453 An idea with a willingness to help test any code resulting from it.
1455 @dfn{Hey, wouldn't it be cool if...}
1458 Don't be disheartened if you aren't a master programmer, quite often
1459 the best new features and ideas come from non-programmers. All too
1460 often the people writing the code get caught up in what they are doing
1461 and find it hard to see things from @dfn{outside of the box}. Anyone
1462 can help with ideas and with testing new code and features.
1464 Any new feature begins with an idea, and at @emph{that} point somebody
1465 should post that idea to @email{sxemacs-devel@@sxemacs.org, SXEmacs
1468 @node Compatibility, Copyright and Licencing, New Features, Top
1469 @comment node-name, next, previous, up
1470 @chapter Compatibility
1471 @cindex compatibility, xemacs
1472 @cindex compatibility, emacs
1474 All I'll say about this is that for the foreseeable future, SXEmacs
1475 will remain 100% backwardly compatible with XEmacs where emacs lisp is
1476 concerned. An emacs lisp package or library that runs on XEmacs
1477 @emph{will} run on SXEmacs.
1479 If you find a place where this isn't true, you should report it as a
1480 bug, @xref{Bug Reports}.
1482 If you find areas where SXEmacs is incompatible with GNU/Emacs at the
1483 emacs lisp level, that is an issue between GNU/Emacs and XEmacs.
1485 @node Copyright and Licencing, Developer Recruitment, Compatibility, Top
1486 @comment node-name, next, previous, up
1487 @chapter Copyright and Licencing
1489 SXEmacs is an @dfn{Open Source} project. Because of that we can only
1490 accept code and contributions that are covered by an Open Source
1493 We differ from the GNU/Emacs project in that we will accept any
1494 @dfn{OSI} approved Open Source licence, not just the GNU GPL. That
1495 means that if you are more comfortable with, say, the BSD licence,
1498 We also won't ask you to reassign your copyright to anyone else. If
1499 you want to reassign your copyright to the FSF (for example), you can,
1500 but we won't reject any contributions from you because you haven't.
1501 @footnote{If you contribute code to SXEmacs that you want included in
1502 GNU/Emacs you will have to reassign copyright to the FSF. Please
1503 understand that that is a GNU/Emacs requirement and @emph{not} a
1504 SXEmacs requirement}
1506 @subheading SXEmacs and your Employer
1507 This is @strong{very} important. If you write code for SXEmacs either
1508 on your employer's time (while you are at work), or using your
1509 employer's resources (hardware, software, electricity, furniture, etc)
1510 then your employer may have legal copyright of your work.
1512 @strong{PLEASE} be up front with your employer and clear it with them
1513 @strong{before} you write anything for SXEmacs. It is OK and
1514 perfectly acceptable to submit contributions to SXEmacs that are
1515 copyrighted to your employer, providing (and this is the key) your
1516 employer is willing to release the code under an approved OSI
1519 Don't overlook or dismiss this. It is here to safeguard you, your
1520 employer, the SXEmacs project as a whole, and @sy{} personally.
1522 @subheading Documentation Licences
1523 Please don't licence any documentation under the FSF's new @dfn{Free
1524 Documentation Licence}. This isn't a slight against the FSF or the
1525 GNU project, it is just because it will mean that our documentation
1526 would not be able to be included in XEmacs. It may even cause
1527 problems going the other way as well (XEmacs to SXEmacs).
1529 For that reason, we'll err on the side of caution.
1531 @node Developer Recruitment, Making/Altering Policies, Copyright and Licencing, Top
1532 @comment node-name, next, previous, up
1533 @chapter Developer Recruitment
1536 We don't actively try to recruit new developers in any kind of formal
1537 way. What we do is use SXEmacs for everything everyday and not hide
1538 the fact that we do. :-) That in itself makes people curious and some
1539 ask about this thing called @dfn{SXEmacs}. Show them what it is,
1540 point them to the @uref{http://www.sxemacs.org/, web site}, encourage
1541 them to subscribe to @email{sxemacs-devel@@sxemacs.org, SXEmacs
1542 Devel}, and even help them get an account on
1543 @uref{http://issues.sxemacs.org/, Our Issue Tracker}. And low and
1544 behold! We have a new developer.
1546 One recruitment tool that we do have is @dfn{sxemacs.org} email
1547 addresses. If you'd like one, contact @sye{}. Then you can use that
1548 email address whenever and whereever you like. Hmm, perhaps not
1549 @emph{everywhere}, it might not look so good if you use it for log in
1550 details to a pr0n site. :-P
1552 @node Making/Altering Policies, Version Control, Developer Recruitment, Top
1553 @comment node-name, next, previous, up
1554 @chapter Making/Altering Policies
1555 @cindex policies, changing
1557 How do you get these policies and proceedures changed? Simple. Just
1558 post to @email{sxemacs-devel@@sxemacs.org, SXEmacs Devel} stating
1559 where what how when and why. If it is non-controversial and makes
1560 sense, it'll probably be accepted quickly. If not, there could be
1561 lengthy @dfn{discussions} and possibly even a vote @xref{Voting}.
1563 @sy{} will always have the final word and make the ultimate decision,
1564 but he isn't an immovable force, his mind can be changed and he
1565 @emph{does} listen to what the rest of the project is saying. :-)
1567 @node Version Control, Concept Index, Making/Altering Policies, Top
1568 @comment node-name, next, previous, up
1569 @chapter Version Control
1570 @cindex version control
1574 The SXEmacs Project keeps control of its sources with GNU/arch (tla).
1575 The main repository is that of the Project Lead (@sy{}). It is
1579 http://arch.sxemacs.org/@yy{}/
1582 To ``check out'' a copy of SXEmacs from Steve's repo, take the following
1583 steps (this assumes that you have tla installed/configured):
1587 @code{tla register-archive http://arch.sxemacs.org/@yy{}}
1589 @code{tla get steve@@sxemacs.org--@yy{}/sxemacs--main--@cver{} sxemacs}
1592 That will put a copy of the latest SXEmacs sources into
1593 @file{$PWD/sxemacs}.
1595 @subheading Making Your Own Branch
1596 The best for all concerned is for all active developers to have their
1597 own branch of the SXEmacs repo. What follows is how to set up your
1598 own branch of the SXEmacs source repo.
1600 I'll start from the point where you have compiled tla and have it
1601 somewhere in your $PATH.
1605 Introduce yourself to tla:
1608 $ tla my-id "Joe User <juser@@email.addy>" RET
1611 The value you give to `tla my-id' is used in logs and stuff like that.
1612 It @emph{must} be enclosed in quotes. You can check its value by
1613 running the command again without giving it any value...
1620 Create an archive which will be home to @emph{your} repo:
1623 $ tla make-archive --tla --signed juser@@email.addy--@yy{} \
1624 /path/to/archives/@yy{}/ RET
1627 The @option{--signed} option is to make your archive a @dfn{signed} one. (see
1628 2a for dealing with GnuPG and tla) This means you'll be GnuPG signing
1629 all commits to your repo. If you don't have GnuPG set up or you don't
1630 want a signed archive, omit this option to make-archive. (All of @sy{}'
1631 archives are signed).
1633 It isn't mandatory to have a @dfn{dated} archive name (the @option{--@yy{}}
1634 part of @dfn{juser@@email.addy---@yy{}}), but I use that semantic for my
1635 archives to keep things neat and tidy. One of the SXEmacs developers
1636 has an archive name of: @dfn{hroptatyr@@sxemacs.org--sxemacs}, which is
1639 The location, @file{/path/to/archives/@yy{}/} is somewhere that is writable
1640 to @emph{you}. Nobody else needs to have access to this directory (not
1641 even read only access) so it could easily be in your $HOME. Setting
1642 up a @dfn{mirror} that @emph{is} readable to the outside world (ie, where @sy{} can
1643 reach it) is the subject of the step 3.
1645 The thing to remember about this path is that @file{archives} @emph{MUST}
1646 exist and @file{@yy{}} @emph{MUST NOT} exist.
1650 Setting up tla to work with GnuPG (skip this if your archive isn't
1651 signed or you don't wish to verify signed patchsets):
1654 $ mkdir ~/.arch-params/signing RET
1656 $ echo "gpg --clearsign" > ~/.arch-params/signing/\=default RET
1658 $ echo "gpg --verify-files -" > \
1659 ~/.arch-params/signing/\=default.check RET
1662 From this point, every commit action will require you to enter your
1663 GnuPG passphrase, you may want to look into a @dfn{passphrase agent}.
1667 Mirroring your archive so others (at least, Steve) can reach it:
1670 $ tla make-archive --tla --signed --listing --mirror \
1671 juser@@email.addy--@yy{} \
1672 /path/to/internet/accessible/archives/@yy{}/ RET
1675 See step 2 for explanation of @option{--signed} here.
1677 The @option{--listing} option enables creating some @file{.listing} files
1678 in your mirror'd repos. It makes retrieval of your repo possible via
1679 HTTP without needing stuff like WebDAV. Basically, don't worry about
1680 it, but @dfn{DON'T FORGET} to use this option.
1682 The @option{--mirror} option means that this archive is a mirror of the
1683 @dfn{juser@@email.addy---@yy{}} archive. Its name will actually be
1684 @dfn{juser@@email.addy---@yy{}-MIRROR}. That leads me to the name...
1686 You @dfn{MUST} use the exact name you used in step 2.
1688 The path, @file{/path/to/internet/accessible/archives/@yy{}/} is the
1689 path for @emph{you} to write to the mirror. It @emph{isn't} the path
1690 for others to read from it. An example...
1693 My repo is accessible to the world at:
1694 http://arch.sxemacs.org/@yy{}/
1696 but @emph{I} write to it via:
1697 sftp://youngs@@arch.sxemacs.org/home/youngs/arch/SXEmacs/@yy{}/
1700 The same applies to this path as for the one in step 2... @file{archives}
1701 @emph{MUST} exist and @file{@yy{}} @emph{MUST NOT} exist. Also, the path
1702 you give here @emph{CANNOT} be the same path as the one in step 2.
1705 Making an archive your default one:
1708 $ tla my-default-archive juser@@email.addy--@yy{} RET
1711 This sets the archive to where new repo's (your branch of SXEmacs)
1712 will go. You can check what it is set to at any time with
1715 $ tla my-default-archive RET
1718 Your default archive is the archive that is used for any tla
1719 operation that you do outside of any working directory and you
1720 don't specify an archive to use.
1723 Registering my (Steve's) archive so you can access it:
1726 $ tla register-archive http://arch.sxemacs.org/@yy{}/ RET
1729 This tells your tla where and how to find my archive.
1732 Tagging against my (Steve's) repo and creating your branch:
1736 steve@@sxemacs.org--@yy{}/sxemacs--main--@cver{}--patch-1 \
1737 sxemacs--branchname--@cver{} RET
1740 The `-S' option causes tla to create any needed categories, branches,
1741 or versions in your archive.
1743 It's always best to tag against the latest revision of any repo, and
1744 one way to find the latest revision is:
1747 $ tla abrowse steve@@sxemacs.org--@yy{} RET
1752 A note about branch names:
1754 In reality, the name you use for your branch can be anything. But
1755 here are some @dfn{don'ts} for SXEmacs branches...
1759 DON'T use anything vulgar. I won't ever merge in anything
1760 from `sxemacs---fuckyou---@cver{}'.
1763 DON'T use anything that could be misleading. In other
1764 words, don't call your branch `sxemacs---voice---@cver{}'
1765 unless you are working on some kind of voice or speech
1766 interface to SXEmacs.
1769 DON'T use anything that could make people think your branch
1770 is the main development branch. For example, don't use any
1774 dev, devo, devel, develop, development, main,
1779 The easiest thing to do... use your name, or if you are working on
1780 something long-term, use a description of it.
1784 Getting a working directory of your branch:
1787 $ tla get sxemacs--branchname--@cver{} sxemacs-branchname RET
1790 That will put a copy of @emph{your} branch in
1791 @file{$PWD/sxemacs-branchname/}.
1794 Updating the contents of your mirror:
1797 $ tla archive-mirror RET
1800 This synchs your mirror archive to your main archive and makes the
1801 changes you've made to your archive accessible to the rest of the
1805 Once you're set up, you might have a hacking cycle a bit like this:
1809 synch to my repo so you are working from up to date sources
1812 $ cd $WD (working directory)
1815 steve@@sxemacs.org--@yy{}/sxemacs--main--@cver{} RET
1817 $ tla commit -s "synch up with the mainline" RET
1821 create a new log file for documenting the changes you are about to
1828 This creates a blank log file. Think of it as a ChangeLog file, but
1829 it is only for changes in this particular changeset. Update the log
1830 as you go, or all at once at the end. It doesn't matter, just do
1831 whatever is comfortable for you.
1833 Steve's log file tips:
1840 be as verbose as you can
1844 hack hack hack (which obviously includes testing)
1857 synch up your mirror
1860 $ tla archive-mirror RET
1864 send a commit log/merge request to sxemacs-patches@@sxemacs.org
1866 Creating and Sending the commit log/merge request:
1869 $ tla cat-log patch-n > /tmp/merge-mail RET
1871 $ tla get-changeset patch-n ,,foo-changes RET
1873 $ tla show-changeset --diffs ,,foo-changes >> /tmp/merge-mail
1875 $ mail -s "[merge-req] $(tla logs -f|tail -n1)" \
1876 sxemacs-patches@@sxemacs.org < /tmp/merge-mail RET
1878 $ rm -rf ,,foo-changes RET
1882 BTW, a lot of these seemingly mundane tasks can be automated via tla
1885 @subheading Other Developers' Repositories
1887 Some of these repos may not be publicly accessible or may not be
1893 http://www.math.tu-berlin.de/~freundt/archives/sxemacs/
1896 http://sxemacs.homeip.net:4080/njsf-arch/sxemacs/2007/
1899 http://arch.xwem.org/2006/
1902 http://arafel.viteno.net:33080/arch/sxemacs/
1905 http://www.informatik.uni-bremen.de/~mkhl/sxemacs-mirror/
1906 @c Alexey Mikhailov (karma)
1908 http://karma.ezunix.org/arch/2005/
1911 @c http://hynek.in-berlin.de/archive/
1912 @c Horst Burkhardt (PeanutHorst)
1914 http://midcom.steveyoungs.com/oss-vc/sxemacs/
1917 @c http://www.heatxsink.com/2005/
1920 And of course the main repo (Steve's) is at:
1922 http://arch.sxemacs.org/@yy{}/
1925 @node Concept Index,, Version Control, Top
1926 @unnumbered Concept Index