2ad5cf8b86d30f00b60d522b04e6df9c55783713
[homepage.git] / blog / posts / 2007 / 08 / debcheckout.mdwn
1 [[meta date="2007-08-15 16:14:05 +0200"]]
2 Introducing debcheckout
3 ====
4
5 Cute little tiny teeny new addition to
6 [devscripts](http://packages.qa.debian.org/devscripts): *debcheckout* (not yet
7 uploaded though, in the mean time you can get it [from
8 here](http://svn.debian.org/wsvn/devscripts/trunk/scripts/debcheckout.pl?op=file&rev=0&sc=0).
9 *It checks out the versioning repository used to maintain a given package*.
10
11 Sample usage:
12
13     $ debcheckout devscripts
14     declared svn repository at svn://svn.debian.org/devscripts/trunk
15     svn co svn://svn.debian.org/devscripts/trunk ...
16     A    trunk/debian
17     A    trunk/debian/control
18     A    trunk/debian/links
19     A    trunk/debian/dirs
20     A    trunk/debian/compat
21     <snip>
22      U   trunk
23     Checked out revision 749.
24     $
25
26 The information about where to find a repository is extracted parsing (in a
27 rather dumb way actually, but I really can't stand
28 [libapt-pkg](http://packages.debian.org/unstable/libdevel/libapt-pkg-dev) API!)
29 [[Vcs-XXX_fields|02/xs_vcs_browser]].
30
31 Intended usages:
32
33 1. NMU scenarios: when you're NMUing, please commit your patches (if possible of
34    course: directly to the repository if it has already adhered to the [[open
35    your VCS campaign|DD_wide_commit_on_alioth]] I'm sponsoring, or somewhere
36    else if you're using a distributed VCS); with debcheckout the first step it's
37    easy
38
39 2. ease the creation of patches: isn't it better to checkout a repository,
40    fiddle around, and then just invoke svn (or whatever) diff instead of
41    remembering (I always forgot that!) to first create a .orig copy of the
42    debianized source tree?
43
44 3. retrieving the bleeding edge version of a package which includes the patch
45    for a pending bug you have been waiting for ages
46
47 RFC
48 ----
49
50 Let me know what you think of debcheckout, feature requests, whatever. In
51 particular let me know if I did something wrong using some VCS, since I'm not
52 proficient in all VCSs supported by debcheckout; for example: I'm quite sure the
53 Arch part is not working ... help is appreciated!
54
55 Vcs-Cvs proposed convention
56 ----
57
58 debcheckout can also give the ground for standardizing the VCS-specific meanings
59 of the various Vcs-XXX fields. In writing it I've noticed that almost all VCSs
60 have de facto standards about what to put in the field, with the notable
61 exception of CVS.  That's probably because all modern VCSs rely on some URL-like
62 identifier for a repository location, while CVS does not. It needs a pair
63 URL/module to be checkout.
64
65 The format I'm currently supporting in debcheckout is a pair of space separated
66 values "CVSROOT MODULENAME"; later on I'm using those values as in <tt>cvs -d
67 CVSROOT checkout MODULENAME</tt>.  Also please note that if you do not put the
68 heading ":pserver:" string in the CVSROOT, users won't be able to checkout the
69 repository without providing a password.
70
71 Tip of the day: Pod::Usage
72 ----
73
74 Perl's [Pod::Usage](http://perldoc.perl.org/Pod/Usage.html) module is cool.
75 Finally I can write the usage string only once instead of duplicating it in the
76 manpage and in the string to be printed upon --help. Ruby had something similar,
77 but the output on console was so horrible that I preferred duplicating stuff for
78 Ruby scripts.
79
80 **Update**: I've changed the link to debcheckout.pl so that it points to the
81 "live" version in the devscripts repository, since some patches are already
82 flowing in ...
83
84 [[tag planet/debian debian lang/english qa hack debcheckout vcs]]