From 4f814e0e4c673f86dc65a557f7e55f6b5efd1529 Mon Sep 17 00:00:00 2001 From: Anton Makrushin Date: Mon, 20 Mar 2023 20:05:42 +0530 Subject: Exclude VCS directory with writing from an archive See https://savannah.gnu.org/bugs/?62859 --- po/.gitignore | 4 +++ src/names.c | 2 +- tests/exclude18.at | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/testsuite.at | 1 + 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 tests/exclude18.at diff --git a/po/.gitignore b/po/.gitignore index 639eafa7..7035b249 100644 --- a/po/.gitignore +++ b/po/.gitignore @@ -1,3 +1,7 @@ +/remove-potcdate.sin~ +/insert-header.sin~ +/en@quot.header~ +/en@boldquot.header~ /Makefile.in.in /Makevars.template /Rules-quot diff --git a/src/names.c b/src/names.c index 03457bac..14541a31 100644 --- a/src/names.c +++ b/src/names.c @@ -348,7 +348,7 @@ handle_file_selection_option (int key, const char *arg) break; case EXCLUDE_VCS_OPTION: - add_exclude_array (vcs_file_table, 0); + add_exclude_array (vcs_file_table, FNM_LEADING_DIR); break; case EXCLUDE_VCS_IGNORES_OPTION: diff --git a/tests/exclude18.at b/tests/exclude18.at new file mode 100644 index 00000000..64aaa520 --- /dev/null +++ b/tests/exclude18.at @@ -0,0 +1,87 @@ +# Process this file with autom4te to create testsuite. -*- Autotest -*- + +# Test suite for GNU tar. +# Copyright 2004-2023 Free Software Foundation, Inc. + +# This file is part of GNU tar. + +# GNU tar is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# GNU tar is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Test --exclude-vcs option with subcommands: EXTRACT, LIST, DIFF. +# Check VCS directory with files, and empty. +# +# Ref: https://savannah.gnu.org/bugs/?62859 +# Wed 03 Aug 2022 04:06:28 PM UTC, original submission: Quote +# Mohamed Akram +# > The --exclude-vcs flag seems to exclude .gitignore but not .git when +# extracting. + +AT_SETUP([--exclude-vcs extract list compare]) +AT_KEYWORDS([exclude-vcs extract list compare exclude18]) + +AT_TAR_CHECK([ +AT_SORT_PREREQ +mkdir gitrepo +cd gitrepo + +# Make an empty VCS directory: +mkdir .svn + +# Make a VCS directory with a file: +mkdir .git +touch .git/_A + +# Make a VCS file: +touch .gitignore + +# Make non-VCS files: +touch .git_B +touch _C + +# Create an archive, include VCS: +cd .. +tar -cf gitrepo.tar gitrepo +rm -r gitrepo + +echo Extract: +tar -xvf gitrepo.tar --exclude-vcs | sort + +echo +echo List: +tar -tf gitrepo.tar --exclude-vcs | sort + +echo +echo Diff: +tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort + +], +[0], +[Extract: +gitrepo/ +gitrepo/.git_B +gitrepo/_C + +List: +gitrepo/ +gitrepo/.git_B +gitrepo/_C + +Diff: +gitrepo/ +gitrepo/.git_B +gitrepo/_C +], +[]) + +AT_CLEANUP diff --git a/tests/testsuite.at b/tests/testsuite.at index 995f6129..9ee9dd9a 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -313,6 +313,7 @@ m4_include([exclude14.at]) m4_include([exclude15.at]) m4_include([exclude16.at]) m4_include([exclude17.at]) +m4_include([exclude18.at]) AT_BANNER([Deletions]) m4_include([delete01.at]) -- cgit v1.2.1