threads / patch / 34361

patch, 2 partsGit.pm: add new temp_is_locked function

Subject: [PATCH 1/2] Git.pm: add new temp_is_locked function

## tl;dr

2 messages between Jul 6, 2013 and Jul 7, 2013. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

Kyle McKay· Jul 6, 2013, 03:42 UTC · lore

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 <mackyle@gmail.com>
---
perl/Git.pm | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
Show changes to perl/Git.pm +16 −1
diff --git a/perl/Git.pm b/perl/Git.pm
index 7a252ef..5416b5a 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,21 @@ sub temp_acquire {
	$temp_fd;
}

+=item temp_is_locked ( NAME )
+
+Returns true if the file mapped to C<NAME> is currently locked.
+
+If true is returned, an attempt to C<temp_acquire()> the same C<NAME>  
will
+throw an error.
+
+=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 )
-- 
1.8.3
Jonathan Nieder· Jul 7, 2013, 00:11 UTC · re: Kyle McKay · lore

Re: [PATCH 1/2] Git.pm: add new temp_is_locked function

Hi,
Kyle McKay wrote:
> The temp_is_locked function can be used to determine whether
> or not a given name previously passed to temp_acquire is
> currently locked.
[...]
Show 7 quoted lines
> +=item temp_is_locked ( NAME )
> +
> +Returns true if the file mapped to C<NAME> is currently locked.
> +
> +If true is returned, an attempt to C<temp_acquire()> the same
> C<NAME> will
> +throw an error.
Looks like this was line-wrapped somewhere in transit.

More importantly, it's not obvious from the above description what this function will do. What is a typical value of NAME? Is it a filename, an arbitrary string, a reference, or something else? Is this a way of checking if a file is flocked? What is a typical way to use this function?

Looking more closely, it looks like this is factoring out the idiom for checking if a name is already in use from the _temp_cache function. Would it make sense for _temp_cache to call this helper?

When is a caller expected to call this function? What guarantees can the caller rely on? After a call to temp_acquire(NAME), will temp_is_locked(NAME) always return true until temp_release(NAME) is called? Does this only work within the context of a single process or can locks persist beyond a process lifetime? Do locks ever need to be broken?

I didn't spend a lot of time trying to find the answers to these questions because I want to make sure that people using Git.pm in the future similarly do not have to spend a lot of time. So hopefully a documentation change could fix this.

Thanks and hope that helps, Jonathan

← back to recent threads