summaryrefslogtreecommitdiff
path: root/perl/Git
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-10-29 00:15:52 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-10-29 17:22:40 (GMT)
commit412e4caee387d825903bf1252aefbd5cf995a599 (patch)
tree3a2104c1ac2fd9c9630d2ab02ea1dfc7ea8cadc8 /perl/Git
parentaf6d1d602a8f64164b266364339c4e936d5bbc33 (diff)
downloadgit-412e4caee387d825903bf1252aefbd5cf995a599.zip
git-412e4caee387d825903bf1252aefbd5cf995a599.tar.gz
git-412e4caee387d825903bf1252aefbd5cf995a599.tar.bz2
tests: disable fsync everywhere
The "GIT_TEST_FSYNC" environment variable now exists for disabling fsync() even on packfiles and other "critical" data. Running "make test -j8 NO_SVN_TESTS=1" on a noisy 8-core system on an HDD, test runtime drops from ~4 minutes down to ~3 minutes. Using "GIT_TEST_FSYNC=1" re-enables fsync() for comparison purposes. SVN interopability tests are minimally affected since SVN will still use fsync in various places. This will also be useful for 3rd-party tools which create throwaway git repositories of temporary data, but remains undocumented for end users. Signed-off-by: Eric Wong <e@80x24.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'perl/Git')
-rw-r--r--perl/Git/SVN.pm17
1 files changed, 15 insertions, 2 deletions
diff --git a/perl/Git/SVN.pm b/perl/Git/SVN.pm
index 35ff5a6..6ce2e28 100644
--- a/perl/Git/SVN.pm
+++ b/perl/Git/SVN.pm
@@ -6,7 +6,7 @@ use constant rev_map_fmt => 'NH*';
use vars qw/$_no_metadata
$_repack $_repack_flags $_use_svm_props $_head
$_use_svnsync_props $no_reuse_existing
- $_use_log_author $_add_author_from $_localtime/;
+ $_use_log_author $_add_author_from $_localtime $_use_fsync/;
use Carp qw/croak/;
use File::Path qw/mkpath/;
use IPC::Open3;
@@ -2269,6 +2269,19 @@ sub mkfile {
}
}
+# TODO: move this to Git.pm?
+sub use_fsync {
+ if (!defined($_use_fsync)) {
+ my $x = $ENV{GIT_TEST_FSYNC};
+ if (defined $x) {
+ my $v = command_oneline('-c', "test.fsync=$x",
+ qw(config --type=bool test.fsync));
+ $_use_fsync = defined($v) ? ($v eq "true\n") : 1;
+ }
+ }
+ $_use_fsync;
+}
+
sub rev_map_set {
my ($self, $rev, $commit, $update_ref, $uuid) = @_;
defined $commit or die "missing arg3\n";
@@ -2290,7 +2303,7 @@ sub rev_map_set {
my $sync;
# both of these options make our .rev_db file very, very important
# and we can't afford to lose it because rebuild() won't work
- if ($self->use_svm_props || $self->no_metadata) {
+ if (($self->use_svm_props || $self->no_metadata) && use_fsync()) {
require File::Copy;
$sync = 1;
File::Copy::copy($db, $db_lock) or die "rev_map_set(@_): ",