Squashed 'third_party/git/' content from commit cb71568594
git-subtree-dir: third_party/git git-subtree-split: cb715685942260375e1eb8153b0768a376e4ece7
This commit is contained in:
		
						commit
						1b593e1ea4
					
				
					 3629 changed files with 1139935 additions and 0 deletions
				
			
		
							
								
								
									
										93
									
								
								perl/Git/SVN/Memoize/YAML.pm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								perl/Git/SVN/Memoize/YAML.pm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,93 @@ | |||
| package Git::SVN::Memoize::YAML; | ||||
| use warnings; | ||||
| use strict; | ||||
| use YAML::Any (); | ||||
| 
 | ||||
| # based on Memoize::Storable. | ||||
| 
 | ||||
| sub TIEHASH { | ||||
| 	my $package = shift; | ||||
| 	my $filename = shift; | ||||
| 	my $truehash = (-e $filename) ? YAML::Any::LoadFile($filename) : {}; | ||||
| 	my $self = {FILENAME => $filename, H => $truehash}; | ||||
| 	bless $self => $package; | ||||
| } | ||||
| 
 | ||||
| sub STORE { | ||||
| 	my $self = shift; | ||||
| 	$self->{H}{$_[0]} = $_[1]; | ||||
| } | ||||
| 
 | ||||
| sub FETCH { | ||||
| 	my $self = shift; | ||||
| 	$self->{H}{$_[0]}; | ||||
| } | ||||
| 
 | ||||
| sub EXISTS { | ||||
| 	my $self = shift; | ||||
| 	exists $self->{H}{$_[0]}; | ||||
| } | ||||
| 
 | ||||
| sub DESTROY { | ||||
| 	my $self = shift; | ||||
| 	YAML::Any::DumpFile($self->{FILENAME}, $self->{H}); | ||||
| } | ||||
| 
 | ||||
| sub SCALAR { | ||||
| 	my $self = shift; | ||||
| 	scalar(%{$self->{H}}); | ||||
| } | ||||
| 
 | ||||
| sub FIRSTKEY { | ||||
| 	'Fake hash from Git::SVN::Memoize::YAML'; | ||||
| } | ||||
| 
 | ||||
| sub NEXTKEY { | ||||
| 	undef; | ||||
| } | ||||
| 
 | ||||
| 1; | ||||
| __END__ | ||||
| 
 | ||||
| =head1 NAME | ||||
| 
 | ||||
| Git::SVN::Memoize::YAML - store Memoized data in YAML format | ||||
| 
 | ||||
| =head1 SYNOPSIS | ||||
| 
 | ||||
|     use Memoize; | ||||
|     use Git::SVN::Memoize::YAML; | ||||
| 
 | ||||
|     tie my %cache => 'Git::SVN::Memoize::YAML', $filename; | ||||
|     memoize('slow_function', SCALAR_CACHE => [HASH => \%cache]); | ||||
|     slow_function(arguments); | ||||
| 
 | ||||
| =head1 DESCRIPTION | ||||
| 
 | ||||
| This module provides a class that can be used to tie a hash to a | ||||
| YAML file.  The file is read when the hash is initialized and | ||||
| rewritten when the hash is destroyed. | ||||
| 
 | ||||
| The intent is to allow L<Memoize> to back its cache with a file in | ||||
| YAML format, just like L<Memoize::Storable> allows L<Memoize> to | ||||
| back its cache with a file in Storable format.  Unlike the Storable | ||||
| format, the YAML format is platform-independent and fairly stable. | ||||
| 
 | ||||
| Carps on error. | ||||
| 
 | ||||
| =head1 DIAGNOSTICS | ||||
| 
 | ||||
| See L<YAML::Any>. | ||||
| 
 | ||||
| =head1 DEPENDENCIES | ||||
| 
 | ||||
| L<YAML::Any> from CPAN. | ||||
| 
 | ||||
| =head1 INCOMPATIBILITIES | ||||
| 
 | ||||
| None reported. | ||||
| 
 | ||||
| =head1 BUGS | ||||
| 
 | ||||
| The entire cache is read into a Perl hash when loading the file, | ||||
| so this is not very scalable. | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue