summaryrefslogtreecommitdiff
path: root/source_repositories.mdwn
blob: 19fec1e859e96a8f0b4b04555af07062bf5f58f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
[[!meta copyright="Copyright © 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014
Free Software Foundation, Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]

This page is meant to give some guidelines.  Please use good sense or ask on
[[mailing_lists/bug-hurd]] if there are any questions.


[[!toc levels=3]]


# Git repositories on Savannah

<http://git.savannah.gnu.org/cgit/hurd>

  * hurd.git -- Hurd meta package; no real content yet
  * [[hurd/glibc.git|glibc]] -- [[/glibc]] maintenance
  * hurd/gnumach.git -- [[GNU Mach|microkernel/mach/gnumach]]
    ([[microkernel/mach/gnumach/building]])
  * hurd/hurd.git -- [[/Hurd]] ([[hurd/building]])
  * [[hurd/incubator.git|incubator]] -- the great next stuff
  * hurd/libpthread.git	-- [[POSIX threading library|libpthread]]
  * hurd/mig.git -- [[microkernel/mach/MIG]]
    ([[microkernel/mach/mig/gnu_mig/building]])
  * hurd/procfs.git -- [[hurd/translator/procfs]]
  * hurd/unionfs.git -- [[hurd/translator/unionfs]]
  * hurd/viengoos.git -- [[microkernel/Viengoos]]
    ([[microkernel/viengoos/building]])
  * hurd/web.git -- [[contributing/Web_pages]]

These are mirrored on
<http://darnassus.sceen.net/gitweb/?a=project_list;pf=savannah_mirror>, which
may provide faster anonymous accesses.


## Branches

Members of the [[Hurd Savannah group|rules/savannah group]] are allowed to create
branches without formal permission:

  * named `SAVANNAH_LOGIN/BASE_BRANCH[-TOPIC]` or
    `SAVANNAH_LOGIN/TOPIC/BASE_BRANCH` for private general-purpose or
    topic branches, respectively, or
  * named `BASE_BRANCH-TOPIC` or `TOPIC/BASE_BRANCH` for public topic branches
    basing on
    `BASE_BRANCH`.

`TOPIC` shall be a suitable tag describing the branch's main concern.  These
tags can be applied recursively (`TOPIC/SUBTOPIC/BASE_BRANCH`, like
`pfinet_rewrite/use_lwIP/master`, for example).

*private* vs. *public* does, of course, in this scenario not mean visibility
(all branches are externally visible),
but instead authority: *private* branches are those that the user
`SAVANNAH_LOGIN` has authority over, whereas *public* branches are open for
every committer to install changes on.  The private branches are those that you
would typically host on your own machine and publish through your own web
server, but we offer that you can instead do this from the centralized Savannah
repository, as a number of people don't have an always-accessible web server
running on their own machines.


### Subprojects

Some repositories hold a bunch of independent subprojects, first and foremost
the [[incubator]] repository.

Even though we've been doing differently in the past, branches in there shall
be named like this:

  * `SUBPROJECT/master` for the `master` branch;
  * `SUBPROJECT/SAVANNAH_LOGIN/BASE_BRANCH[-TOPIC]` or
    `SUBPROJECT/SAVANNAH_LOGIN/TOPIC/BASE_BRANCH` for private general-purpose
    or topic branches, respectively, or
  * `SUBPROJECT/BASE_BRANCH-TOPIC` or `SUBPROJECT/TOPIC/BASE_BRANCH` for public
    topic branches basing on `SUBPROJECT/BASE_BRANCH`.

That is, we introduce a top-level `SUBPROJECT` hierarchy, where distinct
per-subproject Git repositories could have been used instead.


### Examples

  * GNU Mach

      * `master` -- the mainline branch
      * `master-oskit` -- port to OSKit; branched off of `master` at some point
      * `master-gdb_stubs` -- add support for GDB stubs; branched off of
        `master` at some point

  * libpthread

      * `master` -- the mainline branch
      * `master-viengoos` -- port to Viengoos; branched off of `master` at some
        point
      * `master-viengoos-on-bare-metal` -- port to Viengoos running on bare
        metal; branched off of `master-viengoos` at some point

  * incubator

      * `master` -- not to be used
      * `tarfs/master` -- `master` branch of the `tarfs` subproject

  * unionfs

      * `master` -- the mainline branch
      * `master-unionmount` -- develop `unionmount` based on `unionfs`' master
        branch

To give a concrete example, the latter one was created like this:

    $ git clone --no-checkout ssh://git.savannah.gnu.org/srv/git/hurd/unionfs.git
    $ cd unionfs/
    $ git checkout -b master-unionmount origin/master
    $ ...
    $ git push master-unionmount

### Merging

Merging between Git branches is trivial, at least as long as no conflicts
arise.

Due to this, you are encouraged to freely make use of separate branches for
different working topics, as this really faciliates concentrating on one
specific working topic.

You are encouraged to regularely merge from the respective mainline branches
(`BASE_BRANCH`; should be `master` in most cases) into your working branches,
and ensure that your modifications are still fine in the context of new
mainline changes.

Merging from working branches into the mainline branches will usually be done
by one of the project administrators, unless negotiated otherwise.  For this to
happen, the copyright of your changes has to be assigned to the Free Software
Foundation; read about the [[contributing/copyright_assignment]] process.

It is explicitly encouraged to *merge* changes from working branches into the
mainline branches (as opposed to *rebase* them on top), as the former mode
easily allows to determine the context under which a patch has been developed.

## Tags

Equivalent rules apply.

## Behavior

Try to not introduce spurious, unneeded changes, e.g., whitespace changes.

Adhere to the coding conventions that are already used.  These are usually the
[GNU Coding Standards](http://www.gnu.org/prep/standards/html_node/) for stuff
written by ourselves, including new files, of course.

GNU Mach code is largely based on external code.  Don't GNU-ify it, as this
would make merging external patches unnecessarily difficult.

### Commit messages

We no longer maintain parallel `ChangeLog` and commit messages.  When needed,
the `ChangeLog` files can be created automatically from the commit messages.

Commit messages have this mandatory format:

    One-line summary.
    Blank line.
    ChangeLog-like list of changes, but without leading tabs.

The header line of each former `ChangeLog` snippet (DATE NAME EMAIL) is no
longer to be included in the commit message, and instead the author and
committer of a change, together with the dates, will be maintained natively by
Git.

Example:

    commit 3054666a46e0142cacef895c13edb4391435c722
    Author:     Some One <someone@example.com>
    AuthorDate: Thu Jun 11 15:59:55 2005 +0000
    Commit:     Some One <someone@example.com>
    CommitDate: Thu Jun 11 15:59:55 2005 +0000
    
        Frobnicate the foo.
        
        * frob.c (foo): Frob it.
        * oldfoo.c [OLD] (oldfoo): Likewise.
        [OLD_OLD_FOO] (oofoo): Permute every second word with itself, and
        beginning with the tenth line, every third one also.  Pure
        nonsense.

Read about how to write [GNU-style `ChangeLog`
messages](http://www.gnu.org/prep/standards/html_node/Change-Logs.html).

Don't waste time writing exhaustive `ChangeLog`-like commit messages for, e.g.,
debugging stuff that will be removed again before merging your development
branch into the mainline.  Sometimes the one-line summary might already
suffice.  But please do write something.

### Behavior on *private* branches

Even though you are said to be the owner of branches tagged with your
`SAVANNAH_LOGIN`, it is generally nevertheless good to not do history-rewriting
stuff and the like (`git rebase` and friends), as others may in turn be basing
their work on your private branches.

We could establish a branch-tagging policy for branches that others should
expect their history possibly to be rewritten.  This may be useful for branches
that are only meant for aggregating the changes of (several) development
branches, like an imaginary
`rewrite_pfinet/for_master_and_proposed_for_general_testing` branch.


# Git repositories on darnassus

[[darnassus|public hurd boxen]] is
[[configured|public_hurd_boxen/installation/darnassus]] in a way so that users
can publish Git repositories by creating in `/var/lib/git/` symlinks to
repositories residing in their home directories.  (Due to disk space
constraints, do not put repositories directly into `/var/lib/git/`.)  All
repositories in `/var/lib/git/` are automatically exported.  A gitweb interface
(that also lists URLs for accessing the repositories using the `git` and `http`
protocols) is available at <http://darnassus.sceen.net/gitweb/>.



# Git repositories on flubber

[[flubber|public hurd boxen]] is
[[configured|public_hurd_boxen/installation/flubber]] in a way so that users
can publish Git repositories from their home directories.  The only thing to do
is to put an empty `.git/git-daemon-export-ok` (cf. [*git daemon*'s manual
page](http://www.kernel.org/pub/software/scm/git/docs/git-daemon.html)) into
the repository, or just `git-daemon-export-ok` for
[*bare*](http://www.kernel.org/pub/software/scm/git/docs/git-init.html)
repositories.

For example, [[Thomas Schwinge|tschwinge]] has a checkout of
[[libpthread]] in `~tschwinge/tmp/hurd/libpthread/`, the
`~tschwinge/tmp/hurd/libpthread/.git/git-daemon-export-ok` file exists.  If you
really need to, you can clone it like this:

    $ git clone git://flubber.bddebian.com/~tschwinge/tmp/hurd/libpthread


# Git repositories on grubber

## List of Interesting Repositories

  * [[GCC]]


# Debian Git repositories

IRC, #hurd, 2010-07-31

    <tschwinge> git-buildpackage is to be used to build these new Debian repositories, I guess?
    <youpi> well, the Vcs-Git control header is about everything people need to know, I believe :)
    <youpi> git-buildpackage is just mostly an easy way to build the .orig.tar.Gz from the tag
    <youpi> http://honk.sigxcpu.org/projects/git-buildpackage/manual-html/gbp.html