source: trunk/project-meta/project-meta @ 154

Last change on this file since 154 was 154, checked in by g7moreau, 6 years ago
  • Begin make-author implementation
  • Property svn:executable set to *
File size: 4.6 KB
Line 
1#!/usr/bin/env perl
2#
3# 2018/01/17 Gabriel Moreau
4
5use strict;
6use warnings;
7
8use File::Copy qw{copy};   
9use YAML::Syck;
10use Getopt::Long();
11use Cwd();
12use Template;
13
14
15my ($verbose);
16Getopt::Long::GetOptions(
17   'verbose' => \$verbose,
18   );
19
20
21my %CMD_DB = (
22   'help'            => \&cmd_help,
23   'version'         => \&cmd_version,
24   'check'           => \&cmd_check,
25   'make-link'       => \&cmd_make_link,
26   'make-author'     => \&cmd_make_author,
27   'make-licence'    => \&cmd_make_licence,
28   );
29
30################################################################
31# main program
32################################################################
33
34my $cmd = shift @ARGV || 'help';
35if (defined $CMD_DB{$cmd}) {
36   $CMD_DB{$cmd}->(@ARGV);
37   }
38else {
39   print {*STDERR} "project-meta: command $cmd not found\n\n";
40   $CMD_DB{'help'}->();
41   exit 1;
42   }
43
44exit;
45
46################################################################
47# subroutine
48################################################################
49
50################################################################
51# command
52################################################################
53
54sub cmd_help {
55   print <<END;
56NAME
57   $0 - action on project metadata
58
59SYNOPSIS
60   $0 [-verbose] check
61END
62   }
63
64################################################################
65
66sub cmd_version {
67   print "0.01\n";
68   }
69
70################################################################
71
72sub print_ok {
73   my ($key, $test) = @_;
74   
75   printf "%-35s : %s\n", $key, $test ? 'yes' : 'no';
76   }
77
78################################################################
79
80sub cmd_check {
81   my $meta = YAML::Syck::LoadFile("PROJECT-META.yml");
82
83   my $acronym     = $meta->{'project'}{'acronym'};
84   my $current_dir = Cwd::getcwd();
85   my $dap_folder  = $meta->{'public-dap'}{'dap-folder'};
86
87   print_ok 'project/acronym',                  $acronym =~ m{\d\d\w[\w\d_]+};
88   print_ok 'public-dap/dap-folder',            $dap_folder ne '' and $dap_folder =~ m{^/};
89   print_ok 'dap-folder not match current_dir', $dap_folder !~ m{$current_dir};
90
91   #print YAML::Syck::Dump($meta);
92   }
93
94################################################################
95
96sub addfolder2list {
97   my ($folderdb, $folder) = @_;
98   
99   $folder =~ s{/[^/]+$}{};
100   $folderdb->{$folder}++;
101
102   addfolder2list($folderdb, $folder) if $folder =~ m{/};
103   }
104
105################################################################
106
107sub cmd_make_link {
108   my $meta = YAML::Syck::LoadFile("PROJECT-META.yml");
109   my $acronym = $meta->{'project'}{'acronym'};
110   my $current_dir = Cwd::getcwd();
111   my $dap_folder = $meta->{'public-dap'}{'dap-folder'};
112
113   # Create a list of the folder
114   my %folders;
115   for my $dataset (@{$meta->{'public-dap'}{'data-set'}}) {
116      addfolder2list(\%folders, $dataset);
117      }
118
119   print "chmod o+rX,o-w $current_dir\n";
120   for my $folder (sort keys %folders) {
121      print "chmod o+rX,o-w $current_dir/$folder\n";
122      print "mkdir -p $dap_folder/$acronym/$folder\n";
123      }
124
125   for my $dataset (@{$meta->{'public-dap'}{'data-set'}}) {
126      my $folder = $dataset =~ s{/[^/]+$}{}r;
127      print "ln --symbolic --target-directory $dap_folder/$acronym/$folder/ $current_dir/$dataset\n";
128
129   print "chmod -R o+rX,o-w $dap_folder/$acronym/\n";
130      }
131   }
132
133################################################################
134
135sub cmd_make_author {
136   my $meta = YAML::Syck::LoadFile("PROJECT-META.yml");
137
138   my $current_dir = Cwd::getcwd();
139   my $template_author = "/usr/share/project-meta/template.d/AUTHORS.tt';
140   
141   my $acronym    = $meta->{'project'}{'acronym'};
142   my $authors_list = $meta->{'project'}{'authors'};
143   
144   my $tt = Template->new(INCLUDE_PATH => '/usr/share/project-meta/template.d');
145   my $msg_format = '';
146   $tt->process('AUTHORS.tt',
147      {
148         acronym    => $acronym,
149         authorlist => $authors_list,
150      }, \$msg_format) || die $tt->error;
151
152   print "$msg_format\n\n";
153   }
154
155################################################################
156
157sub cmd_make_licence {
158   my $meta = YAML::Syck::LoadFile("PROJECT-META.yml");
159
160   my $current_dir = Cwd::getcwd();
161
162   if (-f "$current_dir/LICENCE.txt") {
163      print "Warning: LICENCE.txt already exists\n";
164      return;
165      }
166
167   my $licence = $meta->{'public-dap'}{'data-licence'};
168
169   if (not -f "/usr/share/project-meta/licence.d/$licence.txt") {
170      print "Error: licence $licence doesn't exists in project-meta database\n";
171      exit 1;
172      }
173
174   copy("/usr/share/project-meta/licence.d/$licence.txt", "$current_dir/LICENCE.txt")
175      or die "Error: licence copy failed - $!";
176
177   print "Info: LICENCE.txt file create\n";
178   return;
179   }
180
181################################################################
Note: See TracBrowser for help on using the repository browser.