Working on making texlive work correctly with update-plist

This is a first option (disregard -h/-H which are placeholders for now)

Namely, it allows -x pkgpath as a parameter to update-plist
to make it ignore all paths from a pkgpath


(if people want to know the gory details, look into 
/usr/ports/print/texlive/texmf/files/update_plist_hints.py
which has a large set of files hardcoded to be ignored, as they are all
parts of some other packages... with this option, this part of
update_plist_hints.py can die)

Index: update-plist
===================================================================
RCS file: /build/data/openbsd/cvs/ports/infrastructure/bin/update-plist,v
diff -u -p -r1.216 update-plist
--- update-plist        18 Jan 2026 10:02:28 -0000      1.216
+++ update-plist        2 Jul 2026 09:53:26 -0000
@@ -307,6 +307,10 @@ sub write_conflict_info($self, $fh)
 sub is_part_of_conflict_info($)
 { 0 }
 
+sub exclude_files($, $, $)
+{
+}
+
 package OpenBSD::PackingElement::State;
 
 # that stuff NEVER gets copied over, but interpolated from existing objects
@@ -648,6 +652,11 @@ sub show_unknown($self)
        }
 }
 
+sub exclude_files($self, $state, $base)
+{
+       $state->{ignored}{$base.'/'.$self->fullname} = 1;
+}
+
 package OpenBSD::PackingElement::FileBase;
 sub bookmark($self, $plist)
 {
@@ -859,12 +868,21 @@ sub handle_options($state)
                'V' => sub($var) {
                        push(@{$state->{no_version}}, $var);
                    },
+               'x' => sub($pkgpath) {
+                       $state->exclude_pkgpath($pkgpath);
+                   },
+               'h' => sub($h) {
+                       $state->read_hints_file($h, 0);
+                   },
+               'H' => sub($h) {
+                       $state->read_hints_file($h, 1);
+                   },
 
        };
-       $state->SUPER::handle_options('OrvI:c:qV:fFC:i:j:L:s:S:X:P:w:e:E:H:', 
-           '[-FfmnOrvx] [-C dir] [-c comment] [-E ext] [-e ext] [-H hints]',
+       
$state->SUPER::handle_options('OrvI:c:qV:fFC:i:j:L:s:S:X:x:P:w:e:E:H:h:', 
+           '[-FfmnOrvx] [-C dir] [-c comment] [-E ext] [-e ext] [-[Hh] hints]',
            '[-i var] [-I ignored] [-j jobs] [-L logfile] [-P pkgdir]',
-           '[-S var] [-s var] [-V var] [-w suffix] [-X path]',
+           '[-S var] [-s var] [-V var] [-w suffix] [-X path] [-x pkgpath]',
            '-- pkg_create_args ...');
        $state->{pkgdir} = $state->opt('P');
        $state->{scan_as_root} = $state->opt('r');
@@ -886,6 +904,19 @@ sub handle_options($state)
        }
 }
 
+sub exclude_pkgpath($state, $pkgpath)
+{
+       my $plist = OpenBSD::Dependencies::CreateSolver->ask_tree($state,
+           $pkgpath, $ENV{'PORTSDIR'}, \&OpenBSD::PackingList::FilesOnly,
+           'print-plist');
+       if (!defined $plist) {
+               $state->fatal("Can't read plist for #1", $pkgpath);
+       }
+       # XXX this is delayed because we need to know WORKINST, and we
+       # only get this from subpackage options
+       push(@{$state->{excluded_plists}}, $plist);
+}
+
 sub parse_hints_file($state, $fname)
 {
        open(my $f, '<', $fname) or 
@@ -1377,8 +1408,18 @@ sub try_pkglocate($self)
        }
 }
 
+sub ignore_excluded_plists($self, $base)
+{
+       my $state = $self->{state};
+       for my $plist (@{$state->{excluded_plists}}) {
+               $plist->exclude_files($state, $base);
+       }
+       delete $state->{excluded_plists};
+}
+
 my $self = UpdatePlist->new;
 my $base = OpenBSD::UpdatePlistFactory->parse_args($self);
+$self->ignore_excluded_plists($base);
 $self->known_objects;
 $self->scan_fake_dir($base);
 $self->zap_debug_files;

Reply via email to