Index: en_US.ISO8859-1/articles/committers-guide/article.xml
===================================================================
--- en_US.ISO8859-1/articles/committers-guide/article.xml
+++ en_US.ISO8859-1/articles/committers-guide/article.xml
@@ -1,6 +1,6 @@
]>
@@ -9,7 +9,7 @@
xml:lang="en">
- Committer's Guide
+ FreeBSD Committer's GuideThe &os; Documentation Project
@@ -35,6 +35,7 @@
201520162017
+
The &os; Documentation Project
@@ -52,178 +53,771 @@
$FreeBSD$
- This document provides information for the &os;
- committer community. All new committers should read this
- document before they start, and existing committers are
- strongly encouraged to review it from time to time.
-
- Almost all &os; developers have commit rights to one or
- more repositories. However, a few developers do not, and some
- of the information here applies to them as well. (For
- instance, some people only have rights to work with the
- Problem Report database). Please see
- for more information.
-
- This document may also be of interest to members of the
- &os; community who want to learn more about how the project
- works.
+ Welcome to &os;! This onboarding guide provides new &os;
+ committers, contributors, GSoC students, and other project
+ community members with the procedures, policies and tools
+ required to commit to the various &os; source repositories.
+ While not every section of this guide will apply to every new
+ community member, every project participant is encouraged to
+ grow their project participation in conjunction with the
+ growth of their technical abilities. Existing committers are
+ strongly encouraged to review this guide from time to time and
+ committers who would like to mentor a new committer should
+ refer to the New
+ Account Creation Procedure page for guidance.
-
- Administrative Details
-
-
-
-
-
-
-
- Login Methods
- &man.ssh.1;, protocol 2 only
-
-
-
- Main Shell Host
- freefall.FreeBSD.org
-
+
+ Benefits of &os; Project Participation
-
- src/ Subversion
- Root
- svn+ssh://repo.FreeBSD.org/base
- (see also ).
-
+
+ Recognition
-
- doc/ Subversion
- Root
- svn+ssh://repo.FreeBSD.org/doc
- (see also ).
-
+ Recognition as an open source software contributor is the
+ longest lasting benefit of contributing to &os;. The &os;
+ project has brought together contributors from around the world
+ for over 20 years under three generations of leadership. &os;
+ is a complete operating system for various computing
+ architectures with a welcoming community that focuses on
+ tecnological innovation, flexibility and performance.
+ Additional benefits of contributing to &os; include:
+
-
- ports/ Subversion
- Root
+
+ FreeBSD Mall Discs
+
+ &os; committers can get a free 4-CD or DVD set at
+ conferences from
+ &os; Mall,
+ Inc..
+
+
+
+ Freenode IRC cloked hostmasks
+
+ In addition, developers may request a cloaked hostmask
+ for their account on the Freenode IRC network in the form
+ of
+ freebsd/developer/freefall
+ name or
+ freebsd/developer/NickServ
+ name. To request a cloak, send an email to
+ &a.irc.email; with your requested hostmask and NickServ
+ account name.
+
- svn+ssh://repo.FreeBSD.org/ports
- (see also ).
-
+
+ Gandi.net Discounts
-
- Internal Mailing Lists
- developers (technically called all-developers),
- doc-developers, doc-committers, ports-developers,
- ports-committers, src-developers, src-committers. (Each
- project repository has its own -developers and
- -committers mailing lists. Archives for these lists can
- be found in the files
- /local/mail/repository-name-developers-archive
- and
- /local/mail/repository-name-committers-archive
- on the FreeBSD.org
- cluster.)
-
+ Gandi provides website hosting, cloud computing, domain
+ registration, and X.509 certificate services.
+ Gandi offers an E-rate discount to all &os; developers.
+ Send mail to non-profit@gandi.net using your
+ @freebsd.org mail address, and indicate
+ your Gandi handle.
+
+
-
- Core Team monthly
- reports
- /home/core/public/monthly-reports
- on the FreeBSD.org
- cluster.
-
+
+ Commit Bit Types
-
- Ports Management Team monthly
- reports
- /home/portmgr/public/monthly-reports
- on the FreeBSD.org
- cluster.
-
+ The &os; repository has a number of components which, when
+ combined, support the basic operating system source,
+ documentation, third party application ports infrastructure, and
+ various maintained utilities. When &os; commit bits are
+ allocated, the areas of the tree where the bit may be used are
+ specified. Generally, the areas associated with a bit reflect
+ who authorized the allocation of the commit bit. Additional
+ areas of authority may be added at a later date: when this
+ occurs, the committer should follow normal commit bit allocation
+ procedures for that area of the tree, seeking approval from the
+ appropriate entity and possibly getting a mentor for that area
+ for some period of time.
-
- Noteworthy src/ SVN
- Branches
-
- stable/8 (8.X-STABLE),
- stable/9 (9.X-STABLE),
- stable/10 (10.X-STABLE),
- head (-CURRENT)
-
-
+
+
+
+
+ Committer Type
+ Responsible
+ Tree Components
+
+
+
+ src
+ core@
+ src/, doc/ subject to appropriate review
+
+
+
+ doc
+ doceng@
+ doc/, ports/, src/ documentation
+
+
+
+ ports
+ portmgr@
+ ports/
+
+
- &man.ssh.1; is required to connect to the project hosts.
- For more information, see .
+ Commit bits allocated prior to the development of the notion
+ of areas of authority may be appropriate for use in many parts
+ of the tree. However, common sense dictates that a committer
+ who has not previously worked in an area of the tree seek review
+ prior to committing, seek approval from the appropriate
+ responsible party, and/or work with a mentor. Since the rules
+ regarding code maintenance differ by area of the tree, this is
+ as much for the benefit of the committer working in an area of
+ less familiarity as it is for others working on the tree.
- Useful links:
+ Committers are encouraged to seek review for their work as
+ part of the normal development process, regardless of the area
+ of the tree where the work is occurring.
-
-
- &os;
- Project Internal Pages
-
+
+ Policy for Committer Activity in Other Trees
-
- &os;
- Project Hosts
-
+
+
+ All committers may modify
+ base/head/share/misc/committers-*.dot,
+ base/head/usr.bin/calendar/calendars/calendar.freebsd,
+ and
+ ports/head/astro/xearth/files.
+
+
+
+ doc committers may commit
+ documentation changes to src
+ files, such as man pages, READMEs, fortune databases,
+ calendar files, and comment fixes without approval from a
+ src committer, subject to the normal care and tending of
+ commits.
+
+
+
+ Any committer may make changes to any other tree
+ with an "Approved by" from a non-mentored committer with
+ the appropriate bit.
+
+
+
+ Committers can aquire an additional bit by the usual
+ process of finding a mentor who will propose them to core,
+ doceng, or portmgr, as appropriate. When approved, they
+ will be added to 'access' and the normal mentoring period
+ will ensue, which will involve a continuing of
+ Approved by for some period.
+
+
+
+ "Approved by" is only acceptable from non-mentored src
+ committers -- mentored committers can provide a "Reviewed
+ by" but not an "Approved by".
+
+
+
+
-
- &os;
- Project Administrative Groups
-
-
+
+ New Project Participant Setup, Conventions, and
+ Traditions
+
+ There are a number of things to do as a new developer.
+ The first set of steps is specific to committers only. These
+ steps must be done by a mentor for those who are not
+ committers.
+
+
+ Mentors
+
+ All new developers have a mentor assigned to them for
+ the first few months. A mentor is responsible for teaching
+ the mentee the rules and conventions of the project and
+ guiding their first steps in the developer community. The
+ mentor is also personally responsible for the mentee's actions
+ during this initial period.
+
+ For committers: do not commit anything without first
+ getting mentor approval. Document that approval with an
+ Approved by: line in the commit
+ message.
+
+ When the mentor decides that a mentee has learned the
+ ropes and is ready to commit on their own, the mentor
+ announces it with a commit to
+ conf/mentors. This file is in the
+ svnadmin branch of each
+ repository:
+
+
+
+
+
+ src
+ base/svnadmin/conf/mentors
+
+
+
+ doc
+ doc/svnadmin/conf/mentors
+
+
+
+ ports
+ ports/svnadmin/conf/mentors
+
+
+
+
+
+
+
+ Development Environment
+
+ &os; contributors are encouraged to contribute to the project
+ using a &os; development environment. &os; is a self-hosted
+ operating system with a wide array of available graphical desktops
+ and contributing to &os; using &os; is the
+ most efficient way of identifying and resolving any issues you may
+ encounter. The myriad of available virtualization options make
+ this easier than ever if a bare-metal &os; system is not available
+ to you. See the Installing &os;
+ section of the FreeBSD Handbook for information on installing &os;
+
+
+
+
+ Setup Procedures for New Committers and Contributors
+
+ The fictional user "J. Random User <jru@freebsd.org>"
+ will be used in these instructions. Replace jru's information
+ with your name and usrename as appropriate.
+
+ Those who have been given commit rights to the &os;
+ repositories must follow these steps.
+
+
+
+ Get mentor approval before committing each of these
+ changes!
+
+
+
+ The .ent and
+ .xml files mentioned below exist in
+ the &os; Documentation Project SVN repository at svn.freebsd.org/doc/.
+
+
+
+ New files that do not have the
+ FreeBSD=%H
+ svn:keywords property will be rejected
+ when attempting to commit them to the repository. Be sure
+ to read
+
+ regarding adding and removing files. Verify that
+ ~/.subversion/config contains the
+ necessary auto-props entries from
+ auto-props.txt mentioned
+ there.
+
+
+
+ All src commits should go to
+ &os.current; first before being merged to &os.stable;.
+ The &os.stable; branch must maintain
+ ABI and API
+ compatibility with earlier versions of that branch. Do
+ not merge changes that break this compatibility.
+
+
+
+
+ Steps for New Committers and Contributors
+
+
+ Add an Author !ENTITY Entry
+
+ Committers: Add an author !ENTITY entry to
+ doc/head/share/xml/authors.ent.
+ This is an XML element that is used throughout the &os;
+ build system. Later steps depend on this entity, and
+ missing this step will cause the doc/
+ build to fail. This is a relatively easy task, but remains
+ a good first test of version control skills. Entries are
+ sorted by @freebsd.org username.
+
+
+...
+<!ENTITY a.dexter "J. Random User">
+<!ENTITY a.jru.email "&a.jru; <email xmlns='http://docbook.org/ns/docbook'>jru@FreeBSD.org</email>">
+...
+
+
+
+
+
+ Update the List of Developers or Contributors
+
+
+ Committers: Add an entry to the Developers section
+ of
+doc/head/en_US.ISO8859-1/articles/contributors/contrib.committers.xml
+ to appear on the Contributors
+ List. Entries are sorted by last name.
+
+
+...
+ <listitem>
+ <para>&a.jru.email;</para>
+ </listitem>
+...
+
+
+ Contributors becoming Committers: Transfer your !ENTITY
+ entry from the Additional Contributors to the
+ Developers section.
+
+
+
+ Add a News Item
+
+ Add a News Item entry to
+ doc/head/share/xml/news.xml
+ Look for the other entries that announce new committers and
+ follow the format. Use the date from the commit bit approval
+ email from core@freebsd.org.
+
+
+...
+ <month>
+ <name>9</name>
+
+ <day>
+ <name>23</name>
+
+ <event>
+ <p>New committer:
+ <a href="mailto:jru@FreeBSD.org">J. Random User</a>
+ (doc)</p>
+ </event>
+ </day>
+ </month>
+...
+
+
+
+
+ Add a PGP/GnuPG Key
+
+ If you do not have a
+ PGP/GnuPG key or your key
+ is expiring relatively soon, refer to
+ for instructions on how to
+ create a new PGP/GnuPG
+ key.
+
+ Add your PGP/GnuPG
+ key to
+ doc/head/share/pgpkeys/pgpkeys.ent
+ and
+ doc/head/share/pgpkeys/pgpkeys-developers.xml
+ using the
+ doc/head/share/pgpkeys/addkey.sh shell
+ script. See README
+ file for full details. Note the instructions provided by
+ the script.
+
+ &prompt.user; ./addkey.sh jru
+WARNING: Multiple keys found for <jru@FreeBSD.org<; exporting all.
+WARNING: If this is not what you want, specify a key ID on the command line.
+Generating jru.key...
+Adding key to entity list...
+
+Unless you are already listed there, you should now add the following
+text to pgpkeys-developers.xml. Remember to keep the list sorted by
+last name!
+
+ <sect2 xmlns="http://docbook.org/ns/docbook" xml:id="pgpkey-jru">
+ <title>&a.jru.email;</title>
+ &pgpkey.jru;
+ </sect2>
+
+If this is a role key or you are a core member, you should add it to
+either pgpkeys-officers.xml or pgpkeys-core.xml instead.
+
+If this is a new entry, don't forget to run the following commands
+before committing:
+
+% svn add jru.key
+% svn propset svn:keywords FreeBSD=%H jru.key
+
+
+ Use
+ doc/head/share/pgpkeys/checkkey.sh to
+ verify that keys meet minimal best-practices
+ standards.
+
+ &prompt.user; ./checkkey.sh jru
+WARNING: Multiple keys found for <jru@FreeBSD.org>; checking all.
+WARNING: If this is not what you want, specify a key ID on the command line.
+key E9A628D03AC59BFB: RSA, 2048 bits
+ key okay, E9A628D03AC59BFB meets minimal requirements
+
+
+ After adding and checking a key, add both updated
+ files to source control and then commit them. Entries in
+ this file are sorted by last name.
+
+
+ It is very important to have a current
+ PGP/GnuPG key in
+ the repository. The key may be required for positive
+ identification of a committer. For example, the
+ &a.admins; might need it for account recovery. A
+ complete keyring of freebsd.org users is
+ available for download from http://www.freebsd.org/doc/pgpkeyring.txt.
+
+
+
+
+ Update Mentor and Mentee Information
+
+ Add an entry to the current committers section of
+ base/head/share/misc/committers-repository.dot
+ where repository is
+ doc, ports, or
+ src, depending on the commit privileges
+ granted.
+
+ Add an entry for each additional mentor/mentee
+ relationship in the bottom section.
+
+
+
+ Generate a Kerberos
+ Password
+
+ See to generate or
+ set a Kerberos for use with
+ other &os; services like the bug tracking database.
+
+
+
+ Set Up a Phabricator Account
+
+ A reviews.freebsd.org
+ a.k.a. "Phabricator" account allows you to submit patches for
+ review by other project members for discussion and revision prior
+ to committing. Visit reviews.freebsd.org/auth/register/
+ to set up a Phabricator account. If you already have a Phabricator
+ account with non-&os; email address, log into Phabricator and add
+ your @freebsd.org email address to your profile. This will require
+ you to verify your address, after which you can make your
+ @freebsd.org address your primary address. Mailphabric-admin@freebsd.org
+ and ask that your username be changed to your @freebsd.org address.
+ Note that when your account type is changed, you will no longer be
+ able to log in with your non-&os; password but rather will need to
+ use Keberos. See
+ for details.
+
+
+
+ Optional: Create a Wiki Account
+
+ A wiki.freebsd.org
+ account allows you to share projects and ideas that are not
+ suitable for the primary &os; documentation. wiki.freebsd.org
+ is also used for event organization such as DevSummits. Visit
+ wiki.freebsd.org/action/newaccount/FrontPage?action=newaccount
+ to create a new Wiki account.
+
+
+
+ Optional: Update Wiki Information
+
+ Some project members add entries to
+ How
+ We Got Here,
+ Irc
+ Nicks, and Dogs
+ of FreeBSD pages.
+
+
+
+ Optional: Add Additional Personal Information
+
+ Some project members add entries for themselves to
+ ports/astro/xearth/files/freebsd.committers.markers
+ and
+ src/usr.bin/calendar/calendars/calendar.freebsd
+ to show where they are located or the date of their
+ birthday.
+
+
+
+ Optional: Prevent Duplicate Mailings
+
+ Subscribers to &a.svn-src-all.name;,
+ &a.svn-ports-all.name; or &a.svn-doc-all.name; might wish
+ to unsubscribe to avoid receiving duplicate copies of
+ commit messages and followups.
+
+
+
+
+
+ For Everyone
+
+
+
+ Introduce yourself to the other developers, otherwise
+ no one will have any idea who you are or what you are
+ working on. The introduction need not be a comprehensive
+ biography, just write a paragraph or two about who you
+ are, what you plan to be working on as a developer in
+ &os;, and who will be your mentor. Email this to the
+ &a.developers; and you will be on your way!
+
+
+
+ Log into freefall.freebsd.org
+ and create a
+ /var/forward/user
+ (where user is your username)
+ file containing the e-mail address where you want mail
+ addressed to
+ yourusername@freebsd.org to be
+ forwarded. This includes all of the commit messages as
+ well as any other mail addressed to the &a.committers; and
+ the &a.developers;. Really large mailboxes which have
+ taken up permanent residence on
+ freefall may get truncated
+ without warning if space needs to be freed, so forward it
+ or read it and you will not lose it.
+
+ Due to the severe load dealing with SPAM places on the
+ central mail servers that do the mailing list processing
+ the front-end server does do some basic checks and will
+ drop some messages based on these checks. At the moment
+ proper DNS information for the connecting host is the only
+ check in place but that may change. Some people blame
+ these checks for bouncing valid email. If you want these
+ checks turned off for your email you can place a file
+ named .spam_lover in your home
+ directory on freefall.freebsd.org
+ to disable the checks for your email.
+
+
+
+
+ Those who are developers but not committers will
+ not be subscribed to the committers or developers mailing
+ lists. The subscriptions are derived from the access
+ rights.
+
+
+
+
+
+ OpenSSH Keys for &os;
+
+ Cryptographic keys conforming to the
+ OpenSSH (Secure
+ Shell) standard are used by the &os; project to allow
+ access by committers to various &os; servers for source
+ commits, communication and project management.
+
+
+ Creating an OpenSSH Key
+
+ Existing OpenSSH keys can be used, but only if they
+ comply with the ECDSA,
+ Ed25519 or RSA standards.
+
+
+ For those who do not yet have an
+ OpenSSH key, or need a new key to meet
+ &os; security requirements.
+
+
+
+ Generate a key pair using &man.ssh-keygen.1;. The key
+ pair will be saved to your $HOME/.ssh/
+ directory.
+
+
+ Only ECDSA,
+ Ed25519 or RSA keys
+ are supported.
+
+
+
+
+ &prompt.user; ssh-keygen
+Enter file in which to save the key (/home/jru/.ssh/id_rsa):
+Enter passphrase (empty for no passphrase):
+Enter same passphrase again:
+Your identification has been saved in /home/jru/.ssh/id_rsa.
+Your public key has been saved in /home/jru/.ssh/id_rsa.pub.
+The key fingerprint is:
+SHA256:E+w9UzR94MPczAeqt/IJbXYmj2/+L4wr38NofwhmDts jru@host
+The key's randomart image is:
++---[RSA 2048]----+
+| +o.o.|
+| . =.*.oo|
+| o O.* o|
+| . o * + + |
+| S + o = +|
+| ..o+* = |
+| B *o..|
+| o E.* o|
+| +o.o++|
++----[SHA256]-----+
+
+
+
+
+ Send your public key
+ ($HOME/.ssh/id_ecdsa.pub,
+ $HOME/.ssh/id_ed25519.pub, or
+ $HOME/.ssh/id_rsa.pub)
+ to the person setting you up as a committer so it can be put
+ into
+ yourlogin
+ in
+ /etc/ssh-keys/ on
+ freefall.
+
+
+
+ If you do not wish to type your password in every time
+ you use &man.ssh.1;, and you use keys to
+ authenticate, &man.ssh-agent.1; is there for your
+ convenience. If you want to use &man.ssh-agent.1;, make
+ sure that you run it before running other applications. X
+ users, for example, usually do this from their
+ .xsession or
+ .xinitrc. See &man.ssh-agent.1; for
+ details.
+
+
+
+
+
+ OpenSSH Server-Side User Account Key Management
+
+ The &os; Cluster provides a self-serve service for public
+ OpenSSH key management at
+ keymaster.freebsd.org. This service
+ allows you to list, add and remove OpenSSH keys associated
+ with your @freebsd.org username.
+
+ &prompt.user; ssh keymaster.freebsd.org
+============================================================================
+ READ ME CAREFULLY
+============================================================================
+MAKE SURE you know how to use PGP and that your key in the handbook is
+current. PGP signed email to accounts@ is your primary recovery option.
+
+You may use the following commands:
+LIST: -- show your current keys
+ ssh jru@keymaster.freebsd.org list
+
+ADD: -- Add a SINGLE public key FROM SSH STANDARD INPUT
+ ssh jru@keymaster.freebsd.org add < ~/.ssh/id_ed25519.pub
+ Alternative: "ssh jru@keymaster.freebsd.org add" and cut/paste.
+(Must pass basic santiy checks. ED25519, RSA>=2048, ECDSA allowed)
+
+REMOVE: -- interactively select keys to remove from the list.
+ ssh jru@keymaster.freebsd.org remove
+
+You will receive an email copy of any changes with cc: to admin folks.
+If you need help for non-standard key configurations: accounts@freebsd.org
+
+Any changes that you make will take approximately 10 minutes to go live.
+============================================================================
+
+
+
+
+ Local OpenSSH Key Management
+
+ Now you should be able to use &man.ssh-add.1; for
+ authentication once per session. This will prompt you for
+ your private key's pass phrase, and then store it in your
+ authentication agent (&man.ssh-agent.1;). If you no longer
+ wish to have your key stored in the agent, issuing
+ ssh-add -d will remove it.
+
+ Test by doing something such as ssh
+ freefall.freebsd.org ls /usr.
+
+ For more information, see
+ security/openssh,
+ &man.ssh.1;, &man.ssh-add.1;, &man.ssh-agent.1;,
+ &man.ssh-keygen.1;, and &man.scp.1;.
+
+ For information on adding, changing, or removing
+ &man.ssh.1; keys, see this
+ article.
+
- OpenPGP Keys for &os;
+ PGP/GnuPG Keys for
+ &os;Cryptographic keys conforming to the
- OpenPGP (Pretty Good
- Privacy) standard are used by the &os; project to
- authenticate committers. Messages carrying important
- information like public SSH keys can be
- signed with the OpenPGP key to prove that
- they are really from the committer. See
+ PGP (Pretty Good
+ Privacy)/GnuPG standard are used
+ by the &os; project to authenticate committers. Messages
+ carrying important information like new public
+ PGP/GnuPG can be signed
+ with the PGP/GnuPG key to
+ prove that they are really from the committer. See
PGP &
- GPG: Email for the Practical Paranoid by Michael Lucas
+ GPG: Email for the Practical Paranoid by Michael Lucas
and
for more information.
- Creating a Key
+ Creating a PGP/GnuPG
+ Key
- Existing keys can be used, but should be checked with
- doc/head/share/pgpkeys/checkkey.sh
- first.
+ Existing PGP/GnuPG
+ keys can be used, but should be checked with doc/head/share/pgpkeys/checkkey.sh
+ first.For those who do not yet have an
- OpenPGP key, or need a new key to meet &os;
- security requirements, here we show how to generate
- one.
+ PGP/GnuPG key, or need a
+ new key to meet &os; security requirements, here we show how
+ to generate one.
- Install
- security/gnupg. Enter
- these lines in ~/.gnupg/gpg.conf to
- set minimum acceptable defaults:
+ Install security/gnupg. Enter these
+ lines in ~/.gnupg/gpg.conf to set
+ minimum acceptable defaults:fixed-list-mode
keyid-format 0xlong
@@ -239,6 +833,9 @@
Generate a key:
+ Note that you must have full control of the terminal
+ for GPG key generation to succeed. Using 'su' will fail.
+
&prompt.user; gpg --full-gen-key
gpg (GnuPG) 2.1.8; Copyright (C) 2015 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
@@ -261,16 +858,16 @@
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 3y
-Key expires at Wed Nov 4 17:20:20 2015 MST
+Key expires at Wed Nov 4 17:20:20 2020 MST
Is this correct? (y/N) y
GnuPG needs to construct a user ID to identify your key.
-Real name: Chucky Daemon
-Email address: notreal@example.com
+Real name: J. Random User
+Email address: jru@freebsd.org
Comment:
You selected this USER-ID:
- "Chucky Daemon <notreal@example.com>"
+ "J. Random User <jru@freebsd.org>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.
@@ -315,7 +912,7 @@
Protect your private key and passphrase. If either the
private key or passphrase may have been compromised or
disclosed, immediately notify
- accounts@FreeBSD.org and revoke the key.
+ accounts@freebsd.org and revoke the key.
Committing the new key is shown in
.
@@ -334,11 +931,11 @@
Bugzilla
+ xlink:href="http://bugs.freebsd.org/bugzilla">Bugzilla
Jenkins
+ xlink:href="http://jenkins.freebsd.org">Jenkins
@@ -346,7 +943,29 @@
reset a Kerberos password for an existing account using a random
password generator:
- &prompt.user; ssh kpasswd.freebsd.org
+ &prompt.user; ssh jru@kpasswd.freebsd.org
+FreeBSD 12.0-CURRENT (CLUSTER) #0 r306376: Tue Sep 27 19:02:08 UTC 2016
+
+Unauthorized access is strictly prohibited.
+role=kpasswd build=amd64_12@306376
+
+Hi there, jru..
+
+Sanity checking..
+Creating initial instance for jru
+===================================================================
+Generating a strong, evil random password..
+===================================================================
+Your new, ready to forget, password: Fop%o3wee3ei
+===================================================================
+You can change it with kpasswd(1) on any machine in the cluster,
+but please consider using a password manager instead. Things like
+LastPass, 1Password etc work great.
+
+Run this again to get a different random password.
+
+Connection to kpasswd.freebsd.org closed.
+ This must be done from a machine outside of the &os;.org
@@ -355,11 +974,19 @@
A Kerberos password can also be set manually
by logging into freefall.FreeBSD.org and
+ class="fqdomainname">freefall.freebsd.org and
running:
- &prompt.user; kpasswd
-
+ &prompt.user; ssh jru@freefall.freebsd.org
+&prompt.user; kpasswd
+jru@FREEBSD.ORG's Password:
+kpasswd: krb5_get_init_creds: Preauthentication failed
+jru@freefall:~ % kpasswd
+jru@FREEBSD.ORG's Password:
+New password:
+Verifying - New password:
+Success : Password changed
+ Unless you have used the Kerberos-authenticated services
of the &os;.org cluster previously,
@@ -371,3673 +998,3347 @@
-
- Commit Bit Types
+
+ Administrative Links
- The &os; repository has a number of components which, when
- combined, support the basic operating system source,
- documentation, third party application ports infrastructure, and
- various maintained utilities. When &os; commit bits are
- allocated, the areas of the tree where the bit may be used are
- specified. Generally, the areas associated with a bit reflect
- who authorized the allocation of the commit bit. Additional
- areas of authority may be added at a later date: when this
- occurs, the committer should follow normal commit bit allocation
- procedures for that area of the tree, seeking approval from the
- appropriate entity and possibly getting a mentor for that area
- for some period of time.
+
+
+
+
+
+
+ Login Methods
+ &man.ssh.1;, protocol 2 only
+
+
+
+ Main Shell Host
+ freefall.freebsd.org
+
+
+
+ src/ Subversion
+ Root
+ svn+ssh://repo.freebsd.org/base
+ (see also ).
+
+
+
+ doc/ Subversion
+ Root
+ svn+ssh://repo.freebsd.org/doc
+ (see also ).
+
+
+
+ ports/ Subversion
+ Root
+
+ svn+ssh://repo.freebsd.org/ports
+ (see also ).
+
+
+
+ Internal Mailing Lists
+ developers (technically called all-developers),
+ doc-developers, doc-committers, ports-developers,
+ ports-committers, src-developers, src-committers. (Each
+ project repository has its own -developers and
+ -committers mailing lists. Archives for these lists can
+ be found in the files
+ /local/mail/repository-name-developers-archive
+ and
+ /local/mail/repository-name-committers-archive
+ on the freebsd.org
+ cluster.)
+
+
+
+ Core Team monthly
+ reports
+ /home/core/public/monthly-reports
+ on the freebsd.org
+ cluster.
+
+
+
+ Ports Management Team monthly
+ reports
+ /home/portmgr/public/monthly-reports
+ on the freebsd.org
+ cluster.
+
+
+
+ Noteworthy src/ SVN
+ Branches
+
+ stable/10 (10.X-STABLE),
+ stable/11 (11.X-STABLE),
+ head (12-CURRENT)
+
+
+
+
-
-
-
-
- Committer Type
- Responsible
- Tree Components
-
+ &man.ssh.1; is required to connect to the project hosts.
+ For more information, see .
-
- src
- core@
- src/, doc/ subject to appropriate review
-
+ Useful links:
-
- doc
- doceng@
- doc/, ports/, src/ documentation
-
+
+
+ &os;
+ Project Internal Pages
+
-
- ports
- portmgr@
- ports/
-
-
-
-
+
+ &os;
+ Project Hosts
+
- Commit bits allocated prior to the development of the notion
- of areas of authority may be appropriate for use in many parts
- of the tree. However, common sense dictates that a committer
- who has not previously worked in an area of the tree seek review
- prior to committing, seek approval from the appropriate
- responsible party, and/or work with a mentor. Since the rules
- regarding code maintenance differ by area of the tree, this is
- as much for the benefit of the committer working in an area of
- less familiarity as it is for others working on the tree.
+
+
- Committers are encouraged to seek review for their work as
- part of the normal development process, regardless of the area
- of the tree where the work is occurring.
+
+ FreeBSD Teams
-
- Policy for Committer Activity in Other Trees
+ The &os; project is organized into several teams that
+ share responsibility for various aspects of the project.
+ See &os;
+ Project Administrative Groups for a complete
+ list of the active &os; teams.
-
-
- All committers may modify
- base/head/share/misc/committers-*.dot,
- base/head/usr.bin/calendar/calendars/calendar.freebsd,
- and
- ports/head/astro/xearth/files.
-
+
+
+ &a.doceng;
-
- doc committers may commit
- documentation changes to src
- files, such as man pages, READMEs, fortune databases,
- calendar files, and comment fixes without approval from a
- src committer, subject to the normal care and tending of
- commits.
-
+
+ doceng is the group responsible for the documentation
+ build infrastructure, approving new documentation
+ committers, and ensuring that the &os; website and
+ documentation on the FTP site is up to date with respect
+ to the subversion tree. It is
+ not a conflict resolution body.
+ The vast majority of documentation related discussion
+ takes place on the &a.doc;. More details regarding the
+ doceng team can be found in its charter.
+ Committers interested in contributing to the documentation
+ should familiarize themselves with the Documentation
+ Project Primer.
+
+
-
- Any committer may make changes to any other tree
- with an "Approved by" from a non-mentored committer with
- the appropriate bit.
-
+
-
- "Approved by" is only acceptable from non-mentored src
- committers -- mentored committers can provide a "Reviewed
- by" but not an "Approved by".
-
-
-
-
+
+ &a.portmgr;
-
- Subversion Primer
+
+ portmgr is the group responsible for maintenance
+ of the &os; Ports Collection, a repository of third
+ party software that is ported to &os;. Committers
+ interested in contributing to &os; Ports should
+ familiarize themselves with the Porter's
+ Handbook.
+
+
- It is assumed that you are already familiar with the basic
- operation of Subversion. If not, start by reading the
- Subversion
- Book.
-
-
- Introduction
-
- The &os; source repository switched from
- CVS to Subversion on May 31st, 2008. The
- first real SVN commit is
- r179447.
+
+ &a.re;
- The &os; doc/www repository switched
- from CVS to Subversion on May 19th, 2012.
- The first real SVN commit is
- r38821.
+
+ The &a.re; team is responsible for setting &os;
+ release deadlines and controlling the release process.
+ During code freezes, the release engineers have final
+ authority on all changes to the system for whichever
+ branch is pending release status. If there is something
+ you want merged from &os.current; to &os.stable;
+ (whatever values those may have at any given time),
+ these are the people to talk to about it.
+
+
+
- The &os; ports repository switched
- from CVS to Subversion on July 14th, 2012.
- The first real SVN commit is
- r300894.
+
+ &a.security-officer;
- Subversion can be installed from the &os; Ports
- Collection by issuing these commands:
+
+ The &a.security-officer; is responsible for overseeing
+ all security-related issues of the &os; project.
+
+
- &prompt.root; pkg install subversion
+
+ Cluster Admin
-
+
+ The Cluster Admin team is responsible for overseeing
+ the &os; project infrastructure.
+
+
+
+
+
- There are a few ways to obtain a working copy of the tree
- from Subversion. This section will explain them.
+
+ FreeBSD Mailing Lists
-
- Direct Checkout
+ The &os; maintains several mailing lists to facilitate
+ communication within the project.
- The first is to check out directly from the main
- repository. For the src tree,
- use:
+
+
+ &a.committers;
- &prompt.user; svn checkout svn+ssh://repo.freebsd.org/base/head /usr/src
+
+ &a.svn-src-all.name;, &a.svn-ports-all.name; and
+ &a.svn-doc-all.name; are the mailing lists that the
+ version control system uses to send commit messages to.
+ You should never send email directly
+ to these lists. You should only send replies to this list
+ when they are short and are directly related to a
+ commit.
+
+
- For the doc tree, use:
+
+ &a.developers;
- &prompt.user; svn checkout svn+ssh://repo.freebsd.org/doc/head /usr/doc
+
+ All committers are subscribed to -developers. This
+ list was created to be a forum for the committers
+ community issues. Examples are Core
+ voting, announcements, etc.
+
+ The &a.developers; is for the exclusive use of &os;
+ committers. In order to develop &os;, committers must
+ have the ability to openly discuss matters that will be
+ resolved before they are publicly announced. Frank
+ discussions of work in progress are not suitable for open
+ publication and may harm &os;.
+
+ All &os; committers are expected not to
+ not publish or forward messages from the
+ &a.developers; outside the list membership without
+ permission of all of the authors. Violators will be
+ removed from the
+ &a.developers;, resulting in a suspension of commit
+ privileges. Repeated or flagrant violations may result in
+ permanent revocation of commit privileges.
+
+ This list is not intended as a
+ place for code reviews or for any technical discussion.
+ In fact using it as such hurts the &os; Project as it
+ gives a sense of a closed list where general decisions
+ affecting all of the &os; using community are made without
+ being open. Last, but not least
+ never, never ever, email the &a.developers; and
+ CC:/BCC: another &os; list. Never, ever email
+ another &os; email list and CC:/BCC: the &a.developers;.
+ Doing so can greatly diminish the benefits of this
+ list.
+
+
+
+
- For the ports tree, use:
+
+ &os; Community Rules
- &prompt.user; svn checkout svn+ssh://repo.freebsd.org/ports/head /usr/ports
+ As members of the &os; project, you form the public face of
+ the project, and how you behave has a vital impact on the public
+ perception of it.
-
- Though the remaining examples in this document are
- written with the workflow of working with the
- src tree in mind, the underlying
- concepts are the same for working with the
- doc and the ports
- tree.
- Ports related Subversion operations are listed in
- .
-
+ &os; Code of Conduct
- The above command will check out a
- CURRENT source tree as
- /usr/src/,
- which can be any target directory on the local filesystem.
- Omitting the final argument of that command causes the
- working copy, in this case, to be named head,
- but that can be renamed safely.
-
- svn+ssh means the
- SVN protocol tunnelled over
- SSH. The name of the server is
- repo.freebsd.org, base
- is the path to the repository, and head
- is the subdirectory within the repository.
-
- If your &os; login name is different from your login
- name on your local machine, you must either include it in
- the URL (for example
- svn+ssh://jarjar@repo.freebsd.org/base/head),
- or add an entry to your ~/.ssh/config
- in the form:
+ The &os;
+ Code
+ of Conduct exists to provide a consistent policy on
+ unacceptable behavior by &os; community members.
- Host repo.freebsd.org
- User jarjar
+ The following expands on the parts of the Code of
+ Conduct specific to committers.
- This is the simplest method, but it is hard to tell just
- yet how much load it will place on the repository.
+
+
+ Respect other committers.
+
-
- The svn diff does not require
- access to the server as SVN stores a
- reference copy of every file in the working copy. This,
- however, means that Subversion working copies are very
- large in size.
-
-
+
+ Respect other contributors.
+
-
- Checkout from a Mirror
+
+ Discuss any significant change
+ before committing.
+
- Check out a working copy from a mirror by
- substituting the mirror's URL for
- svn+ssh://repo.freebsd.org/base. This
- can be an official mirror or a mirror maintained by using
- svnsync.
+
+ Respect existing maintainers (if listed in the
+ MAINTAINER field in
+ Makefile or in
+ MAINTAINER in the top-level
+ directory).
+
- There is a serious disadvantage to this method: every
- time something is to be committed, a
- svn relocate to the master repository has
- to be done, remembering to svn relocate
- back to the mirror after the commit. Also, since
- svn relocate only works between
- repositories that have the same UUID, some hacking of the
- local repository's UUID has to occur before it is possible
- to start using it.
+
+ Any disputed change must be backed out pending
+ resolution of the dispute if requested by a maintainer.
+ Security related changes may override a maintainer's wishes
+ at the Security Officer's discretion.
+
- The hassle of a local
- svnsync mirror probably is not worth it
- unless the network connectivity situation or other factors
- demand it. If it is needed, see the end of this chapter for
- information on how to set one up.
-
+
+ Changes go to &os.current; before &os.stable; unless
+ specifically permitted by the release engineer or unless
+ they are not applicable to &os.current;. Any non-trivial or
+ non-urgent change which is applicable should also be allowed
+ to sit in &os.current; for at least 3 days before merging so
+ that it can be given sufficient testing. The release
+ engineer has the same authority over the &os.stable; branch
+ as outlined for the maintainer in rule #5.
+
-
- RELENG_* Branches and General
- Layout
+
+ Do not fight in public with other committers; it looks
+ bad.
+
- In svn+ssh://repo.freebsd.org/base,
- base refers to the source tree.
- Similarly, ports refers to the ports
- tree, and so on. These are separate repositories with their
- own change number sequences, access controls and commit
- mail.
+
+ Respect all code freezes and read the
+ committers and
+ developers mailing lists in a timely
+ manner so you know when a code freeze is in effect.
+
- For the base repository, HEAD refers to the -CURRENT
- tree. For example, head/bin/ls is what
- would go into /usr/src/bin/ls in a
- release. Some key locations are:
+
+ When in doubt on any procedure, ask first!
+
-
-
- /head/ which corresponds to
- HEAD, also known as
- -CURRENT.
-
+
+ Test your changes before committing them.
+
-
- /stable/n
- which corresponds to
- RELENG_n.
-
+
+ Do not commit to anything under the
+ src/contrib,
+ src/crypto, or
+ src/sys/contrib trees without
+ explicit approval from the respective
+ maintainer(s).
+
+
-
- /releng/n.n
- which corresponds to
- RELENG_n_n.
-
+ As noted, breaking some of these rules can be grounds for
+ suspension or, upon repeated offense, permanent removal of
+ commit privileges. Individual members of core have the power to
+ temporarily suspend commit privileges until core as a whole has
+ the chance to review the issue. In case of an
+ emergency (a committer doing damage to the
+ repository), a temporary suspension may also be done by the
+ repository meisters. Only a 2/3 majority of core has the
+ authority to suspend commit privileges for longer than a week or
+ to remove them permanently. This rule does not exist to set
+ core up as a bunch of cruel dictators who can dispose of
+ committers as casually as empty soda cans, but to give the
+ project a kind of safety fuse. If someone is out of control, it
+ is important to be able to deal with this immediately rather
+ than be paralyzed by debate. In all cases, a committer whose
+ privileges are suspended or revoked is entitled to a
+ hearing by core, the total duration of the
+ suspension being determined at that time. A committer whose
+ privileges are suspended may also request a review of the
+ decision after 30 days and every 30 days thereafter (unless the
+ total suspension period is less than 30 days). A committer
+ whose privileges have been revoked entirely may request a review
+ after a period of 6 months has elapsed. This review policy is
+ strictly informal and, in all cases, core
+ reserves the right to either act on or disregard requests for
+ review if they feel their original decision to be the right
+ one.
-
- /release/n.n.n
- which corresponds to
- RELENG_n_n_n_RELEASE.
-
+ In all other aspects of project operation, core is a subset
+ of committers and is bound by the
+ same rules. Just because someone is in
+ core this does not mean that they have special dispensation to
+ step outside any of the lines painted here; core's
+ special powers only kick in when it acts as a
+ group, not on an individual basis. As individuals, the core
+ team members are all committers first and core second.
-
- /vendor* is the vendor branch
- import work area. This directory itself does not
- contain branches, however its subdirectories do. This
- contrasts with the stable,
- releng and
- release directories.
-
+
+ Details
-
- /projects and
- /user feature a branch work area,
- like in Perforce. As above, the
- /user directory does not contain
- branches itself.
-
-
-
+
+
+ Respect other committers.
-
- &os; Documentation Project Branches and
- Layout
+ This means that you need to treat other committers as
+ the peer-group developers that they are. Despite our
+ occasional attempts to prove the contrary, one does not
+ get to be a committer by being stupid and nothing rankles
+ more than being treated that way by one of your peers.
+ Whether we always feel respect for one another or not (and
+ everyone has off days), we still have to
+ treat other committers with respect
+ at all times, on public forums and in private
+ email.
+
+ Being able to work together long term is this
+ project's greatest asset, one far more important than any
+ set of changes to the code, and turning arguments about
+ code into issues that affect our long-term ability to work
+ harmoniously together is just not worth the trade-off by
+ any conceivable stretch of the imagination.
+
+ To comply with this rule, do not send email when you
+ are angry or otherwise behave in a manner which is likely
+ to strike others as needlessly confrontational. First
+ calm down, then think about how to communicate in the most
+ effective fashion for convincing the other person(s) that
+ your side of the argument is correct, do not just blow off
+ some steam so you can feel better in the short term at the
+ cost of a long-term flame war. Not only is this very bad
+ energy economics, but repeated displays of
+ public aggression which impair our ability to work well
+ together will be dealt with severely by the project
+ leadership and may result in suspension or termination of
+ your commit privileges. The project leadership will take
+ into account both public and private communications
+ brought before it. It will not seek the disclosure of
+ private communications, but it will take it into account
+ if it is volunteered by the committers involved in the
+ complaint.
+
+ All of this is never an option which the project's
+ leadership enjoys in the slightest, but unity comes first.
+ No amount of code or good advice is worth trading that
+ away.
+
+
+
+ Respect other contributors.
+
+ You were not always a committer. At one time you were
+ a contributor. Remember that at all times. Remember what
+ it was like trying to get help and attention. Do not
+ forget that your work as a contributor was very important
+ to you. Remember what it was like. Do not discourage,
+ belittle, or demean contributors. Treat them with
+ respect. They are our committers in waiting. They are
+ every bit as important to the project as committers.
+ Their contributions are as valid and as important as your
+ own. After all, you made many contributions before you
+ became a committer. Always remember that.
+
+ Consider the points raised under
+ and apply them also to
+ contributors.
+
+
+
+ Discuss any significant change
+ before committing.
+
+ The repository is not where changes should be
+ initially submitted for correctness or argued over, that
+ should happen first in the mailing lists or by use of the
+ Phabricator service and the commit should only happen once
+ something resembling consensus has been reached. This
+ does not mean that you have to ask permission before
+ correcting every obvious syntax error or manual page
+ misspelling, simply that you should try to develop a feel
+ for when a proposed change is not quite such a no-brainer
+ and requires some feedback first. People really do not
+ mind sweeping changes if the result is something clearly
+ better than what they had before, they just do not like
+ being surprised by those changes.
+ The very best way of making sure that you are on the right
+ track is to have your code reviewed by one or more other
+ committers.
+
+ When in doubt, ask for review!
+
+
+
+ Respect existing maintainers if listed.
+
+ Many parts of &os; are not owned in
+ the sense that any specific individual will jump up and
+ yell if you commit a change to their area,
+ but it still pays to check first. One convention we use
+ is to put a maintainer line in the
+ Makefile for any package or subtree
+ which is being actively maintained by one or more people;
+ see http://www.freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/policies.html
+ for documentation on this. Where sections of code have
+ several maintainers, commits to affected areas by one
+ maintainer need to be reviewed by at least one other
+ maintainer. In cases where the
+ maintainer-ship of something is not clear,
+ you can also look at the repository logs for the file(s)
+ in question and see if someone has been working recently
+ or predominantly in that area.
+
+ Other areas of &os; fall under the control of someone
+ who manages an overall category of &os; evolution, such as
+ internationalization or networking. See http://www.freebsd.org/administration.html
+ for more information on this.
+
+
+
+ Any disputed change must be backed out pending
+ resolution of the dispute if requested by a maintainer.
+ Security related changes may override a maintainer's
+ wishes at the Security Officer's discretion.
+
+ This may be hard to swallow in times of conflict (when
+ each side is convinced that they are in the right, of
+ course) but a version control system makes it unnecessary
+ to have an ongoing dispute raging when it is far easier to
+ simply reverse the disputed change, get everyone calmed
+ down again and then try to figure out what is the best way
+ to proceed. If the change turns out to be the best thing
+ after all, it can be easily brought back. If it turns out
+ not to be, then the users did not have to live with the
+ bogus change in the tree while everyone was busily
+ debating its merits. People very
+ rarely call for back-outs in the repository since
+ discussion generally exposes bad or controversial changes
+ before the commit even happens, but on such rare occasions
+ the back-out should be done without argument so that we
+ can get immediately on to the topic of figuring out
+ whether it was bogus or not.
+
+
+
+ Changes go to &os.current; before &os.stable; unless
+ specifically permitted by the release engineer or unless
+ they are not applicable to &os.current;. Any non-trivial
+ or non-urgent change which is applicable should also be
+ allowed to sit in &os.current; for at least 3 days before
+ merging so that it can be given sufficient testing. The
+ release engineer has the same authority over the
+ &os.stable; branch as outlined in rule #5.
+
+ This is another do not argue about it
+ issue since it is the release engineer who is ultimately
+ responsible (and gets beaten up) if a change turns out to
+ be bad. Please respect this and give the release engineer
+ your full cooperation when it comes to the &os.stable;
+ branch. The management of &os.stable; may frequently seem
+ to be overly conservative to the casual observer, but also
+ bear in mind the fact that conservatism is supposed to be
+ the hallmark of &os.stable; and different rules apply
+ there than in &os.current;. There is also really no point
+ in having &os.current; be a testing ground if changes are
+ merged over to &os.stable; immediately. Changes need a
+ chance to be tested by the &os.current; developers, so
+ allow some time to elapse before merging unless the
+ &os.stable; fix is critical, time sensitive or so obvious
+ as to make further testing unnecessary (spelling fixes to
+ manual pages, obvious bug/typo fixes, etc.) In other
+ words, apply common sense.
+
+ Changes to the security branches (for example,
+ releng/9.3) must be approved by a
+ member of the &a.security-officer;, or in some cases, by a
+ member of the &a.re;.
+
+
+
+ Do not fight in public with other committers; it looks
+ bad.
+
+ This project has a public image to uphold and that
+ image is very important to all of us, especially if we are
+ to continue to attract new members. There will be
+ occasions when, despite everyone's very best attempts at
+ self-control, tempers are lost and angry words are
+ exchanged. The best thing that can be done in such cases
+ is to minimize the effects of this until everyone has
+ cooled back down. That means that you should not air your
+ angry words in public and you should not forward private
+ correspondence or other private communications to public
+ mailing lists, mail aliases, instant messaging channels or
+ social media sites. What people say one-to-one is often
+ much less sugar-coated than what they would say in public,
+ and such communications therefore have no place there -
+ they only serve to inflame an already bad situation. If
+ the person sending you a flame-o-gram at least had the
+ grace to send it privately, then have the grace to keep it
+ private yourself. If you feel you are being unfairly
+ treated by another developer, and it is causing you
+ anguish, bring the matter up with core rather than taking
+ it public. Core will do its best to play peace makers and
+ get things back to sanity. In cases where the dispute
+ involves a change to the codebase and the participants do
+ not appear to be reaching an amicable agreement, core may
+ appoint a mutually-agreeable third party to resolve the
+ dispute. All parties involved must then agree to be bound
+ by the decision reached by this third party.
+
+
+
+ Respect all code freezes and read the
+ committers and
+ developers mailing list on a timely
+ basis so you know when a code freeze is in effect.
+
+ Committing unapproved changes during a code freeze is
+ a really big mistake and committers are expected to keep
+ up-to-date on what is going on before jumping in after a
+ long absence and committing 10 megabytes worth of
+ accumulated stuff. People who abuse this on a regular
+ basis will have their commit privileges suspended until
+ they get back from the &os; Happy Reeducation Camp we
+ run in Greenland.
+
+
+
+ When in doubt on any procedure, ask first!
+
+ Many mistakes are made because someone is in a hurry
+ and just assumes they know the right way of doing
+ something. If you have not done it before, chances are
+ good that you do not actually know the way we do things
+ and really need to ask first or you are going to
+ completely embarrass yourself in public. There is no
+ shame in asking
+ how in the heck do I do this? We already
+ know you are an intelligent person; otherwise, you would
+ not be a committer.
+
+
+
+ Test your changes before committing them.
+
+
+ This may sound obvious, but if it really were so
+ obvious then we probably would not see so many cases of
+ people clearly not doing this. If your changes are to the
+ kernel, make sure you can still compile both GENERIC and
+ LINT. If your changes are anywhere else, make sure you
+ can still make world. If your changes are to a branch,
+ make sure your testing occurs with a machine which is
+ running that code. If you have a change which also may
+ break another architecture, be sure and test on all
+ supported architectures. Please refer to the
+ &os;
+ Internal Page for a list of available resources.
+ As other architectures are added to the &os; supported
+ platforms list, the appropriate shared testing resources
+ will be made available.
+
+
+
+ Do not commit to anything under the
+ src/contrib,
+ src/crypto, and
+ src/sys/contrib trees without
+ explicit approval from the respective
+ maintainer(s).
+
+ The trees mentioned above are for contributed software
+ usually imported onto a vendor branch. Committing
+ something there, even if it does not take the file off the
+ vendor branch, may cause unnecessary headaches for those
+ responsible for maintaining that particular piece of
+ software. Thus, unless you have
+ explicit approval from the maintainer
+ (or you are the maintainer), do not
+ commit there!
+
+ Please note that this does not mean you should not try
+ to improve the software in question; you are still more
+ than welcome to do so. Ideally, you should submit your
+ patches to the vendor. If your changes are
+ &os;-specific, talk to the maintainer; they may be
+ willing to apply them locally. But whatever you do, do
+ not commit there by yourself!
+
+ Contact the &a.core; if you wish to take up
+ maintainership of an unmaintained part of the tree.
+
+
+
- In svn+ssh://repo.freebsd.org/doc,
- doc refers to the repository root of
- the source tree.
+
+ Other Suggestions
- In general, most &os; Documentation Project work will be
- done within the head/ branch of the
- documentation source tree.
+ When committing documentation changes, use a spell checker
+ before committing. For all XML docs, verify that the
+ formatting directives are correct by running
+ make lint and
+ textproc/igor.
- &os; documentation is written and/or translated to
- various languages, each in a separate
- directory in the head/
- branch.
+ For manual pages, run sysutils/manck
+ and textproc/igor
+ over the manual page to verify all of the cross
+ references and file references are correct and that the man
+ page has all of the appropriate MLINKs
+ installed.
- Each translation set contains several subdirectories for
- the various parts of the &os; Documentation Project. A few
- noteworthy directories are:
+ Do not mix style fixes with new functionality. A style
+ fix is any change which does not modify the functionality of
+ the code. Mixing the changes obfuscates the functionality
+ change when asking for differences between revisions, which
+ can hide any new bugs. Do not include whitespace changes with
+ content changes in commits to doc/ .
+ The extra clutter in the diffs
+ makes the translators' job much more difficult. Instead, make
+ any style or whitespace changes in separate commits that are
+ clearly labeled as such in the commit message.
+
-
-
- /articles/ contains the source
- code for articles written by various &os;
- contributors.
-
+
+ Deprecating Features
-
- /books/ contains the source
- code for the different books, such as the
- &os; Handbook.
-
+ When it is necessary to remove functionality from software
+ in the base system the following guidelines should be followed
+ whenever possible:
-
- /htdocs/ contains the source
- code for the &os; website.
-
-
-
+
+
+ Mention is made in the manual page and possibly the
+ release notes that the option, utility, or interface is
+ deprecated. Use of the deprecated feature generates a
+ warning.
+
+
+
+ The option, utility, or interface is preserved until
+ the next major (point zero) release.
+
+
+
+ The option, utility, or interface is removed and no
+ longer documented. It is now obsolete. It is also
+ generally a good idea to note its removal in the release
+ notes.
+
+
+
-
- &os; Ports Tree Branches and Layout
+
+ Privacy and Confidentiality
- In svn+ssh://repo.freebsd.org/ports,
- ports refers to the repository root of
- the ports tree.
+
+
+ Most &os; business is done in public.
- In general, most &os; port work will be done within the
- head/ branch of the ports tree which is
- the actual ports tree used to install software. Some other
- key locations are:
+ &os; is an open project. Which
+ means that not only can anyone use the source code, but
+ that most of the development process is open to public
+ scrutiny.
+
+
+
+ Certain sensitive matters must remain private or
+ held under embargo.
+
+ There unfortunately cannot be complete transparency.
+ As a &os; developer you will have a certain degree of
+ privileged access to information. Consequently you are
+ expected to respect certain requirements for
+ confidentiality. Sometimes the need for confidentiality
+ comes from external collaborators or has a specific time
+ limit. Mostly though, it is a matter of not releasing
+ private communications.
+
+
+
+ The Security Officer has sole control over the
+ release of security advisories.
+
+ Where there are security problems that affect many
+ different operating systems, &os; frequently depends on
+ early access in order to be able to prepare advisories for
+ coordinated release. Unless &os; developers can be
+ trusted to maintain security, such early access will not
+ be made available. The Security Officer is responsible
+ for controlling pre-release access to information about
+ vulnerabilities, and for timing the release of all
+ advisories. He may request help under condition of
+ confidentiality from any developer with relevant knowledge
+ in order to prepare security fixes.
+
+
+
+ Communications with Core are kept confidential for as
+ long as necessary.
+
+ Communications to core will initially be treated as
+ confidential. Eventually however, most of Core's business
+ will be summarized into the monthly or quarterly core
+ reports. Care will be taken to avoid publicising any
+ sensitive details. Records of some particularly sensitive
+ subjects may not be reported on at all and will be
+ retained only in Core's private archives.
+
+
+
+ Non-disclosure Agreements may be required for access
+ to certain commercially sensitive data.
+
+ Access to certain commercially sensitive data may
+ only be available under a Non-Disclosure Agreement. The
+ FreeBSD Foundation legal staff must be consulted before
+ any binding agreements are entered into.
+
+
+
+ Private communications should not be made
+ public without permission.
+
+ Beyond the specific requirements above there is a
+ general expectation not to publish private communications
+ between developers without the consent of all parties
+ involved. Ask permission before forwarding a message onto
+ a public mailing list, or posting it to a forum or website
+ that can be accessed by other than the original
+ correspondents.
+
+
+
+ Communications on project-only or restricted access
+ channels should be treated as private.
+
+ Similarly to personal communications, certain
+ internal communications channels, including &os; Committer
+ only mailing lists and restricted access IRC channels
+ should be considered as private communications. You need
+ permission in order to publish material from these
+ sources.
+
+
+
+ Core may approve publication.
+
+ Where it is impractical to obtain permission due to
+ the number of correspondents or where permission to
+ publish is unreasonably withheld, Core may approve release
+ of such private matters that merit more general
+ publication.
+
+
+
+
-
-
- /branches/RELENG_n_n_n
- which corresponds to
- RELENG_n_n_n
- is used to merge back security updates in preparation
- for a release.
-
+
+ Developer Relations
-
- /tags/RELEASE_n_n_n
- which corresponds to
- RELEASE_n_n_n
- represents a release tag of the ports tree.
-
+ If you are working directly on your own code or on code
+ which is already well established as your responsibility, then
+ there is probably little need to check with other committers
+ before jumping in with a commit. If you see a bug in an area of
+ the system which is clearly orphaned (and there are a few such
+ areas, to our shame), the same applies. If, however, you are
+ about to modify something which is clearly being actively
+ maintained by someone else (and it is only by watching the
+ repository-committers
+ mailing list that you can really get a feel for just what is and
+ is not) then consider sending the change to them instead, just
+ as you would have before becoming a committer. For ports, you
+ should contact the listed MAINTAINER in the
+ Makefile. For other parts of the
+ repository, if you are unsure who the active maintainer might
+ be, it may help to scan the revision history to see who has
+ committed changes in the past. An example script that lists
+ each person who has committed to
+ a given file along with the number of commits each person has
+ made can be found at on freefall at
+ ~eadler/bin/whodid. If your queries go
+ unanswered or the committer otherwise indicates a lack of
+ interest in the area affected, go ahead and commit it.
-
- /tags/RELEASE_n_EOL
- represents the end of life tag of a specific &os;
- branch.
-
-
-
-
+
+ Avoid sending private emails to maintainers. Other people
+ might be interested in the conversation, not just the final
+ output.
+
-
- Daily Use
+ If you are unsure about a commit for any reason at all, have
+ it reviewed by -hackers before committing.
+ Better to have it flamed then and there rather than when it is
+ part of the repository. If you do happen to commit something
+ which results in controversy erupting, you may also wish to
+ consider backing the change out again until the matter is
+ settled. Remember – with a version control system we can
+ always change it back.
- This section will explain how to perform common day-to-day
- operations with Subversion.
+ Do not impugn the intentions of someone you disagree with.
+ If they see a different solution to a problem than you, or even
+ a different problem, it is not because they are stupid, because
+ they have questionable parentage, or because they are trying to
+ destroy your hard work, personal image, or &os;, but simply
+ because they have a different outlook on the world. Different
+ is good.
-
- Help
+ Disagree honestly. Argue your position from its merits,
+ be honest about any shortcomings it may have, and be open to
+ seeing their solution, or even their vision of the problem,
+ with an open mind.
- SVN has built in help documentation.
- It can be accessed by typing the following command:
+ Accept correction. We are all fallible. When you have made
+ a mistake, apologize and get on with life. Do not beat up
+ yourself, and certainly do not beat up others for your mistake.
+ Do not waste time on embarrassment or recrimination, just fix
+ the problem and move on.
- &prompt.user; svn help
+ Ask for help. Seek out (and give) peer reviews. One of
+ the ways open source software is supposed to excel is in the
+ number of eyeballs applied to it; this does not apply if nobody
+ will review code.
+
- Additional information can be found in the
- Subversion
- Book.
-
+
+ If in Doubt...
-
- Checkout
+ When you are not sure about something, whether it be a
+ technical issue or a project convention be sure to ask. If you
+ stay silent you will never make progress.
- As seen earlier, to check out the &os; head
- branch:
+ If it relates to a technical issue ask on the public
+ mailing lists. Avoid the temptation to email the individual
+ person that knows the answer. This way everyone will be able to
+ learn from the question and the answer.
- &prompt.user; svn checkout svn+ssh://repo.freebsd.org/base/head /usr/src
+ For project specific or administrative questions you should
+ ask, in order:
- At some point, more than just HEAD
- will probably be useful, for instance when merging changes
- to stable/7. Therefore, it may be useful to have a partial
- checkout of the complete tree (a full checkout would be very
- painful).
+
+
+ Your mentor or former mentor.
+
- To do this, first check out the root of the
- repository:
+
+ An experienced committer on IRC, email, etc.
+
- &prompt.user; svn checkout --depth=immediates svn+ssh://repo.freebsd.org/base
+
+ Any team with a "hat", as they should give you a
+ definitive answer.
+
- This will give base with all the
- files it contains (at the time of writing, just
- ROADMAP.txt) and empty subdirectories
- for head, stable,
- vendor and so on.
+
+ If still not sure, ask on &a.developers;.
+
+
- Expanding the working copy is possible. Just change the
- depth of the various subdirectories:
+ Once your question is answered, if no one pointed you to
+ documentation that spelled out the answer to your question,
+ document it, as others will have the same question.
+
- &prompt.user; svn up --set-depth=infinity base/head
-&prompt.user; svn up --set-depth=immediates base/release base/releng base/stable
+
+ Support for Multiple Architectures
- The above command will pull down a full copy of
- head, plus empty copies of every
- release tag, every
- releng branch, and every
- stable branch.
+ &os; is a highly portable operating system intended to
+ function on many different types of hardware architectures.
+ Maintaining clean separation of Machine Dependent (MD) and
+ Machine Independent (MI) code, as well as minimizing MD code, is
+ an important part of our strategy to remain agile with regards
+ to current hardware trends. Each new hardware architecture
+ supported by &os; adds substantially to the cost of code
+ maintenance, toolchain support, and release engineering. It
+ also dramatically increases the cost of effective testing of
+ kernel changes. As such, there is strong motivation to
+ differentiate between classes of support for various
+ architectures while remaining strong in a few key architectures
+ that are seen as the &os; target audience.
- If at a later date merging to
- 7-STABLE is required, expand the working
- copy:
+
+ Policy on Multiple Architectures
- &prompt.user; svn up --set-depth=infinity base/stable/7
+ &os; has added several new architecture ports during
+ recent release cycles and is truly no longer an &i386; centric
+ operating system. In an effort to make it easier to keep
+ &os; portable across the platforms we support, core has
+ developed the following mandate:
- Subtrees do not have to be expanded completely. For
- instance, expanding only stable/7/sys and
- then later expand the rest of
- stable/7:
+
+ Our 32-bit reference platform is &arch.i386;, and our
+ 64-bit reference platform is &arch.amd64;. Major design
+ work (including major API and ABI changes) must prove
+ itself on at least one 32-bit and at least one 64-bit
+ platform, preferably the primary reference platforms,
+ before it may be committed to the source tree.
+
- &prompt.user; svn up --set-depth=infinity base/stable/7/sys
-&prompt.user; svn up --set-depth=infinity base/stable/7
+ The &arch.i386; and &arch.amd64; platforms were chosen
+ due to being more readily available to developers and as
+ representatives of more diverse processor and system designs -
+ big versus little endian, register file versus register stack,
+ different DMA and cache implementations, hardware page tables
+ versus software TLB management etc.
- Updating the tree with svn update
- will only update what was previously asked for (in this
- case, head and
- stable/7; it will not pull down the whole
- tree.
+ We will continue to re-evaluate this policy as cost and
+ availability of the 64-bit platforms change.
-
- Decreasing the depth of a working copy is not
- possible.
-
-
+ Developers should also be aware of our Tier Policy for
+ the long term support of hardware architectures. The rules
+ here are intended to provide guidance during the development
+ process, and are distinct from the requirements for features
+ and architectures listed in that section. The Tier rules for
+ feature support on architectures at release-time are more
+ strict than the rules for changes during the development
+ process.
+
-
- Anonymous Checkout
+
+ Statement of General Intent
- It is possible to anonymously check out the &os;
- repository with Subversion. This will give access to a
- read-only tree that can be updated, but not committed back
- to the main repository. To do this, use the following
- command:
+ The &os; Project targets "production quality commercial
+ off-the-shelf (COTS) workstation, server, and high-end
+ embedded systems". By retaining a focus on a narrow set of
+ architectures of interest in these environments, the &os;
+ Project is able to maintain high levels of quality, stability,
+ and performance, as well as minimize the load on various
+ support teams on the project, such as the ports team,
+ documentation team, security officer, and release engineering
+ teams. Diversity in hardware support broadens the options for
+ &os; consumers by offering new features and usage
+ opportunities (such as support for 64-bit CPUs, use in
+ embedded environments, etc.), but these benefits must always
+ be carefully considered in terms of the real-world maintenance
+ cost associated with additional platform support.
- &prompt.user; svn co https://svn.FreeBSD.org/base/head /usr/src
+ The &os; Project differentiates platform targets into
+ four tiers. Each tier includes a specification of the
+ requirements for an architecture to be in that tier,
+ as well as specifying the obligations of developers with
+ regards to the platform. In addition, a policy is defined
+ regarding the circumstances required to change the tier
+ of an architecture.
+
- More details on using Subversion this way can be found
- in Using
- Subversion.
-
+
+ Tier 1: Fully Supported Architectures
-
- Updating the Tree
+ Tier 1 platforms are fully supported by the security
+ officer, release engineering, and toolchain maintenance staff.
+ New features added to the operating system must be fully
+ functional across all Tier 1 architectures for every release
+ (features which are inherently architecture-specific, such as
+ support for hardware device drivers, may be exempt from this
+ requirement). In general, all Tier 1 platforms must have
+ build and Tinderbox support either in the FreeBSD.org cluster,
+ or be easily available for all developers. Embedded platforms
+ may substitute an emulator available in the &os; cluster
+ for actual hardware.
- To update a working copy to either the latest revision,
- or a specific revision:
+ Tier 1 architectures are expected to be Production Quality
+ with respects to all aspects of the &os; operating system,
+ including installation and development environments.
- &prompt.user; svn update
-&prompt.user; svn update -r12345
-
+ Tier 1 architectures are expected to be completely
+ integrated into the source tree and have all features
+ necessary to produce an entire system relevant for that target
+ architecture. Tier 1 architectures generally have at least 6
+ active developers.
-
- Status
+ Tier 1 architectures are expected to be fully supported by
+ the ports system. All the ports should build on a Tier 1
+ platform, or have the appropriate filters to prevent the
+ inappropriate ones from building there. The packaging system
+ must support all Tier 1 architectures. To ensure an
+ architecture's Tier 1 status, proponents of that architecture
+ must show that all relevant packages can be built on that
+ platform.
- To view the local changes that have been made to the
- working copy:
+ Tier 1 embedded architectures must be able to cross-build
+ packages on at least one other Tier 1 architecture. The
+ packages must be the most relevant for the platform, but may
+ be a non-empty subset of those that build natively.
- &prompt.user; svn status
+ Tier 1 architectures must be fully documented. All basic
+ operations need to be covered by the handbook or other
+ documents. All relevant integration documentation must also
+ be integrated into the tree, or readily available.
- To show local changes and files that are out-of-date
- do:
+ Current Tier 1 platforms are &arch.i386; and
+ &arch.amd64;.
+
- &prompt.user; svn status --show-updates
-
+
+ Tier 2: Developmental Architectures
-
- Editing and Committing
+ Tier 2 platforms are not supported by the security officer
+ and release engineering teams. Platform maintainers are
+ responsible for toolchain support in the tree. The toolchain
+ maintainers are expected to work with the platform maintainers
+ to refine these changes. Major new toolchain components are
+ allowed to break support for Tier 2 architectures if the
+ &os;-local changes have not been incorporated upstream.
+ The toolchain maintainers are expected to provide prompt
+ review of any proposed changes and cannot block, through their
+ inaction, changes going into the tree. New features added to
+ &os; should be feasible to implement on these platforms,
+ but an implementation is not required before the feature may
+ be added to the &os; source tree. New features that may be
+ difficult to implement on Tier 2 architectures should provide
+ a means of disabling them on those architectures. The
+ implementation of a Tier 2 architecture may be committed to
+ the main &os; tree as long as it does not interfere with
+ production work on Tier 1 platforms, or substantially with
+ other Tier 2 platforms. Before a Tier 2 platform can be added
+ to the &os; base source tree, the platform must be able to
+ boot multi-user on actual hardware. Generally, there must be
+ at least three active developers working on the
+ platform.
- Unlike Perforce, SVN does not need to
- be told in advance about file editing.
+ Tier 2 architectures are usually systems targeted at Tier
+ 1 support, but that are still under development.
+ Architectures reaching end of life may also be moved from Tier
+ 1 status to Tier 2 status as the availability of resources to
+ continue to maintain the system in a Production Quality state
+ diminishes. Well supported niche architectures may also be
+ Tier 2.
- To commit all changes in
- the current directory and all subdirectories:
+ Tier 2 architectures have basic support for them
+ integrated into the ports infrastructure. They may have cross
+ compilation support added, at the discretion of portmgr. Some
+ ports must built natively into packages if the package system
+ supports that architecture. If not integrated into the base
+ system, some external patches for the architecture for ports
+ must be available.
- &prompt.user; svn commit
+ Tier 2 architectures can be integrated into the &os;
+ handbook. The basics for how to get a system running must be
+ documented, although not necessarily for every single board or
+ system a Tier 2 architecture supports. The supported hardware
+ list must exist and should be relatively recent. It should be
+ integrated into the &os; documentation.
- To commit all changes in, for example,
- lib/libfetch/
- and
- usr/bin/fetch/
- in a single operation:
+ Current Tier 2 platforms are &arch.arm;, &arch.arm64;,
+ &arch.ia64; (through &os; 10),
+ &arch.pc98;, &arch.powerpc;, and &arch.sparc64;.
+
- &prompt.user; svn commit lib/libfetchusr/bin/fetch
+
+ Tier 3: Experimental Architectures
- There is also a commit wrapper for the ports tree to
- handle the properties and sanity checking your
- changes:
+ Tier 3 platforms are not supported by the security officer
+ and release engineering teams. At the discretion of the
+ toolchain maintainers, they may be supported in the toolchain.
+ Tier 3 platforms are architectures in the early stages of
+ development, for non-mainstream hardware platforms, or which
+ are considered legacy systems unlikely to see broad future
+ use. Initial support for Tier 3 platforms should be worked on
+ in external SCM repositories.
+ The transition to &os;'s subversion should take place after
+ the platform boots multi-user on hardware; sharing via
+ subversion is needed for wider exposure; and multiple
+ developers are actively working on the platform.
+ Platforms that transition to Tier 3 status may be
+ removed from the tree if they are no longer actively supported
+ by the &os; developer community at the discretion of the
+ release engineer.
- &prompt.user; /usr/ports/Tools/scripts/psvn commit
-
+ Tier 3 platforms may have ports support, either integrated
+ or external, but do not require it.
-
- Adding and Removing Files
+ Tier 3 platforms must have the basics documented for how
+ to build a kernel and how to boot it on at least one target
+ hardware or emulation environment. This documentation need
+ not be integrated into the &os; tree.
-
- Before adding files, get a copy of auto-props.txt
- (there is also a
- ports tree specific version) and add it to
- ~/.subversion/config according to the
- instructions in the file. If you added something before
- reading this, use svn rm --keep-local
- for just added files, fix your config file and re-add them
- again. The initial config file is created when you first
- run a svn command, even something as simple as
- svn help.
-
-
- Files are added to a
- SVN repository with svn
- add. To add a file named
- foo, edit it, then:
+ Current Tier 3 platforms are &arch.mips;, and
+ &arch.riscv;.
+
- &prompt.user; svn add foo
+
+ Tier 4: Unsupported Architectures
-
- Most new source files should include a
- $&os;$ string near the
- start of the file. On commit, svn will
- expand the $&os;$ string,
- adding the file path, revision number, date and time of
- commit, and the username of the committer. Files which
- cannot be modified may be committed without the
- $&os;$ string.
-
+ Tier 4 systems are not supported in any form by the
+ project.
- Files can be removed with svn
- remove:
+ All systems not otherwise classified into a support tier
+ are Tier 4 systems. The &arch.ia64; platform is transitioning
+ to Tier 4 status in &os; 11.
+
- &prompt.user; svn remove foo
+
+ Policy on Changing the Tier of an Architecture
- Subversion does not require deleting the file before
- using svn rm, and indeed complains if
- that happens.
+ Systems may only be moved from one tier to another by
+ approval of the &os; Core Team, which shall make that
+ decision in collaboration with the Security Officer, Release
+ Engineering, and toolchain maintenance teams.
+
+
- It is possible to add directories with
- svn add:
+
+ Subversion Primer
- &prompt.user; mkdir bar
-&prompt.user; svn add bar
+ It is assumed that you are already familiar with the basic
+ operation of Subversion. If not, start by reading the
+ Subversion
+ Book.
- Although svn mkdir makes this easier
- by combining the creation of the directory and the adding of
- it:
+
+ Introduction
- &prompt.user; svn mkdir bar
+ The &os; source repository switched from
+ CVS to Subversion on May 31st, 2008. The
+ first real SVN commit is
+ r179447.
- Like files, directories are removed with
- svn rm. There is no separate command
- specifically for removing directories.
+ The &os; doc/www repository switched
+ from CVS to Subversion on May 19th, 2012.
+ The first real SVN commit is
+ r38821.
- &prompt.user; svn rm bar
-
+ The &os; ports repository switched
+ from CVS to Subversion on July 14th, 2012.
+ The first real SVN commit is
+ r300894.
-
- Copying and Moving Files
+ Subversion can be installed from the &os; Ports
+ Collection by issuing these commands:
- This command creates a copy of
- foo.c named bar.c,
- with the new file also under version control:
+ &prompt.root; pkg install subversion
- &prompt.user; svn copy foo.cbar.c
+
- The example above is equivalent to:
+
+ Getting Started
- &prompt.user; cp foo.c bar.c
-&prompt.user; svn add bar.c
+ There are a few ways to obtain a working copy of the tree
+ from Subversion. This section will explain them.
- To move and rename a file:
+
+ Direct Checkout
- &prompt.user; svn move foo.cbar.c
-
+ The first is to check out directly from the main
+ repository. For the src tree,
+ use:
+
+ &prompt.user; svn checkout svn+ssh://repo.freebsd.org/base/head /usr/src
+
+ For the doc tree, use:
+
+ &prompt.user; svn checkout svn+ssh://repo.freebsd.org/doc/head /usr/doc
+
+ For the ports tree, use:
+
+ &prompt.user; svn checkout svn+ssh://repo.freebsd.org/ports/head /usr/ports
+
+
+ Though the remaining examples in this document are
+ written with the workflow of working with the
+ src tree in mind, the underlying
+ concepts are the same for working with the
+ doc and the ports
+ tree.
+ Ports related Subversion operations are listed in
+ .
+
+
+ The above command will check out a
+ CURRENT source tree as
+ /usr/src/,
+ which can be any target directory on the local filesystem.
+ Omitting the final argument of that command causes the
+ working copy, in this case, to be named head,
+ but that can be renamed safely.
+
+ svn+ssh means the
+ SVN protocol tunnelled over
+ SSH. The name of the server is
+ repo.freebsd.org, base
+ is the path to the repository, and head
+ is the subdirectory within the repository.
+
+ If your &os; login name is different from your login
+ name on your local machine, you must either include it in
+ the URL (for example
+ svn+ssh://jarjar@repo.freebsd.org/base/head),
+ or add an entry to your ~/.ssh/config
+ in the form:
-
- Log and Annotate
+ Host repo.freebsd.org
+ User jarjar
- svn log shows revisions and commit
- messages, most recent first, for files or directories. When
- used on a directory, all revisions that affected the
- directory and files within that directory are shown.
+ This is the simplest method, but it is hard to tell just
+ yet how much load it will place on the repository.
- svn annotate, or equally svn
- praise or svn blame, shows
- the most recent revision number and who committed that
- revision for each line of a file.
+
+ The svn diff does not require
+ access to the server as SVN stores a
+ reference copy of every file in the working copy. This,
+ however, means that Subversion working copies are very
+ large in size.
+
-
- Diffs
-
- svn diff displays changes to the
- working copy. Diffs generated by SVN are
- unified and include new files by default in the diff
- output.
-
- svn diff can show the changes between
- two revisions of the same file:
-
- &prompt.user; svn diff -r179453:179454 ROADMAP.txt
-
- It can also show all changes for a specific changeset.
- The following will show what changes were made to the
- current directory and all subdirectories in changeset
- 179454:
+
+ Checkout from a Mirror
- &prompt.user; svn diff -c179454 .
-
+ Check out a working copy from a mirror by
+ substituting the mirror's URL for
+ svn+ssh://repo.freebsd.org/base. This
+ can be an official mirror or a mirror maintained by using
+ svnsync.
-
- Reverting
+ There is a serious disadvantage to this method: every
+ time something is to be committed, a
+ svn relocate to the master repository has
+ to be done, remembering to svn relocate
+ back to the mirror after the commit. Also, since
+ svn relocate only works between
+ repositories that have the same UUID, some hacking of the
+ local repository's UUID has to occur before it is possible
+ to start using it.
- Local changes (including additions and deletions) can be
- reverted using svn revert. It does not
- update out-of-date files, but just replaces them with
- pristine copies of the original version.
+ The hassle of a local
+ svnsync mirror probably is not worth it
+ unless the network connectivity situation or other factors
+ demand it. If it is needed, see the end of this chapter for
+ information on how to set one up.
-
- Conflicts
-
- If an svn update resulted in a merge
- conflict, Subversion will remember which files have
- conflicts and refuse to commit any changes to those files
- until explicitly told that the conflicts have been resolved.
- The simple, not yet deprecated procedure is the
- following:
+
+ RELENG_* Branches and General
+ Layout
- &prompt.user; svn resolved foo
+ In svn+ssh://repo.freebsd.org/base,
+ base refers to the source tree.
+ Similarly, ports refers to the ports
+ tree, and so on. These are separate repositories with their
+ own change number sequences, access controls and commit
+ mail.
- However, the preferred procedure is:
+ For the base repository, HEAD refers to the -CURRENT
+ tree. For example, head/bin/ls is what
+ would go into /usr/src/bin/ls in a
+ release. Some key locations are:
- &prompt.user; svn resolve --accept=working foo
+
+
+ /head/ which corresponds to
+ HEAD, also known as
+ -CURRENT.
+
- The two examples are equivalent. Possible values for
- --accept are:
+
+ /stable/n
+ which corresponds to
+ RELENG_n.
+
-
- working: use the version in your
- working directory (which one presumes has been edited to
- resolve the conflicts).
+ /releng/n.n
+ which corresponds to
+ RELENG_n_n.
- base: use a pristine copy of the
- version you had before svn update,
- discarding your own changes, the conflicting changes,
- and possibly other intervening changes as well.
+ /release/n.n.n
+ which corresponds to
+ RELENG_n_n_n_RELEASE.
- mine-full: use what you had
- before svn update, including your own
- changes, but discarding the conflicting changes, and
- possibly other intervening changes as well.
+ /vendor* is the vendor branch
+ import work area. This directory itself does not
+ contain branches, however its subdirectories do. This
+ contrasts with the stable,
+ releng and
+ release directories.
- theirs-full: use the version that
- was retrieved when you did
- svn update, discarding your own
- changes.
+ /projects and
+ /user feature a branch work area,
+ like in Perforce. As above, the
+ /user directory does not contain
+ branches itself.
-
-
- Advanced Use
+
+ &os; Documentation Project Branches and
+ Layout
-
- Sparse Checkouts
+ In svn+ssh://repo.freebsd.org/doc,
+ doc refers to the repository root of
+ the source tree.
- SVN allows
- sparse, or partial checkouts of a
- directory by adding to a
- svn checkout.
+ In general, most &os; Documentation Project work will be
+ done within the head/ branch of the
+ documentation source tree.
- Valid arguments to
- are:
+ &os; documentation is written and/or translated to
+ various languages, each in a separate
+ directory in the head/
+ branch.
+
+ Each translation set contains several subdirectories for
+ the various parts of the &os; Documentation Project. A few
+ noteworthy directories are:
- empty: the directory itself
- without any of its contents.
+ /articles/ contains the source
+ code for articles written by various &os;
+ contributors.
- files: the directory and any
- files it contains.
+ /books/ contains the source
+ code for the different books, such as the
+ &os; Handbook.
- immediates: the directory and any
- files and directories it contains, but none of the
- subdirectories' contents.
-
-
-
- infinity: anything.
+ /htdocs/ contains the source
+ code for the &os; website.
-
- The --depth option applies to many
- other commands, including svn commit,
- svn revert, and svn
- diff.
-
- Since --depth is sticky, there is a
- --set-depth option for svn
- update that will change the selected depth.
- Thus, given the working copy produced by the previous
- example:
-
- &prompt.user; cd ~/freebsd
-&prompt.user; svn update --set-depth=immediates .
-
- The above command will populate the working copy in
- ~/freebsd with
- ROADMAP.txt and empty subdirectories,
- and nothing will happen when svn update
- is executed on the subdirectories. However, the following
- command will set the depth for
- head (in this case) to infinity,
- and fully populate it:
-
- &prompt.user; svn update --set-depth=infinity head
-
- Direct Operation
+
+ &os; Ports Tree Branches and Layout
- Certain operations can be performed directly on the
- repository without touching the working copy. Specifically,
- this applies to any operation that does not require editing
- a file, including:
+ In svn+ssh://repo.freebsd.org/ports,
+ ports refers to the repository root of
+ the ports tree.
+
+ In general, most &os; port work will be done within the
+ head/ branch of the ports tree which is
+ the actual ports tree used to install software. Some other
+ key locations are:
- log,
- diff
+ /branches/RELENG_n_n_n
+ which corresponds to
+ RELENG_n_n_n
+ is used to merge back security updates in preparation
+ for a release.
- mkdir
+ /tags/RELEASE_n_n_n
+ which corresponds to
+ RELEASE_n_n_n
+ represents a release tag of the ports tree.
- remove, copy,
- rename
+ /tags/RELEASE_n_EOL
+ represents the end of life tag of a specific &os;
+ branch.
+
+
+
-
- propset,
- propedit,
- propdel
-
+
+ Daily Use
-
- merge
-
-
+ This section will explain how to perform common day-to-day
+ operations with Subversion.
- Branching is very fast. The following command would be
- used to branch RELENG_8:
+
+ Help
- &prompt.user; svn copy svn+ssh://repo.freebsd.org/base/head svn+ssh://repo.freebsd.org/base/stable/8
+ SVN has built in help documentation.
+ It can be accessed by typing the following command:
- This is equivalent to the following set of commands
- which take minutes and hours as opposed to seconds,
- depending on your network connection:
+ &prompt.user; svn help
- &prompt.user; svn checkout --depth=immediates svn+ssh://repo.freebsd.org/base
-&prompt.user; cd base
-&prompt.user; svn update --set-depth=infinity head
-&prompt.user; svn copy head stable/8
-&prompt.user; svn commit stable/8
+ Additional information can be found in the
+ Subversion
+ Book.
-
- Merging with SVN
+
+ Checkout
- This section deals with merging code from one branch to
- another (typically, from head to a stable branch).
+ As seen earlier, to check out the &os; head
+ branch:
-
- In all examples below, $FSVN
- refers to the location of the &os; Subversion repository,
- svn+ssh://repo.freebsd.org/base/.
-
+ &prompt.user; svn checkout svn+ssh://repo.freebsd.org/base/head /usr/src
-
- About Merge Tracking
+ At some point, more than just HEAD
+ will probably be useful, for instance when merging changes
+ to stable/7. Therefore, it may be useful to have a partial
+ checkout of the complete tree (a full checkout would be very
+ painful).
- From the user's perspective, merge tracking
- information (or mergeinfo) is stored in a property called
- svn:mergeinfo, which is a
- comma-separated list of revisions and ranges of revisions
- that have been merged. When set on a file, it applies
- only to that file. When set on a directory, it applies to
- that directory and its descendants (files and directories)
- except for those that have their own
- svn:mergeinfo.
+ To do this, first check out the root of the
+ repository:
- It is not inherited. For
- instance, stable/6/contrib/openpam/
- does not implicitly inherit mergeinfo from
- stable/6/, or
- stable/6/contrib/.
- Doing so would make partial checkouts very hard to manage.
- Instead, mergeinfo is explicitly propagated down the tree.
- For merging something into
- branch/foo/bar/,
- the following rules apply:
+ &prompt.user; svn checkout --depth=immediates svn+ssh://repo.freebsd.org/base
-
-
- If
- branch/foo/bar/
- does not already have a mergeinfo record, but a direct
- ancestor (for instance,
- branch/foo/)
- does, then that record will be propagated down to
- branch/foo/bar/
- before information about the current merge is
- recorded.
-
+ This will give base with all the
+ files it contains (at the time of writing, just
+ ROADMAP.txt) and empty subdirectories
+ for head, stable,
+ vendor and so on.
-
- Information about the current merge will
- not be propagated back up that
- ancestor.
-
+ Expanding the working copy is possible. Just change the
+ depth of the various subdirectories:
-
- If a direct descendant of
- branch/foo/bar/ (for instance,
- branch/foo/bar/baz/) already has
- a mergeinfo record, information about the current
- merge will be propagated down to it.
-
-
+ &prompt.user; svn up --set-depth=infinity base/head
+&prompt.user; svn up --set-depth=immediates base/release base/releng base/stable
- If you consider the case where a revision changes
- several separate parts of the tree (for example,
- branch/foo/bar/ and
- branch/foo/quux/), but you only want
- to merge some of it (for example,
- branch/foo/bar/), you will see that
- these rules make sense. If mergeinfo was propagated up,
- it would seem like that revision had also been merged to
- branch/foo/quux/, when in fact it had
- not been.
-
+ The above command will pull down a full copy of
+ head, plus empty copies of every
+ release tag, every
+ releng branch, and every
+ stable branch.
-
- Selecting the Source and Target Branch
- When Merging
+ If at a later date merging to
+ 7-STABLE is required, expand the working
+ copy:
- Merging to stable/ branches should
- originate from head/. For
- example:
+ &prompt.user; svn up --set-depth=infinity base/stable/7
- &prompt.user; svn merge -c r123456 ^/head/ stable/11
-&prompt.user; svn commit stable/11
+ Subtrees do not have to be expanded completely. For
+ instance, expanding only stable/7/sys and
+ then later expand the rest of
+ stable/7:
-
- Note the sections below which outline changes to
- the target location of the stable/
- branch starting with
- stable/10.
-
+ &prompt.user; svn up --set-depth=infinity base/stable/7/sys
+&prompt.user; svn up --set-depth=infinity base/stable/7
- Merges to releng/ branches should
- always originate from the corresponding
- stable/ branch. For example:
+ Updating the tree with svn update
+ will only update what was previously asked for (in this
+ case, head and
+ stable/7; it will not pull down the whole
+ tree.
- &prompt.user; svn merge -c r123456 ^/stable/11 releng/11.0
-&prompt.user; svn commit releng/11.0
+
+ Decreasing the depth of a working copy is not
+ possible.
+
+
-
- Committers are only permitted to commit to the
- releng/ branches during a release
- cycle after receiving approval from the Release
- Engineering Team, after which only the Security Officer
- may commit to a releng/ branch for
- a Security Advisory or Errata Notice.
-
-
+
+ Anonymous Checkout
-
- Selecting the Source and Target for
- stable/10 and Newer
+ It is possible to anonymously check out the &os;
+ repository with Subversion. This will give access to a
+ read-only tree that can be updated, but not committed back
+ to the main repository. To do this, use the following
+ command:
- Starting with the stable/10
- branch, all merges should be
- merged to and committed from the root of the
- branch. All merges should look like:
+ &prompt.user; svn co http://svn.freebsd.org/base/head /usr/src
- &prompt.user; svn merge -c r123456 ^/head/ checkout
-&prompt.user; svn commit checkout
+ More details on using Subversion this way can be found
+ in Using
+ Subversion.
+
- Note that checkout should
- be a complete checkout of the branch to which the merge
- occurs.
-
+
+ Updating the Tree
-
- Selecting the Source and Target for
- stable/9 and Older
+ To update a working copy to either the latest revision,
+ or a specific revision:
- For stable/9 and earlier,
- a different strategy was used, distributing mergeinfo
- around the tree so that merges could be performed without
- a complete checkout. This procedure proved extremely
- error-prone, with the convenience of partial checkouts for
- merges significantly outweighed by the complexity of
- picking mergeinfo targets. The below describes this
- now-obsoleted procedure, which should be used
- only for merges prior to
- stable/10.
+ &prompt.user; svn update
+&prompt.user; svn update -r12345
+
- Because of mergeinfo propagation, it is important to
- choose the source and target for the merge carefully to
- minimise property changes on unrelated directories.
+
+ Status
- The rules for selecting the merge target (the
- directory that you will merge the changes to) can be
- summarized as follows:
+ To view the local changes that have been made to the
+ working copy:
-
-
- Never merge directly to a file.
-
+ &prompt.user; svn status
-
- Never, ever merge directly to a file.
-
+ To show local changes and files that are out-of-date
+ do:
-
- Never, ever, ever merge
- directly to a file.
-
+ &prompt.user; svn status --show-updates
+
-
- Changes to kernel code should be merged to
- sys/. For instance, a change to
- the &man.ichwd.4; driver should be merged to
- sys/, not
- sys/dev/ichwd/. Likewise, a
- change to the TCP/IP stack should be merged to
- sys/, not
- sys/netinet/.
-
+
+ Editing and Committing
-
- Changes to code under etc/
- should be merged at etc/, not
- below it.
-
+ Unlike Perforce, SVN does not need to
+ be told in advance about file editing.
-
- Changes to vendor code (code in
- contrib/,
- crypto/ and so on) should be
- merged to the directory where vendor imports happen.
- For instance, a change to
- crypto/openssl/util/ should be
- merged to crypto/openssl/. This
- is rarely an issue, however, since changes to vendor
- code are usually merged wholesale.
-
+ To commit all changes in
+ the current directory and all subdirectories:
-
- Changes to userland programs should as a general
- rule be merged to the directory that contains the
- Makefile for that program. For instance, a change to
- usr.bin/xlint/arch/i386/ should
- be merged to
- usr.bin/xlint/.
-
+ &prompt.user; svn commit
-
- Changes to userland libraries should as a general
- rule be merged to the directory that contains the
- Makefile for that library. For instance, a change to
- lib/libc/gen/ should be merged to
- lib/libc/.
-
+ To commit all changes in, for example,
+ lib/libfetch/
+ and
+ usr/bin/fetch/
+ in a single operation:
-
- There may be cases where it makes sense to deviate
- from the rules for userland programs and libraries.
- For instance, everything under
- lib/libpam/ is merged to
- lib/libpam/, even though the
- library itself and all of the modules each have their
- own Makefile.
-
+ &prompt.user; svn commit lib/libfetchusr/bin/fetch
-
- Changes to manual pages should be merged to
- share/man/manN/,
- for the appropriate value of
- N.
-
+ There is also a commit wrapper for the ports tree to
+ handle the properties and sanity checking your
+ changes:
-
- Other changes to share/
- should be merged to the appropriate subdirectory and
- not to share/ directly.
-
+ &prompt.user; /usr/ports/Tools/scripts/psvn commit
+
-
- Changes to a top-level file in the source tree
- such as UPDATING or
- Makefile.inc1 should be merged
- directly to that file rather than to the root of the
- whole tree. Yes, this is an exception to the first
- three rules.
-
+
+ Adding and Removing Files
-
- When in doubt, ask.
-
-
+
+ Before adding files, get a copy of auto-props.txt
+ (there is also a
+ ports tree specific version) and add it to
+ ~/.subversion/config according to the
+ instructions in the file. If you added something before
+ reading this, use svn rm --keep-local
+ for just added files, fix your config file and re-add them
+ again. The initial config file is created when you first
+ run a svn command, even something as simple as
+ svn help.
+
- If you need to merge changes to several places at once
- (for instance, changing a kernel interface and every
- userland program that uses it), merge each target
- separately, then commit them together. For instance, if
- you merge a revision that changed a kernel
- API and updated all the userland bits
- that used that API, you would merge the
- kernel change to sys, and the userland bits to the
- appropriate userland directories, then commit all of these
- in one go.
+ Files are added to a
+ SVN repository with svn
+ add. To add a file named
+ foo, edit it, then:
- The source will almost invariably be the same as the
- target. For instance, you will always merge
- stable/7/lib/libc/ from
- head/lib/libc/. The only exception
- would be when merging changes to code that has moved in
- the source branch but not in the parent branch. For
- instance, a change to &man.pkill.1; would be merged from
- bin/pkill/ in head to
- usr.bin/pkill/ in stable/7.
-
+ &prompt.user; svn add foo
-
- Preparing the Merge Target
+
+ Most new source files should include a
+ $&os;$ string near the
+ start of the file. On commit, svn will
+ expand the $&os;$ string,
+ adding the file path, revision number, date and time of
+ commit, and the username of the committer. Files which
+ cannot be modified may be committed without the
+ $&os;$ string.
+
- Because of the mergeinfo propagation issues described
- earlier, it is very important that you never merge changes
- into a sparse working copy. You must always have a full
- checkout of the branch you will merge into. For instance,
- when merging from HEAD to 7, you must have a full checkout
- of stable/7:
+ Files can be removed with svn
+ remove:
- &prompt.user; cd stable/7
-&prompt.user; svn up --set-depth=infinity
+ &prompt.user; svn remove foo
- The target directory must also be up-to-date and must
- not contain any uncommitted changes or stray files.
-
+ Subversion does not require deleting the file before
+ using svn rm, and indeed complains if
+ that happens.
-
- Identifying Revisions
+ It is possible to add directories with
+ svn add:
- Identifying revisions to be merged is a must. If the
- target already has complete mergeinfo, ask
- SVN for a list:
+ &prompt.user; mkdir bar
+&prompt.user; svn add bar
- &prompt.user; cd stable/6/contrib/openpam
-&prompt.user; svn mergeinfo --show-revs=eligible $FSVN/head/contrib/openpam
+ Although svn mkdir makes this easier
+ by combining the creation of the directory and the adding of
+ it:
- If the target does not have complete mergeinfo, check
- the log for the merge source.
-
+ &prompt.user; svn mkdir bar
-
- Merging
+ Like files, directories are removed with
+ svn rm. There is no separate command
+ specifically for removing directories.
- Now, let us start merging!
+ &prompt.user; svn rm bar
+
-
- The Principles
+
+ Copying and Moving Files
- Say you would like to merge:
+ This command creates a copy of
+ foo.c named bar.c,
+ with the new file also under version control:
-
-
- revision $R
-
+ &prompt.user; svn copy foo.cbar.c
-
- in directory $target in stable branch
- $B
-
+ The example above is equivalent to:
-
- from directory $source in head
-
+ &prompt.user; cp foo.c bar.c
+&prompt.user; svn add bar.c
-
- $FSVN is
- svn+ssh://repo.freebsd.org/base
-
-
+ To move and rename a file:
- Assuming that revisions $P and $Q have
- already been merged, and that the current directory is
- an up-to-date working copy of stable/$B, the
- existing mergeinfo looks like this:
+ &prompt.user; svn move foo.cbar.c
+
- &prompt.user; svn propget svn:mergeinfo -R $target
-$target - /head/$source:$P,$Q
+
+ Log and Annotate
- Merging is done like so:
+ svn log shows revisions and commit
+ messages, most recent first, for files or directories. When
+ used on a directory, all revisions that affected the
+ directory and files within that directory are shown.
- &prompt.user; svn merge -c$R $FSVN/head/$source $target
+ svn annotate, or equally svn
+ praise or svn blame, shows
+ the most recent revision number and who committed that
+ revision for each line of a file.
+
- Checking the results of this is possible with
- svn diff.
+
+ Diffs
- The svn:mergeinfo now looks like:
+ svn diff displays changes to the
+ working copy. Diffs generated by SVN are
+ unified and include new files by default in the diff
+ output.
- &prompt.user; svn propget svn:mergeinfo -R $target
-$target - head/$source:$P,$Q,$R
+ svn diff can show the changes between
+ two revisions of the same file:
- If the results are not exactly as shown, assistance
- may be required before committing as mistakes may have
- been made, or there may be something wrong with the
- existing mergeinfo, or there may be a bug in
- Subversion.
-
+ &prompt.user; svn diff -r179453:179454 ROADMAP.txt
-
- Practical Example
+ It can also show all changes for a specific changeset.
+ The following will show what changes were made to the
+ current directory and all subdirectories in changeset
+ 179454:
- As a practical example, consider the following
- scenario. The changes to netmap.4
- in r238987 are to be merged from CURRENT to 9-STABLE.
- The file resides in
- head/share/man/man4. According
- to , this is
- also where to do the merge. Note that in this example
- all paths are relative to the top of the svn repository.
- For more information on the directory layout, see .
+ &prompt.user; svn diff -c179454 .
+
- The first step is to inspect the existing
- mergeinfo.
+
+ Reverting
- &prompt.user; svn propget svn:mergeinfo -R stable/9/share/man/man4
+ Local changes (including additions and deletions) can be
+ reverted using svn revert. It does not
+ update out-of-date files, but just replaces them with
+ pristine copies of the original version.
+
- Take a quick note of how it looks before moving on
- to the next step; doing the actual merge:
+
+ Conflicts
- &prompt.user; svn merge -c r238987 svn+ssh://repo.freebsd.org/base/head/share/man/man4 stable/9/share/man/man4
---- Merging r238987 into 'stable/9/share/man/man4':
-U stable/9/share/man/man4/netmap.4
---- Recording mergeinfo for merge of r238987 into
-'stable/9/share/man/man4':
- U stable/9/share/man/man4
+ If an svn update resulted in a merge
+ conflict, Subversion will remember which files have
+ conflicts and refuse to commit any changes to those files
+ until explicitly told that the conflicts have been resolved.
+ The simple, not yet deprecated procedure is the
+ following:
- Check that the revision number of the merged
- revision has been added. Once this is verified, the
- only thing left is the actual commit.
+ &prompt.user; svn resolved foo
- &prompt.user; svn commit stable/9/share/man/man4
-
+ However, the preferred procedure is:
-
- Merging into the Kernel
- (sys/)
+ &prompt.user; svn resolve --accept=working foo
- As stated above, merging into the kernel is
- different from merging in the rest of the tree. In many
- ways merging to the kernel is simpler because there is
- always the same merge target
- (sys/).
+ The two examples are equivalent. Possible values for
+ --accept are:
- Once svn merge has been executed,
- svn diff has to be run on the
- directory to check the changes. This may show some
- unrelated property changes, but these can be ignored.
- Next, build and test the kernel, and, once the tests are
- complete, commit the code as normal, making sure that
- the commit message starts with Merge
- r226222 from head,
- or similar.
-
-
+
+
+ working: use the version in your
+ working directory (which one presumes has been edited to
+ resolve the conflicts).
+
-
- Precautions Before Committing
+
+ base: use a pristine copy of the
+ version you had before svn update,
+ discarding your own changes, the conflicting changes,
+ and possibly other intervening changes as well.
+
- As always, build world (or appropriate parts of
- it).
+
+ mine-full: use what you had
+ before svn update, including your own
+ changes, but discarding the conflicting changes, and
+ possibly other intervening changes as well.
+
- Check the changes with svn diff and
- svn stat. Make sure all the files that
- should have been added or deleted were in fact added or
- deleted.
+
+ theirs-full: use the version that
+ was retrieved when you did
+ svn update, discarding your own
+ changes.
+
+
+
+
- Take a closer look at any property change (marked by a
- M in the second column of svn
- stat). Normally, no svn:mergeinfo properties
- should be anywhere except the target directory (or
- directories).
+
+ Advanced Use
- If something looks fishy, ask for help.
-
+
+ Sparse Checkouts
-
- Committing
+ SVN allows
+ sparse, or partial checkouts of a
+ directory by adding to a
+ svn checkout.
- Make sure to commit a top level directory to have the
- mergeinfo included as well. Do not specify individual
- files on the command line. For more information about
- committing files in general, see the relevant section of
- this primer.
-
-
+ Valid arguments to
+ are:
-
- Vendor Imports with SVN
+
+
+ empty: the directory itself
+ without any of its contents.
+
-
- Please read this entire section before starting a
- vendor import.
-
+
+ files: the directory and any
+ files it contains.
+
-
- Patches to vendor code fall into two
- categories:
+
+ immediates: the directory and any
+ files and directories it contains, but none of the
+ subdirectories' contents.
+
-
-
- Vendor patches: these are patches that have been
- issued by the vendor, or that have been extracted from
- the vendor's version control system, which address
- issues which in your opinion cannot wait until the
- next vendor release.
-
+
+ infinity: anything.
+
+
-
- &os; patches: these are patches that modify the
- vendor code to address &os;-specific issues.
-
-
+ The --depth option applies to many
+ other commands, including svn commit,
+ svn revert, and svn
+ diff.
- The nature of a patch dictates where it should be
- committed:
+ Since --depth is sticky, there is a
+ --set-depth option for svn
+ update that will change the selected depth.
+ Thus, given the working copy produced by the previous
+ example:
-
-
- Vendor patches should be committed to the vendor
- branch, and merged from there to head. If the patch
- addresses an issue in a new release that is currently
- being imported, it must not be
- committed along with the new release: the release must
- be imported and tagged first, then the patch can be
- applied and committed. There is no need to re-tag the
- vendor sources after committing the patch.
-
+ &prompt.user; cd ~/freebsd
+&prompt.user; svn update --set-depth=immediates .
-
- &os; patches should be committed directly to
- head.
-
-
-
+ The above command will populate the working copy in
+ ~/freebsd with
+ ROADMAP.txt and empty subdirectories,
+ and nothing will happen when svn update
+ is executed on the subdirectories. However, the following
+ command will set the depth for
+ head (in this case) to infinity,
+ and fully populate it:
-
- Preparing the Tree
+ &prompt.user; svn update --set-depth=infinity head
+
- If importing for the first time after the switch to
- Subversion, flattening and cleaning up the vendor tree is
- necessary, as well as bootstrapping the merge history in
- the main tree.
+
+ Direct Operation
-
- Flattening
+ Certain operations can be performed directly on the
+ repository without touching the working copy. Specifically,
+ this applies to any operation that does not require editing
+ a file, including:
- During the conversion from CVS to
- Subversion, vendor branches were imported with the same
- layout as the main tree. This means that the
- pf vendor sources ended up in
- vendor/pf/dist/contrib/pf. The
- vendor source is best directly in
- vendor/pf/dist.
+
+
+ log,
+ diff
+
- To flatten the pf tree:
+
+ mkdir
+
- &prompt.user; cd vendor/pf/dist/contrib/pf
-&prompt.user; svn mv $(svn list) ../..
-&prompt.user; cd ../..
-&prompt.user; svn rm contrib
-&prompt.user; svn propdel -R svn:mergeinfo .
-&prompt.user; svn commit
+
+ remove, copy,
+ rename
+
- The propdel bit is necessary
- because starting with 1.5, Subversion will automatically
- add svn:mergeinfo to any directory
- that is copied or moved. In this case, as nothing is
- being merged from the deleted tree, they just get in the
- way.
+
+ propset,
+ propedit,
+ propdel
+
- Tags may be flattened as well (3, 4, 3.5 etc.); the
- procedure is exactly the same, only changing
- dist to 3.5 or
- similar, and putting the svn commit
- off until the end of the process.
-
+
+ merge
+
+
-
- Cleaning Up
+ Branching is very fast. The following command would be
+ used to branch RELENG_8:
- The dist tree can be cleaned up
- as necessary. Disabling keyword expansion is
- recommended, as it makes no sense on unmodified vendor
- code and in some cases it can even be harmful.
- OpenSSH, for example,
- includes two files that originated with &os; and still
- contain the original version tags. To do this:
+ &prompt.user; svn copy svn+ssh://repo.freebsd.org/base/head svn+ssh://repo.freebsd.org/base/stable/8
- &prompt.user; svn propdel svn:keywords -R .
-&prompt.user; svn commit
-
+ This is equivalent to the following set of commands
+ which take minutes and hours as opposed to seconds,
+ depending on your network connection:
-
- Bootstrapping Merge History
+ &prompt.user; svn checkout --depth=immediates svn+ssh://repo.freebsd.org/base
+&prompt.user; cd base
+&prompt.user; svn update --set-depth=infinity head
+&prompt.user; svn copy head stable/8
+&prompt.user; svn commit stable/8
+
- If importing for the first time after the switch to
- Subversion, bootstrap svn:mergeinfo
- on the target directory in the main tree to the revision
- that corresponds to the last related change to the
- vendor tree, prior to importing new sources:
+
+ Merging with SVN
- &prompt.user; cd head/contrib/pf
-&prompt.user; svn merge --record-only svn+ssh://repo.freebsd.org/base/vendor/pf/dist@180876 .
-&prompt.user; svn commit
-
-
+ This section deals with merging code from one branch to
+ another (typically, from head to a stable branch).
-
- Importing New Sources
+
+ In all examples below, $FSVN
+ refers to the location of the &os; Subversion repository,
+ svn+ssh://repo.freebsd.org/base/.
+
- With two commits—one for the import itself and
- one for the tag—this step can optionally be repeated
- for every upstream release between the last import and the
- current import.
+
+ About Merge Tracking
-
- Preparing the Vendor Sources
+ From the user's perspective, merge tracking
+ information (or mergeinfo) is stored in a property called
+ svn:mergeinfo, which is a
+ comma-separated list of revisions and ranges of revisions
+ that have been merged. When set on a file, it applies
+ only to that file. When set on a directory, it applies to
+ that directory and its descendants (files and directories)
+ except for those that have their own
+ svn:mergeinfo.
- Unlike in CVS where only the
- needed parts were imported into the vendor tree to avoid
- bloating the main tree, Subversion is able to store a
- full distribution in the vendor tree. So, import
- everything, but merge only what is required.
+ It is not inherited. For
+ instance, stable/6/contrib/openpam/
+ does not implicitly inherit mergeinfo from
+ stable/6/, or
+ stable/6/contrib/.
+ Doing so would make partial checkouts very hard to manage.
+ Instead, mergeinfo is explicitly propagated down the tree.
+ For merging something into
+ branch/foo/bar/,
+ the following rules apply:
- A svn add is required to add any
- files that were added since the last vendor import, and
- svn rm is required to remove any that
- were removed since. Preparing sorted lists of the
- contents of the vendor tree and of the sources that are
- about to be imported is recommended, to facilitate the
- process.
+
+
+ If
+ branch/foo/bar/
+ does not already have a mergeinfo record, but a direct
+ ancestor (for instance,
+ branch/foo/)
+ does, then that record will be propagated down to
+ branch/foo/bar/
+ before information about the current merge is
+ recorded.
+
- &prompt.user; cd vendor/pf/dist
-&prompt.user; svn list -R | grep -v '/$' | sort >../old
-&prompt.user; cd ../pf-4.3
-&prompt.user; find . -type f | cut -c 3- | sort >../new
+
+ Information about the current merge will
+ not be propagated back up that
+ ancestor.
+
- With these two files,
- comm -23 ../old ../new will list
- removed files (files only in old),
- while comm -13 ../old ../new will
- list added files only in
- new.
-
+
+ If a direct descendant of
+ branch/foo/bar/ (for instance,
+ branch/foo/bar/baz/) already has
+ a mergeinfo record, information about the current
+ merge will be propagated down to it.
+
+
-
- Importing into the Vendor Tree
+ If you consider the case where a revision changes
+ several separate parts of the tree (for example,
+ branch/foo/bar/ and
+ branch/foo/quux/), but you only want
+ to merge some of it (for example,
+ branch/foo/bar/), you will see that
+ these rules make sense. If mergeinfo was propagated up,
+ it would seem like that revision had also been merged to
+ branch/foo/quux/, when in fact it had
+ not been.
+
- Now, the sources must be copied into
- dist and
- the svn add and
- svn rm commands should be used as
- needed:
+
+ Selecting the Source and Target Branch
+ When Merging
- &prompt.user; cd vendor/pf/pf-4.3
-&prompt.user; tar cf - . | tar xf - -C ../dist
-&prompt.user; cd ../dist
-&prompt.user; comm -23 ../old ../new | xargs svn rm
-&prompt.user; comm -13 ../old ../new | xargs svn --parents add
+ Merging to stable/ branches should
+ originate from head/. For
+ example:
- If any directories were removed, they will have to
- be svn rmed manually. Nothing will
- break if they are not, but they will remain in the
- tree.
+ &prompt.user; svn merge -c r123456 ^/head/ stable/11
+&prompt.user; svn commit stable/11
- Check properties on any new files. All text files
- should have svn:eol-style set to
- native. All binary files should have
- svn:mime-type set to
- application/octet-stream unless there
- is a more appropriate media type. Executable files
- should have svn:executable set to
- *. No other properties should exist
- on any file in the tree.
+
+ Note the sections below which outline changes to
+ the target location of the stable/
+ branch starting with
+ stable/10.
+
- Committing is now possible, however it is good
- practice to make sure that everything is OK by using the
- svn stat and
- svn diff commands.
-
+ Merges to releng/ branches should
+ always originate from the corresponding
+ stable/ branch. For example:
-
- Tagging
+ &prompt.user; svn merge -c r123456 ^/stable/11 releng/11.0
+&prompt.user; svn commit releng/11.0
- Once committed, vendor releases should be tagged for
- future reference. The best and quickest way to do this
- is directly in the repository:
+
+ Committers are only permitted to commit to the
+ releng/ branches during a release
+ cycle after receiving approval from the Release
+ Engineering Team, after which only the Security Officer
+ may commit to a releng/ branch for
+ a Security Advisory or Errata Notice.
+
+
- &prompt.user; svn cp svn+ssh://repo.freebsd.org/base/vendor/pf/dist svn+ssh://repo.freebsd.org/base/vendor/pf/4.3
+
+ Selecting the Source and Target for
+ stable/10 and Newer
- Once that is complete, svn up the
- working copy of
- vendor/pf
- to get the new tag, although this is rarely
- needed.
+ Starting with the stable/10
+ branch, all merges should be
+ merged to and committed from the root of the
+ branch. All merges should look like:
- If creating the tag in the working copy of the tree,
- svn:mergeinfo results must be
- removed:
+ &prompt.user; svn merge -c r123456 ^/head/ checkout
+&prompt.user; svn commit checkout
- &prompt.user; cd vendor/pf
-&prompt.user; svn cp dist 4.3
-&prompt.user; svn propdel svn:mergeinfo -R 4.3
-
+ Note that checkout should
+ be a complete checkout of the branch to which the merge
+ occurs.
-
- Merging to Head
+
+ Selecting the Source and Target for
+ stable/9 and Older
- &prompt.user; cd head/contrib/pf
-&prompt.user; svn up
-&prompt.user; svn merge --accept=postpone svn+ssh://repo.freebsd.org/base/vendor/pf/dist .
+ For stable/9 and earlier,
+ a different strategy was used, distributing mergeinfo
+ around the tree so that merges could be performed without
+ a complete checkout. This procedure proved extremely
+ error-prone, with the convenience of partial checkouts for
+ merges significantly outweighed by the complexity of
+ picking mergeinfo targets. The below describes this
+ now-obsoleted procedure, which should be used
+ only for merges prior to
+ stable/10.
- The --accept=postpone tells
- Subversion that it should not complain because merge
- conflicts will be taken care of manually.
+ Because of mergeinfo propagation, it is important to
+ choose the source and target for the merge carefully to
+ minimise property changes on unrelated directories.
-
- The cvs2svn changeover occurred
- on June 3, 2008. When performing vendor merges for
- packages which were already present and converted by the
- cvs2svn process, the command used to
- merge
- /vendor/package_name/dist
- to
- /head/package_location
- (for example,
- head/contrib/sendmail) must use
- to
- indicate the revision to merge from the
- /vendor tree. For example:
+ The rules for selecting the merge target (the
+ directory that you will merge the changes to) can be
+ summarized as follows:
- &prompt.user; svn checkout svn+ssh://repo.freebsd.org/base/head/contrib/sendmail
-&prompt.user; cd sendmail
-&prompt.user; svn merge -c r261190 ^/vendor/sendmail/dist .
+
+
+ Never merge directly to a file.
+
- ^ is an alias for the
- repository path.
-
+
+ Never, ever merge directly to a file.
+
-
- If using the Zsh shell,
- the ^ must be escaped with
- \. This means
- ^/head should be
- \^/head.
-
+
+ Never, ever, ever merge
+ directly to a file.
+
- It is necessary to resolve any merge conflicts.
+
+ Changes to kernel code should be merged to
+ sys/. For instance, a change to
+ the &man.ichwd.4; driver should be merged to
+ sys/, not
+ sys/dev/ichwd/. Likewise, a
+ change to the TCP/IP stack should be merged to
+ sys/, not
+ sys/netinet/.
+
- Make sure that any files that were added or removed in
- the vendor tree have been properly added or removed in the
- main tree. To check diffs against the vendor
- branch:
+
+ Changes to code under etc/
+ should be merged at etc/, not
+ below it.
+
- &prompt.user; svn diff --no-diff-deleted --old=svn+ssh://repo.freebsd.org/base/vendor/pf/dist --new=.
+
+ Changes to vendor code (code in
+ contrib/,
+ crypto/ and so on) should be
+ merged to the directory where vendor imports happen.
+ For instance, a change to
+ crypto/openssl/util/ should be
+ merged to crypto/openssl/. This
+ is rarely an issue, however, since changes to vendor
+ code are usually merged wholesale.
+
- The --no-diff-deleted tells
- Subversion not to complain about files that are in the
- vendor tree but not in the main tree, i.e., things that
- would have previously been removed before the vendor
- import, like for example the vendor's makefiles
- and configure scripts.
+
+ Changes to userland programs should as a general
+ rule be merged to the directory that contains the
+ Makefile for that program. For instance, a change to
+ usr.bin/xlint/arch/i386/ should
+ be merged to
+ usr.bin/xlint/.
+
- Using CVS, once a file was off the
- vendor branch, it was not able to be put back. With
- Subversion, there is no concept of on or off the vendor
- branch. If a file that previously had local
- modifications, to make it not show up in diffs in the
- vendor tree, all that has to be done is remove any
- left-over cruft like &os; version tags, which is much
- easier.
+
+ Changes to userland libraries should as a general
+ rule be merged to the directory that contains the
+ Makefile for that library. For instance, a change to
+ lib/libc/gen/ should be merged to
+ lib/libc/.
+
- If any changes are required for the world to build
- with the new sources, make them now, and keep testing
- until everything builds and runs perfectly.
-
+
+ There may be cases where it makes sense to deviate
+ from the rules for userland programs and libraries.
+ For instance, everything under
+ lib/libpam/ is merged to
+ lib/libpam/, even though the
+ library itself and all of the modules each have their
+ own Makefile.
+
-
- Committing the Vendor Import
+
+ Changes to manual pages should be merged to
+ share/man/manN/,
+ for the appropriate value of
+ N.
+
- Committing is now possible! Everything must be
- committed in one go. If done properly, the tree will move
- from a consistent state with old code, to a consistent
- state with new code.
+
+ Other changes to share/
+ should be merged to the appropriate subdirectory and
+ not to share/ directly.
+
+
+
+ Changes to a top-level file in the source tree
+ such as UPDATING or
+ Makefile.inc1 should be merged
+ directly to that file rather than to the root of the
+ whole tree. Yes, this is an exception to the first
+ three rules.
+
+
+
+ When in doubt, ask.
+
+
+
+ If you need to merge changes to several places at once
+ (for instance, changing a kernel interface and every
+ userland program that uses it), merge each target
+ separately, then commit them together. For instance, if
+ you merge a revision that changed a kernel
+ API and updated all the userland bits
+ that used that API, you would merge the
+ kernel change to sys, and the userland bits to the
+ appropriate userland directories, then commit all of these
+ in one go.
+
+ The source will almost invariably be the same as the
+ target. For instance, you will always merge
+ stable/7/lib/libc/ from
+ head/lib/libc/. The only exception
+ would be when merging changes to code that has moved in
+ the source branch but not in the parent branch. For
+ instance, a change to &man.pkill.1; would be merged from
+ bin/pkill/ in head to
+ usr.bin/pkill/ in stable/7.
- From Scratch
+ Preparing the Merge Target
-
- Importing into the Vendor Tree
+ Because of the mergeinfo propagation issues described
+ earlier, it is very important that you never merge changes
+ into a sparse working copy. You must always have a full
+ checkout of the branch you will merge into. For instance,
+ when merging from HEAD to 7, you must have a full checkout
+ of stable/7:
- This section is an example of importing and tagging
- byacc into
- head.
+ &prompt.user; cd stable/7
+&prompt.user; svn up --set-depth=infinity
- First, prepare the directory in
- vendor:
+ The target directory must also be up-to-date and must
+ not contain any uncommitted changes or stray files.
+
- &prompt.user; svn co --depth immediates $FSVN/vendor
-&prompt.user; cd vendor
-&prompt.user; svn mkdir byacc
-&prompt.user; svn mkdir byacc/dist
+
+ Identifying Revisions
- Now, import the sources into the
- dist directory.
- Once the files are in place, svn add
- the new ones, then svn commit and tag
- the imported version. To save time and bandwidth,
- direct remote committing and tagging is possible:
+ Identifying revisions to be merged is a must. If the
+ target already has complete mergeinfo, ask
+ SVN for a list:
- &prompt.user; svn cp -m "Tag byacc 20120115"$FSVN/vendor/byacc/dist$FSVN/vendor/byacc/20120115
-
+ &prompt.user; cd stable/6/contrib/openpam
+&prompt.user; svn mergeinfo --show-revs=eligible $FSVN/head/contrib/openpam
-
- Merging to head
+ If the target does not have complete mergeinfo, check
+ the log for the merge source.
+
- Due to this being a new file, copy it for the
- merge:
+
+ Merging
- &prompt.user; svn cp -m "Import byacc to contrib"$FSVN/vendor/byacc/dist$FSVN/head/contrib/byacc
+ Now, let us start merging!
- Working normally on newly imported sources is still
- possible.
-
-
-
+
+ The Principles
-
- Reverting a Commit
+ Say you would like to merge:
- Reverting a commit to a previous version is fairly
- easy:
+
+
+ revision $R
+
- &prompt.user; svn merge -r179454:179453 ROADMAP.txt
-&prompt.user; svn commit
+
+ in directory $target in stable branch
+ $B
+
- Change number syntax, with negative meaning a reverse
- change, can also be used:
+
+ from directory $source in head
+
- &prompt.user; svn merge -c -179454 ROADMAP.txt
-&prompt.user; svn commit
+
+ $FSVN is
+ svn+ssh://repo.freebsd.org/base
+
+
- This can also be done directly in the repository:
+ Assuming that revisions $P and $Q have
+ already been merged, and that the current directory is
+ an up-to-date working copy of stable/$B, the
+ existing mergeinfo looks like this:
- &prompt.user; svn merge -r179454:179453 svn+ssh://repo.freebsd.org/base/ROADMAP.txt
+ &prompt.user; svn propget svn:mergeinfo -R $target
+$target - /head/$source:$P,$Q
-
- It is important to ensure that the mergeinfo
- is correct when reverting a file in order to permit
- svn mergeinfo --show-revs=eligible to work as
- expected.
-
+ Merging is done like so:
- Reverting the deletion of a file is slightly different.
- Copying the version of the file that predates the deletion
- is required. For example, to restore a file that was
- deleted in revision N, restore version N-1:
+ &prompt.user; svn merge -c$R $FSVN/head/$source $target
- &prompt.user; svn copy svn+ssh://repo.freebsd.org/base/ROADMAP.txt@179454
-&prompt.user; svn commit
+ Checking the results of this is possible with
+ svn diff.
- or, equally:
+ The svn:mergeinfo now looks like:
- &prompt.user; svn copy svn+ssh://repo.freebsd.org/base/ROADMAP.txt@179454 svn+ssh://repo.freebsd.org/base
+ &prompt.user; svn propget svn:mergeinfo -R $target
+$target - head/$source:$P,$Q,$R
- Do not simply recreate the file
- manually and svn add it—this will
- cause history to be lost.
-
+ If the results are not exactly as shown, assistance
+ may be required before committing as mistakes may have
+ been made, or there may be something wrong with the
+ existing mergeinfo, or there may be a bug in
+ Subversion.
+
-
- Fixing Mistakes
+
+ Practical Example
- While we can do surgery in an emergency, do not plan on
- having mistakes fixed behind the scenes. Plan on mistakes
- remaining in the logs forever. Be sure to check the output
- of svn status and svn
- diff before committing.
+ As a practical example, consider the following
+ scenario. The changes to netmap.4
+ in r238987 are to be merged from CURRENT to 9-STABLE.
+ The file resides in
+ head/share/man/man4. According
+ to , this is
+ also where to do the merge. Note that in this example
+ all paths are relative to the top of the svn repository.
+ For more information on the directory layout, see .
- Mistakes will happen but,
- they can generally be fixed without
- disruption.
+ The first step is to inspect the existing
+ mergeinfo.
- Take a case of adding a file in the wrong location. The
- right thing to do is to svn move the file
- to the correct location and commit. This causes just a
- couple of lines of metadata in the repository journal, and
- the logs are all linked up correctly.
+ &prompt.user; svn propget svn:mergeinfo -R stable/9/share/man/man4
- The wrong thing to do is to delete the file and then
- svn add an independent copy in the
- correct location. Instead of a couple of lines of text, the
- repository journal grows an entire new copy of the file.
- This is a waste.
-
+ Take a quick note of how it looks before moving on
+ to the next step; doing the actual merge:
-
- Setting up a svnsync
- Mirror
+ &prompt.user; svn merge -c r238987 svn+ssh://repo.freebsd.org/base/head/share/man/man4 stable/9/share/man/man4
+--- Merging r238987 into 'stable/9/share/man/man4':
+U stable/9/share/man/man4/netmap.4
+--- Recording mergeinfo for merge of r238987 into
+'stable/9/share/man/man4':
+ U stable/9/share/man/man4
- You probably do not want to do this unless there is a
- good reason for it. Such reasons might be to support many
- multiple local read-only client machines, or if your network
- bandwidth is limited. Starting a fresh mirror from empty
- would take a very long time. Expect a minimum of 10 hours
- for high speed connectivity. If you have international
- links, expect this to take 4 to 10 times longer.
+ Check that the revision number of the merged
+ revision has been added. Once this is verified, the
+ only thing left is the actual commit.
- A far better option is to grab a seed file. It is large
- (~1GB) but will consume less network traffic and take less
- time to fetch than a svnsync will. This is possible in one
- of the following three ways:
+ &prompt.user; svn commit stable/9/share/man/man4
+
- &prompt.user; rsync -va --partial --progress freefall:/home/peter/svnmirror-base-r179637.tbz2 .
+
+ Merging into the Kernel
+ (sys/)
- &prompt.user; rsync -va --partial --progress rsync://repoman.freebsd.org:50873/svnseed/svnmirror-base-r215629.tar.xz .
+ As stated above, merging into the kernel is
+ different from merging in the rest of the tree. In many
+ ways merging to the kernel is simpler because there is
+ always the same merge target
+ (sys/).
- &prompt.user; fetch ftp://ftp.freebsd.org/pub/FreeBSD/development/subversion/svnmirror-base-r221445.tar.xz
+ Once svn merge has been executed,
+ svn diff has to be run on the
+ directory to check the changes. This may show some
+ unrelated property changes, but these can be ignored.
+ Next, build and test the kernel, and, once the tests are
+ complete, commit the code as normal, making sure that
+ the commit message starts with Merge
+ r226222 from head,
+ or similar.
+
+
- Once you have the file, extract it to somewhere like
- home/svnmirror/base/.
- Then, update it, so that it fetches changes since the last
- revision in the archive:
+
+ Precautions Before Committing
- &prompt.user; svnsync sync file:///home/svnmirror/base
+ As always, build world (or appropriate parts of
+ it).
- You can then set that up to run from &man.cron.8;, do
- checkouts locally, set up a svnserve server for your local
- machines to talk to, etc.
+ Check the changes with svn diff and
+ svn stat. Make sure all the files that
+ should have been added or deleted were in fact added or
+ deleted.
- The seed mirror is set to fetch from
- svn://svn.freebsd.org/base. The
- configuration for the mirror is stored in
- revprop 0 on the local mirror. To see
- the configuration, try:
+ Take a closer look at any property change (marked by a
+ M in the second column of svn
+ stat). Normally, no svn:mergeinfo properties
+ should be anywhere except the target directory (or
+ directories).
- &prompt.user; svn proplist -v --revprop -r 0 file:///home/svnmirror/base
+ If something looks fishy, ask for help.
+
- Use propset to change things.
-
+
+ Committing
-
- Committing High-ASCII Data
+ Make sure to commit a top level directory to have the
+ mergeinfo included as well. Do not specify individual
+ files on the command line. For more information about
+ committing files in general, see the relevant section of
+ this primer.
+
+
- Files that have high-ASCII bits are
- considered binary files in SVN, so the
- pre-commit checks fail and indicate that the
- mime-type property should be set to
- application/octet-stream. However, the
- use of this is discouraged, so please do not set it. The
- best way is always avoiding high-ASCII
- data, so that it can be read everywhere with any text editor
- but if it is not avoidable, instead of changing the
- mime-type, set the fbsd:notbinary
- property with propset:
+
+ Vendor Imports with SVN
- &prompt.user; svn propset fbsd:notbinary yes foo.data
-
+
+ Please read this entire section before starting a
+ vendor import.
+
-
- Maintaining a Project Branch
+
+ Patches to vendor code fall into two
+ categories:
- A project branch is one that is synced to head (or
- another branch) is used to develop a project then commit it
- back to head. In SVN,
- dolphin branching is used for this. A
- dolphin branch is one that diverges for a
- while and is finally committed back to the original branch.
- During development code migration in one direction (from
- head to the branch only). No code is committed back to head
- until the end. Once you commit back at the end, the branch
- is dead (although you can have a new branch with the same
- name after you delete the branch if you want).
-
- As per http://people.freebsd.org/~peter/svn_notes.txt,
- work that is intended to be merged back into HEAD should be
- in base/projects/. If you are doing
- work that is beneficial to the &os; community in some way
- but not intended to be merged directly back into HEAD then
- the proper location is
- base/user/your-name/.
- This
- page contains further details.
-
- To create a project branch:
-
- &prompt.user; svn copy svn+ssh://repo.freebsd.org/base/head svn+ssh://repo.freebsd.org/base/projects/spif
+
+
+ Vendor patches: these are patches that have been
+ issued by the vendor, or that have been extracted from
+ the vendor's version control system, which address
+ issues which in your opinion cannot wait until the
+ next vendor release.
+
- To merge changes from HEAD back into the project
- branch:
+
+ &os; patches: these are patches that modify the
+ vendor code to address &os;-specific issues.
+
+
- &prompt.user; cd copy_of_spif
-&prompt.user; svn merge svn+ssh://repo.freebsd.org/base/head
-&prompt.user; svn commit
+ The nature of a patch dictates where it should be
+ committed:
- It is important to resolve any merge conflicts before
- committing.
-
-
-
+
+ Preparing the Tree
-
- Some Tips
+ If importing for the first time after the switch to
+ Subversion, flattening and cleaning up the vendor tree is
+ necessary, as well as bootstrapping the merge history in
+ the main tree.
- In commit logs etc., rev 179872 should be
- spelled r179872 as per convention.
+
+ Flattening
- Speeding up svn is possible by adding the following to
- ~/.ssh/config:
+ During the conversion from CVS to
+ Subversion, vendor branches were imported with the same
+ layout as the main tree. This means that the
+ pf vendor sources ended up in
+ vendor/pf/dist/contrib/pf. The
+ vendor source is best directly in
+ vendor/pf/dist.
- Host *
-ControlPath ~/.ssh/sockets/master-%l-%r@%h:%p
-ControlMaster auto
-ControlPersist yes
+ To flatten the pf tree:
- and then typing
+ &prompt.user; cd vendor/pf/dist/contrib/pf
+&prompt.user; svn mv $(svn list) ../..
+&prompt.user; cd ../..
+&prompt.user; svn rm contrib
+&prompt.user; svn propdel -R svn:mergeinfo .
+&prompt.user; svn commit
- mkdir ~/.ssh/sockets
+ The propdel bit is necessary
+ because starting with 1.5, Subversion will automatically
+ add svn:mergeinfo to any directory
+ that is copied or moved. In this case, as nothing is
+ being merged from the deleted tree, they just get in the
+ way.
- Checking out a working copy with a stock Subversion client
- without &os;-specific patches
- (OPTIONS_SET=FREEBSD_TEMPLATE) will mean
- that $FreeBSD$ tags will not
- be expanded. Once the correct version has been installed,
- trick Subversion into expanding them like so:
+ Tags may be flattened as well (3, 4, 3.5 etc.); the
+ procedure is exactly the same, only changing
+ dist to 3.5 or
+ similar, and putting the svn commit
+ off until the end of the process.
+
- &prompt.user; svn propdel -R svn:keywords .
-&prompt.user; svn revert -R .
+
+ Cleaning Up
- This will wipe out uncommitted patches.
+ The dist tree can be cleaned up
+ as necessary. Disabling keyword expansion is
+ recommended, as it makes no sense on unmodified vendor
+ code and in some cases it can even be harmful.
+ OpenSSH, for example,
+ includes two files that originated with &os; and still
+ contain the original version tags. To do this:
- It is possible to automatically fill the "Sponsored by"
- and "MFC after" commit log fields by setting
- "freebsd-sponsored-by" and "freebsd-mfc-after" fields in the
- "[miscellany]" section of the
- ~/.subversion/config configuration file.
- For example:
+ &prompt.user; svn propdel svn:keywords -R .
+&prompt.user; svn commit
+
- freebsd-sponsored-by = The FreeBSD Foundation
-freebsd-mfc-after = 2 weeks
-
-
+
+ Bootstrapping Merge History
-
- Setup, Conventions, and Traditions
+ If importing for the first time after the switch to
+ Subversion, bootstrap svn:mergeinfo
+ on the target directory in the main tree to the revision
+ that corresponds to the last related change to the
+ vendor tree, prior to importing new sources:
- There are a number of things to do as a new developer.
- The first set of steps is specific to committers only. These
- steps must be done by a mentor for those who are not
- committers.
+ &prompt.user; cd head/contrib/pf
+&prompt.user; svn merge --record-only svn+ssh://repo.freebsd.org/base/vendor/pf/dist@180876 .
+&prompt.user; svn commit
+
+
-
- For New Committers
+
+ Importing New Sources
- Those who have been given commit rights to the &os;
- repositories must follow these steps.
+ With two commits—one for the import itself and
+ one for the tag—this step can optionally be repeated
+ for every upstream release between the last import and the
+ current import.
-
-
- Get mentor approval before committing each of these
- changes!
-
+
+ Preparing the Vendor Sources
-
- The .ent and
- .xml files mentioned below exist in
- the &os; Documentation Project SVN repository at svn.FreeBSD.org/doc/.
-
+ Unlike in CVS where only the
+ needed parts were imported into the vendor tree to avoid
+ bloating the main tree, Subversion is able to store a
+ full distribution in the vendor tree. So, import
+ everything, but merge only what is required.
-
- New files that do not have the
- FreeBSD=%H
- svn:keywords property will be rejected
- when attempting to commit them to the repository. Be sure
- to read
-
- regarding adding and removing files. Verify that
- ~/.subversion/config contains the
- necessary auto-props entries from
- auto-props.txt mentioned
- there.
-
+ A svn add is required to add any
+ files that were added since the last vendor import, and
+ svn rm is required to remove any that
+ were removed since. Preparing sorted lists of the
+ contents of the vendor tree and of the sources that are
+ about to be imported is recommended, to facilitate the
+ process.
-
- All src commits should go to
- &os.current; first before being merged to &os.stable;.
- The &os.stable; branch must maintain
- ABI and API
- compatibility with earlier versions of that branch. Do
- not merge changes that break this compatibility.
-
-
+ &prompt.user; cd vendor/pf/dist
+&prompt.user; svn list -R | grep -v '/$' | sort >../old
+&prompt.user; cd ../pf-4.3
+&prompt.user; find . -type f | cut -c 3- | sort >../new
-
- Steps for New Committers
+ With these two files,
+ comm -23 ../old ../new will list
+ removed files (files only in old),
+ while comm -13 ../old ../new will
+ list added files only in
+ new.
+
-
- Add an Author Entity
+
+ Importing into the Vendor Tree
- doc/head/share/xml/authors.ent
- — Add an author entity. Later steps depend on this
- entity, and missing this step will cause the
- doc/ build to fail. This is a
- relatively easy task, but remains a good first test of
- version control skills.
-
+ Now, the sources must be copied into
+ dist and
+ the svn add and
+ svn rm commands should be used as
+ needed:
-
- Update the List of Developers and
- Contributors
+ &prompt.user; cd vendor/pf/pf-4.3
+&prompt.user; tar cf - . | tar xf - -C ../dist
+&prompt.user; cd ../dist
+&prompt.user; comm -23 ../old ../new | xargs svn rm
+&prompt.user; comm -13 ../old ../new | xargs svn --parents add
- doc/head/en_US.ISO8859-1/articles/contributors/contrib.committers.xml
- —
- Add an entry to the Developers section
- of the Contributors
- List. Entries are sorted by last name.
-
- doc/head/en_US.ISO8859-1/articles/contributors/contrib.additional.xml
- — Remove the entry from the
- Additional Contributors section. Entries
- are sorted by first name.
-
+ If any directories were removed, they will have to
+ be svn rmed manually. Nothing will
+ break if they are not, but they will remain in the
+ tree.
-
- Add a News Item
+ Check properties on any new files. All text files
+ should have svn:eol-style set to
+ native. All binary files should have
+ svn:mime-type set to
+ application/octet-stream unless there
+ is a more appropriate media type. Executable files
+ should have svn:executable set to
+ *. No other properties should exist
+ on any file in the tree.
- doc/head/share/xml/news.xml
- — Add an entry. Look for the other entries that
- announce new committers and follow the format. Use the
- date from the commit bit approval email from
- core@FreeBSD.org.
-
+ Committing is now possible, however it is good
+ practice to make sure that everything is OK by using the
+ svn stat and
+ svn diff commands.
+
-
- Add a PGP Key
+
+ Tagging
- doc/head/share/pgpkeys/pgpkeys.ent
- and
- doc/head/share/pgpkeys/pgpkeys-developers.xml
- - Add your PGP or
- GnuPG key. Those who do not yet have a
- key should see .
-
- &a.des.email; has written a shell script
- (doc/head/share/pgpkeys/addkey.sh) to
- make this easier. See the README
- file for more information.
-
- Use
- doc/head/share/pgpkeys/checkkey.sh to
- verify that keys meet minimal best-practices
- standards.
-
- After adding and checking a key, add both updated
- files to source control and then commit them. Entries in
- this file are sorted by last name.
+ Once committed, vendor releases should be tagged for
+ future reference. The best and quickest way to do this
+ is directly in the repository:
-
- It is very important to have a current
- PGP/GnuPG key in
- the repository. The key may be required for positive
- identification of a committer. For example, the
- &a.admins; might need it for account recovery. A
- complete keyring of FreeBSD.org users is
- available for download from http://www.FreeBSD.org/doc/pgpkeyring.txt.
-
-
+ &prompt.user; svn cp svn+ssh://repo.freebsd.org/base/vendor/pf/dist svn+ssh://repo.freebsd.org/base/vendor/pf/4.3
-
- Update Mentor and Mentee Information
+ Once that is complete, svn up the
+ working copy of
+ vendor/pf
+ to get the new tag, although this is rarely
+ needed.
- base/head/share/misc/committers-repository.dot
- — Add an entry to the current committers section,
- where repository is
- doc, ports, or
- src, depending on the commit privileges
- granted.
-
- Add an entry for each additional mentor/mentee
- relationship in the bottom section.
-
-
-
- Generate a Kerberos
- Password
-
- See to generate or
- set a Kerberos for use with
- other &os; services like the bug tracking database.
-
-
-
- Optional: Enable Wiki Account
-
- &os;
- Wiki Account — A wiki account allows
- sharing projects and ideas. Those who do not yet have an
- account can contact clusteradm@FreeBSD.org
- to obtain one.
-
-
-
- Optional: Update Wiki Information
-
- Wiki Information - After gaining access to the wiki,
- some people add entries to the How We
- Got Here,
- Irc
- Nicks, and Dogs
- of FreeBSD pages.
-
-
-
- Optional: Update Ports with Personal
- Information
-
- ports/astro/xearth/files/freebsd.committers.markers
- and
- src/usr.bin/calendar/calendars/calendar.freebsd
- - Some people add entries for themselves to these files to
- show where they are located or the date of their
- birthday.
-
-
-
- Optional: Prevent Duplicate Mailings
-
- Subscribers to &a.svn-src-all.name;,
- &a.svn-ports-all.name; or &a.svn-doc-all.name; might wish
- to unsubscribe to avoid receiving duplicate copies of
- commit messages and followups.
-
-
-
-
-
- For Everyone
-
-
-
- Introduce yourself to the other developers, otherwise
- no one will have any idea who you are or what you are
- working on. The introduction need not be a comprehensive
- biography, just write a paragraph or two about who you
- are, what you plan to be working on as a developer in
- &os;, and who will be your mentor. Email this to the
- &a.developers; and you will be on your way!
-
-
-
- Log into freefall.FreeBSD.org
- and create a
- /var/forward/user
- (where user is your username)
- file containing the e-mail address where you want mail
- addressed to
- yourusername@FreeBSD.org to be
- forwarded. This includes all of the commit messages as
- well as any other mail addressed to the &a.committers; and
- the &a.developers;. Really large mailboxes which have
- taken up permanent residence on
- freefall may get truncated
- without warning if space needs to be freed, so forward it
- or read it and you will not lose it.
-
- Due to the severe load dealing with SPAM places on the
- central mail servers that do the mailing list processing
- the front-end server does do some basic checks and will
- drop some messages based on these checks. At the moment
- proper DNS information for the connecting host is the only
- check in place but that may change. Some people blame
- these checks for bouncing valid email. If you want these
- checks turned off for your email you can place a file
- named .spam_lover in your home
- directory on freefall.FreeBSD.org
- to disable the checks for your email.
-
-
-
-
- Those who are developers but not committers will
- not be subscribed to the committers or developers mailing
- lists. The subscriptions are derived from the access
- rights.
-
-
-
-
- Mentors
-
- All new developers have a mentor assigned to them for
- the first few months. A mentor is responsible for teaching
- the mentee the rules and conventions of the project and
- guiding their first steps in the developer community. The
- mentor is also personally responsible for the mentee's actions
- during this initial period.
-
- For committers: do not commit anything without first
- getting mentor approval. Document that approval with an
- Approved by: line in the commit
- message.
-
- When the mentor decides that a mentee has learned the
- ropes and is ready to commit on their own, the mentor
- announces it with a commit to
- conf/mentors. This file is in the
- svnadmin branch of each
- repository:
-
-
-
-
-
- src
- base/svnadmin/conf/mentors
-
-
-
- doc
- doc/svnadmin/conf/mentors
-
-
-
- ports
- ports/svnadmin/conf/mentors
-
-
-
-
-
-
-
-
- Commit Log Messages
-
- This section contains some suggestions and traditions for
- how commit logs are formatted.
-
- As well as including an informative message with each
- commit you may need to include some additional
- information.
-
- This information consists of one or more lines
- containing the key word or phrase, a colon, tabs for formatting,
- and then the additional information.
-
- The key words or phrases are:
-
-
-
-
-
- PR:
- The problem report (if any) which is affected
- (typically, by being closed) by this commit. Only
- include one PR per line as the automated scripts which
- parse this line cannot understand more than
- one.
-
-
-
- Submitted by:
-
- The name and e-mail address of the person
- that submitted the fix; for developers, just the
- username on the &os; cluster.
-
- If the submitter is the maintainer of the port
- to which you are committing, include "(maintainer)"
- after the email address.
-
- Avoid obfuscating the email address of the
- submitter as this adds additional work when searching
- logs.
-
-
-
-
- Reviewed by:
- The name and e-mail address of the person or
- people that reviewed the change; for developers,
- just the username on the &os; cluster. If a
- patch was submitted to a mailing list for review,
- and the review was favorable, then just include
- the list name.
-
-
-
- Approved by:
- The name and e-mail address of the person or
- people that approved the change; for developers, just
- the username on the &os; cluster. It is customary to
- get prior approval for a commit if it is to an area of
- the tree to which you do not usually commit. In
- addition, during the run up to a new release all commits
- must be approved by the release
- engineering team.
-
- While under mentorship, get mentor approval before
- the commit. Enter the mentor's username in this field,
- and note that they are a mentor:
-
- Approved by: username-of-mentor(mentor)
-
- If a team approved these commits then include the
- team name followed by the username of the approver in
- parentheses. For example:
-
- Approved by: re (username)
-
-
-
- Obtained from:
- The name of the project (if any) from which
- the code was obtained. Do not use this line for the
- name of an individual person.
-
-
-
- MFC after:
- If you wish to receive an e-mail reminder to
- MFC at a later date, specify the
- number of days, weeks, or months after which an
- MFC is planned.
-
-
-
- Relnotes:
- If the change is a candidate for inclusion in
- the release notes for the next release from the branch,
- set to yes.
-
-
-
- Security:
- If the change is related to a security
- vulnerability or security exposure, include one or more
- references or a description of the issue. If possible,
- include a VuXML URL or a CVE ID.
-
-
-
- Differential Revision:
- The full URL of the Phabricator review. This line
- must be the last line. For example:
- https://reviews.freebsd.org/D1708.
-
-
-
-
-
-
- Commit Log for a Commit Based on a PR
-
- You want to commit a change based on a PR submitted by
- John Smith containing a patch. The end of the commit message
- should look something like this.
-
- ...
-
- PR: 12345
- Submitted by: John Smith <John.Smith@example.com>
-
-
-
- Commit Log for a Commit Needing Review
-
- You want to change the virtual memory system. You have
- posted patches to the appropriate mailing list (in this
- case, freebsd-arch) and the changes have
- been approved.
-
- ...
-
- Reviewed by: -arch
-
-
-
- Commit Log for a Commit Needing Approval
-
- You want to commit a port. You have collaborated with
- the listed MAINTAINER, who has told you to go ahead and
- commit.
-
- ...
-
- Approved by: abc (maintainer)
-
- Where abc is the account name
- of the person who approved.
-
-
-
- Commit Log for a Commit Bringing in Code from
- OpenBSD
-
- You want to commit some code based on work done in the
- OpenBSD project.
-
- ...
-
- Obtained from: OpenBSD
-
-
-
- Commit Log for a Change to &os.current; with a Planned
- Commit to &os.stable; to Follow at a Later Date.
-
- You want to commit some code which will be merged from
- &os.current; into the &os.stable; branch after two
- weeks.
-
- ...
-
-MFC after: 2 weeks
-
- Where 2 is the number of days,
- weeks, or months after which an MFC is
- planned. The weeks option may be
- day, days,
- week, weeks,
- month, months.
-
-
- In many cases you may need to combine some of these.
-
- Consider the situation where a user has submitted a PR
- containing code from the NetBSD project. You are looking at the
- PR, but it is not an area of the tree you normally work in, so
- you have decided to get the change reviewed by the
- arch mailing list. Since the change is
- complex, you opt to MFC after one month to
- allow adequate testing.
-
- The extra information to include in the commit would look
- something like
-
-
- Example Combined Commit Log
-
- PR: 54321
-Submitted by: John Smith <John.Smith@example.com>
-Reviewed by: -arch
-Obtained from: NetBSD
-MFC after: 1 month
-Relnotes: yes
-
-
-
-
- Preferred License for New Files
-
- Currently the &os; Project suggests and uses the following
- text as the preferred license scheme:
-
- /*-
- * Copyright (c) [year] [your name]
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * [id for your version control system, if any]
- */
-
- The &os; project strongly discourages the so-called
- "advertising clause" in new code. Due to the large number of
- contributors to the &os; project, complying with this clause for
- many commercial vendors has become difficult. If you have code
- in the tree with the advertising clause, please consider
- removing it. In fact, please consider using the above license
- for your code.
-
- The &os; project discourages completely new licenses and
- variations on the standard licenses. New licenses require the
- approval of the &a.core; to reside in the
- main repository. The more different licenses that are used in
- the tree, the more problems that this causes to those wishing to
- utilize this code, typically from unintended consequences from a
- poorly worded license.
-
- Project policy dictates that code under some non-BSD
- licenses must be placed only in specific sections of the
- repository, and in some cases, compilation must be conditional
- or even disabled by default. For example, the GENERIC kernel
- must be compiled under only licenses identical to or
- substantially similar to the BSD license. GPL, APSL, CDDL, etc,
- licensed software must not be compiled into GENERIC.
-
- Developers are reminded that in open source, getting "open"
- right is just as important as getting "source" right, as
- improper handling of intellectual property has serious
- consequences. Any questions or concerns should immediately be
- brought to the attention of the core team.
-
-
-
- Keeping Track of Licenses Granted to the &os;
- Project
-
- Various software or data exist in the repositories where
- the &os; project has been granted a special licence to be able
- to use them. A case in point are the Terminus fonts for use
- with &man.vt.4;. Here the author Dimitar Zhekov has allowed us
- to use the "Terminus BSD Console" font under a 2-clause BSD
- license rather than the regular Open Font License he normally
- uses.
-
- It is clearly sensible to keep a record of any such
- license grants. To that end, the &a.core; has decided to keep
- an archive of them. Whenever the &os; project is granted a
- special license we require the &a.core; to be notified. Any
- developers involved in arranging such a license grant, please
- send details to the &a.core; including:
-
-
-
- Contact details for people or organizations granting the
- special license.
-
-
-
- What files, directories etc. in the repositories are
- covered by the license grant including the revision numbers
- where any specially licensed material was committed.
-
-
-
- The date the license comes into effect from. Unless
- otherwise agreed, this will be the date the license was
- issued by the authors of the software in question.
-
-
-
- The license text.
-
-
-
- A note of any restrictions, limitations or exceptions
- that apply specifically to &os;'s usage of the licensed
- material.
-
-
-
- Any other relevant information.
-
-
-
- Once the &a.core; is satisfied that all the necessary
- details have been gathered and are correct, the secretary will
- send a PGP-signed acknowledgement of receipt including the
- license details. This receipt will be persistently archived and
- serve as our permanent record of the license grant.
-
- The license archive should contain only details of license
- grants; this is not the place for any discussions around
- licensing or other subjects. Access to data within the license
- archive will be available on request to the &a.core;.
-
+ If creating the tag in the working copy of the tree,
+ svn:mergeinfo results must be
+ removed:
-
- Developer Relations
+ &prompt.user; cd vendor/pf
+&prompt.user; svn cp dist 4.3
+&prompt.user; svn propdel svn:mergeinfo -R 4.3
+
+
- If you are working directly on your own code or on code
- which is already well established as your responsibility, then
- there is probably little need to check with other committers
- before jumping in with a commit. If you see a bug in an area of
- the system which is clearly orphaned (and there are a few such
- areas, to our shame), the same applies. If, however, you are
- about to modify something which is clearly being actively
- maintained by someone else (and it is only by watching the
- repository-committers
- mailing list that you can really get a feel for just what is and
- is not) then consider sending the change to them instead, just
- as you would have before becoming a committer. For ports, you
- should contact the listed MAINTAINER in the
- Makefile. For other parts of the
- repository, if you are unsure who the active maintainer might
- be, it may help to scan the revision history to see who has
- committed changes in the past. An example script that lists
- each person who has committed to
- a given file along with the number of commits each person has
- made can be found at on freefall at
- ~eadler/bin/whodid. If your queries go
- unanswered or the committer otherwise indicates a lack of
- interest in the area affected, go ahead and commit it.
+
+ Merging to Head
-
- Avoid sending private emails to maintainers. Other people
- might be interested in the conversation, not just the final
- output.
-
+ &prompt.user; cd head/contrib/pf
+&prompt.user; svn up
+&prompt.user; svn merge --accept=postpone svn+ssh://repo.freebsd.org/base/vendor/pf/dist .
- If you are unsure about a commit for any reason at all, have
- it reviewed by -hackers before committing.
- Better to have it flamed then and there rather than when it is
- part of the repository. If you do happen to commit something
- which results in controversy erupting, you may also wish to
- consider backing the change out again until the matter is
- settled. Remember – with a version control system we can
- always change it back.
+ The --accept=postpone tells
+ Subversion that it should not complain because merge
+ conflicts will be taken care of manually.
- Do not impugn the intentions of someone you disagree with.
- If they see a different solution to a problem than you, or even
- a different problem, it is not because they are stupid, because
- they have questionable parentage, or because they are trying to
- destroy your hard work, personal image, or &os;, but simply
- because they have a different outlook on the world. Different
- is good.
+
+ The cvs2svn changeover occurred
+ on June 3, 2008. When performing vendor merges for
+ packages which were already present and converted by the
+ cvs2svn process, the command used to
+ merge
+ /vendor/package_name/dist
+ to
+ /head/package_location
+ (for example,
+ head/contrib/sendmail) must use
+ to
+ indicate the revision to merge from the
+ /vendor tree. For example:
- Disagree honestly. Argue your position from its merits,
- be honest about any shortcomings it may have, and be open to
- seeing their solution, or even their vision of the problem,
- with an open mind.
+ &prompt.user; svn checkout svn+ssh://repo.freebsd.org/base/head/contrib/sendmail
+&prompt.user; cd sendmail
+&prompt.user; svn merge -c r261190 ^/vendor/sendmail/dist .
- Accept correction. We are all fallible. When you have made
- a mistake, apologize and get on with life. Do not beat up
- yourself, and certainly do not beat up others for your mistake.
- Do not waste time on embarrassment or recrimination, just fix
- the problem and move on.
+ ^ is an alias for the
+ repository path.
+
- Ask for help. Seek out (and give) peer reviews. One of
- the ways open source software is supposed to excel is in the
- number of eyeballs applied to it; this does not apply if nobody
- will review code.
-
+
+ If using the Zsh shell,
+ the ^ must be escaped with
+ \. This means
+ ^/head should be
+ \^/head.
+
-
- If in Doubt...
+ It is necessary to resolve any merge conflicts.
- When you are not sure about something, whether it be a
- technical issue or a project convention be sure to ask. If you
- stay silent you will never make progress.
+ Make sure that any files that were added or removed in
+ the vendor tree have been properly added or removed in the
+ main tree. To check diffs against the vendor
+ branch:
- If it relates to a technical issue ask on the public
- mailing lists. Avoid the temptation to email the individual
- person that knows the answer. This way everyone will be able to
- learn from the question and the answer.
+ &prompt.user; svn diff --no-diff-deleted --old=svn+ssh://repo.freebsd.org/base/vendor/pf/dist --new=.
- For project specific or administrative questions you should
- ask, in order:
+ The --no-diff-deleted tells
+ Subversion not to complain about files that are in the
+ vendor tree but not in the main tree, i.e., things that
+ would have previously been removed before the vendor
+ import, like for example the vendor's makefiles
+ and configure scripts.
-
-
- Your mentor or former mentor.
-
+ Using CVS, once a file was off the
+ vendor branch, it was not able to be put back. With
+ Subversion, there is no concept of on or off the vendor
+ branch. If a file that previously had local
+ modifications, to make it not show up in diffs in the
+ vendor tree, all that has to be done is remove any
+ left-over cruft like &os; version tags, which is much
+ easier.
-
- An experienced committer on IRC, email, etc.
-
+ If any changes are required for the world to build
+ with the new sources, make them now, and keep testing
+ until everything builds and runs perfectly.
+
-
- Any team with a "hat", as they should give you a
- definitive answer.
-
+
+ Committing the Vendor Import
-
- If still not sure, ask on &a.developers;.
-
-
+ Committing is now possible! Everything must be
+ committed in one go. If done properly, the tree will move
+ from a consistent state with old code, to a consistent
+ state with new code.
+
- Once your question is answered, if no one pointed you to
- documentation that spelled out the answer to your question,
- document it, as others will have the same question.
-
+
+ From Scratch
-
- Bugzilla
+
+ Importing into the Vendor Tree
- The &os; Project utilizes
- Bugzilla for tracking bugs and change
- requests. Be sure that if you commit a fix or suggestion found
- in the PR database to close it. It is also considered nice if
- you take time to close any PRs associated with your commits, if
- appropriate.
+ This section is an example of importing and tagging
+ byacc into
+ head.
- Committers with
- non-&os;.org
- Bugzilla accounts can have the old account merged with the
- &os;.org account by
- entering a new bug. Choose
- Supporting Services as the Product, and
- Bug Tracker as the Component.
+ First, prepare the directory in
+ vendor:
- You can find out more about
- Bugzilla at:
+ &prompt.user; svn co --depth immediates $FSVN/vendor
+&prompt.user; cd vendor
+&prompt.user; svn mkdir byacc
+&prompt.user; svn mkdir byacc/dist
-
-
- &os;
- Problem Report Handling Guidelines
-
+ Now, import the sources into the
+ dist directory.
+ Once the files are in place, svn add
+ the new ones, then svn commit and tag
+ the imported version. To save time and bandwidth,
+ direct remote committing and tagging is possible:
-
- http://www.FreeBSD.org/support.html
-
-
-
+ &prompt.user; svn cp -m "Tag byacc 20120115"$FSVN/vendor/byacc/dist$FSVN/vendor/byacc/20120115
+
-
- Phabricator
+
+ Merging to head
- The &os; Project utilizes Phabricator
- for code review requests. See the CodeReview
- wiki page for details.
+ Due to this being a new file, copy it for the
+ merge:
-
+ &prompt.user; svn cp -m "Import byacc to contrib"$FSVN/vendor/byacc/dist$FSVN/head/contrib/byacc
-
- Who's Who
+ Working normally on newly imported sources is still
+ possible.
+
+
+
- Besides the repository meisters, there are other &os;
- project members and teams whom you will probably get to know in
- your role as a committer. Briefly, and by no means
- all-inclusively, these are:
+
+ Reverting a Commit
-
-
- &a.doceng;
+ Reverting a commit to a previous version is fairly
+ easy:
-
- doceng is the group responsible for the documentation
- build infrastructure, approving new documentation
- committers, and ensuring that the &os; website and
- documentation on the FTP site is up to date with respect
- to the subversion tree. It is
- not a conflict resolution body.
- The vast majority of documentation related discussion
- takes place on the &a.doc;. More details regarding the
- doceng team can be found in its charter.
- Committers interested in contributing to the documentation
- should familiarize themselves with the Documentation
- Project Primer.
-
-
+ &prompt.user; svn merge -r179454:179453 ROADMAP.txt
+&prompt.user; svn commit
-
- &a.bde.email;
+ Change number syntax, with negative meaning a reverse
+ change, can also be used:
-
- Bruce is the Style Police-Meister. When you do a
- commit that could have been done better, Bruce will be
- there to tell you. Be thankful that someone is. Bruce is
- also very knowledgeable on the various standards
- applicable to &os;.
-
-
+ &prompt.user; svn merge -c -179454 ROADMAP.txt
+&prompt.user; svn commit
-
- &a.re.members.email;
+ This can also be done directly in the repository:
-
- These are the members of the &a.re;. This team is
- responsible for setting release deadlines and controlling
- the release process. During code freezes, the release
- engineers have final authority on all changes to the
- system for whichever branch is pending release status. If
- there is something you want merged from &os.current; to
- &os.stable; (whatever values those may have at any given
- time), these are the people to talk to about it.
-
- Hiroki is also the keeper of the release documentation
- (src/release/doc/*). If you commit a
- change that you think is worthy of mention in the release
- notes, please make sure he knows about it. Better still,
- send him a patch with your suggested commentary.
-
-
+ &prompt.user; svn merge -r179454:179453 svn+ssh://repo.freebsd.org/base/ROADMAP.txt
-
- &a.so.email;
+
+ It is important to ensure that the mergeinfo
+ is correct when reverting a file in order to permit
+ svn mergeinfo --show-revs=eligible to work as
+ expected.
+
-
- &a.so; is the
- &os; Security
- Officer and oversees the
- &a.security-officer;.
-
-
+ Reverting the deletion of a file is slightly different.
+ Copying the version of the file that predates the deletion
+ is required. For example, to restore a file that was
+ deleted in revision N, restore version N-1:
-
- &a.wollman.email;
+ &prompt.user; svn copy svn+ssh://repo.freebsd.org/base/ROADMAP.txt@179454
+&prompt.user; svn commit
-
- If you need advice on obscure network internals or
- are not sure of some potential change to the networking
- subsystem you have in mind, Garrett is someone to talk
- to. Garrett is also very knowledgeable on the various
- standards applicable to &os;.
-
-
+ or, equally:
-
- &a.committers;
+ &prompt.user; svn copy svn+ssh://repo.freebsd.org/base/ROADMAP.txt@179454 svn+ssh://repo.freebsd.org/base
-
- &a.svn-src-all.name;, &a.svn-ports-all.name; and
- &a.svn-doc-all.name; are the mailing lists that the
- version control system uses to send commit messages to.
- You should never send email directly
- to these lists. You should only send replies to this list
- when they are short and are directly related to a
- commit.
-
-
+ Do not simply recreate the file
+ manually and svn add it—this will
+ cause history to be lost.
+
-
- &a.developers;
+
+ Fixing Mistakes
-
- All committers are subscribed to -developers. This
- list was created to be a forum for the committers
- community issues. Examples are Core
- voting, announcements, etc.
-
- The &a.developers; is for the exclusive use of &os;
- committers. In order to develop &os;, committers must
- have the ability to openly discuss matters that will be
- resolved before they are publicly announced. Frank
- discussions of work in progress are not suitable for open
- publication and may harm &os;.
-
- All &os; committers are expected not to
- not publish or forward messages from the
- &a.developers; outside the list membership without
- permission of all of the authors. Violators will be
- removed from the
- &a.developers;, resulting in a suspension of commit
- privileges. Repeated or flagrant violations may result in
- permanent revocation of commit privileges.
-
- This list is not intended as a
- place for code reviews or for any technical discussion.
- In fact using it as such hurts the &os; Project as it
- gives a sense of a closed list where general decisions
- affecting all of the &os; using community are made without
- being open. Last, but not least
- never, never ever, email the &a.developers; and
- CC:/BCC: another &os; list. Never, ever email
- another &os; email list and CC:/BCC: the &a.developers;.
- Doing so can greatly diminish the benefits of this
- list.
-
-
-
-
+ While we can do surgery in an emergency, do not plan on
+ having mistakes fixed behind the scenes. Plan on mistakes
+ remaining in the logs forever. Be sure to check the output
+ of svn status and svn
+ diff before committing.
-
- SSH Quick-Start Guide
+ Mistakes will happen but,
+ they can generally be fixed without
+ disruption.
-
-
- If you do not wish to type your password in every time
- you use &man.ssh.1;, and you use keys to
- authenticate, &man.ssh-agent.1; is there for your
- convenience. If you want to use &man.ssh-agent.1;, make
- sure that you run it before running other applications. X
- users, for example, usually do this from their
- .xsession or
- .xinitrc. See &man.ssh-agent.1; for
- details.
-
+ Take a case of adding a file in the wrong location. The
+ right thing to do is to svn move the file
+ to the correct location and commit. This causes just a
+ couple of lines of metadata in the repository journal, and
+ the logs are all linked up correctly.
-
- Generate a key pair using &man.ssh-keygen.1;. The key
- pair will wind up in your
- $HOME/.ssh/
- directory.
+ The wrong thing to do is to delete the file and then
+ svn add an independent copy in the
+ correct location. Instead of a couple of lines of text, the
+ repository journal grows an entire new copy of the file.
+ This is a waste.
+
-
- Only ECDSA,
- Ed25519 or RSA keys
- are supported.
-
-
+
+ Setting up a svnsync
+ Mirror
-
- Send your public key
- ($HOME/.ssh/id_ecdsa.pub,
- $HOME/.ssh/id_ed25519.pub, or
- $HOME/.ssh/id_rsa.pub)
- to the person setting you up as a committer so it can be put
- into
- yourlogin
- in
- /etc/ssh-keys/ on
- freefall.
-
-
+ You probably do not want to do this unless there is a
+ good reason for it. Such reasons might be to support many
+ multiple local read-only client machines, or if your network
+ bandwidth is limited. Starting a fresh mirror from empty
+ would take a very long time. Expect a minimum of 10 hours
+ for high speed connectivity. If you have international
+ links, expect this to take 4 to 10 times longer.
- Now you should be able to use &man.ssh-add.1; for
- authentication once per session. This will prompt you for
- your private key's pass phrase, and then store it in your
- authentication agent (&man.ssh-agent.1;). If you no longer
- wish to have your key stored in the agent, issuing
- ssh-add -d will remove it.
+ A far better option is to grab a seed file. It is large
+ (~1GB) but will consume less network traffic and take less
+ time to fetch than a svnsync will. This is possible in one
+ of the following three ways:
- Test by doing something such as ssh
- freefall.FreeBSD.org ls /usr.
+ &prompt.user; rsync -va --partial --progress freefall:/home/peter/svnmirror-base-r179637.tbz2 .
- For more information, see
- security/openssh,
- &man.ssh.1;, &man.ssh-add.1;, &man.ssh-agent.1;,
- &man.ssh-keygen.1;, and &man.scp.1;.
+ &prompt.user; rsync -va --partial --progress rsync://repoman.freebsd.org:50873/svnseed/svnmirror-base-r215629.tar.xz .
- For information on adding, changing, or removing &man.ssh.1;
- keys, see this
- article.
-
+ &prompt.user; fetch ftp://ftp.freebsd.org/pub/FreeBSD/development/subversion/svnmirror-base-r221445.tar.xz
-
- &coverity; Availability for &os; Committers
+ Once you have the file, extract it to somewhere like
+ home/svnmirror/base/.
+ Then, update it, so that it fetches changes since the last
+ revision in the archive:
- All &os; developers can obtain access to
- Coverity analysis results of all &os;
- Project software. All who are interested in obtaining access to
- the analysis results of the automated
- Coverity runs, can sign up at Coverity
- Scan.
+ &prompt.user; svnsync sync file:///home/svnmirror/base
- The &os; wiki includes a mini-guide for developers who are
- interested in working with the &coverity; analysis reports: http://wiki.freebsd.org/CoverityPrevent.
- Please note that this mini-guide is only readable by &os;
- developers, so if you cannot access this page, you will have to
- ask someone to add you to the appropriate Wiki access
- list.
+ You can then set that up to run from &man.cron.8;, do
+ checkouts locally, set up a svnserve server for your local
+ machines to talk to, etc.
- Finally, all &os; developers who are going to use
- &coverity; are always encouraged to ask for more details and
- usage information, by posting any questions to the mailing list
- of the &os; developers.
-
+ The seed mirror is set to fetch from
+ svn://svn.freebsd.org/base. The
+ configuration for the mirror is stored in
+ revprop 0 on the local mirror. To see
+ the configuration, try:
-
- The &os; Committers' Big List of Rules
+ &prompt.user; svn proplist -v --revprop -r 0 file:///home/svnmirror/base
- Everyone involved with the &os; project is expected to
- abide by the Code of Conduct available from
- http://www.FreeBSD.org/internal/code-of-conduct.html.
- As committers, you form the public face of the project, and how
- you behave has a vital impact on the public perception of it.
- This guide expands on the parts of the
- Code of Conduct specific to
- committers.
+ Use propset to change things.
+
-
-
- Respect other committers.
-
+
+ Committing High-ASCII Data
-
- Respect other contributors.
-
+ Files that have high-ASCII bits are
+ considered binary files in SVN, so the
+ pre-commit checks fail and indicate that the
+ mime-type property should be set to
+ application/octet-stream. However, the
+ use of this is discouraged, so please do not set it. The
+ best way is always avoiding high-ASCII
+ data, so that it can be read everywhere with any text editor
+ but if it is not avoidable, instead of changing the
+ mime-type, set the fbsd:notbinary
+ property with propset:
-
- Discuss any significant change
- before committing.
-
+ &prompt.user; svn propset fbsd:notbinary yes foo.data
+
-
- Respect existing maintainers (if listed in the
- MAINTAINER field in
- Makefile or in
- MAINTAINER in the top-level
- directory).
-
+
+ Maintaining a Project Branch
-
- Any disputed change must be backed out pending
- resolution of the dispute if requested by a maintainer.
- Security related changes may override a maintainer's wishes
- at the Security Officer's discretion.
-
+ A project branch is one that is synced to head (or
+ another branch) is used to develop a project then commit it
+ back to head. In SVN,
+ dolphin branching is used for this. A
+ dolphin branch is one that diverges for a
+ while and is finally committed back to the original branch.
+ During development code migration in one direction (from
+ head to the branch only). No code is committed back to head
+ until the end. Once you commit back at the end, the branch
+ is dead (although you can have a new branch with the same
+ name after you delete the branch if you want).
-
- Changes go to &os.current; before &os.stable; unless
- specifically permitted by the release engineer or unless
- they are not applicable to &os.current;. Any non-trivial or
- non-urgent change which is applicable should also be allowed
- to sit in &os.current; for at least 3 days before merging so
- that it can be given sufficient testing. The release
- engineer has the same authority over the &os.stable; branch
- as outlined for the maintainer in rule #5.
-
+ As per http://people.freebsd.org/~peter/svn_notes.txt,
+ work that is intended to be merged back into HEAD should be
+ in base/projects/. If you are doing
+ work that is beneficial to the &os; community in some way
+ but not intended to be merged directly back into HEAD then
+ the proper location is
+ base/user/your-name/.
+ This
+ page contains further details.
-
- Do not fight in public with other committers; it looks
- bad.
-
+ To create a project branch:
-
- Respect all code freezes and read the
- committers and
- developers mailing lists in a timely
- manner so you know when a code freeze is in effect.
-
+ &prompt.user; svn copy svn+ssh://repo.freebsd.org/base/head svn+ssh://repo.freebsd.org/base/projects/spif
-
- When in doubt on any procedure, ask first!
-
+ To merge changes from HEAD back into the project
+ branch:
-
- Test your changes before committing them.
-
+ &prompt.user; cd copy_of_spif
+&prompt.user; svn merge svn+ssh://repo.freebsd.org/base/head
+&prompt.user; svn commit
-
- Do not commit to anything under the
- src/contrib,
- src/crypto, or
- src/sys/contrib trees without
- explicit approval from the respective
- maintainer(s).
-
-
+ It is important to resolve any merge conflicts before
+ committing.
+
+
+
- Details
+ Some Tips
-
-
- Respect other committers.
+ In commit logs etc., rev 179872 should be
+ spelled r179872 as per convention.
- This means that you need to treat other committers as
- the peer-group developers that they are. Despite our
- occasional attempts to prove the contrary, one does not
- get to be a committer by being stupid and nothing rankles
- more than being treated that way by one of your peers.
- Whether we always feel respect for one another or not (and
- everyone has off days), we still have to
- treat other committers with respect
- at all times, on public forums and in private
- email.
-
- Being able to work together long term is this
- project's greatest asset, one far more important than any
- set of changes to the code, and turning arguments about
- code into issues that affect our long-term ability to work
- harmoniously together is just not worth the trade-off by
- any conceivable stretch of the imagination.
-
- To comply with this rule, do not send email when you
- are angry or otherwise behave in a manner which is likely
- to strike others as needlessly confrontational. First
- calm down, then think about how to communicate in the most
- effective fashion for convincing the other person(s) that
- your side of the argument is correct, do not just blow off
- some steam so you can feel better in the short term at the
- cost of a long-term flame war. Not only is this very bad
- energy economics, but repeated displays of
- public aggression which impair our ability to work well
- together will be dealt with severely by the project
- leadership and may result in suspension or termination of
- your commit privileges. The project leadership will take
- into account both public and private communications
- brought before it. It will not seek the disclosure of
- private communications, but it will take it into account
- if it is volunteered by the committers involved in the
- complaint.
-
- All of this is never an option which the project's
- leadership enjoys in the slightest, but unity comes first.
- No amount of code or good advice is worth trading that
- away.
-
+ Speeding up svn is possible by adding the following to
+ ~/.ssh/config:
-
- Respect other contributors.
+ Host *
+ControlPath ~/.ssh/sockets/master-%l-%r@%h:%p
+ControlMaster auto
+ControlPersist yes
- You were not always a committer. At one time you were
- a contributor. Remember that at all times. Remember what
- it was like trying to get help and attention. Do not
- forget that your work as a contributor was very important
- to you. Remember what it was like. Do not discourage,
- belittle, or demean contributors. Treat them with
- respect. They are our committers in waiting. They are
- every bit as important to the project as committers.
- Their contributions are as valid and as important as your
- own. After all, you made many contributions before you
- became a committer. Always remember that.
-
- Consider the points raised under
- and apply them also to
- contributors.
-
+ and then typing
-
- Discuss any significant change
- before committing.
+ mkdir ~/.ssh/sockets
+
+ Checking out a working copy with a stock Subversion client
+ without &os;-specific patches
+ (OPTIONS_SET=FREEBSD_TEMPLATE) will mean
+ that $FreeBSD$ tags will not
+ be expanded. Once the correct version has been installed,
+ trick Subversion into expanding them like so:
+
+ &prompt.user; svn propdel -R svn:keywords .
+&prompt.user; svn revert -R .
+
+ This will wipe out uncommitted patches.
- The repository is not where changes should be
- initially submitted for correctness or argued over, that
- should happen first in the mailing lists or by use of the
- Phabricator service and the commit should only happen once
- something resembling consensus has been reached. This
- does not mean that you have to ask permission before
- correcting every obvious syntax error or manual page
- misspelling, simply that you should try to develop a feel
- for when a proposed change is not quite such a no-brainer
- and requires some feedback first. People really do not
- mind sweeping changes if the result is something clearly
- better than what they had before, they just do not like
- being surprised by those changes.
- The very best way of making sure that you are on the right
- track is to have your code reviewed by one or more other
- committers.
+ It is possible to automatically fill the "Sponsored by"
+ and "MFC after" commit log fields by setting
+ "freebsd-sponsored-by" and "freebsd-mfc-after" fields in the
+ "[miscellany]" section of the
+ ~/.subversion/config configuration file.
+ For example:
- When in doubt, ask for review!
-
+ freebsd-sponsored-by = The FreeBSD Foundation
+freebsd-mfc-after = 2 weeks
+
+
-
- Respect existing maintainers if listed.
+
+ Commit Log Messages
- Many parts of &os; are not owned in
- the sense that any specific individual will jump up and
- yell if you commit a change to their area,
- but it still pays to check first. One convention we use
- is to put a maintainer line in the
- Makefile for any package or subtree
- which is being actively maintained by one or more people;
- see http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/developers-handbook/policies.html
- for documentation on this. Where sections of code have
- several maintainers, commits to affected areas by one
- maintainer need to be reviewed by at least one other
- maintainer. In cases where the
- maintainer-ship of something is not clear,
- you can also look at the repository logs for the file(s)
- in question and see if someone has been working recently
- or predominantly in that area.
-
- Other areas of &os; fall under the control of someone
- who manages an overall category of &os; evolution, such as
- internationalization or networking. See http://www.FreeBSD.org/administration.html
- for more information on this.
-
+ This section contains some suggestions and traditions for
+ how commit logs are formatted.
-
- Any disputed change must be backed out pending
- resolution of the dispute if requested by a maintainer.
- Security related changes may override a maintainer's
- wishes at the Security Officer's discretion.
-
- This may be hard to swallow in times of conflict (when
- each side is convinced that they are in the right, of
- course) but a version control system makes it unnecessary
- to have an ongoing dispute raging when it is far easier to
- simply reverse the disputed change, get everyone calmed
- down again and then try to figure out what is the best way
- to proceed. If the change turns out to be the best thing
- after all, it can be easily brought back. If it turns out
- not to be, then the users did not have to live with the
- bogus change in the tree while everyone was busily
- debating its merits. People very
- rarely call for back-outs in the repository since
- discussion generally exposes bad or controversial changes
- before the commit even happens, but on such rare occasions
- the back-out should be done without argument so that we
- can get immediately on to the topic of figuring out
- whether it was bogus or not.
-
+ As well as including an informative message with each
+ commit you may need to include some additional
+ information.
-
- Changes go to &os.current; before &os.stable; unless
- specifically permitted by the release engineer or unless
- they are not applicable to &os.current;. Any non-trivial
- or non-urgent change which is applicable should also be
- allowed to sit in &os.current; for at least 3 days before
- merging so that it can be given sufficient testing. The
- release engineer has the same authority over the
- &os.stable; branch as outlined in rule #5.
-
- This is another do not argue about it
- issue since it is the release engineer who is ultimately
- responsible (and gets beaten up) if a change turns out to
- be bad. Please respect this and give the release engineer
- your full cooperation when it comes to the &os.stable;
- branch. The management of &os.stable; may frequently seem
- to be overly conservative to the casual observer, but also
- bear in mind the fact that conservatism is supposed to be
- the hallmark of &os.stable; and different rules apply
- there than in &os.current;. There is also really no point
- in having &os.current; be a testing ground if changes are
- merged over to &os.stable; immediately. Changes need a
- chance to be tested by the &os.current; developers, so
- allow some time to elapse before merging unless the
- &os.stable; fix is critical, time sensitive or so obvious
- as to make further testing unnecessary (spelling fixes to
- manual pages, obvious bug/typo fixes, etc.) In other
- words, apply common sense.
-
- Changes to the security branches (for example,
- releng/9.3) must be approved by a
- member of the &a.security-officer;, or in some cases, by a
- member of the &a.re;.
-
+ This information consists of one or more lines
+ containing the key word or phrase, a colon, tabs for formatting,
+ and then the additional information.
-
- Do not fight in public with other committers; it looks
- bad.
+ The key words or phrases are:
- This project has a public image to uphold and that
- image is very important to all of us, especially if we are
- to continue to attract new members. There will be
- occasions when, despite everyone's very best attempts at
- self-control, tempers are lost and angry words are
- exchanged. The best thing that can be done in such cases
- is to minimize the effects of this until everyone has
- cooled back down. That means that you should not air your
- angry words in public and you should not forward private
- correspondence or other private communications to public
- mailing lists, mail aliases, instant messaging channels or
- social media sites. What people say one-to-one is often
- much less sugar-coated than what they would say in public,
- and such communications therefore have no place there -
- they only serve to inflame an already bad situation. If
- the person sending you a flame-o-gram at least had the
- grace to send it privately, then have the grace to keep it
- private yourself. If you feel you are being unfairly
- treated by another developer, and it is causing you
- anguish, bring the matter up with core rather than taking
- it public. Core will do its best to play peace makers and
- get things back to sanity. In cases where the dispute
- involves a change to the codebase and the participants do
- not appear to be reaching an amicable agreement, core may
- appoint a mutually-agreeable third party to resolve the
- dispute. All parties involved must then agree to be bound
- by the decision reached by this third party.
-
+
+
+
+
+ PR:
+ The problem report (if any) which is affected
+ (typically, by being closed) by this commit. Only
+ include one PR per line as the automated scripts which
+ parse this line cannot understand more than
+ one.
+
-
- Respect all code freezes and read the
- committers and
- developers mailing list on a timely
- basis so you know when a code freeze is in effect.
-
- Committing unapproved changes during a code freeze is
- a really big mistake and committers are expected to keep
- up-to-date on what is going on before jumping in after a
- long absence and committing 10 megabytes worth of
- accumulated stuff. People who abuse this on a regular
- basis will have their commit privileges suspended until
- they get back from the &os; Happy Reeducation Camp we
- run in Greenland.
-
+
+ Submitted by:
+
+ The name and e-mail address of the person
+ that submitted the fix; for developers, just the
+ username on the &os; cluster.
-
- When in doubt on any procedure, ask first!
+ If the submitter is the maintainer of the port
+ to which you are committing, include "(maintainer)"
+ after the email address.
- Many mistakes are made because someone is in a hurry
- and just assumes they know the right way of doing
- something. If you have not done it before, chances are
- good that you do not actually know the way we do things
- and really need to ask first or you are going to
- completely embarrass yourself in public. There is no
- shame in asking
- how in the heck do I do this? We already
- know you are an intelligent person; otherwise, you would
- not be a committer.
-
+ Avoid obfuscating the email address of the
+ submitter as this adds additional work when searching
+ logs.
+
+
-
- Test your changes before committing them.
+
+ Reviewed by:
+ The name and e-mail address of the person or
+ people that reviewed the change; for developers,
+ just the username on the &os; cluster. If a
+ patch was submitted to a mailing list for review,
+ and the review was favorable, then just include
+ the list name.
+
-
- This may sound obvious, but if it really were so
- obvious then we probably would not see so many cases of
- people clearly not doing this. If your changes are to the
- kernel, make sure you can still compile both GENERIC and
- LINT. If your changes are anywhere else, make sure you
- can still make world. If your changes are to a branch,
- make sure your testing occurs with a machine which is
- running that code. If you have a change which also may
- break another architecture, be sure and test on all
- supported architectures. Please refer to the
- &os;
- Internal Page for a list of available resources.
- As other architectures are added to the &os; supported
- platforms list, the appropriate shared testing resources
- will be made available.
-
+
+ Approved by:
+ The name and e-mail address of the person or
+ people that approved the change; for developers, just
+ the username on the &os; cluster. It is customary to
+ get prior approval for a commit if it is to an area of
+ the tree to which you do not usually commit. In
+ addition, during the run up to a new release all commits
+ must be approved by the release
+ engineering team.
-
- Do not commit to anything under the
- src/contrib,
- src/crypto, and
- src/sys/contrib trees without
- explicit approval from the respective
- maintainer(s).
-
- The trees mentioned above are for contributed software
- usually imported onto a vendor branch. Committing
- something there, even if it does not take the file off the
- vendor branch, may cause unnecessary headaches for those
- responsible for maintaining that particular piece of
- software. Thus, unless you have
- explicit approval from the maintainer
- (or you are the maintainer), do not
- commit there!
-
- Please note that this does not mean you should not try
- to improve the software in question; you are still more
- than welcome to do so. Ideally, you should submit your
- patches to the vendor. If your changes are
- &os;-specific, talk to the maintainer; they may be
- willing to apply them locally. But whatever you do, do
- not commit there by yourself!
+ While under mentorship, get mentor approval before
+ the commit. Enter the mentor's username in this field,
+ and note that they are a mentor:
- Contact the &a.core; if you wish to take up
- maintainership of an unmaintained part of the tree.
-
-
-
+ Approved by: username-of-mentor(mentor)
-
- Policy on Multiple Architectures
+ If a team approved these commits then include the
+ team name followed by the username of the approver in
+ parentheses. For example:
- &os; has added several new architecture ports during
- recent release cycles and is truly no longer an &i386; centric
- operating system. In an effort to make it easier to keep
- &os; portable across the platforms we support, core has
- developed the following mandate:
+ Approved by: re (username)
+
-
- Our 32-bit reference platform is &arch.i386;, and our
- 64-bit reference platform is &arch.amd64;. Major design
- work (including major API and ABI changes) must prove
- itself on at least one 32-bit and at least one 64-bit
- platform, preferably the primary reference platforms,
- before it may be committed to the source tree.
-
+
+ Obtained from:
+ The name of the project (if any) from which
+ the code was obtained. Do not use this line for the
+ name of an individual person.
+
- The &arch.i386; and &arch.amd64; platforms were chosen
- due to being more readily available to developers and as
- representatives of more diverse processor and system designs -
- big versus little endian, register file versus register stack,
- different DMA and cache implementations, hardware page tables
- versus software TLB management etc.
+
+ MFC after:
+ If you wish to receive an e-mail reminder to
+ MFC at a later date, specify the
+ number of days, weeks, or months after which an
+ MFC is planned.
+
- We will continue to re-evaluate this policy as cost and
- availability of the 64-bit platforms change.
+
+ Relnotes:
+ If the change is a candidate for inclusion in
+ the release notes for the next release from the branch,
+ set to yes.
+
- Developers should also be aware of our Tier Policy for
- the long term support of hardware architectures. The rules
- here are intended to provide guidance during the development
- process, and are distinct from the requirements for features
- and architectures listed in that section. The Tier rules for
- feature support on architectures at release-time are more
- strict than the rules for changes during the development
- process.
-
+
+ Security:
+ If the change is related to a security
+ vulnerability or security exposure, include one or more
+ references or a description of the issue. If possible,
+ include a VuXML URL or a CVE ID.
+
-
- Other Suggestions
+
+ Differential Revision:
+ The full URL of the Phabricator review. This line
+ must be the last line. For example:
+ http://reviews.freebsd.org/D1708.
+
+
+
+
- When committing documentation changes, use a spell checker
- before committing. For all XML docs, verify that the
- formatting directives are correct by running
- make lint and
- textproc/igor.
+
+ Commit Log for a Commit Based on a PR
- For manual pages, run sysutils/manck
- and textproc/igor
- over the manual page to verify all of the cross
- references and file references are correct and that the man
- page has all of the appropriate MLINKs
- installed.
+ You want to commit a change based on a PR submitted by
+ John Smith containing a patch. The end of the commit message
+ should look something like this.
- Do not mix style fixes with new functionality. A style
- fix is any change which does not modify the functionality of
- the code. Mixing the changes obfuscates the functionality
- change when asking for differences between revisions, which
- can hide any new bugs. Do not include whitespace changes with
- content changes in commits to doc/ .
- The extra clutter in the diffs
- makes the translators' job much more difficult. Instead, make
- any style or whitespace changes in separate commits that are
- clearly labeled as such in the commit message.
-
+ ...
-
- Deprecating Features
+ PR: 12345
+ Submitted by: John Smith <John.Smith@example.com>
+
- When it is necessary to remove functionality from software
- in the base system the following guidelines should be followed
- whenever possible:
+
+ Commit Log for a Commit Needing Review
-
-
- Mention is made in the manual page and possibly the
- release notes that the option, utility, or interface is
- deprecated. Use of the deprecated feature generates a
- warning.
-
+ You want to change the virtual memory system. You have
+ posted patches to the appropriate mailing list (in this
+ case, freebsd-arch) and the changes have
+ been approved.
-
- The option, utility, or interface is preserved until
- the next major (point zero) release.
-
+ ...
-
- The option, utility, or interface is removed and no
- longer documented. It is now obsolete. It is also
- generally a good idea to note its removal in the release
- notes.
-
-
-
+ Reviewed by: -arch
+
-
- Privacy and Confidentiality
+
+ Commit Log for a Commit Needing Approval
-
-
- Most &os; business is done in public.
+ You want to commit a port. You have collaborated with
+ the listed MAINTAINER, who has told you to go ahead and
+ commit.
- &os; is an open project. Which
- means that not only can anyone use the source code, but
- that most of the development process is open to public
- scrutiny.
-
+ ...
-
- Certain sensitive matters must remain private or
- held under embargo.
+ Approved by: abc (maintainer)
- There unfortunately cannot be complete transparency.
- As a &os; developer you will have a certain degree of
- privileged access to information. Consequently you are
- expected to respect certain requirements for
- confidentiality. Sometimes the need for confidentiality
- comes from external collaborators or has a specific time
- limit. Mostly though, it is a matter of not releasing
- private communications.
-
+ Where abc is the account name
+ of the person who approved.
+
-
- The Security Officer has sole control over the
- release of security advisories.
+
+ Commit Log for a Commit Bringing in Code from
+ OpenBSD
- Where there are security problems that affect many
- different operating systems, &os; frequently depends on
- early access in order to be able to prepare advisories for
- coordinated release. Unless &os; developers can be
- trusted to maintain security, such early access will not
- be made available. The Security Officer is responsible
- for controlling pre-release access to information about
- vulnerabilities, and for timing the release of all
- advisories. He may request help under condition of
- confidentiality from any developer with relevant knowledge
- in order to prepare security fixes.
-
+ You want to commit some code based on work done in the
+ OpenBSD project.
-
- Communications with Core are kept confidential for as
- long as necessary.
+ ...
- Communications to core will initially be treated as
- confidential. Eventually however, most of Core's business
- will be summarized into the monthly or quarterly core
- reports. Care will be taken to avoid publicising any
- sensitive details. Records of some particularly sensitive
- subjects may not be reported on at all and will be
- retained only in Core's private archives.
-
+ Obtained from: OpenBSD
+
-
- Non-disclosure Agreements may be required for access
- to certain commercially sensitive data.
+
+ Commit Log for a Change to &os.current; with a Planned
+ Commit to &os.stable; to Follow at a Later Date.
- Access to certain commercially sensitive data may
- only be available under a Non-Disclosure Agreement. The
- FreeBSD Foundation legal staff must be consulted before
- any binding agreements are entered into.
-
+ You want to commit some code which will be merged from
+ &os.current; into the &os.stable; branch after two
+ weeks.
-
- Private communications should not be made
- public without permission.
+ ...
- Beyond the specific requirements above there is a
- general expectation not to publish private communications
- between developers without the consent of all parties
- involved. Ask permission before forwarding a message onto
- a public mailing list, or posting it to a forum or website
- that can be accessed by other than the original
- correspondents.
-
+MFC after: 2 weeks
-
- Communications on project-only or restricted access
- channels should be treated as private.
+ Where 2 is the number of days,
+ weeks, or months after which an MFC is
+ planned. The weeks option may be
+ day, days,
+ week, weeks,
+ month, months.
+
- Similarly to personal communications, certain
- internal communications channels, including &os; Committer
- only mailing lists and restricted access IRC channels
- should be considered as private communications. You need
- permission in order to publish material from these
- sources.
-
+ In many cases you may need to combine some of these.
-
- Core may approve publication.
+ Consider the situation where a user has submitted a PR
+ containing code from the NetBSD project. You are looking at the
+ PR, but it is not an area of the tree you normally work in, so
+ you have decided to get the change reviewed by the
+ arch mailing list. Since the change is
+ complex, you opt to MFC after one month to
+ allow adequate testing.
- Where it is impractical to obtain permission due to
- the number of correspondents or where permission to
- publish is unreasonably withheld, Core may approve release
- of such private matters that merit more general
- publication.
-
-
-
-
+ The extra information to include in the commit would look
+ something like
-
- Support for Multiple Architectures
+
+ Example Combined Commit Log
- &os; is a highly portable operating system intended to
- function on many different types of hardware architectures.
- Maintaining clean separation of Machine Dependent (MD) and
- Machine Independent (MI) code, as well as minimizing MD code, is
- an important part of our strategy to remain agile with regards
- to current hardware trends. Each new hardware architecture
- supported by &os; adds substantially to the cost of code
- maintenance, toolchain support, and release engineering. It
- also dramatically increases the cost of effective testing of
- kernel changes. As such, there is strong motivation to
- differentiate between classes of support for various
- architectures while remaining strong in a few key architectures
- that are seen as the &os; target audience.
+ PR: 54321
+Submitted by: John Smith <John.Smith@example.com>
+Reviewed by: -arch
+Obtained from: NetBSD
+MFC after: 1 month
+Relnotes: yes
+
+
-
- Statement of General Intent
+
+ Preferred License for New Files
- The &os; Project targets "production quality commercial
- off-the-shelf (COTS) workstation, server, and high-end
- embedded systems". By retaining a focus on a narrow set of
- architectures of interest in these environments, the &os;
- Project is able to maintain high levels of quality, stability,
- and performance, as well as minimize the load on various
- support teams on the project, such as the ports team,
- documentation team, security officer, and release engineering
- teams. Diversity in hardware support broadens the options for
- &os; consumers by offering new features and usage
- opportunities (such as support for 64-bit CPUs, use in
- embedded environments, etc.), but these benefits must always
- be carefully considered in terms of the real-world maintenance
- cost associated with additional platform support.
+ Currently the &os; Project suggests and uses the following
+ text as the preferred license scheme:
- The &os; Project differentiates platform targets into
- four tiers. Each tier includes a specification of the
- requirements for an architecture to be in that tier,
- as well as specifying the obligations of developers with
- regards to the platform. In addition, a policy is defined
- regarding the circumstances required to change the tier
- of an architecture.
-
+ /*-
+ * Copyright (c) [year] [your name]
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * [id for your version control system, if any]
+ */
-
- Tier 1: Fully Supported Architectures
+ The &os; project strongly discourages the so-called
+ "advertising clause" in new code. Due to the large number of
+ contributors to the &os; project, complying with this clause for
+ many commercial vendors has become difficult. If you have code
+ in the tree with the advertising clause, please consider
+ removing it. In fact, please consider using the above license
+ for your code.
- Tier 1 platforms are fully supported by the security
- officer, release engineering, and toolchain maintenance staff.
- New features added to the operating system must be fully
- functional across all Tier 1 architectures for every release
- (features which are inherently architecture-specific, such as
- support for hardware device drivers, may be exempt from this
- requirement). In general, all Tier 1 platforms must have
- build and Tinderbox support either in the FreeBSD.org cluster,
- or be easily available for all developers. Embedded platforms
- may substitute an emulator available in the &os; cluster
- for actual hardware.
+ The &os; project discourages completely new licenses and
+ variations on the standard licenses. New licenses require the
+ approval of the &a.core; to reside in the
+ main repository. The more different licenses that are used in
+ the tree, the more problems that this causes to those wishing to
+ utilize this code, typically from unintended consequences from a
+ poorly worded license.
- Tier 1 architectures are expected to be Production Quality
- with respects to all aspects of the &os; operating system,
- including installation and development environments.
+ Project policy dictates that code under some non-BSD
+ licenses must be placed only in specific sections of the
+ repository, and in some cases, compilation must be conditional
+ or even disabled by default. For example, the GENERIC kernel
+ must be compiled under only licenses identical to or
+ substantially similar to the BSD license. GPL, APSL, CDDL, etc,
+ licensed software must not be compiled into GENERIC.
- Tier 1 architectures are expected to be completely
- integrated into the source tree and have all features
- necessary to produce an entire system relevant for that target
- architecture. Tier 1 architectures generally have at least 6
- active developers.
+ Developers are reminded that in open source, getting "open"
+ right is just as important as getting "source" right, as
+ improper handling of intellectual property has serious
+ consequences. Any questions or concerns should immediately be
+ brought to the attention of the core team.
+
- Tier 1 architectures are expected to be fully supported by
- the ports system. All the ports should build on a Tier 1
- platform, or have the appropriate filters to prevent the
- inappropriate ones from building there. The packaging system
- must support all Tier 1 architectures. To ensure an
- architecture's Tier 1 status, proponents of that architecture
- must show that all relevant packages can be built on that
- platform.
+
+ Keeping Track of Licenses Granted to the &os;
+ Project
- Tier 1 embedded architectures must be able to cross-build
- packages on at least one other Tier 1 architecture. The
- packages must be the most relevant for the platform, but may
- be a non-empty subset of those that build natively.
+ Various software or data exist in the repositories where
+ the &os; project has been granted a special licence to be able
+ to use them. A case in point are the Terminus fonts for use
+ with &man.vt.4;. Here the author Dimitar Zhekov has allowed us
+ to use the "Terminus BSD Console" font under a 2-clause BSD
+ license rather than the regular Open Font License he normally
+ uses.
- Tier 1 architectures must be fully documented. All basic
- operations need to be covered by the handbook or other
- documents. All relevant integration documentation must also
- be integrated into the tree, or readily available.
+ It is clearly sensible to keep a record of any such
+ license grants. To that end, the &a.core; has decided to keep
+ an archive of them. Whenever the &os; project is granted a
+ special license we require the &a.core; to be notified. Any
+ developers involved in arranging such a license grant, please
+ send details to the &a.core; including:
- Current Tier 1 platforms are &arch.i386; and
- &arch.amd64;.
-
+
+
+ Contact details for people or organizations granting the
+ special license.
+
-
- Tier 2: Developmental Architectures
+
+ What files, directories etc. in the repositories are
+ covered by the license grant including the revision numbers
+ where any specially licensed material was committed.
+
- Tier 2 platforms are not supported by the security officer
- and release engineering teams. Platform maintainers are
- responsible for toolchain support in the tree. The toolchain
- maintainers are expected to work with the platform maintainers
- to refine these changes. Major new toolchain components are
- allowed to break support for Tier 2 architectures if the
- &os;-local changes have not been incorporated upstream.
- The toolchain maintainers are expected to provide prompt
- review of any proposed changes and cannot block, through their
- inaction, changes going into the tree. New features added to
- &os; should be feasible to implement on these platforms,
- but an implementation is not required before the feature may
- be added to the &os; source tree. New features that may be
- difficult to implement on Tier 2 architectures should provide
- a means of disabling them on those architectures. The
- implementation of a Tier 2 architecture may be committed to
- the main &os; tree as long as it does not interfere with
- production work on Tier 1 platforms, or substantially with
- other Tier 2 platforms. Before a Tier 2 platform can be added
- to the &os; base source tree, the platform must be able to
- boot multi-user on actual hardware. Generally, there must be
- at least three active developers working on the
- platform.
+
+ The date the license comes into effect from. Unless
+ otherwise agreed, this will be the date the license was
+ issued by the authors of the software in question.
+
- Tier 2 architectures are usually systems targeted at Tier
- 1 support, but that are still under development.
- Architectures reaching end of life may also be moved from Tier
- 1 status to Tier 2 status as the availability of resources to
- continue to maintain the system in a Production Quality state
- diminishes. Well supported niche architectures may also be
- Tier 2.
+
+ The license text.
+
- Tier 2 architectures have basic support for them
- integrated into the ports infrastructure. They may have cross
- compilation support added, at the discretion of portmgr. Some
- ports must built natively into packages if the package system
- supports that architecture. If not integrated into the base
- system, some external patches for the architecture for ports
- must be available.
+
+ A note of any restrictions, limitations or exceptions
+ that apply specifically to &os;'s usage of the licensed
+ material.
+
- Tier 2 architectures can be integrated into the &os;
- handbook. The basics for how to get a system running must be
- documented, although not necessarily for every single board or
- system a Tier 2 architecture supports. The supported hardware
- list must exist and should be relatively recent. It should be
- integrated into the &os; documentation.
+
+ Any other relevant information.
+
+
- Current Tier 2 platforms are &arch.arm;, &arch.arm64;,
- &arch.ia64; (through &os; 10),
- &arch.pc98;, &arch.powerpc;, and &arch.sparc64;.
-
+ Once the &a.core; is satisfied that all the necessary
+ details have been gathered and are correct, the secretary will
+ send a PGP-signed acknowledgement of receipt including the
+ license details. This receipt will be persistently archived and
+ serve as our permanent record of the license grant.
-
- Tier 3: Experimental Architectures
+ The license archive should contain only details of license
+ grants; this is not the place for any discussions around
+ licensing or other subjects. Access to data within the license
+ archive will be available on request to the &a.core;.
+
- Tier 3 platforms are not supported by the security officer
- and release engineering teams. At the discretion of the
- toolchain maintainers, they may be supported in the toolchain.
- Tier 3 platforms are architectures in the early stages of
- development, for non-mainstream hardware platforms, or which
- are considered legacy systems unlikely to see broad future
- use. Initial support for Tier 3 platforms should be worked on
- in external SCM repositories.
- The transition to &os;'s subversion should take place after
- the platform boots multi-user on hardware; sharing via
- subversion is needed for wider exposure; and multiple
- developers are actively working on the platform.
- Platforms that transition to Tier 3 status may be
- removed from the tree if they are no longer actively supported
- by the &os; developer community at the discretion of the
- release engineer.
+
+ Bugzilla
- Tier 3 platforms may have ports support, either integrated
- or external, but do not require it.
+ The &os; Project utilizes
+ Bugzilla for tracking bugs and change
+ requests. Be sure that if you commit a fix or suggestion found
+ in the PR database to close it. It is also considered nice if
+ you take time to close any PRs associated with your commits, if
+ appropriate.
- Tier 3 platforms must have the basics documented for how
- to build a kernel and how to boot it on at least one target
- hardware or emulation environment. This documentation need
- not be integrated into the &os; tree.
+ Committers with
+ non-&os;.org
+ Bugzilla accounts can have the old account merged with the
+ &os;.org account by
+ entering a new bug. Choose
+ Supporting Services as the Product, and
+ Bug Tracker as the Component.
- Current Tier 3 platforms are &arch.mips;, and
- &arch.riscv;.
-
+ You can find out more about
+ Bugzilla at:
-
- Tier 4: Unsupported Architectures
+
+
+ &os;
+ Problem Report Handling Guidelines
+
- Tier 4 systems are not supported in any form by the
- project.
+
+ http://www.freebsd.org/support.html
+
+
+
- All systems not otherwise classified into a support tier
- are Tier 4 systems. The &arch.ia64; platform is transitioning
- to Tier 4 status in &os; 11.
-
+
+ &coverity; Availability for &os; Committers
-
- Policy on Changing the Tier of an Architecture
+ All &os; developers can obtain access to
+ Coverity analysis results of all &os;
+ Project software. All who are interested in obtaining access to
+ the analysis results of the automated
+ Coverity runs, can sign up at Coverity
+ Scan.
- Systems may only be moved from one tier to another by
- approval of the &os; Core Team, which shall make that
- decision in collaboration with the Security Officer, Release
- Engineering, and toolchain maintenance teams.
-
+ The &os; wiki includes a mini-guide for developers who are
+ interested in working with the &coverity; analysis reports: http://wiki.freebsd.org/CoverityPrevent.
+ Please note that this mini-guide is only readable by &os;
+ developers, so if you cannot access this page, you will have to
+ ask someone to add you to the appropriate Wiki access
+ list.
+
+ Finally, all &os; developers who are going to use
+ &coverity; are always encouraged to ask for more details and
+ usage information, by posting any questions to the mailing list
+ of the &os; developers.
@@ -4557,7 +4858,7 @@
merge.
The script assumes that you can connect to
- repo.FreeBSD.org with
+ repo.freebsd.org with
SSH directly, so if your
local login name is different than your &os; cluster
account, you need a few lines in your
@@ -4811,12 +5112,12 @@
The packages are built multiple times each week. If
a port fails, the maintainer will receive an email from
- pkg-fallout@FreeBSD.org.
+ pkg-fallout@freebsd.org.Reports for all the package builds (official,
experimental, and non-regression) are aggregated at
pkg-status.FreeBSD.org.
+ xlink:href="http://pkg-status.freebsd.org/">pkg-status.freebsd.org.
@@ -4894,7 +5195,7 @@
Go to the Bugzilla
+ xlink:href="http://bugs.freebsd.org/submit">Bugzilla
new PR page.
@@ -4941,52 +5242,6 @@
-
- Issues Specific to Developers Who Are Not
- Committers
-
- A few people who have access to the &os; machines do not
- have commit bits. Almost all of this document will apply to
- these developers as well (except things specific to commits and
- the mailing list memberships that go with them). In particular,
- we recommend that you read:
-
-
-
- Administrative
- Details
-
-
-
- Conventions
-
-
- You should get your mentor to add you to the
- Additional Contributors
- (doc/en_US.ISO8859-1/articles/contributors/contrib.additional.xml),
- if you are not already listed there.
-
-
-
-
- Developer
- Relations
-
-
-
- SSH Quick-Start
- Guide
-
-
-
- The &os; Committers' Big List
- of Rules
-
-
-
-
-
Information About &ga;
@@ -5004,7 +5259,7 @@
Do Not Track header before
fetching the tracking code from Google. For more information,
please see the
- &os;
+ &os;
Privacy Policy.
&ga; access is not arbitrarily
@@ -5102,19 +5357,19 @@
How do I access people.FreeBSD.org to
+ class="fqdomainname">people.freebsd.org to
put up personal or project information?people.FreeBSD.org is
+ class="fqdomainname">people.freebsd.org is
the same as freefall.FreeBSD.org.
+ class="fqdomainname">freefall.freebsd.org.
Just create a public_html directory.
Anything you place in that directory will automatically be
visible under http://people.FreeBSD.org/.
+ xlink:href="http://people.freebsd.org/">http://people.freebsd.org/.
@@ -5127,72 +5382,10 @@
The mailing lists are archived under
/local/mail on freefall.FreeBSD.org.
-
-
-
-
-
- I would like to mentor a new committer. What process
- do I need to follow?
-
-
-
- See the New
- Account Creation Procedure document on the
- internal pages.
+ >freefall.freebsd.org.
-
- Benefits and Perks for &os; Comitters
-
-
- Recognition
-
- Recognition as a competent software engineer is the
- longest lasting value. In addition, getting a chance to work
- with some of the best people that every engineer would dream
- of meeting is a great perk!
-
-
-
- FreeBSD Mall
-
- &os; committers can get a free 4-CD or DVD set at
- conferences from
- &os; Mall,
- Inc..
-
-
-
- IRC
-
- In addition, developers may request a cloaked hostmask
- for their account on the Freenode IRC network in the form
- of
- freebsd/developer/freefall
- name or
- freebsd/developer/NickServ
- name. To request a cloak, send an email to
- &a.irc.email; with your requested hostmask and NickServ
- account name.
-
-
-
- Gandi.net
-
- Gandi provides website hosting, cloud computing, domain
- registration, and X.509 certificate services.
-
- Gandi offers an E-rate discount to all &os; developers.
- Send mail to non-profit@gandi.net using your
- @freebsd.org mail address, and indicate
- your Gandi handle.
-
-