+
+ step assign => sub {
+ my $tle;
+ $tle = $tl->lookup_tapelabel($opt_label);
+ if (defined $tle) {
+ my $meta = $opt_meta;
+ if (defined $meta) {
+ if (defined($tle->{'meta'}) && $meta ne $tle->{'meta'} &&
+ !$opt_force) {
+ return failure("Can't change meta-label with --force, old meta-label is '$tle->{'meta'}'");
+ }
+ } else {
+ $meta = $tle->{'meta'};
+ }
+ my $barcode = $opt_barcode;
+ if (defined $barcode) {
+ if (defined($tle->{'barcode'}) &&
+ $barcode ne $tle->{'barcode'} &&
+ !$opt_force) {
+ return failure("Can't change barcode with --force, old barcode is '$tle->{'barcode'}'");
+ }
+ } else {
+ $barcode = $tle->{'barcode'};
+ }
+
+ $tl->reload(1);
+ $tl->remove_tapelabel($opt_label);
+ $tl->add_tapelabel($tle->{'datestamp'}, $tle->{'label'},
+ $tle->{'comment'}, $tle->{'reuse'}, $meta,
+ $barcode);
+ $tl->write();
+ } else {
+ return failure("Label '$opt_label' is not in the tapelist file", $finished_cb);
+ }
+
+ $chg->inventory(inventory_cb => $steps->{'assign_inventory'});
+ };
+
+ step assign_inventory => sub {
+ my ($err, $inv) = @_;
+
+ if ($err) {
+ return $finished_cb->() if $err->notimpl;
+ return failure($err, $finished_cb);
+ }
+
+ for my $sl (@$inv) {
+ if (defined $sl->{'label'} && $sl->{'label'} eq $opt_label) {
+ return $chg->set_meta_label(meta => $opt_meta,
+ slot => $sl->{'slot'},
+ finished_cb => $steps->{'done'});
+ }
+ }
+ $finished_cb->();
+ };
+
+ step done => sub {
+ $finished_cb->();
+ }