From 4e63dcc86cc77ec86a8d35ff752603a4b44d44a7 Mon Sep 17 00:00:00 2001 From: "Kyle J. McKay" Date: Sat, 6 Jul 2013 21:20:48 -0700 Subject: [PATCH] Git.pm: add new temp_is_locked function The temp_is_locked function can be used to determine whether or not a given name previously passed to temp_acquire is currently locked. Signed-off-by: Kyle J. McKay Signed-off-by: Junio C Hamano --- perl/Git.pm | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/perl/Git.pm b/perl/Git.pm index 7a252ef872..0ba15b9a56 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -61,7 +61,7 @@ require Exporter; remote_refs prompt get_tz_offset credential credential_read credential_write - temp_acquire temp_release temp_reset temp_path); + temp_acquire temp_is_locked temp_release temp_reset temp_path); =head1 DESCRIPTION @@ -1206,6 +1206,35 @@ sub temp_acquire { $temp_fd; } +=item temp_is_locked ( NAME ) + +Returns true if the internal lock created by a previous C +call with C is still in effect. + +When temp_acquire is called on a C, it internally locks the temporary +file mapped to C. That lock will not be released until C +is called with either the original C or the L that was +returned from the original call to temp_acquire. + +Subsequent attempts to call C with the same C will fail +unless there has been an intervening C call for that C +(or its corresponding L that was returned by the original +C call). + +If true is returned by C for a C, an attempt to +C the same C will cause an error unless +C is first called on that C (or its corresponding +L that was returned by the original C call). + +=cut + +sub temp_is_locked { + my ($self, $name) = _maybe_self(@_); + my $temp_fd = \$TEMP_FILEMAP{$name}; + + defined $$temp_fd && $$temp_fd->opened && $TEMP_FILES{$$temp_fd}{locked}; +} + =item temp_release ( NAME ) =item temp_release ( FILEHANDLE ) @@ -1248,7 +1277,7 @@ sub _temp_cache { my $temp_fd = \$TEMP_FILEMAP{$name}; if (defined $$temp_fd and $$temp_fd->opened) { - if ($TEMP_FILES{$$temp_fd}{locked}) { + if (temp_is_locked($name)) { throw Error::Simple("Temp file with moniker '" . $name . "' already in use"); } -- 2.11.4.GIT