transition: prefix_directives
[homepage.git] / blog / posts / 2007 / 08 / debcheckout_bits.mdwn
1 [[!meta date="2007-08-17 10:13:04 +0200"]]
2 debcheckout: some new bits
3 ====
4
5 Some new bits about [[debcheckout]] (talk is cheap, [code
6 here](http://svn.debian.org/wsvn/devscripts/trunk/scripts/debcheckout.pl?op=file&rev=0&sc=0)):
7
8 * **authenticated mode**. Consider svn (similar arguments stand for other VCS).
9 When checking out alioth repositories using the svn:// prefix, the resulting
10 local copy can't be committed to, since it would require (assuming you have an
11 alioth account and the needed permissions) a svn+ssh:// access. "authenticated
12 mode" is precisely for that: when checking out well-known repositories (only
13 alioth's ATM) you can specify an extra "-a" argument, with an optional "-u" to
14 specify your user name, and debcheckout will rewrite the repository URL so that
15 the resulting local copy can be committed to. ATM authenticated mode works for
16 svn, hg, bzr, git.
17
18 * **destination dir**. It is now possible to specify where do you want to check
19 out a package repository (so that we avoid ending up with tons of anonymous
20 "trunk" directories). The syntax is the common "debcheckout PKG DESTDIR" idiom
21 and DESTDIR, if not provided, defaults to the package name. (Thanks to
22 [JoeyH](http://kitenet.net/~joey/blog/) for the idea and the initial patch.)
23
24 * **sorry about arch**, but ATM it's almost non-functioning, and I'm not willing
25 to lose time on it, since among all the VCSs supported by debcheckout it's the
26 only one I've never used. If you want support for it, please provide code!
27
28 (Perl) Tip of the day: Switch.pm
29 ----
30
31 With ["use Switch;"](http://perldoc.perl.org/Switch.html) you will win a switch
32 statement for your Perl programs, which can be used as follows:
33
34     switch ($repo_type) {
35       case "cvs"  { my $module = pop @cmd; push @cmd, ("-d", $destdir, $module); }
36       case /^(bzr|darcs|git|hg|svn)$/
37                   { push @cmd, $destdir; }
38       else { die "sorry, don't know how to set the destination directory for $repo_type repositories (patches welcome!)\n"; }
39     }
40
41 This is far better than a chain of if/elsif statements and has even a sane
42 semantics (e.g. no need of explicit breaks, possibility to have higher-case
43 branches, ...). Unfortunately, it is not possible (using a simple syntax) to
44 match a scalar value against an array case branch. Therefore the only way to
45 factorize branches is (when possible) to rely on regexp alternative branches, as
46 it is done in the code snippet above.
47
48 [[!tag planet/debian debian lang/english qa vcs debcheckout]]