summaryrefslogtreecommitdiffstats
path: root/SYNCING
blob: 1e2f6a8255e8f22f6d7c8edebd9fb501beb214f0 (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
Preamble
========

Tmux on SourceForge has two git repositories [1] "tmux" and "tmux-openbsd".
Here's a description of them:

* "tmux" is the portable version, the one which contains code for other
  operating systems, and autotools, etc., which isn't found or needed in the
  OpenBSD base system.

* "tmux-openbsd" is the version of tmux in OpenBSD base system which provides
  the basis of the portable tmux version.

Note:  The "tmux-openbsd" repository is actually handled by "git cvsimport"
running at 15 minute intervals, so a commit made to OpenBSD's tmux CVS
repository will take that long to appear in this git repository.

It is assumed that the person doing the sync has read/write access to the
tmux repository on SourceForge already.

If you've never used git before, git tracks meta-data about the committer
and the author, as part of a commit, hence:

% git config [--global] user.name "Your name"
% git config [--global] user.email "you@yourdomain.com"

Note that, if you already have this in the global ~/.gitconfig option, then
this will be used.  Setting this per-repository would involve not using the
"--global" flag above.   If you wish to use the same credentials always,
pass the "--global" option, as shown.

This is a one-off operation once the repository has been cloned, assuming
this information has ever been set before.

Cloning repositories
====================

This involves having both tmux and tmux-openbsd cloned, as in:

% cd /some/where/useful
% git clone ssh://${USER}@tmux.git.sf.net/gitroot/tmux/tmux
% git clone ssh://${USER}@tmux.git.sf.net/gitroot/tmux/tmux-openbsd

Note that you do not need additoinal checkouts to manage the sync -- an
existing clone of either repositories will suffice.  So if you already have
these checkouts existing, skip that.

Adding in git-remotes
=====================

Because the portable "tmux" git repository and the "tmux-openbsd" repository do
not inherently share any history between each other, the history has been
faked between them.  This "faking of history" is something which has to be
told to git for the purposes of comparing the "tmux" and "tmux-openbsd"
repositories for syncing.  To do this, we must reference the clone of the
"tmux-openbsd" repository from the "tmux" repository, as shown by the
following command:

% cd /path/to/tmux
% git remote add obsd-tmux file:///path/to/tmux-openbsd

So that now, the remote "obsd-tmux" can be used to reference branches and
commits from the "tmux-openbsd" repository, but from the context of the
portable "tmux" repository, which makes sense because it's the "tmux"
repository which will have the updates applied to them.

Fetching updates
================

To ensure the latest commits from "tmux-openbsd" can be found from within
"tmux", we have to ensure the "master" branch from "tmux-openbsd" is
up-to-date first, and then reference that update in "tmux", as in:

% cd /path/to/tmux-openbsd
% git checkout master
% git pull

Then back in "tmux":

% cd /path/to/tmux
% git fetch obsd-tmux

Creating the necessary branches
===============================

Now that "tmux" can see commits and branches from "tmux-openbsd" by way of
the remote name "obsd-tmux", we can now create the master branch from
"tmux-openbsd" in the "tmux" repository:

% git checkout -b obsd-master obsd-tmux/master

Adding in the fake history points
================================= 

To tie both the "master" branch from "tmux" and the "obsd-master" branch
from "tmux-openbsd" together, the fake history points added to the "tmux"
repository need to be added.  To do this, we must add an additional refspec
line, as in:

% cd /path/to/tmux
% git config --add remote.origin.fetch '+refs/replace/*:refs/replace/*'
% git fetch origin --all

Performing the Sync
===================

Make sure the "master" branch is checked out:

% git checkout master

The following will show commits on OpenBSD not yet synched with tmux
portable:

% git log master..obsd-master

From there, the merge should be a fast-forward, using the OURS strategy to
tell git that conflicts coming from OpenBSD respect the existing code in
tmux where those conflicts wouldn't arise.  Hence:

% git merge -s ours obsd-master

Then ensure things look correct by BULDING the result of that sync:

% make clean && ./autogen.sh && ./configure && make

Compare the git merge result with what's on origin/master -- that is, check
which commits you're about to push:

% git log origin/master..master

And if happy:

% git push origin master

Release tmux for next version
=============================

1. Comment the "found_debug=yes" line in configure.ac, since releases
   don't have debugging enabled, otherwise make(1) aborts when
   preparing the distribution.

2. Update and commit NOTES and CHANGES.  The former should be checked for
   anything outdated and updated with a list of things that might break
   upgrades and the latter should mention all the major changes since
   the last version.

3. Tag with:

   % git tag -a 1.X

   Where "1.X" is the next version.

   Push the tag out with:

   % git push --tags

4. Build the tarball with make dist.  Now that it's using autoconf there
   shouldn't be any weird files (such as the original and rejection files
   from patch(1)) but it doesn't hurt taking a quick look at it.

5. Split the release changes into a new file.  This should be named
   tmux-$VERSION-readme to make sourceforge show it automagically in specific
   parts of the project page.

6. Upload the tarball and the above file. Make the tarball the default
   download by selecting all operating systems under the file details.

7. Run make update-index.html upload-index.html to replace %%VERSION%%.

8. Bump version in configure.ac and uncomment "found_debug=yes" to create
   a debug build by default.

9. Update freshmeat.

[1] http://tmux.git.sourceforge.net/git/gitweb-index.cgi