From 3533ce28a8770f824e6fcaf7a2ed3c0b0b7a9406 Mon Sep 17 00:00:00 2001 From: Niels Thykier Date: Fri, 18 May 2018 18:22:13 +0000 Subject: Dh_Lib.pm: Add "is_empty_dir" Signed-off-by: Niels Thykier --- lib/Debian/Debhelper/Dh_Lib.pm | 18 ++++++++++++++++++ t/Dh_Lib/path.t | 26 ++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100755 t/Dh_Lib/path.t diff --git a/lib/Debian/Debhelper/Dh_Lib.pm b/lib/Debian/Debhelper/Dh_Lib.pm index 7da49443..a2b0d4f1 100644 --- a/lib/Debian/Debhelper/Dh_Lib.pm +++ b/lib/Debian/Debhelper/Dh_Lib.pm @@ -101,6 +101,7 @@ qw( rm_files excludefile is_so_or_exec_elf_file + is_empty_dir reset_perm_and_owner log_installed_files @@ -2360,6 +2361,23 @@ sub is_so_or_exec_elf_file { return 1; } +# Returns true iff the given argument is an empty directory. +# Corner-cases: +# - false if not a directory +sub is_empty_dir { + my ($dir) = @_; + return 0 if not -d $dir; + my $ret = 1; + opendir(my $dir_fd, $dir) or error("opendir($dir) failed: $!"); + while (defined(my $entry = readdir($dir_fd))) { + next if $entry eq '.' or $entry eq '..'; + $ret = 0; + last; + } + closedir($dir_fd); + return $ret; +} + sub on_pkgs_in_parallel(&) { unshift(@_, $dh{DOPACKAGES}); goto \&on_items_in_parallel; diff --git a/t/Dh_Lib/path.t b/t/Dh_Lib/path.t new file mode 100755 index 00000000..e5f90616 --- /dev/null +++ b/t/Dh_Lib/path.t @@ -0,0 +1,26 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Test::More; + +use Cwd qw(abs_path); +use File::Basename qw(dirname); +use File::Temp qw(tempdir); + +BEGIN { + my $dir = dirname(abs_path(__FILE__)); + unshift(@INC, dirname($dir)); + chdir($dir) or error("chdir($dir) failed: $!"); +}; + +use Test::DH; +use Debian::Debhelper::Dh_Lib qw(!dirname); + +plan(tests => 3); + +ok(!is_empty_dir(__FILE__), "is_empty_dir(file) is false"); +ok(!is_empty_dir(dirname(__FILE__)), "is_empty_dir(non-empty) is false"); + +my $tempdir = tempdir(CLEANUP => 1); +ok(is_empty_dir($tempdir), "is_empty_dir(new-temp-dir) is true"); -- cgit v1.2.3