summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSiep Kroonenberg <siepo@cybercomm.nl>2022-03-18 21:42:01 +0000
committerSiep Kroonenberg <siepo@cybercomm.nl>2022-03-18 21:42:01 +0000
commit7bd6a757fb3e108777ca9bfda5985f31aa0ebf58 (patch)
tree8d85fffc771b0e38320b8b85eafe9d1d96e6ebe2
parentd381da11f9589438ab45fc3bd90d51cee6f0aaf3 (diff)
diskfree for windows >= 8
git-svn-id: svn://tug.org/texlive/trunk@62794 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/tlpkg/TeXLive/TLUtils.pm38
1 files changed, 37 insertions, 1 deletions
diff --git a/Master/tlpkg/TeXLive/TLUtils.pm b/Master/tlpkg/TeXLive/TLUtils.pm
index 252f2295b08..e3f51b5de97 100644
--- a/Master/tlpkg/TeXLive/TLUtils.pm
+++ b/Master/tlpkg/TeXLive/TLUtils.pm
@@ -815,6 +815,42 @@ computing the disk space.
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
+ 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 +868,7 @@ sub diskfree {
$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