File: mkdeb

package info (click to toggle)
eln 1.5.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,876 kB
  • sloc: cpp: 26,606; perl: 796; python: 437; sh: 73; makefile: 32; xml: 8
file content (98 lines) | stat: -rwxr-xr-x 2,551 bytes parent folder | download | duplicates (3)
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
#!/usr/bin/perl -w

use strict;

# mkdeb - creates a .deb from a git archive

# Usage: mkdeb
# It is required that preprelease has been used first so that the
# toplevel CHANGELOG file is up to date.

sub System {
  print STDERR "-> ", join(" ", @_), "\n";
  return system(@_);
}

my $name = `git config user.name`;
chomp $name;
die "No user name configured\n" if $name eq "";

my $email = `git config user.email`;
chomp $email;
die "No user email configured\n" if $email eq "";

System("git checkout debian");
System("git merge master");

my $status = `git status --porcelain`;
chomp $status;
die "You have uncommitted changes\n" unless $status eq "";

my $here = `pwd`;
chomp $here;
my @bits = split("/", $here);
my $package = pop @bits;

open IN, "<CHANGELOG" or die "Cannot read CHANGELOG\n";
my $header = <IN>;
chomp $header;
my ($pkg, $vsn) = split(/ /, $header);
die "Package name mismatch\n" unless $pkg eq $package;
die "Bad version\n" unless $vsn =~ /^\d+\.\d+\.\d+(-.+)?$/;

my $message = "";
while (<IN>) {
  chomp;
  if (/^\s+--/) {
    last;
  } elsif (/^$/ || /^\s+/) {
    $message .= "$_\n";
  } else {
    last;
  }
}
close IN;
$message =~ s/^\s*\n+//s;
$message =~ s/\s+$//s;

my $first = `head -n 1 debian/changelog`;
chomp $first;
$first =~ /^(.*?)\s+\((.*?)\)\s+(.*)$/ or die "Cannot parse debian/changelog\n";
my $debpkg = $1;
my $debvsn = $2;
my $debinfo = $3;
die "Debian package mismatch\n" unless $debpkg eq $package;

print STDERR "Version: $debvsn vs $vsn ($debinfo; $debpkg)\n";

if ($debvsn =~ /^$vsn-/) {
  print STDERR "debian/changelog already up-to-date; not touching.\n";
} else {
  system("mv debian/changelog debian/changelog~") and
    die "Cannot move debian/changelog\n";
  open IN, "<debian/changelog~" or die "Cannot read debian/changelog\n";
  open OUT, ">debian/changelog" or die "Cannot write debian/changelog\n";
  print OUT "$package ($vsn-1) $debinfo\n";
  print OUT "\n";
  print OUT "$message\n";
  print OUT "\n";
  my $date = `date -R`;
  chomp $date;
  print OUT " -- $name <$email>  $date\n\n";
  while (<IN>) {
    print OUT $_;
  }
  close IN;
  close OUT;
  System("git commit -a -m'debian changelog updated'") and die "Failed to commit\n";
}

System("gbp buildpackage") and die "Package building failed\n";

System("mv ../${package}_$vsn-* ../releases") and die "Archiving failed\n";
System("mv ../${package}_$vsn.* ../releases");

print STDERR "Your binary debian package:\n";
system("ls ../releases/${package}_$vsn-1*deb");

print STDERR "\nDo not forget to run:\n  git checkout master\n";