annotate changemeta.pl @ 42:8ae4896265e8

fixed typo
author casties
date Thu, 29 Jun 2006 09:42:46 +0200
parents 2afcb4ff750e
children b1f1d1fbf6e5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
1 #!/usr/local/bin/perl -w
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
2
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
3 use strict;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
4 use XML::LibXML;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
5
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
6 use lib '/usr/local/mpiwg/archive_devel';
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
7 use MPIWGStor;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
8
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
9 # make output unbuffered
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
10 $|=1;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
11
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
12 # program version
40
2afcb4ff750e first real version
casties
parents: 39
diff changeset
13 my $version = "0.2 (27.6.2006 ROC)";
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
14 my $help =
42
8ae4896265e8 fixed typo
casties
parents: 40
diff changeset
15 "use: changemeta [options] dir
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
16 options:
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
17 -debug show debugging info
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
18 -dry-run simulate, dont'do anything
40
2afcb4ff750e first real version
casties
parents: 39
diff changeset
19 -access=free set free access tag (use access=mpiwg for restricted access)
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
20 ";
42
8ae4896265e8 fixed typo
casties
parents: 40
diff changeset
21 logger("INFO", "changemeta $version");
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
22
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
23
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
24 #######################################################
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
25 # internal parameters
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
26 #
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
27
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
28 # read command line parameters
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
29 my $args = MPIWGStor::parseargs;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
30 if (! scalar(%$args)) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
31 print $help, "\n";
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
32 exit 1;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
33 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
34
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
35 # debug level
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
36 $debug = (exists $$args{'debug'}) ? $$args{'debug'} : 0;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
37
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
38 # simulate action only
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
39 my $dry_run = (exists $$args{'dry-run'}) ? $$args{'dry-run'} : 0;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
40 logger('DEBUG', "dry-run: $dry_run");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
41
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
42 # access type
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
43 my $access_type = (exists $$args{'access'}) ? $$args{'access'} : "";
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
44 logger('DEBUG', "access: $access_type");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
45
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
46 # index.meta namespace (not really implemented!)
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
47 my $namespace = "";
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
48
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
49
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
50 my $xml_changed = 0;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
51 my $errcnt = 0;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
52 my $warncnt = 0;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
53
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
54 #######################################################
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
55 # check parameters that were passed to the program
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
56 #
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
57 my $docdir = $$args{'path'};
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
58 if (! $docdir) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
59 logger("ABORT", "no document directory given!");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
60 exit 1;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
61 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
62 # strip double slashes
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
63 $docdir = sstrip($docdir, 1);
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
64 if (! -d $docdir) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
65 logger("ABORT", "document directory \'$docdir\' doesn't exist!");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
66 exit 1;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
67 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
68
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
69
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
70 #######################################################
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
71 # subroutines
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
72 #
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
73
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
74 #
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
75 # sets access tag to given access_type
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
76 # removes access tag if access_type is empty
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
77 #
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
78 sub change_access {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
79 my ($access_type, $index_root) = @_;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
80
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
81 my $parent_tag = $index_root->findnodes('//meta/access-conditions')->get_node(1);
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
82 if ($parent_tag) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
83 my $access_tag = $parent_tag->findnodes('access')->get_node(1);
40
2afcb4ff750e first real version
casties
parents: 39
diff changeset
84 # remove access tag if it exists
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
85 if ($access_tag) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
86 $parent_tag->removeChild($access_tag);
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
87 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
88 } else {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
89 $parent_tag = create_element_path('meta/access-conditions', $index_root, $namespace);
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
90 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
91
40
2afcb4ff750e first real version
casties
parents: 39
diff changeset
92 # add new access tag (if $access_Type is not empty)
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
93 if ($access_type eq "free") {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
94 create_element_path('access@type=free', $parent_tag, $namespace);
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
95 } elsif (length $access_type > 0) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
96 my $acc_tag = create_element_path('access@type=institution', $parent_tag, $namespace);
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
97 create_text_path('name', $access_type, $acc_tag, $namespace);
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
98 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
99 $xml_changed++
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
100 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
101
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
102
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
103
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
104
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
105
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
106
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
107
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
108 #######################################################
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
109 # Main
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
110 #
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
111
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
112 my $index_doc;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
113 my $index_root;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
114
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
115 # load index.meta file
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
116 if (-f "$docdir/index.meta") {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
117 ($index_doc, $index_root) = read_xml("$docdir/index.meta");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
118 } else {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
119 logger("ABORT", "index file \'$docdir/index.meta\' doesn't exist!");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
120 exit 1;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
121 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
122
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
123 if ($access_type) {
40
2afcb4ff750e first real version
casties
parents: 39
diff changeset
124 change_access($access_type, $index_root);
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
125 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
126
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
127
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
128 logger("INFO", "$warncnt warnings");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
129 logger("INFO", "$errcnt errors");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
130 if ($errcnt > 0) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
131 logger("ABORT", "there were errors!");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
132 exit 1;
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
133 } elsif ($xml_changed) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
134 # write new index.meta file
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
135 if ($dry_run) {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
136 logger('DEBUG', "would write $docdir/index.meta");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
137 logger('DEBUG', $index_doc->toString(1));
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
138 } else {
40
2afcb4ff750e first real version
casties
parents: 39
diff changeset
139 write_xml($index_doc, "$docdir/index.meta");
39
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
140 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
141 logger("DONE", "changed index file successfully!");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
142 } else {
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
143 logger("DONE", "didn't change index file");
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
144 }
2ee05ce0c0d2 first version of changemeta script
casties
parents:
diff changeset
145