Xu Xiaodong avatar Xu Xiaodong committed 51d06a4

initial commit

Comments (0)

Files changed (2)

+Create a Bitbucket repository from the command line.
+#!/usr/bin/env perl
+#
+# name:      create a bitbucket repository from the command line
+# author:    Xu Xiaodong <xxdlhy@gmail.com>
+# license:   GPL
+# created:   2011 Apr 13
+# modified:  2011 Apr 13
+#
+
+use Modern::Perl;
+use LWP::UserAgent;
+use MIME::Base64;
+use Getopt::Long;
+
+my ( $name, $desc, $is_private ) = ( '', '', 0 );
+
+GetOptions(
+    'n|name=s' => \$name,
+    'd|desc=s' => \$desc,
+    'p|priv'   => \$is_private,
+);
+
+if ($name) {
+    create( $name, $desc, $is_private );
+}
+else {
+    die <<USAGE;
+Usage: $0 -n <name> [-d desc] [-p]
+
+    -n, --name name         Repository name
+    -d, --desc description  Project description
+    -p, --priv private      Set repository as private
+USAGE
+}
+
+sub account {
+    my ( $user, $pass );
+
+    open my ($in_fh), '<', "$ENV{HOME}/.hgrc" or die "Can't open .hgrc: $!\n";
+
+    while (<$in_fh>) {
+        next if /^[#;]/;
+        next if /^\s*$/;
+
+        $user = $1 if /\.username\s+=\s+(.*)$/;
+        $pass = $1 if /\.password\s+=\s+(.*)$/;
+    }
+
+    return ( $user, $pass );
+
+    close $in_fh;
+}
+
+sub create {
+    my ( $name, $desc, $is_private ) = @_;
+    my %param;
+
+    $param{name}        = $name;
+    $param{description} = $desc;
+    $param{is_private}  = $is_private;
+
+    my $url = 'https://api.bitbucket.org/1.0/repositories/';
+    my ( $user, $pass ) = account();
+    my $ua = LWP::UserAgent->new();
+
+    $ua->default_header(
+        authorization => 'Basic ' . encode_base64( $user . ':' . $pass ) );
+
+    my $resp = $ua->post( $url, \%param );
+
+    if ( $resp->is_success ) {
+        say $resp->decoded_content;
+    }
+    else {
+        die $resp->status_line;
+    }
+}
+
+# vim: ai:et:ts=4:sw=4:tw=78:ft=perl
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.