Merge ~nacc/git-ubuntu:lp1706798-update-manpages into git-ubuntu:master

Proposed by Nish Aravamudan
Status: Merged
Merge reported by: Nish Aravamudan
Merged at revision: 0a7aada5730772c3049625b35771dff103580afd
Proposed branch: ~nacc/git-ubuntu:lp1706798-update-manpages
Merge into: git-ubuntu:master
Diff against target: 1778 lines (+1417/-108)
17 files modified
doc/gitubuntu-completion.sh (+14/-5)
gitubuntu/__main__.py (+21/-9)
gitubuntu/importppa.py (+1/-14)
man/man1/git-ubuntu-build-source.1 (+101/-0)
man/man1/git-ubuntu-build.1 (+98/-0)
man/man1/git-ubuntu-clone.1 (+65/-0)
man/man1/git-ubuntu-import-local.1 (+63/-0)
man/man1/git-ubuntu-import-ppa.1 (+65/-0)
man/man1/git-ubuntu-import.1 (+224/-0)
man/man1/git-ubuntu-lint.1 (+66/-0)
man/man1/git-ubuntu-merge.1 (+133/-0)
man/man1/git-ubuntu-queue.1 (+93/-0)
man/man1/git-ubuntu-remote.1 (+83/-0)
man/man1/git-ubuntu-review.1 (+56/-0)
man/man1/git-ubuntu-submit.1 (+94/-0)
man/man1/git-ubuntu-tag.1 (+85/-0)
man/man1/git-ubuntu.1 (+155/-80)
Reviewer Review Type Date Requested Status
Nish Aravamudan Approve
Andreas Hasenack Approve
Server Team CI bot continuous-integration Approve
Review via email: mp+331107@code.launchpad.net

Description of the change

Not quite ready yet (still more commands to do), but it can be reviwed in place.

To post a comment you must log in.
Revision history for this message
Nish Aravamudan (nacc) wrote :

Before merging, I'll update the commit message to refer to LP: #1708229.

Revision history for this message
Nish Aravamudan (nacc) wrote :

The manpages can be reviewed, still working on the shell completion script.

Revision history for this message
Server Team CI bot (server-team-bot) wrote :

PASSED: Continuous integration, rev:0a7aada5730772c3049625b35771dff103580afd
https://jenkins.ubuntu.com/server/job/git-ubuntu-ci/135/
Executed test runs:
    SUCCESS: Checkout
    SUCCESS: Style Check
    SUCCESS: Unit Tests
    SUCCESS: Integration Tests
    IN_PROGRESS: Declarative: Post Actions

Click here to trigger a rebuild:
https://jenkins.ubuntu.com/server/job/git-ubuntu-ci/135/rebuild

review: Approve (continuous-integration)
Revision history for this message
Andreas Hasenack (ahasenack) wrote :

Thanks for these manpages, they look great. Most of my comments are just typos, and a few other remarks.

Technically this review is a needs-fixing, but since the changes are super easy, I'll give a +1 ahead of time :)

review: Approve
Revision history for this message
Nish Aravamudan (nacc) wrote :
Download full text (4.7 KiB)

On 03.10.2017 [21:09:50 -0000], Andreas Hasenack wrote:
> Review: Approve
>
> Thanks for these manpages, they look great. Most of my comments are
> just typos, and a few other remarks.

Thank you for the thorough review! I know it's a bit eye-bleeding to
read manpage source!

> Technically this review is a needs-fixing, but since the changes are
> super easy, I'll give a +1 ahead of time :)

Yep, I'll land what I've adjusted based upon your comments in master &
snap/edge and we can iterate from there.

I've elided below anything I updated in the branch.

> > diff --git a/man/man1/git-ubuntu-merge.1 b/man/man1/git-ubuntu-merge.1
> > new file mode 100644
> > index 0000000..01bcc6c
> > --- /dev/null
> > +++ b/man/man1/git-ubuntu-merge.1
> > @@ -0,0 +1,133 @@
> > +.TH "GIT-UBUNTU-MERGE" "1" "2017-07-19" "Git-Ubuntu 0.1" "Git-Ubuntu Manual"
>
> Version should be 0.2
>
> > +
> > +.SH "NAME"
> > +git-ubuntu-merge \- perform an Ubuntu merge of a source package in a Git repository
> > +.SH "SYNOPSIS"
> > +.SP
> > +.NF
> > +\fIgit ubuntu merge\fR [\-\-bug <bug>] [\-\-release <release>]
> > +[\-d | \-\-directory <directory>] [\-f | \-\-force] [\-\-tag-only]
> > +start|finish <commitish> [<onto>]
>
> I think "start|finish" should be "<start|finish>", since either is
> mandatory. If you agree, then the --help output should also get the
> same change.

So this is something I did not change (yet). In my reading around, <>
indicates values of things passed by the end-user. [] indicates
optionality. | indicates a choice. So by not having [] but having | we
are indicating a choice between two required options. Same comment
applies later.

<snip>

> > +Part of the \fBgit-ubuntu\fR(1) suite
> > diff --git a/man/man1/git-ubuntu-queue.1 b/man/man1/git-ubuntu-queue.1
> > new file mode 100644
> > index 0000000..c7badc6
> > --- /dev/null
> > +++ b/man/man1/git-ubuntu-queue.1
> > @@ -0,0 +1,93 @@
> > +.TH "GIT-UBUNTU-QUEUE" "1" "2017-07-19" "Git-Ubuntu 0.2" "Git-Ubuntu Manual"
> > +
> > +.SH "NAME"
> > +git-ubuntu queue \- Interact with the Ubuntu unapproved and new queues in a Git repository
> > +.SH "SYNOPSIS"
> > +.SP
> > +.NF
> > +\fIgit ubuntu queue\fR clean|sync [\-d | \-\-directory <directory>]
>
> I suggest to use <clean|sync> instead of just clean|sync, since both
> are mandatory. If you agree, then the --help output could use the same
> change.

See above.

<snip>

> > diff --git a/man/man1/git-ubuntu-remote.1 b/man/man1/git-ubuntu-remote.1
> > new file mode 100644
> > index 0000000..6ba346c
> > --- /dev/null
> > +++ b/man/man1/git-ubuntu-remote.1
> > @@ -0,0 +1,83 @@
> > +.TH "GIT-UBUNTU-REMOTE" "1" "2017-07-19" "Git-Ubuntu 0.1" "Git-Ubuntu Manual"
>
> Version should be 0.2
>
> > +
> > +.SH "NAME"
> > +git-ubuntu remote \- Manage Launchpad source package Git remotes
> > +.SH "SYNOPSIS"
> > +.SP
> > +.NF
> > +\fIgit ubuntu remote\fR [\-d | \-\-directory <directory>]
> > +[\-l | \-\-lp-user <lp_user>] [\-r | \-\-remote-name <name>]
> > +[\-\-no-fetch] [\-\-package <package>] add <user> [<url>]
> > +.FI
> > +.SP
> > +.SH "DESCRIPTION"
> > +.SP
> > +Launchpad source package repositories are at well-defined locations for
> > +given a username\&.
> > +Thi...

Read more...

Revision history for this message
Nish Aravamudan (nacc) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/doc/gitubuntu-completion.sh b/doc/gitubuntu-completion.sh
2index 1c7a8e2..e74fa6e 100644
3--- a/doc/gitubuntu-completion.sh
4+++ b/doc/gitubuntu-completion.sh
5@@ -1,11 +1,16 @@
6+SNAP_GIT_BASH_COMPLETION="/snap/git-ubuntu/current/usr/share/bash-completions/completions/git"
7+if [ -f $SNAP_GIT_BASH_COMPLETION ]; then
8+ . $SNAP_GIT_BASH_COMPLETION
9+fi
10+
11 _git_ubuntu ()
12 {
13 local subcommands="
14- import build build-source merge clone tag queue
15- import-local import-ppa remote
16+ build build-source clone import import-local import-ppa
17+ lint merge queue remote review submit tag
18 "
19 local all_opts="
20- --verbose --parentfile= --pullfile= --help
21+ -v --verbose -p --parentfile -l --pullfile -h --help
22 "
23 local net_opts="
24 --retries --retry-backoffs --proto
25@@ -30,13 +35,17 @@ _git_ubuntu ()
26 ;;
27 build,--*)
28 __gitcomp "
29- --dl-cache --for-merge
30+ --dl-cache --sign --for-merge
31+ --no-pristine-tar --no-lxd
32+ --lxd-profile --keep-build-env --
33 $all_opts $net_opts
34 "
35 ;;
36 build-source,--*)
37 __gitcomp "
38- --dl-cache --for-merge --sign
39+ --dl-cache --sign --for-merge
40+ --no-pristine-tar --no-lxd
41+ --lxd-profile --keep-build-env --
42 $all_opts $net_opts
43 "
44 ;;
45diff --git a/gitubuntu/__main__.py b/gitubuntu/__main__.py
46index 78acc15..ffa26ea 100644
47--- a/gitubuntu/__main__.py
48+++ b/gitubuntu/__main__.py
49@@ -72,6 +72,14 @@ def main():
50 'review': 'gitubuntu.review',
51 }
52
53+ help_subcommands = {
54+ 'build-source',
55+ 'merge',
56+ 'clone',
57+ 'submit',
58+ 'lint',
59+ }
60+
61 known_network_subcommands = {
62 'import',
63 'import-local',
64@@ -88,12 +96,15 @@ def main():
65 parser = argparse.ArgumentParser(
66 description='Ubuntu git development tool',
67 formatter_class=argparse.RawTextHelpFormatter,
68- epilog='More information is available at https://wiki.ubuntu.com/UbuntuDevelopment/Merging/GitWorkflow.',
69+ epilog="For a full description of all subcommands and "
70+ "parameter, see the man-page.\nMore information "
71+ "is available at "
72+ "https://wiki.ubuntu.com/UbuntuDevelopment/Merging/GitWorkflow.",
73 )
74 subparsers = parser.add_subparsers(
75 dest='subcommand',
76 help='',
77- metavar='%s' % '|'.join(sorted(known_subcommands)),
78+ metavar='%s' % '|'.join(sorted(help_subcommands)),
79 )
80 # This help ends up not being very useful to the end user
81 # subparsers.required = True
82@@ -142,14 +153,15 @@ def main():
83 )
84 else:
85 help_text = m.parse_args(subparsers, [base_subparser])
86- subparsers.help += '\n'
87- subparsers.help += '\n'.join(
88- textwrap.wrap(
89- help_text,
90- subhelp_width,
91- break_on_hyphens=False,
92+ if sub in help_subcommands:
93+ subparsers.help += '\n'
94+ subparsers.help += '\n'.join(
95+ textwrap.wrap(
96+ help_text,
97+ subhelp_width,
98+ break_on_hyphens=False,
99+ )
100 )
101- )
102 parser.add_argument(
103 '-P', '--parentfile',
104 type=str,
105diff --git a/gitubuntu/importppa.py b/gitubuntu/importppa.py
106index d5dcb96..3d5ba65 100644
107--- a/gitubuntu/importppa.py
108+++ b/gitubuntu/importppa.py
109@@ -44,11 +44,9 @@ def main(
110 ppa,
111 pkgname,
112 directory,
113- owner,
114 user,
115 pullfile,
116 parentfile,
117- no_clean,
118 dl_cache,
119 proto,
120 retries,
121@@ -71,8 +69,6 @@ def main(
122 logging.info('Using git repository at %s', repo.local_dir)
123 repo.ensure_importer_branches_exist(namespace)
124
125- atexit.register(cleanup, no_clean, repo.local_dir)
126-
127 source_information = GitUbuntuSourceInformation(
128 ppa,
129 pkgname,
130@@ -199,9 +195,6 @@ def parse_args(subparsers=None, base_subparsers=None):
131 help='Name of PPA to update in the git tree')
132 parser.add_argument('package', type=str,
133 help='Which package to update in the git tree')
134- parser.add_argument('-o', '--lp-owner', type=str,
135- help='Which launchpad user\'s tree to update',
136- default='usd-import-team')
137 parser.add_argument('-l', '--lp-user', type=str,
138 help='Specify the Launchpad user to use',
139 default=getpass.getuser())
140@@ -211,11 +204,9 @@ def parse_args(subparsers=None, base_subparsers=None):
141 CACHE_PATH
142 ),
143 default=argparse.SUPPRESS)
144- parser.add_argument('--no-clean', action='store_true',
145- help='Do not clean the temporary directory')
146 parser.add_argument('-d', '--directory', type=str,
147 help='Use git repository at specified location rather '
148- 'than a temporary directory (implies --no-clean). '
149+ 'than a temporary directory. '
150 'Will create the local repository if needed.',
151 default=argparse.SUPPRESS
152 )
153@@ -229,10 +220,8 @@ def parse_args(subparsers=None, base_subparsers=None):
154 return 'import-ppa - %s' % kwargs['description']
155
156 def cli_main(args):
157- no_clean = args.no_clean
158 try:
159 directory = args.directory
160- no_clean = True
161 except AttributeError:
162 directory = None
163 try:
164@@ -244,11 +233,9 @@ def cli_main(args):
165 args.ppa,
166 args.package,
167 directory,
168- args.lp_owner,
169 args.lp_user,
170 args.pullfile,
171 args.parentfile,
172- no_clean,
173 dl_cache,
174 args.proto,
175 args.retries,
176diff --git a/man/man1/git-ubuntu-build-source.1 b/man/man1/git-ubuntu-build-source.1
177new file mode 100644
178index 0000000..1b13f31
179--- /dev/null
180+++ b/man/man1/git-ubuntu-build-source.1
181@@ -0,0 +1,101 @@
182+.TH "GIT-UBUNTU-BUILD-SOURCE" "1" "2017-07-19" "Git-Ubuntu 0.2" "Git-Ubuntu Manual"
183+
184+.SH "NAME"
185+git-ubuntu build-source \- Build source packages
186+.SH "SYNOPSIS"
187+.SP
188+.NF
189+\fIgit ubuntu build-source\fR [\-\-dl-cache <dl_cache>] [\-\-sign]
190+[\-\-for-merge] [\-\-no-pristine-tar] [\-\-no-lxd] [\-\-keep-build-env]
191+[\-\-lxd-profile <profile>] [-- \&.\&.\&.]
192+.FI
193+.SP
194+.SH "DESCRIPTION"
195+.SP
196+Build source packages using \fBdpkg-buildpackage\fR(1)\&.
197+With --no-lxd and no additional paramaters, this is equivalent to
198+calling 'dpkg-buildpackage -S -i -I -us -uc'\&.
199+By default, builds will be done in a suitable LXD container\&.
200+Any necessary tarballs will be generated by pristine-tar, if possible,
201+or downloaded from Launchpad\&.
202+.SP
203+.SH "OPTIONS"
204+.PP
205+\-\-dl-cache <dl_cache>
206+.RS 4
207+The path to use for caching downloads from Launchpad\&.
208+By default, downloads are cached inside the repository's GIT_DIR\&.
209+.RE
210+.PP
211+\-\-sign
212+.RS 4
213+If the build completes successfully, sign the resulting changes file
214+with \fBdebsign\fR(1)\&.
215+.RE
216+.PP
217+\-\-for-merge
218+.RS 4
219+The build will use tarballs from Debian and pass -sa to
220+\fBdpkg-buildpackage\fR(1) to include the orig tarball when uploading to
221+Ubuntu\&.
222+.RE
223+.PP
224+\-\-no-pristine-tar
225+.RS 4
226+Do not use pristine-tar when searching for necessary orig tarballs\&.
227+This is useful to work around broken imports with missing pristine-tar
228+data\&.
229+.RE
230+.PP
231+\-\-no-lxd
232+.RS 4
233+Do not use LXD when building\&.
234+This is dangerous and not recommended for anyone other than experienced
235+Ubuntu developers\&.
236+If used, it is recommended to pass '-nc -d' as options to
237+\fBdpkg-buildpackage\fR(1) (that is, after '--' to this command)\&.
238+Otherwise, any required build-dependencies will need to be manually
239+installed before building\&.
240+.RE
241+.PP
242+\-\-keep-build-env
243+.RS 4
244+Keep the build environment (a LXD container or a temporary directory, if
245+\-\-no-lxd is passed) after building\&.
246+By default, the environment is removed (the container is deleted or the
247+directory is removed)\&.
248+.RE
249+.PP
250+\-\-lxd-profile <profile>
251+.RS 4
252+The LXD profile to use for the build containers\&.
253+This might be necessary to support a proxy, for example\&.
254+The default LXD profile is used unless this option is specified\&.
255+.RE
256+.PP
257+\-\- \&.\&.\&.
258+.RS 4
259+Any arguments after '--' are passed on verbatim to
260+\fBdpkg-buildpackage\fR(1), after merging them with the default list
261+(-S -i -I -us -uc)\&.
262+.RE
263+.SP
264+.SH "EXIT STATUS"
265+.SP
266+\fIgit ubuntu build\fR exits with status 0 if the build completes
267+successfully\&.
268+\fIgit ubuntu build\fR exits with nonzero exit status on errors\&.
269+.SP
270+.SH "REPORTING BUGS"
271+.SP
272+Report bugs at
273+.UR https://bugs.launchpad.net/usd-importer
274+.UE
275+\.
276+.SP
277+.SH "SEE ALSO"
278+.SP
279+\fBgit-ubuntu-build\fR(1), \fBdpkg-buildpackage\fR(1), \fBdebsign\fR(1)
280+.SP
281+.SH "GIT-UBUNTU"
282+Part of the \fBgit-ubuntu\fR(1) suite
283diff --git a/man/man1/git-ubuntu-build.1 b/man/man1/git-ubuntu-build.1
284new file mode 100644
285index 0000000..0a5a6f9
286--- /dev/null
287+++ b/man/man1/git-ubuntu-build.1
288@@ -0,0 +1,98 @@
289+.TH "GIT-UBUNTU-BUILD" "1" "2017-07-19" "Git-Ubuntu 0.1" "Git-Ubuntu Manual"
290+
291+.SH "NAME"
292+git-ubuntu build \- Build packages
293+.SH "SYNOPSIS"
294+.SP
295+.NF
296+\fIgit ubuntu build\fR [\-\-dl-cache <dl_cache>] [\-\-sign]
297+[\-\-for-merge] [\-\-no-pristine-tar] [\-\-no-lxd] [\-\-keep-build-env]
298+[\-\-lxd-profile <profile>] [-- \&.\&.\&.]
299+.FI
300+.SP
301+.SH "DESCRIPTION"
302+.SP
303+Build packages using \fBdpkg-buildpackage\fR(1)\&.
304+By default, builds will be done in a suitable LXD container\&.
305+Any necessary tarballs will be generated by pristine-tar, if possible,
306+or downloaded from Launchpad\&.
307+.SP
308+.SH "OPTIONS"
309+.PP
310+\-\-dl-cache <dl_cache>
311+.RS 4
312+The path to use for caching downloads from Launchpad\&.
313+By default, downloads are cached inside the repository's GIT_DIR\&.
314+.RE
315+.PP
316+\-\-sign
317+.RS 4
318+If the build completes successfully, sign the resulting changes file
319+with \fBdebsign\fR(1)\&.
320+.RE
321+.PP
322+\-\-for-merge
323+.RS 4
324+The build will use tarballs from Debian and pass -sa to
325+\fBdpkg-buildpackage\fR(1) to include the orig tarball when uploading to
326+Ubuntu\&.
327+.RE
328+.PP
329+\-\-no-pristine-tar
330+.RS 4
331+Do not use pristine-tar when searching for necessary orig tarballs\&.
332+This is useful to work around broken imports with missing pristine-tar
333+data\&.
334+.RE
335+.PP
336+\-\-no-lxd
337+.RS 4
338+Do not use LXD when building\&.
339+This is dangerous and not recommended for anyone other than experienced
340+Ubuntu developers\&.
341+If used, it is recommended to pass '-nc -d' as options to
342+\fBdpkg-buildpackage\fR(1) (that is, after '--' to this command)\&.
343+Otherwise, any required build-dependencies will need to be manually
344+installed before building\&.
345+.RE
346+.PP
347+\-\-keep-build-env
348+.RS 4
349+Keep the build environment (a LXD container or a temporary directory, if
350+\-\-no-lxd is passed) after building\&.
351+By default, the environment is removed (the container is deleted or the
352+directory is removed)\&.
353+.RE
354+.PP
355+\-\-lxd-profile <profile>
356+.RS 4
357+The LXD profile to use for the build containers\&.
358+This might be necessary to support a proxy, for example\&.
359+The default LXD profile is used unless this option is specified\&.
360+.RE
361+.PP
362+\-\- \&.\&.\&.
363+.RS 4
364+Any arguments after '--' are passed on verbatim to
365+\fBdpkg-buildpackage\fR(1)\&.
366+.RE
367+.SP
368+.SH "EXIT STATUS"
369+.SP
370+\fIgit ubuntu build\fR exits with status 0 if the build completes
371+successfully\&.
372+\fIgit ubuntu build\fR exits with nonzero exit status on errors\&.
373+.SP
374+.SH "REPORTING BUGS"
375+.SP
376+Report bugs at
377+.UR https://bugs.launchpad.net/usd-importer
378+.UE
379+\.
380+.SP
381+.SH "SEE ALSO"
382+.SP
383+\fBdpkg-buildpackage\fR(1), \fBdebsign\fR(1)
384+.SP
385+.SH "GIT-UBUNTU"
386+Part of the \fBgit-ubuntu\fR(1) suite
387diff --git a/man/man1/git-ubuntu-clone.1 b/man/man1/git-ubuntu-clone.1
388new file mode 100644
389index 0000000..3db17ef
390--- /dev/null
391+++ b/man/man1/git-ubuntu-clone.1
392@@ -0,0 +1,65 @@
393+.TH "GIT-UBUNTU-CLONE" "1" "2017-07-19" "Git-Ubuntu 0.1" "Git-Ubuntu Manual"
394+
395+.SH "NAME"
396+git-ubuntu clone \- Clone a Ubuntu source package repository into a new directory
397+.SH "SYNOPSIS"
398+.SP
399+.NF
400+\fIgit ubuntu clone\fR [\-\-lp-user <user>] <package> [<directory>]
401+.FI
402+.SP
403+.SH "DESCRIPTION"
404+.SP
405+Clones a Ubuntu source package repository given just the source package
406+name\&.
407+A remote named 'pkg' will be created to track branches from the importer
408+repository (See \fBgit-ubuntu-import\fR for details)\&.
409+A remote named after the derived Launchpad user will be created for
410+tracking their personal branches\&.
411+The resulting repository is a regular \fBgit\fR(1) repository and all
412+normal \fBgit\fR(1) commands can be used.
413+See \fBgit-clone\fR(1) for common operations after cloning\&.
414+.SP
415+.SH "OPTIONS"
416+.PP
417+\-\-lp-user <user>
418+.RS 4
419+The Launchpad user to authenticate as for push URLs as well as
420+the default personal remote to create\&.
421+If not specified, this value is obtained from 'git config --global
422+gitubuntu.lpuser'\&.
423+If that config value is not set, a prompt is shown to obtain the
424+value\&.
425+.RE
426+.PP
427+<package>
428+.RS 4
429+The name of the source package to clone\&.
430+.RE
431+.PP
432+<directory>
433+.RS 4
434+The name of the new directory to clone into\&.
435+If not specified, a directory with the same name as \fB<package>\fR is
436+used\&.
437+.RE
438+.SP
439+.SH "EXIT STATUS"
440+.SP
441+\fIgit ubuntu clone\fR exits with status 0 if the build completes
442+successfully\&.
443+\fIgit ubuntu clone\fR exits with nonzero exit status on errors\&.
444+.SP
445+.SH "REPORTING BUGS"
446+.SP
447+Report bugs at
448+.UR https://bugs.launchpad.net/usd-importer
449+.UE
450+\.
451+.SP
452+.SH "SEE ALSO"
453+.SP
454+\fBgit-ubuntu\fR(1), \fBgit-clone\fR(1)
455+.SP
456+.SH "GIT-UBUNTU"
457+Part of the \fBgit-ubuntu\fR(1) suite
458diff --git a/man/man1/git-ubuntu-import-local.1 b/man/man1/git-ubuntu-import-local.1
459new file mode 100644
460index 0000000..c046390
461--- /dev/null
462+++ b/man/man1/git-ubuntu-import-local.1
463@@ -0,0 +1,63 @@
464+.TH "GIT-UBUNTU-IMPORT-LOCAL" "1" "2017-07-19" "Git-Ubuntu 0.2" "Git-Ubuntu Manual"
465+
466+.SH "NAME"
467+git-ubuntu import-local \- Import a DSC file to Git
468+.SH "SYNOPSIS"
469+.SP
470+.NF
471+\fIgit ubuntu import-local\fR [\-d | \-\-directory <directory>]
472+<namespace> <dsc>
473+.FI
474+.SP
475+.SH "DESCRIPTION"
476+.SP
477+Import a Debian source description file (.dsc) to a local Git
478+repository\&.
479+.SP
480+.SH "OPTIONS"
481+.PP
482+\-d <directory>, \-\-directory <directory>
483+.RS 4
484+The local directory to perform the import in\&.
485+If not specified, use a temporary directory\&.
486+.RE
487+.PP
488+<namespace>
489+.RS 4
490+The namespace to use for the resultig git-refs after importing the DSC\&
491+Unlike publication records from Launchpad, a single DSC file does not
492+provide any information to indicate it was actually published to a
493+particular distribution\&.
494+As a result, no derivation of the namespace is generically possible, and
495+we do not want to use the importer/ namespace (as it is reserved for
496+\fBgit ubuntu import\fR(1)\&.
497+.RE
498+.PP
499+<dsc>
500+.RS 4
501+The path to a DSC to import\&.
502+This can be either a local filesystem path or a URL to a DSC file\&.
503+In the latter case, \fBdget\fR(1) is used to download the file and the
504+corresponding source package\&.
505+.RE
506+.SP
507+.SH "EXIT STATUS"
508+.SP
509+\fIgit ubuntu import-local\fR exits with status 0 if the build completes
510+successfully\&.
511+\fIgit ubuntu import-local\fR exits with nonzero exit status on
512+errors\&.
513+.SP
514+.SH "REPORTING BUGS"
515+.SP
516+Report bugs at
517+.UR https://bugs.launchpad.net/usd-importer
518+.UE
519+\.
520+.SP
521+.SH "SEE ALSO"
522+.SP
523+\fBgit-ubuntu-import\fR(1)
524+.SP
525+.SH "GIT-UBUNTU"
526+Part of the \fBgit-ubuntu\fR(1) suite
527diff --git a/man/man1/git-ubuntu-import-ppa.1 b/man/man1/git-ubuntu-import-ppa.1
528new file mode 100644
529index 0000000..574df4a
530--- /dev/null
531+++ b/man/man1/git-ubuntu-import-ppa.1
532@@ -0,0 +1,65 @@
533+.TH "GIT-UBUNTU-IMPORT-PPA" "1" "2017-07-19" "Git-Ubuntu 0.2" "Git-Ubuntu Manual"
534+
535+.SH "NAME"
536+git-ubuntu import-ppa\- Import a DSC file to Git
537+.SH "SYNOPSIS"
538+.SP
539+.NF
540+\fIgit ubuntu import-ppa\fR [\-l | \-\-lp-user <user>]
541+[\-d | \-\-directory <directory>] <ppa> <package>
542+.FI
543+.SP
544+.SH "DESCRIPTION"
545+.SP
546+Import Publishing information from a PPA (Personal Package Archive) to a
547+local Git repository\&.
548+.SP
549+.SH "OPTIONS"
550+.PP
551+\-l <user>, \-\-lp-user <user>
552+.RS 4
553+The Launchpad user to authenticate as for push URLs as well as
554+the default personal remote to create\&.
555+If not specified, this value is obtained from 'git config --global
556+gitubuntu.lpuser'\&.
557+If that config value is not set, a prompt is shown to obtain the
558+value\&.
559+.RE
560+.PP
561+\-d <directory>, \-\-directory <directory>
562+.RS 4
563+The local directory to perform the import in\&.
564+If not specified, use a temporary directory\&.
565+.RE
566+.PP
567+<ppa>
568+.RS 4
569+The name of the PPA to import from\&.
570+Must be specified as "ppa:..."\&.
571+.RE
572+.PP
573+<package>
574+.RS 4
575+The specific source package's history to import from \fB<ppa>\fR\&.
576+.RE
577+.SP
578+.SH "EXIT STATUS"
579+.SP
580+\fIgit ubuntu import-ppa\fR exits with status 0 if the build completes
581+successfully\&.
582+\fIgit ubuntu import-ppa\fR exits with nonzero exit status on
583+errors\&.
584+.SP
585+.SH "REPORTING BUGS"
586+.SP
587+Report bugs at
588+.UR https://bugs.launchpad.net/usd-importer
589+.UE
590+\.
591+.SP
592+.SH "SEE ALSO"
593+.SP
594+\fBgit-ubuntu-import\fR(1)
595+.SP
596+.SH "GIT-UBUNTU"
597+Part of the \fBgit-ubuntu\fR(1) suite
598diff --git a/man/man1/git-ubuntu-import.1 b/man/man1/git-ubuntu-import.1
599new file mode 100644
600index 0000000..92648b0
601--- /dev/null
602+++ b/man/man1/git-ubuntu-import.1
603@@ -0,0 +1,224 @@
604+.TH "GIT-UBUNTU-IMPORT" "1" "2017-07-19" "Git-Ubuntu 0.2" "Git-Ubuntu Manual"
605+
606+.SH "NAME"
607+git-ubuntu import \- Import Launchpad publishing history to Git
608+.SH "SYNOPSIS"
609+.SP
610+.NF
611+\fIgit ubuntu import\fR [\-o | --lp-owner <owner>] [\-l | \-\-lp-user
612+<user>] [\-\-dl-cache <dl_cache>] [\-\-no-fetch] [\-\-no-push]
613+[\-\-no-clean] [\-d | \-\-directory <directory>] [\-\-fixup-devel]
614+[\-\-active-series-only] [\-\-skip-applied] [\-\-skip-orig]
615+[\-\-reimport] <package>
616+.FI
617+.SP
618+.SH "DESCRIPTION"
619+.SP
620+Import a source package's publication history from Launchpad into a
621+local \fBgit\fR(1) repository and push it to a remote repository\&.
622+.PP
623+The importer algorithm roughly looks like:
624+.IP
625+.RS 4
626+Fetch the \fBowner\fR repository for \fB<package>\fR\&.
627+.PP
628+For <distribution> in "Debian", "Ubuntu"\&:
629+.RS 4
630+.PP
631+For each <publish> in <distribution> since the most recent
632+patches-unapplied import in the local repository\&:
633+.RS 4
634+.PP
635+Import the orig tarballs for <publish> using 'gbp import-orig
636+--pristine-tar', unless they have already been imported and the imported
637+tarballs are identical.
638+.PP
639+Find a <publish parent>: the most recent patches-unapplied import to the
640+same series and pocket\&.
641+.PP
642+Find a <changelog parent>: the most recent changelog entry with a
643+corresponding patches-unapplied import\&.
644+.PP
645+Find a <upload parent>: a upload-tag in the repository for the same
646+version as <publish> with git-tree-identical contents as <publish>\&.
647+.PP
648+Commit the git tree corresonding to a patches-unapplied extraction of
649+<publish> using all of <publish parent>, <changelog parent> and <upload
650+parent> as parents\&.
651+.PP
652+If this is the first patches-unapplied import of a given version, create
653+a tag in refs/tags/import/ pointing to the new commit\&.
654+.PP
655+Update the patches-applied <distribution>/<publish's series>/<publish's
656+pocket> branch to the new commit\&.
657+.RE
658+.RE
659+.RE
660+.PP
661+.RS 4
662+For <distribution> in "Debian", "Ubuntu"\&:
663+.PP
664+For each <publish> in <distribution> since the most recent
665+patches-applied import in the local repository\&:
666+.RS 4
667+.PP
668+Find a <publish parent>: the most recent patches-applied import to the
669+same series and pocket\&.
670+.PP
671+Find a <changelog parent>: the most recent changelog entry with a
672+corresponding patches-applied import\&.
673+.PP
674+Find a <unapplied parent>: the corresponding patches-unapplied import of
675+<publish>'s version\&.
676+.PP
677+Commit each git tree corresponding to the application of the next quilt
678+patch in <publish> using all of <publish parent>, <changelog parent> and
679+<unapplied parent> as parent\&.
680+As each quilt patch is applied, the <unapplied parent> becomes the
681+result of the immediately prior patch's application\&.
682+.PP
683+If this is the first patches-applied import of a given version, create
684+a tag in refs/tags/applied/ pointing to the commit corresponding to the
685+application of the final quilt patch\&.
686+.PP
687+Update the patches-applied <distribution>/<publish>'s series/<publish>'s
688+pocket branch to the new commit\&.
689+.RE
690+.RE
691+.RE
692+.SP
693+.SH "OPTIONS"
694+.PP
695+\-o <owner>, --lp-owner <owner>
696+.RS 4
697+The Launchpad owner of the remote respository to fetch the current
698+repository from and push the resulting import to.
699+.RE
700+.PP
701+\-l <user>, \-\-lp-user <user>
702+.RS 4
703+The Launchpad user to authenticate as for push URLs as well as
704+the default personal remote to create\&.
705+If not specified, this value is obtained from 'git config --global
706+gitubuntu.lpuser'\&.
707+If that config value is not set, a prompt is shown to obtain the
708+value\&.
709+.RE
710+.PP
711+\-\-dl-cache <dl_cache>
712+.RS 4
713+The path to use for caching downloads from Launchpad\&.
714+By default, downloads are cached inside the repository's GIT_DIR\&.
715+.RE
716+.PP
717+\-\-no-fetch
718+.RS 4
719+Do not fetch the \fB<owner>\fR's repository before importing\&.
720+Implies --no-push, as the resulting branches are likely to not be
721+fast-forwarding.
722+.RE
723+.PP
724+\-\-no-push
725+.RS 4
726+Do not push the resulting import to the <\fB<owner>\fR's repository
727+after importing\&.
728+.RE
729+.PP
730+\-\-no-clean
731+.RS 4
732+Do not delete local directory used for the import upon completion.
733+.RE
734+.PP
735+\-d <directory>, \-\-directory <directory>
736+.RS 4
737+The local directory to perform the import in\&.
738+Implies --no-clean\&.
739+If not specified, use a temporary directory\&.
740+.RE
741+.PP
742+\-\-fixup-devel
743+.RS 4
744+Always update the ubuntu/<series>-devel branches, even if no imports
745+have occurred.
746+This option is only intended for \fBgit-ubuntu\fR(1) developers and is
747+used to fixup an import when a prior import does not correctly update
748+the devel branches\&.
749+.RE
750+.PP
751+\-\-active-series-only
752+.RS 4
753+Rather than importing all publications from Launchpad, only consider
754+those for the currently active series\&.
755+This can be useful to just get a quick view of the current state in the
756+archive, as a full import can take a very long time\&.
757+Implies --no-push\&.
758+.RE
759+.PP
760+\-\-skip-applied
761+.RS 4
762+Only perform the patches-unapplied portion of the algorithm in
763+\fBDESCRIPTION\fR\&.
764+This can be useful to just get a quick view of the current state in the
765+archive, as a full import can take a very long time\&.
766+.RE
767+.PP
768+\-\-skip-orig
769+.RS 4
770+Do not attempt to import the orig tarballs\&.
771+This can be useful to just get a quick view of the current state in the
772+archive, as a full import can take a very long time\&.
773+This option can be useful for \fBgit-ubuntu\fR(1) developers when
774+debugging issues with 'gbp' or 'pristine-tar'\&.
775+.RE
776+.PP
777+\-\-reimport
778+.RS 4
779+Reimport the given source package from scratch\&.
780+The reimport will still incorporate upload tags as currently present in
781+the remote repository\&.
782+This option is only intended for \fBgit-ubuntu\fR(1) developers and is
783+used when the SHA1s of commits must change due to an implementation
784+change in \fIgit ubuntu-import\fR\&.
785+A typical reimport of a repository (for safety) will look like:
786+.PP
787+.RS 4
788+git ubuntu import --reimport --no-push --no-clean <package>
789+.PP
790+This will leave a local directory with the resulting reimport\&.
791+The local directory should be examined for the reimport's success; in
792+particular, that upload tags are reincorporated in the new history\&.
793+.PP
794+git ubuntu import --reimport --no-fetch --directory <tempdir from prior
795+command>
796+.PP
797+This will use the local directory, which is current as of the prior
798+reimport, ensure it is still current (in case new publishes have
799+occurred) and forcibly \fBgit-push\fR the resulting repository to
800+\fB<owner>\fR's remote repository.
801+.RE
802+.RE
803+.PP
804+<package>
805+.RS 4
806+The name of the source package to import\&.
807+.RE
808+.SP
809+.SH "EXIT STATUS"
810+.SP
811+\fIgit ubuntu import\fR exits with status 0 if the build completes
812+successfully\&.
813+\fIgit ubuntu import\fR exits with nonzero exit status on errors\&.
814+.SP
815+.SH "REPORTING BUGS"
816+.SP
817+Report bugs at
818+.UR https://bugs.launchpad.net/usd-importer
819+.UE
820+\.
821+.SP
822+.SH "SEE ALSO"
823+.SP
824+\fBquilt\fR(1)
825+.SP
826+.SH "GIT-UBUNTU"
827+Part of the \fBgit-ubuntu\fR(1) suite
828diff --git a/man/man1/git-ubuntu-lint.1 b/man/man1/git-ubuntu-lint.1
829new file mode 100644
830index 0000000..03c61ab
831--- /dev/null
832+++ b/man/man1/git-ubuntu-lint.1
833@@ -0,0 +1,66 @@
834+.TH "GIT-UBUNTU-LINT" "1" "2017-07-19" "Git-Ubuntu 0.1" "Git-Ubuntu Manual"
835+
836+.SH "NAME"
837+git-ubuntu-lint \- lint source package changes in a Git repository
838+.SH "SYNOPSIS"
839+.SP
840+.NF
841+\fIgit ubuntu lint\fR [\-\-lint-namespace <namespace>]
842+[\-\-target-branch <branch>] [\-d | \-\-directory <directory>]
843+<commitish>
844+.FI
845+.SP
846+.SH "DESCRIPTION"
847+.SP
848+\fIgit ubuntu lint\fR performs automated checks on a given Git
849+\fBcommitish\fR\&.
850+.SP
851+.SH "OPTIONS"
852+.PP
853+\-\-lint-namespace <namespace>
854+.RS 4
855+The git-reference prefix to search for tags and branches while
856+linting\&.
857+When linting a remote-tracking branch, the remote name is used as the
858+namespace\&.
859+When linting a local branch, an empty namespace is used\&.
860+This flag provides a manual override and, in general, does not need to
861+be specified\&.
862+.RE
863+.PP
864+\-\-target-branch <branch>
865+.RS 4
866+The target branch which \fBcommitish\fR is based on\&.
867+Typically, this is a remote-tracking branch like "pkg/ubuntu/devel"\&.
868+If possible, the value is derived\&.
869+The most common case when the target branch must be manually specified
870+is if two releases contain the same version and it is not possible for
871+the linter to determine which specific release the current changes will
872+be targetted for\&.
873+While the changelog value for the distribution gives a hint, it does not
874+tell the linter what the eventual merge will be proposed as\&.
875+.RE
876+.PP
877+\-d <directory>, \-\-directory <directory>
878+.RS 4
879+The local directory to perform the lint in\&.
880+If not specified, the current directory is used\&.
881+.RE
882+.SP
883+.SH "EXIT STATUS"
884+.SP
885+\fIgit ubuntu lint\fR exits with status 0 if a command completes
886+successfully\&.
887+\fIgit ubuntu lint\fR exits with nonzero exit status on errors\&.
888+.SP
889+.SP
890+.SH "REPORTING BUGS"
891+.SP
892+Report bugs at
893+.UR https://bugs.launchpad.net/usd-importer
894+.UE
895+\&.
896+.PP
897+.SP
898+.SH "GIT-UBUNTU"
899+Part of the \fBgit-ubuntu\fR(1) suite
900diff --git a/man/man1/git-ubuntu-merge.1 b/man/man1/git-ubuntu-merge.1
901new file mode 100644
902index 0000000..01bcc6c
903--- /dev/null
904+++ b/man/man1/git-ubuntu-merge.1
905@@ -0,0 +1,133 @@
906+.TH "GIT-UBUNTU-MERGE" "1" "2017-07-19" "Git-Ubuntu 0.1" "Git-Ubuntu Manual"
907+
908+.SH "NAME"
909+git-ubuntu-merge \- perform an Ubuntu merge of a source package in a Git repository
910+.SH "SYNOPSIS"
911+.SP
912+.NF
913+\fIgit ubuntu merge\fR [\-\-bug <bug>] [\-\-release <release>]
914+[\-d | \-\-directory <directory>] [\-f | \-\-force] [\-\-tag-only]
915+start|finish <commitish> [<onto>]
916+wq
917+.FI
918+.SP
919+.SH "DESCRIPTION"
920+.SP
921+Ubuntu packages often have changes relative to their Debian bases,
922+called delta\&.
923+\fIgit ubuntu merge\fR assists with performing an Ubuntu merge, by
924+replaying the Ubuntu delta on a newer version from Debian as a
925+\fBgit-rebase\fR(1)\&.
926+Once an Ubuntu merge has been performed using this workflow, future
927+merges can be simple rebases\&.
928+In the most general case, an Ubuntu merge is begun with `git ubuntu
929+merge start pkg/ubuntu/devel pkg/debian/sid` and finished with `git
930+ubuntu merge finish pkg/ubuntu/devel pkg/debian/sid`\&.
931+.PP
932+The brief outline of the merge workflow supported by \fBgit ubuntu merge\fR
933+is:
934+.IP
935+.RS 4
936+Obtain git tree with \fBgit ubuntu clone\fR(1)\&.
937+.PP
938+Deconstruct the current Ubuntu delta into a sequence of logical
939+commits suitable for rebasing\&.
940+.PP
941+Rebase the logical Ubuntu delta onto the new Debian version\&.
942+.PP
943+Build and test the resulting source package with \fBgit ubuntu
944+build\fR(1) and \fBautopkgtest\fR(1)\&.
945+.PP
946+Reconstruct the debian/changelog for the new source package\&.
947+.PP
948+Update the metadata for the new source package, such as the
949+maintainer\&.
950+.PP
951+Upload the resulting source package to the Ubuntu archive\&.
952+.RE
953+.RE
954+.PP
955+A more extensive discussio of the workflow is at
956+.UR https://wiki.ubuntu.com/UbuntuDevelopment/Merging/GitWorkflow#Detailed_workflow
957+.UE
958+.SP
959+.SH "OPTIONS"
960+.PP
961+start | finish
962+.RS 4
963+The step of the merge\&.
964+When "start" is specified, the current delta will be reconstructed and
965+HEAD will point to the result\&.
966+When "finish" is specified, the debian/changelog will be reconstructed
967+and package metadata will be updated\&.
968+"start" must be run before "finish"\&.
969+.RE
970+.PP
971+\-\-bug <bug>
972+.RS 4
973+When passed to the \fBstart\fR step, the tags created will be under
974+lp\fB<bug>\fR/ in the repository\&.
975+When passed to the \fBfinish\fR step, the Lauchpad bug \fB<bug>\fR will
976+be closed by the resulting debian/changelog\&.
977+.RE
978+.PP
979+\-\-release <release>
980+.RS 4
981+The \fB<release>\fR to use in the final changelog\&.
982+If not specified, the current development release is assumed\&.
983+.RE
984+.PP
985+\-d <directory>, \-\-directory <directory>
986+.RS 4
987+The local directory to perform the merge in\&.
988+If not specified, the current directory is used\&.
989+.RE
990+.PP
991+\-f | \-\-force
992+.RS 4
993+Overwrite any tags, if they already exist\&.
994+.RE
995+.PP
996+\-\-tag-only
997+.RS 4
998+In some cases, the full workflow is not desired\&.
999+When this flag is set, only the tags for "old/ubuntu", "old/debian" and
1000+"new/debian" are created\&.
1001+.RE
1002+.PP
1003+<commitish>
1004+.RS 4
1005+A Git commitish indicating the current Ubuntu changes to merge to
1006+Debian\&.
1007+.RE
1008+.PP
1009+.RS 4
1010+[<onto>]
1011+.RE
1012+A Git commitish indicating the new Debian version to merge to\&.
1013+If not specified, "debian/sid" is assumed.
1014+If a local branch with name \fB<onto>\fR does not exist, it will be
1015+start from the remote-tracking branch "pkg/\fB<onto>\fR"\&.
1016+.SP
1017+.SH "EXIT STATUS"
1018+.SP
1019+\fIgit ubuntu merge\fR exits with status 0 if a command completes
1020+successfully\&.
1021+\fIgit ubuntu merge\fR exits with nonzero exit status on errors\&.
1022+.SP
1023+.SP
1024+.SH "REPORTING BUGS"
1025+.SP
1026+Report bugs at
1027+.UR https://bugs.launchpad.net/usd-importer
1028+.UE
1029+\&.
1030+.PP
1031+.SP
1032+.SH "SEE ALSO"
1033+.SP
1034+\fBgit-rebase\fR(1), \fBgit-ubuntu-clone\fR(1),
1035+\fBgit-ubuntu-build\fR(1), \fBautopkgtest\fR(1)
1036+.SP
1037+.SH "GIT-UBUNTU"
1038+Part of the \fBgit-ubuntu\fR(1) suite
1039diff --git a/man/man1/git-ubuntu-queue.1 b/man/man1/git-ubuntu-queue.1
1040new file mode 100644
1041index 0000000..c7badc6
1042--- /dev/null
1043+++ b/man/man1/git-ubuntu-queue.1
1044@@ -0,0 +1,93 @@
1045+.TH "GIT-UBUNTU-QUEUE" "1" "2017-07-19" "Git-Ubuntu 0.2" "Git-Ubuntu Manual"
1046+
1047+.SH "NAME"
1048+git-ubuntu queue \- Interact with the Ubuntu unapproved and new queues in a Git repository
1049+.SH "SYNOPSIS"
1050+.SP
1051+.NF
1052+\fIgit ubuntu queue\fR clean|sync [\-d | \-\-directory <directory>]
1053+.PP
1054+\fIgit ubuntu queue\fR sync [\-\-source <source>]
1055+[\-\-series <series>] [\-\-parent <parent>] [\-\-orphan]
1056+[\-\-no-trim] [\-\-new] [\-\-unapproved] [\-\-no-fetch]
1057+.FI
1058+.SP
1059+.SH "DESCRIPTION"
1060+.SP
1061+Import unapproved and new uploads for Ubuntu source packages to the
1062+local repository\&.
1063+.SP
1064+.SH "OPTIONS"
1065+.PP
1066+clean|sync
1067+.RS 4
1068+The mode to operate in.
1069+If "clean", delete all local queue-related tags\&.
1070+If "sync", import uploads to the unapproved and new queues\&.
1071+.RE
1072+.PP
1073+Both "clean" and "sync" recognize:
1074+.PP
1075+\-d <directory>, \-\-directory <directory>
1076+.RS 4
1077+The local directory to perform the merge in\&.
1078+If not specified, the current directory is used\&.
1079+.RE
1080+.PP
1081+"sync" also recognizes:
1082+.PP
1083+\-\-source <source>
1084+.RS 4
1085+Override source package name on which to act\&.
1086+.RE
1087+.PP
1088+\-\-series <series>
1089+.RS 4
1090+Override Ubuntu series on which to act\&.
1091+.RE
1092+.PP
1093+\-\-parent <parent>
1094+.RS 4
1095+Override commit parent for new imports\&.
1096+.RE
1097+.PP
1098+\-\-orphan
1099+.RS 4
1100+Force new imports to be orphan commits\&.
1101+.RE
1102+.PP
1103+\-\-no-trim
1104+.RS 4
1105+Do not remove old tags\&.
1106+.RE
1107+.PP
1108+\-\-new
1109+.RS 4
1110+Only consider the New queue\&.
1111+.RE
1112+.PP
1113+\-\-unapproved
1114+.RS 4
1115+Only consider the Unapproved queue\&.
1116+.RE
1117+.PP
1118+\-\-no-fetch
1119+.RS 4
1120+Do not fetch from the importer repository first\&.
1121+.RE
1122+.SP
1123+.SH "EXIT STATUS"
1124+.SP
1125+\fIgit ubuntu queue\fR exits with status 0 if the build completes
1126+successfully\&.
1127+\fIgit ubuntu queue\fR exits with nonzero exit status on errors\&.
1128+.SP
1129+.SH "REPORTING BUGS"
1130+.SP
1131+Report bugs at
1132+.UR https://bugs.launchpad.net/usd-importer
1133+.UE
1134+\.
1135+.SP
1136+.SH "GIT-UBUNTU"
1137+Part of the \fBgit-ubuntu\fR(1) suite
1138diff --git a/man/man1/git-ubuntu-remote.1 b/man/man1/git-ubuntu-remote.1
1139new file mode 100644
1140index 0000000..6ba346c
1141--- /dev/null
1142+++ b/man/man1/git-ubuntu-remote.1
1143@@ -0,0 +1,83 @@
1144+.TH "GIT-UBUNTU-REMOTE" "1" "2017-07-19" "Git-Ubuntu 0.1" "Git-Ubuntu Manual"
1145+
1146+.SH "NAME"
1147+git-ubuntu remote \- Manage Launchpad source package Git remotes
1148+.SH "SYNOPSIS"
1149+.SP
1150+.NF
1151+\fIgit ubuntu remote\fR [\-d | \-\-directory <directory>]
1152+[\-l | \-\-lp-user <lp_user>] [\-r | \-\-remote-name <name>]
1153+[\-\-no-fetch] [\-\-package <package>] add <user> [<url>]
1154+.FI
1155+.SP
1156+.SH "DESCRIPTION"
1157+.SP
1158+Launchpad source package repositories are at well-defined locations for
1159+given a username\&.
1160+This subcommand allows users to add these well-defined locations to a
1161+local \fBgit\fR(1) repository\&.
1162+Once added, the remote can be manipulated like any Git remote\&.
1163+.SP
1164+.SH "OPTIONS"
1165+.PP
1166+\-d <directory>, \-\-directory <directory>
1167+.RS 4
1168+The local directory to manage the remote in\&.
1169+If not specified, the current directory is used\&.
1170+.RE
1171+.PP
1172+\-l <lp_user>, \-\-lp-user <lp_user>
1173+.RS 4
1174+The Launchpad user to authenticate as for push URLs\&.
1175+.RE
1176+.PP
1177+\-r, \-\-remote-name <name>
1178+.RS 4
1179+The remote name to use\&.
1180+If not specified, the remote will be named "\fB<user>\fR"\&.
1181+.RE
1182+.PP
1183+\-\-no-fetch
1184+.RS 4
1185+Do not fetch the remote after adding it\&.
1186+.RE
1187+.PP
1188+\-\-package <package>
1189+.RS 4
1190+The source package, and thus the repository, to download from
1191+this user\&.
1192+By default, the source package is derived from the current directory's
1193+debian/changelog\&.
1194+.RE
1195+.PP
1196+<user>
1197+.RS 4
1198+The Launchpad username that owns the repository to add\&.
1199+.RE
1200+.PP
1201+<url>
1202+.RS 4
1203+The URL to add as a remote\&.
1204+If the auto-derived URL from \fB<user>\fR and the debian/changelog's
1205+source package is not desired, it can be manually specified\&.
1206+.RE
1207+.SP
1208+.SH "EXIT STATUS"
1209+.SP
1210+\fIgit ubuntu remote\fR exits with status 0 if the build completes
1211+successfully\&.
1212+\fIgit ubuntu remote\fR exits with nonzero exit status on errors\&.
1213+.SP
1214+.SH "REPORTING BUGS"
1215+.SP
1216+Report bugs at
1217+.UR https://bugs.launchpad.net/usd-importer
1218+.UE
1219+\.
1220+.SP
1221+.SH "SEE ALSO"
1222+.SP
1223+\fBgit-remote\fR(1)
1224+.SP
1225+.SH "GIT-UBUNTU"
1226+Part of the \fBgit-ubuntu\fR(1) suite
1227diff --git a/man/man1/git-ubuntu-review.1 b/man/man1/git-ubuntu-review.1
1228new file mode 100644
1229index 0000000..3afc804
1230--- /dev/null
1231+++ b/man/man1/git-ubuntu-review.1
1232@@ -0,0 +1,56 @@
1233+.TH "GIT-UBUNTU-REVIEW" "1" "2017-07-19" "Git-Ubuntu 0.1" "Git-Ubuntu Manual"
1234+
1235+.SH "NAME"
1236+git-ubuntu review \- Review Launchpad merge proposals for source packages
1237+.SH "SYNOPSIS"
1238+.SP
1239+.NF
1240+\fIgit ubuntu review\fR [\-\-clone] [\-\-add-comment] <url>
1241+.FI
1242+.SP
1243+.SH "DESCRIPTION"
1244+.SP
1245+This command is similar to \fBgit-ubuntu-lint\fR(1) except that it works
1246+"remotely" in order to review Merge Proposals (MPs) on Launchpad\&.
1247+Currently \fBgit ubuntu review\fR simply ensures the source and target
1248+branches of the MP are available in the local repository and performs a
1249+lint of the proposed changes\&.
1250+.SP
1251+.SH "OPTIONS"
1252+.PP
1253+\-\-clone
1254+.RS 4
1255+Create a new local repository using \fBgit-ubuntu-clone\fR(1)\&.
1256+By default, the repository at the current directory is used\&.
1257+.RE
1258+.PP
1259+\-\-add-comment
1260+.RS 4
1261+Add a comment to the Merge Proposal at \fB<url>\fR with the results of
1262+the \fBgit-ubuntu-lint\fR(1) invocation\&.
1263+.RE
1264+.PP
1265+<url>
1266+.RS 4
1267+The URL of a Merge Proposal to review\&.
1268+.RE
1269+.SP
1270+.SH "EXIT STATUS"
1271+.SP
1272+\fIgit ubuntu review\fR exits with status 0 if the build completes
1273+successfully\&.
1274+\fIgit ubuntu review\fR exits with nonzero exit status on errors\&.
1275+.SP
1276+.SH "REPORTING BUGS"
1277+.SP
1278+Report bugs at
1279+.UR https://bugs.launchpad.net/usd-importer
1280+.UE
1281+\.
1282+.SP
1283+.SH "SEE ALSO"
1284+.SP
1285+\fBgit-ubuntu-lint\fR(1), \fBgit-ubuntu-submit\fR(1)
1286+.SP
1287+.SH "GIT-UBUNTU"
1288+Part of the \fBgit-ubuntu\fR(1) suite
1289diff --git a/man/man1/git-ubuntu-submit.1 b/man/man1/git-ubuntu-submit.1
1290new file mode 100644
1291index 0000000..70fbe19
1292--- /dev/null
1293+++ b/man/man1/git-ubuntu-submit.1
1294@@ -0,0 +1,94 @@
1295+.TH "GIT-UBUNTU-SUBMIT" "1" "2017-07-19" "Git-Ubuntu 0.1" "Git-Ubuntu Manual"
1296+
1297+.SH "NAME"
1298+git-ubuntu submit \- Submit local changes as a Launchpad merge proposal
1299+.SH "SYNOPSIS"
1300+.SP
1301+.NF
1302+\fIgit ubuntu submit\fR [\-\-target-branch <target_branch>]
1303+[\-\-reviewer <reviewer>] [\-d | \-\-directory <directory>]
1304+[\-f | \-\-force] [\-\-target-user <user>] [\-\-branch <branch>]
1305+[\-\-no-push] [\-l | \-\-lp-user <lp_user>]
1306+.FI
1307+.SP
1308+.SH "DESCRIPTION"
1309+.SP
1310+This command and \fBgit-ubuntu-review\fR(1) are in some ways
1311+symmetrical\&.
1312+"submit" proposes local changes for external review and "review" reviews
1313+them\&.
1314+In many ways, this is meant to mirror the GitHub model for Pull
1315+Requests\&.
1316+.SP
1317+.SH "OPTIONS"
1318+.PP
1319+\-\-target-branch <target_branch>
1320+.RS 4
1321+The branch in \fB<user>\fR's repository to target\&.
1322+If not specified, the nearest remote-tracking branch to \fB<branch>\fR
1323+is used\&.
1324+.RE
1325+.PP
1326+\-\-reviewer <reviewer>
1327+.RS 4
1328+The reviewer on Launchpad for the Merge Proposal, specified by the
1329+Launchpad user (or team) name\&.
1330+This option can be specified multiple times\&.
1331+If not specified, the canonical-server team is used\&.
1332+.RE
1333+.PP
1334+\-d <directory>, \-\-directory <directory>
1335+.RS 4
1336+The local directory to submit from\&.
1337+If not specified, the current directory is used\&.
1338+.RE
1339+.PP
1340+\-f, \-\-force
1341+.RS 4
1342+Overwrite any existing tags or branches, as necessary\&.
1343+.RE
1344+.PP
1345+\-\-target-user <user>
1346+.RS 4
1347+The Launchpad user (or team) name owning the repository to propose the
1348+local changes into\&.
1349+By default this is the "usd-import-team" Launchpad team, which owns the
1350+imported repositories\&.
1351+.RE
1352+.PP
1353+\-\-branch <branch>
1354+.RS 4
1355+What local branch to submit for merging into \fB<user>\fR's
1356+\fB<target_branch>\fR\&.
1357+If not specified, the branch pointed to by HEAD is used\&.
1358+.RE
1359+.PP
1360+\-\-no-push
1361+.RS 4
1362+Do not push the \fB<branch>\fR before creating the Merge Proposal\&.
1363+.RE
1364+.PP
1365+\-l <lp_user>, \-\-lp-user <lp_user>
1366+.RS 4
1367+The Launchpad user to authenticate as for pushing changes\&.
1368+.RE
1369+.SP
1370+.SH "EXIT STATUS"
1371+.SP
1372+\fIgit ubuntu submit\fR exits with status 0 if the build completes
1373+successfully\&.
1374+\fIgit ubuntu submit\fR exits with nonzero exit status on errors\&.
1375+.SP
1376+.SH "REPORTING BUGS"
1377+.SP
1378+Report bugs at
1379+.UR https://bugs.launchpad.net/usd-importer
1380+.UE
1381+\.
1382+.SP
1383+.SH "SEE ALSO"
1384+.SP
1385+\fBgit-ubuntu-review\fR(1)
1386+.SP
1387+.SH "GIT-UBUNTU"
1388+Part of the \fBgit-ubuntu\fR(1) suite
1389diff --git a/man/man1/git-ubuntu-tag.1 b/man/man1/git-ubuntu-tag.1
1390new file mode 100644
1391index 0000000..4eb9c12
1392--- /dev/null
1393+++ b/man/man1/git-ubuntu-tag.1
1394@@ -0,0 +1,85 @@
1395+.TH "GIT-UBUNTU-TAG" "1" "2017-07-19" "Git-Ubuntu 0.1" "Git-Ubuntu Manual"
1396+
1397+.SH "NAME"
1398+git-ubuntu tag \- Create Git tags respecting DEP14 and debian/changelog
1399+.SH "SYNOPSIS"
1400+.SP
1401+.NF
1402+\fIgit ubuntu tag\fR [\-\-logical | \-\-deconstruct | \-\-reconstruct |
1403+\-\-upload | \-\-format <format>] [\-\-bug <bug>]
1404+[\-d | \-\-directory <directory>] [\-f | \-\-force]
1405+[\-\-print-name-only] [<commitish>]
1406+.FI
1407+.SP
1408+.SH "DESCRIPTION"
1409+.SP
1410+\fBgit-ubuntu-merge\fR(1) and potentially other commands expect to use
1411+and resolve specific tags including source package versions\&.
1412+However, debian/changelog and Git conflict on the use of certain
1413+reserved characters, such as '~', ':' and '.'\&.
1414+To resolve this, Debian has a standard DEP14
1415+.UR http://dep.debian.net/deps/dep14/
1416+.UE
1417+which covers the appropriate transformations for versions\&.
1418+\fBgit-ubuntu\fR follows this convention for "version mangling" but not
1419+necessarily any others\&.
1420+.SP
1421+.SH "OPTIONS"
1422+.PP
1423+\-\-logical, \-\-deconstruct, \-\-reconstruct, \-\-upload, \-\-format <format>
1424+.RS 4
1425+Specify a format for the created tag\&.
1426+The first four forms are standardized for \fBgit-ubuntu\fR usage and
1427+generate tags, respectively, "logical/%(version)s",
1428+"deconstruct/%(version)s", "reconstruct/%(version)s",
1429+"upload/%(versions)s", where "%(versions)" will be replaced by the DEP14
1430+mangling of the last version in debian/changelog as present in
1431+\fB<commitish>\fR\&.
1432+The last form allows free-form formatting\&.
1433+If none of these options are given, an upload tag will be created\&.
1434+.RE
1435+.PP
1436+\-\-bug <bug>
1437+.RS 4
1438+Launchpad bug to use to namespace the tags\&.
1439+If specified, this will prefix the tag with "lp\fB<bug>\fR/"\&.
1440+.RE
1441+.PP
1442+\-d <directory>, \-\-directory <directory>
1443+.RS 4
1444+The local directory to tag in\&.
1445+If not specified, the current directory is used\&.
1446+.RE
1447+.PP
1448+\-f, \-\-force
1449+.RS 4
1450+Overwrite existing tags, if necessary\&.
1451+.RE
1452+.PP
1453+\-\-print-name-only
1454+.RS 4
1455+Only print the name of the specified tag, but do not create\&.
1456+This can be useful for use by other scripts\&.
1457+.RE
1458+.PP
1459+[<commitish>]
1460+.RS 4
1461+The commitish in the repository to tag\&.
1462+If not specified, HEAD is tagged\&.
1463+.RE
1464+.SP
1465+.SH "EXIT STATUS"
1466+.SP
1467+\fIgit ubuntu tag\fR exits with status 0 if the build completes
1468+successfully\&.
1469+\fIgit ubuntu tag\fR exits with nonzero exit status on errors\&.
1470+.SP
1471+.SH "REPORTING BUGS"
1472+.SP
1473+Report bugs at
1474+.UR https://bugs.launchpad.net/usd-importer
1475+.UE
1476+\.
1477+.SP
1478+.SH "GIT-UBUNTU"
1479+Part of the \fBgit-ubuntu\fR(1) suite
1480diff --git a/man/man1/git-ubuntu.1 b/man/man1/git-ubuntu.1
1481index e0a6a12..3c61762 100644
1482--- a/man/man1/git-ubuntu.1
1483+++ b/man/man1/git-ubuntu.1
1484@@ -1,139 +1,214 @@
1485-.TH "GIT-UBUNTU" "1" "2017-05-22" "Git-Ubuntu 1.0" "Git-Ubuntu Manual"
1486+.TH "GIT-UBUNTU" "1" "2017-07-19" "Git-Ubuntu 0.1" "Git-Ubuntu Manual"
1487
1488 .SH "NAME"
1489-git-ubuntu \- use git with a Launchpad hosted source package repository
1490+git-ubuntu \- use Git with a Launchpad hosted source package repository
1491 .SH "SYNOPSIS"
1492-.sp
1493-.nf
1494-\fIgit ubuntu\fR [\-h] [\-P PARENTFILE] [\-L PULLFILE] <command> [<args>]
1495-.fi
1496-.sp
1497+.SP
1498+.NF
1499+\fIgit ubuntu\fR [\-h] [\v | \-\-verbose] [\-\-retries <num_retries>]
1500+[\-\-retry-backoffs <backoff,\&.\&.\&.>] [\-\-proto <proto>]
1501+[\-P | \-\-parentfile <parentfile>] [\-L | \-\-pullfile <pullfile>]
1502+<command> [<args>]
1503+.FI
1504+.SP
1505 .SH "DESCRIPTION"
1506-.sp
1507-\fIgit ubuntu\fR is a wrapper for interacting with a source package
1508-repository on Launchpad. \fIgit ubuntu\fR only 'trusts' the Publishing
1509-History of a source package as presented by Launchpad to provide
1510-source package information.
1511-.sp
1512+.SP
1513+\fIgit ubuntu\fR is a \fBgit\fR(1) subcommand for interacting with a
1514+source package repository on Launchpad\&.
1515+\fIgit ubuntu\fR only 'trusts' the Publishing History of a source
1516+package as presented by Launchpad to provide source package
1517+information\&.
1518+.SP
1519 Once tracking a Launchpad repository, the Git repository can be
1520-updated with normal \fIgit\fR commands. For Ubuntu developers,
1521-commands (detailed below) exist for performing Ubuntu merges, building
1522-source packages and dealing with the unapproved queue.
1523-.sp
1524-.SH "COMMANDS"
1525+updated with normal \fIgit\fR commands\&.
1526+For Ubuntu developers, commands (detailed below) exist for performing
1527+Ubuntu merges, building source packages and dealing with the unapproved
1528+queue\&.
1529+.SP
1530+.SH "OPTIONS"
1531 .PP
1532-\fIbuild\fR
1533-\fIbuild-source\fR
1534+\-h, \-\-help
1535 .RS 4
1536+Prints the synopsis and a list of the most commonly used commands\&.
1537 .RE
1538 .PP
1539-\fIclone\fR
1540+\-v, \-\-verbose
1541 .RS 4
1542+Makes \fIgit ubuntu\fR verbose\&.
1543+Useful for debugging and seeing what underlying commands are run\&.
1544 .RE
1545 .PP
1546-\fIimport\fR
1547+\-\-retries <num_retries>
1548 .RS 4
1549+Number of retries to attempt for network interactions with Launchpad\&.
1550+Periodically, Launchpad may not respond for approximately 10 minutes,
1551+and clients simply need to retry until success\&.
1552+The default is 3 retry attempts\&.
1553 .RE
1554 .PP
1555-\fIimport-local\fR
1556+\-\-retry-backoffs <backoff,\&.\&.\&.>
1557 .RS 4
1558+Comma-separated list of backoff durations (in seconds) to use between
1559+retry attempts\&.
1560+The default is exponential backoff (with the default --retries value,
1561+this corresponds to 1, 2 and 4 seconds between subsequent retry
1562+attempts)\&.
1563 .RE
1564 .PP
1565-\fIimport-ppa\fR
1566+\-\-proto <proto>
1567 .RS 4
1568+Protocol to use when fetching the configured repositories\&.
1569+'git', 'http' and 'https' are valid options, with 'https' the default\&.
1570 .RE
1571 .PP
1572-\fImerge\fR
1573+\-p <parentfile>, \-\-parentfile <parentfile>
1574+.RS 4
1575+Path to a parent overrides file\&.
1576+The import algorithm cannot always correctly determine the parenting
1577+relationship between source package publications, particularly for
1578+older historical publications\&.
1579+\fIgit ubuntu\fR needs a mechanism to be told what the parents of a
1580+publication are when they cannot be correctly deduced\&. The parentfile
1581+specifies this information in the following format:
1582 .RS 4
1583+<pkgname> <child version> <publish parent version> <changelog parent version>
1584+.RE
1585+with one override per line\&.
1586+.SP
1587+A default override file is provided with \fIgit ubuntu\fR and
1588+end-users generally do not need to provide this option\&.
1589 .RE
1590 .PP
1591-\fIqueue\fR
1592+\-l <pullfile>, \-\-pullfile <pullfile>
1593+.RS 4
1594+Path to a pull overrides file\&.
1595+If the Launchpad source package data is inaccurate
1596+for a publish (this happens, for example, when a same-versioned source
1597+package is published multiple times with different orig tarballs),
1598+\fIgit ubuntu\fR needs a mechanism to be told where to obtain accurate
1599+sources from\&.
1600+The pullfile specifies this information in the following format:
1601 .RS 4
1602+<pkgname> <version> <url of dsc file> <urls of orig files>
1603+.RE
1604+with one package per line\&. '\-' for the dsc file indicates to use the
1605+one from launchpad\&.
1606+.SP
1607+A default override file is provided with \fIgit ubuntu\fR and
1608+end-users generally do not need to provide this option\&.
1609 .RE
1610+.SP
1611+.SH "GIT UBUNTU COMMANDS"
1612 .PP
1613-\fIremote\fR
1614+\fBgit-ubuntu-build\fR(1)
1615+\fBgit-ubuntu-build-source\fR(1)
1616 .RS 4
1617+Build binary and source packages\&.
1618 .RE
1619 .PP
1620-\fItag\fR
1621+\fBgit-ubuntu-clone\fR(1)
1622 .RS 4
1623+Clone a repository into a new directory\&.
1624 .RE
1625-.SH "OPTIONS"
1626 .PP
1627-\-h, \-\-help
1628+\fBgit-ubuntu-import\fR(1)
1629 .RS 4
1630-Prints the synopsis and a list of the most commonly used commands.
1631+Import the Launchpad publishing history of a source package into a
1632+repository\&.
1633 .RE
1634 .PP
1635-\-P PARENTFILE, \-\-parentfile PARENTFILE
1636+\fBgit-ubuntu-import-local\fR(1)
1637 .RS 4
1638-The import algorithm cannot always correctly determine the parenting
1639-relationship between source package publications, particularly for
1640-older historical publications. \fIgit ubuntu\fR needs a mechanism
1641-to be told what the parents of a publication are when they cannot be
1642-correctly deduced. the PARENTFILE specifies this information in the
1643-following format:
1644+Import a DSC file into a repository\&.
1645+.RE
1646+.PP
1647+\fBgit-ubuntu-import-ppa\fR(1)
1648 .RS 4
1649-<pkgname> <child version> <publish parent version> <changelog parent version>
1650+Import the publishing history of a PPA into a repository\&.
1651 .RE
1652-with one override per line.
1653-.sp
1654-A default override file is provided with \fIgit ubuntu\fR and
1655-end-users generally do not need to provide this option.
1656+.PP
1657+\fBgit-ubuntu-lint\fR(1)
1658+.RS 4
1659+Perform static checking on changes in a repository\&.
1660 .RE
1661 .PP
1662-\-L PULLFILE, \-\-pullfile PULLFILE
1663+\fBgit-ubuntu-merge\fR(1)
1664 .RS 4
1665-If, for any reason, the Launchpad source package data is inaccurate
1666-for a publish (this happens, e.g., when a same-versioned source
1667-package is published multiple times with different orig tarballs),
1668-\fIgit ubuntu\fR needs a mechanism to be told where to obtain accurate
1669-sources from. The PULLFILE specifies this information in the following
1670-format:
1671+Perform an Ubuntu merge\&.
1672+.RE
1673+.PP
1674+\fBgit-ubuntu-queue\fR(1)
1675 .RS 4
1676-<pkgname> <version> <URL of DSC file> <URLs of orig files>
1677+Interact with the unapproved queue\&.
1678 .RE
1679-with one package per line. '\-' for the DSC file indicates to use the
1680-one from Launchpad.
1681-.sp
1682-A default override file is provided with \fIgit ubuntu\fR and
1683-end-users generally do not need to provide this option.
1684+.PP
1685+\fBgit-ubuntu-remote\fR(1)
1686+.RS 4
1687+Manage tracked repositories\&.
1688+.RE
1689+.PP
1690+\fBgit-ubuntu-review\fR(1)
1691+.RS 4
1692+Perform a review of a Launchpad Merge Proposal\&.
1693+.RE
1694+.PP
1695+\fBgit-ubuntu-submit\fR(1)
1696+.RS 4
1697+Submit changes to a repository as a Launchpad Merge Proposal\&.
1698 .RE
1699-.sp
1700-.SH "EXIT VALUE"
1701-.sp
1702+.PP
1703+\fBgit-ubuntu-tag\fR(1)
1704+.RS 4
1705+Create a tag object, respecting DEP14\&.
1706+.RE
1707+.SP
1708+.SH "EXIT STATUS"
1709+.SP
1710 \fIgit ubuntu\fR exits with status 0 if a command completes
1711-successfully. \fIgit ubuntu\fR exits with nonzero exit status on
1712-errors.
1713-.sp
1714+successfully\&.
1715+\fIgit ubuntu\fR exits with nonzero exit status on errors\&.
1716+.SP
1717 .SH "FILES"
1718 .PP
1719-$GIT_DIR/.gitconfig, $HOME/.gitconfig
1720+$GIT_DIR/\&.gitconfig, $HOME/\&.gitconfig
1721 .RS 4
1722 Some \fIgit ubuntu\fR configuration is stored via \fIgit config\fR in
1723-both the global user and repository local level files. Specificially:
1724-.sp
1725-gitubuntu.lpuser
1726+both the global user and repository local level files\&.
1727+Specificially:
1728+.SP
1729 .RS 4
1730-Stores the Launchpad user name for authentication in the global user
1731-file.
1732+gitubuntu\&.lpuser
1733 .RE
1734+Stores the Launchpad user name for authentication in the global user
1735+file\&.
1736 .RE
1737-.sp
1738+.SP
1739 .SH "REPORTING BUGS"
1740-.sp
1741-Report bugs at .UR https://bugs.launchpad.net/usd-importer .UE.
1742+.SP
1743+Report bugs at
1744+.UR https://bugs.launchpad.net/usd-importer
1745+.UE
1746+\&.
1747+.PP
1748 .SH "AUTHORS"
1749-.sp
1750+.SP
1751 \fIgit ubuntu\fR was started conceptually by Robie Basak, and is
1752-currently maintained by Nishanth Aravamudan. Numerous contributions
1753-have been made by Scott Moser and other members of the Ubuntu Server
1754-team.
1755-.sp
1756+currently maintained by Nishanth Aravamudan\&.
1757+Numerous contributions have been made by Scott Moser and other members
1758+of the Ubuntu Server team\&.
1759+.SP
1760 .SH "SEE ALSO"
1761-.sp
1762+.SP
1763 \fBgit\fR(1)
1764-.sp
1765-.UR
1766-https://wiki.ubuntu.com/UbuntuDevelopment/Merging/GitWorkflow
1767+.PP
1768+.UR https://wiki\&.ubuntu\&.com/UbuntuDevelopment/Merging/GitWorkflow
1769 .UE
1770+.PP
1771+.\" Would prefer to use the following URL, but it is static
1772+.\" .UR https://insights\&.ubuntu\&.com/2017/07/24/developing-ubuntu-using-git/
1773+.\" .UE
1774+.UR http://www\&.justgohome\&.co\&.uk/blog/2017/07/developing-ubuntu-using-git\&.html
1775+.UE
1776+.PP
1777+.SH "GIT-UBUNTU"
1778+Part of the \fBgit-ubuntu\fR(1) suite

Subscribers

People subscribed via source and target branches