texlive[63002] Master/tlpkg/TeXLive/TLUtils.pm: Disk space code for

commits+siepo at tug.org commits+siepo at tug.org
Mon Apr 11 16:04:37 CEST 2022


Revision: 63002
          http://tug.org/svn/texlive?view=revision&revision=63002
Author:   siepo
Date:     2022-04-11 16:04:37 +0200 (Mon, 11 Apr 2022)
Log Message:
-----------
Disk space code for Windows reinstated

Modified Paths:
--------------
    trunk/Master/tlpkg/TeXLive/TLUtils.pm

Modified: trunk/Master/tlpkg/TeXLive/TLUtils.pm
===================================================================
--- trunk/Master/tlpkg/TeXLive/TLUtils.pm	2022-04-11 14:03:28 UTC (rev 63001)
+++ trunk/Master/tlpkg/TeXLive/TLUtils.pm	2022-04-11 14:04:37 UTC (rev 63002)
@@ -815,6 +815,43 @@
 
 sub diskfree {
   my $td = shift;
+  my ($output, $retval);
+  if (win32()) {
+    # the powershell one-liner only works from win8 on.
+    my @winver = Win32::GetOSVersion();
+    if ($winver[1]<=6 && $winver[2]<=1) {
+      return -1;
+    }
+    my $avl;
+    if ($td =~ /^[a-zA-Z]:/) {
+      my $drv = substr($td,0,1);
+      # ea ignore: error action ignore: no output at all
+      my $cmd = "powershell -nologo -noninteractive -noprofile -command " .
+       "\"get-psdrive -name $drv -ea ignore |select-object free |format-wide\"";
+      ($output, $retval) = run_cmd($cmd);
+      # ignore exit code, just parse the output, which should
+      # consist of empty lines and a number surrounded by spaces
+      my @lines = split(/\r*\n/, $output);
+      foreach (@lines) {
+        chomp $_;
+        if ($_ !~ /^\s*$/) {
+          $_ =~ s/^\s*//;
+          $_ =~ s/\s*$//;
+          $avl = $_;
+          last;
+        }
+      }
+      if ($avl !~ /^[0-9]+$/) {
+        return (-1);
+      } else {
+        return (int($avl/(1024*1024)));
+      }
+    } else {
+      # maybe UNC drive; do not try to handle this
+      return -1;
+    }
+  }
+  # now windows case has been taken care of
   return (-1) if (! $::progs{"df"});
   # drop final /
   $td =~ s!/$!!;
@@ -832,7 +869,7 @@
   $td .= "/" if ($td !~ m!/$!);
   return (-1) if (! -e $td);
   debug("Checking for free diskspace in $td\n");
-  my ($output, $retval) = run_cmd("df -P \"$td\"", POSIXLY_CORRECT => 1);
+  ($output, $retval) = run_cmd("df -P \"$td\"", POSIXLY_CORRECT => 1);
   if ($retval == 0) {
     # Output format should be this:
     # Filesystem      512-blocks       Used  Available Capacity Mounted on



More information about the tex-live-commits mailing list.