8
8
</ head >
9
9
< body data-spy ="scroll " data-target =".cpp-netlib-docs-sidebar ">
10
10
< div id ="wrap ">
11
+ < div class ="navbar navbar-fixed-top navbar-inverse cpp-netlib-navbar ">
12
+ < div class ="container ">
13
+ < ul class ="nav ">
14
+ < li > < a class ="brand " href ="index.html "> cpp-netlib</ a > </ li >
15
+ < li class ="active "> < a href ="process.html "> Development Process</ a > </ li >
16
+ < li > < a href ="style-guide.html "> Style Guide</ a > </ li >
17
+ < li > < a href ="proposals.html "> Proposals</ a > </ li >
18
+ </ ul >
19
+ </ div >
20
+ </ div >
11
21
< header class ="jumbotron subhead ">
12
22
< div class ="container ">
13
23
< h1 > Development Process</ h1 >
@@ -20,6 +30,7 @@ <h1>Development Process</h1>
20
30
< ul class ="nav nav-list " data-spy ="affix " data-offset-top ="150 ">
21
31
< li > < a href ="#overview "> Overview</ a > </ li >
22
32
< li > < a href ="#introduction "> Introduction</ a > </ li >
33
+ < li > < a href ="#pull-requests "> Pull Requests</ a > </ li >
23
34
</ ul >
24
35
</ div >
25
36
< div class ="span9 ">
@@ -46,8 +57,128 @@ <h1>Introduction</h1>
46
57
goal.</ p >
47
58
< p > If you haven't yet, please subscribe to the developers mailing
48
59
list and introduce yourself before proceeding.</ p >
49
- < p > < a href ="https://groups.google.com/forum/?fromgroups#!forum/cpp-netlib " class ="btn btn-success " target ="_blank "> Subcribe</ a > </ p >
60
+ < p > < a href ="https://groups.google.com/group/cpp-netlib " class ="btn btn-success " target ="_blank "> Subcribe</ a > </ p >
61
+ </ section >
62
+ < section id ="pull-requests ">
63
+ < div class ="page-header ">
64
+ < h1 > Pull Requests</ h1 >
50
65
</ div >
66
+ < p > The maintainers of the project review and merge < a href =""
67
+ target ="_blank "> Pull Requests</ a > (from here on out referred to
68
+ as PR's) from contributors using the GitHub Pull Request feature.
69
+ This allows the project to move forward using the Git distributed
70
+ development workflow. If you need an introduction to git, please
71
+ refer to the following links for git-specific information.</ p >
72
+ < ul >
73
+ < li > < a href =""> ProGit</ a > — a website dedicated to basic
74
+ and advanced git usage.</ li >
75
+ < li > < a href =""> GitHub Git Setup</ a > — the GitHub help pages
76
+ on setting up git to work with GitHub.</ li >
77
+ </ ul >
78
+ < p > What follows in this section assumes that you're already
79
+ familiar with the basic git workflow.</ p >
80
+ < h2 > Forking the Repo</ h2 >
81
+ < p > Forking requires that you already have a GitHub account.
82
+ Before continuing, please make sure that you've signed up for a
83
+ GitHub account (it's free to develop for open source projects)
84
+ and have familiarized yourself with the different development
85
+ workflows. It's important that you understand the GitHub workflow
86
+ before continuing.</ p >
87
+ < p > The official repository is located in GitHub at < a
88
+ href ="https://github.com/cpp-netlib/cpp-netlib "
89
+ target ="_blank "> https://github.com/cpp-netlib/cpp-netlib</ a > .
90
+ Before you can submit PR's you should first create your own fork
91
+ of the repository on GitHub. You can fork the repository by
92
+ clicking on < a
93
+ href ="https://github.com/cpp-netlib/cpp-netlib/fork_select "
94
+ class ="btn btn-success " target ="_blank "> Fork</ a > at the upper
95
+ right portion of the page.</ p >
96
+ < h2 > Preparing a PR</ h2 >
97
+ < p > Once you have a fork of the repo, determine to which branch
98
+ you'd like to send a PR to. In the next section we describe the
99
+ various branches we'll be dealing with in the course of
100
+ development of a release.</ p >
101
+ < p > When you've determined the branch to which you'd like to send
102
+ a PR to you can follow these steps to prepare your change for
103
+ inclusion in the library.</ p >
104
+ < ol >
105
+ < li > < strong > Create an integration branch.</ strong > This
106
+ integration branch should be rooted off the branch you intend to
107
+ send a PR to. For example, if you're sending a PR to
108
+ < code > cpp-netlib/master</ code > and your fork is
109
+ < code > user/master</ code > , you should create a
110
+ < code > user/master-integration</ code > branch.</ li >
111
+ < li > < strong > Create a topic branch.</ strong > From the integration
112
+ branch, you can then create as many topic branches as you want.
113
+ It's recommended that you isolate all experimentation to branches
114
+ — once you're resonably sure that your work is good to go,
115
+ merge your topic branch into the integration branch in your local
116
+ repo, then push the changes to your GitHub repo.</ li >
117
+ < li > < strong > Make sure your integration branch is up to
118
+ date.</ strong > To do this you should first pull changes to your
119
+ local master (assuming that's where you'd like to send a pull
120
+ request to), rebase your integration branch to the tip of master,
121
+ then make sure all merge conflicts are dealt with. Proceed ony
122
+ when your integration branch is up-to-date with the official
123
+ branch you're going to send your PR to.</ li >
124
+ < li > < strong > Send the PR.</ strong > Once you're reasonably happy
125
+ with the state of your integration branch, send off a PR to the
126
+ official repo and set the destination branch as the branch you
127
+ intend to send the change to.</ li >
128
+ < li > < strong > Address Comments</ strong > The maintainers will be
129
+ reviewing your changes, and sometimes they may have comments they
130
+ will ask you to address in your PR. You can do this by going back
131
+ to the second step of this process, but you don't need to send
132
+ another PR -- all you have to do is push your changes to your
133
+ GitHub hosted integration branch and your PR will be updated
134
+ automatically. That said, don't forget to update the discussion
135
+ on the PR that you're ready for the PR to be reviewed again.</ li >
136
+ < li > < strong > Your PR is merged.</ strong > If you've done everything
137
+ correctly up to this point, your PR should be cleanly merge-able
138
+ into the branch you sent the PR to. A maintiner will merge you
139
+ change into the project and you're now officially a contributor
140
+ to the project!</ li >
141
+ </ ol >
142
+ < p > In case you have multiple PR's in flight, you may want to have
143
+ multiple integration branches — that is, one integration
144
+ branch per PR should be good to keep.</ p >
145
+ < h2 > Working Branches</ h2 >
146
+ < p > The project always has the latest bleeding edge versions of
147
+ the library under development in the < code > master</ code > branch.
148
+ This version is explicitly unstable and subject to (potentially
149
+ massive) changes over time.</ p >
150
+ < p > Once the state of < code > master</ code > has stabilized and a
151
+ release process is initiated by the project maintainers (it will
152
+ be announced on the mailing list) a < code > version-devel</ code >
153
+ branch is started from master and a release candidate is
154
+ prepared. For example, if a 1.0 release is initiated, a branch
155
+ < code > 1.0-devel</ code > is started off master.</ p >
156
+ < p > A release candidate is tagged off of the
157
+ < code > version-devel</ code > branch on a regular basis, and is
158
+ publicized as widely as possible. The tag name should be of the
159
+ form < code > version-rcN</ code > . Again as an example, the first
160
+ release candidate for a 1.0 release will be tagged as
161
+ < code > 1.0.0-rc0</ code > .</ p >
162
+ < p > All PR's for the upcoming version should go directly to the
163
+ < code > version-devel</ code > branch.</ p >
164
+ < p > During the stabilization of the < code > version-devel</ code >
165
+ branch, master remains open for PR's for new functionality, new
166
+ accepted libraries, and API breaking changes.</ p >
167
+ < p > Once a release candidate is deemed "good to go" by the
168
+ maintainers we tag the library (and submodules appropriately)
169
+ with a tag of the form < code > version-final</ code > . As with
170
+ earlier examples, the tag for the 1.0 release would be
171
+ < code > 1.0.0-final</ code > .</ p >
172
+ < h3 > Patch Releases</ h3 >
173
+ < p > Critical bug fixes go into the < code > version-devel</ code >
174
+ branch after a final release has been packaged. In case there's a
175
+ need for update releases, the release candidate process is
176
+ followed until another final version of the patch release is
177
+ tagged.</ p >
178
+ < p > In our on-going example, this will be of the form
179
+ < code > 1.0.1-rc0</ code > , < code > 1.0.1-rc1</ code > , and so on until
180
+ it's stabilized — at which time a < code > 1.0.1-final</ code >
181
+ is tagged and packaged.</ p >
51
182
</ section >
52
183
</ div >
53
184
</ div >
0 commit comments