exiftool_vendored 12.64.1 → 12.65.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -2025,7 +2025,7 @@ sub SetFileName($$;$$$)
2025
2025
  # protect against empty file name
2026
2026
  length $newName or $self->Warn('New file name is empty'), return -1;
2027
2027
  # don't replace existing file
2028
- if ($self->Exists($newName) and (not defined $usedFlag or $usedFlag)) {
2028
+ if ($self->Exists($newName, 1) and (not defined $usedFlag or $usedFlag)) {
2029
2029
  if ($file ne $newName or $opt =~ /Link$/) {
2030
2030
  # allow for case-insensitive filesystem
2031
2031
  if ($opt =~ /Link$/ or not $self->IsSameFile($file, $newName)) {
@@ -2404,7 +2404,7 @@ sub WriteInfo($$;$$)
2404
2404
  $outBuff = '';
2405
2405
  $outRef = \$outBuff;
2406
2406
  $outPos = 0;
2407
- } elsif ($self->Exists($outfile)) {
2407
+ } elsif ($self->Exists($outfile, 1)) {
2408
2408
  $self->Error("File already exists: $outfile");
2409
2409
  } elsif ($self->Open(\*EXIFTOOL_OUTFILE, $outfile, '>')) {
2410
2410
  $outRef = \*EXIFTOOL_OUTFILE;
@@ -4919,6 +4919,11 @@ sub InverseDateTime($$;$$)
4919
4919
  my $fs = ($fmt =~ s/%f$// and $val =~ s/(\.\d+)\s*$//) ? $1 : '';
4920
4920
  my ($lib, $wrn, @a);
4921
4921
  TryLib: for ($lib=$strptimeLib; ; $lib='') {
4922
+ # handle %s format ourself (not supported in Fedora, see forum15032)
4923
+ if ($fmt eq '%s') {
4924
+ $val = ConvertUnixTime($val, 1);
4925
+ last;
4926
+ }
4922
4927
  if (not $lib) {
4923
4928
  last unless $$self{OPTIONS}{StrictDate};
4924
4929
  warn $wrn || "Install POSIX::strptime or Time::Piece for inverse date/time conversions\n";
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
30
30
  %static_vars);
31
31
 
32
- $VERSION = '12.64';
32
+ $VERSION = '12.65';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -126,7 +126,7 @@ sub MakeTiffHeader($$$$;$$);
126
126
  sub SplitFileName($);
127
127
  sub EncodeFileName($$;$);
128
128
  sub Open($*$;$);
129
- sub Exists($$);
129
+ sub Exists($$;$);
130
130
  sub IsDirectory($$);
131
131
  sub Rename($$$);
132
132
  sub Unlink($@);
@@ -1052,6 +1052,93 @@ my %xmpShorthandOpt = ( 0 => 'None', 1 => 'Shorthand', 2 => ['Shorthand','OneDes
1052
1052
  maccroatian => 'MacCroatian', cp10082 => 'MacCroatian',
1053
1053
  );
1054
1054
 
1055
+ # list of available options
1056
+ # +-----------------------------------------------------+
1057
+ # ! DON'T FORGET!! When adding any new option, must !
1058
+ # ! decide how it is handled in SetNewValuesFromFile() !
1059
+ # +-----------------------------------------------------+
1060
+ # (Note: All options must exist in this lookup, even if undefined,
1061
+ # to facilitate case-insensitive options. 'Group#' is handled specially)
1062
+ my @availableOptions = (
1063
+ [ 'Binary', undef, 'flag to extract binary values even if tag not specified' ],
1064
+ [ 'ByteOrder', undef, 'default byte order when creating EXIF information' ],
1065
+ [ 'Charset', 'UTF8', 'character set for converting Unicode characters' ],
1066
+ [ 'CharsetEXIF', undef, 'internal EXIF "ASCII" string encoding' ],
1067
+ [ 'CharsetFileName', undef, 'external encoding for file names' ],
1068
+ [ 'CharsetID3', 'Latin','internal ID3v1 character set' ],
1069
+ [ 'CharsetIPTC', 'Latin','fallback IPTC character set if no CodedCharacterSet' ],
1070
+ [ 'CharsetPhotoshop', 'Latin','internal encoding for Photoshop resource names' ],
1071
+ [ 'CharsetQuickTime', 'MacRoman', 'internal QuickTime string encoding' ],
1072
+ [ 'CharsetRIFF', 0, 'internal RIFF string encoding (0=default to Latin)' ],
1073
+ [ 'Compact', { }, 'write compact XMP' ],
1074
+ [ 'Composite', 1, 'flag to calculate Composite tags' ],
1075
+ [ 'Compress', undef, 'flag to write new values as compressed if possible' ],
1076
+ [ 'CoordFormat', undef, 'GPS lat/long coordinate format' ],
1077
+ [ 'DateFormat', undef, 'format for date/time' ],
1078
+ [ 'Duplicates', 1, 'flag to save duplicate tag values' ],
1079
+ [ 'Escape', undef, 'escape special characters' ],
1080
+ [ 'Exclude', undef, 'tags to exclude' ],
1081
+ [ 'ExtendedXMP', 1, 'strategy for reading extended XMP' ],
1082
+ [ 'ExtractEmbedded', undef, 'flag to extract information from embedded documents' ],
1083
+ [ 'FastScan', undef, 'flag to avoid scanning for trailer' ],
1084
+ [ 'Filter', undef, 'output filter for all tag values' ],
1085
+ [ 'FilterW', undef, 'input filter when writing tag values' ],
1086
+ [ 'FixBase', undef, 'fix maker notes base offsets' ],
1087
+ [ 'GeoMaxIntSecs', 1800, 'geotag maximum interpolation time (secs)' ],
1088
+ [ 'GeoMaxExtSecs', 1800, 'geotag maximum extrapolation time (secs)' ],
1089
+ [ 'GeoMaxHDOP', undef, 'geotag maximum HDOP' ],
1090
+ [ 'GeoMaxPDOP', undef, 'geotag maximum PDOP' ],
1091
+ [ 'GeoMinSats', undef, 'geotag minimum satellites' ],
1092
+ [ 'GeoSpeedRef', undef, 'geotag GPSSpeedRef' ],
1093
+ [ 'GlobalTimeShift', undef, 'apply time shift to all extracted date/time values' ],
1094
+ [ 'Group#', undef, 'return tags for specified groups in family #' ],
1095
+ [ 'HexTagIDs', 0, 'use hex tag ID\'s in family 7 group names' ],
1096
+ [ 'HtmlDump', 0, 'HTML dump (0-3, higher # = bigger limit)' ],
1097
+ [ 'HtmlDumpBase', undef, 'base address for HTML dump' ],
1098
+ [ 'IgnoreMinorErrors',undef, 'ignore minor errors when reading/writing' ],
1099
+ [ 'IgnoreTags', undef, 'list of tags to ignore when extracting' ],
1100
+ [ 'ImageHashType', 'MD5', 'image hash algorithm' ],
1101
+ [ 'Lang', $defaultLang, 'localized language for descriptions etc' ],
1102
+ [ 'LargeFileSupport', undef, 'flag indicating support of 64-bit file offsets' ],
1103
+ [ 'List', undef, '[deprecated, use ListSplit and ListJoin instead]' ],
1104
+ [ 'ListItem', undef, 'used to return a specific item from lists' ],
1105
+ [ 'ListJoin', ', ', 'join lists together with this separator' ],
1106
+ [ 'ListSep', ', ', '[deprecated, use ListSplit and ListJoin instead]' ],
1107
+ [ 'ListSplit', undef, 'regex for splitting list-type tag values when writing' ],
1108
+ [ 'MakerNotes', undef, 'extract maker notes as a block' ],
1109
+ [ 'MDItemTags', undef, 'extract MacOS metadata item tags' ],
1110
+ [ 'MissingTagValue', undef, 'value for missing tags when expanded in expressions' ],
1111
+ [ 'NoMultiExif', undef, 'raise error when writing multi-segment EXIF' ],
1112
+ [ 'NoPDFList', undef, 'flag to avoid splitting PDF List-type tag values' ],
1113
+ [ 'NoWarning', undef, 'regular expression for warnings to suppress' ],
1114
+ [ 'Password', undef, 'password for password-protected PDF documents' ],
1115
+ [ 'PrintConv', 1, 'flag to enable print conversion' ],
1116
+ [ 'QuickTimeHandler', 1, 'flag to add mdir Handler to newly created Meta box' ],
1117
+ [ 'QuickTimePad', undef, 'flag to preserve padding of QuickTime CR3 tags' ],
1118
+ [ 'QuickTimeUTC', undef, 'assume that QuickTime date/time tags are stored as UTC' ],
1119
+ [ 'RequestAll', undef, 'extract all tags that must be specifically requested' ],
1120
+ [ 'RequestTags', undef, 'extra tags to request (on top of those in the tag list)' ],
1121
+ [ 'SaveFormat', undef, 'save family 6 tag TIFF format' ],
1122
+ [ 'SavePath', undef, 'save family 5 location path' ],
1123
+ [ 'ScanForXMP', undef, 'flag to scan for XMP information in all files' ],
1124
+ [ 'Sort', 'Input','order to sort found tags (Input, File, Tag, Descr, Group#)' ],
1125
+ [ 'Sort2', 'File', 'secondary sort order for tags in a group (File, Tag, Descr)' ],
1126
+ [ 'StrictDate', undef, 'flag to return undef for invalid date conversions' ],
1127
+ [ 'Struct', undef, 'return structures as hash references' ],
1128
+ [ 'StructFormat', undef, 'format for structure serialization when reading/writing' ],
1129
+ [ 'SystemTags', undef, 'extract additional File System tags' ],
1130
+ [ 'TextOut', \*STDOUT, 'file for Verbose/HtmlDump output' ],
1131
+ [ 'TimeZone', undef, 'local time zone' ],
1132
+ [ 'Unknown', 0, 'flag to get values of unknown tags (0-2)' ],
1133
+ [ 'UserParam', { }, 'user parameters for additional user-defined tag values' ],
1134
+ [ 'Validate', undef, 'perform additional validation' ],
1135
+ [ 'Verbose', 0, 'print verbose messages (0-5, higher # = more verbose)' ],
1136
+ [ 'WriteMode', 'wcg', 'enable all write modes by default' ],
1137
+ [ 'XAttrTags', undef, 'extract MacOS extended attribute tags' ],
1138
+ [ 'XMPAutoConv', 1, 'automatic conversion of unknown XMP tag values' ],
1139
+ [ 'XMPShorthand', 0, '[deprecated, use Compact=Shorthand instead]' ],
1140
+ );
1141
+
1055
1142
  # default family 0 group priority for writing
1056
1143
  # (NOTE: tags in groups not specified here will not be written unless
1057
1144
  # overridden by the module or specified when writing)
@@ -2368,92 +2455,11 @@ sub ClearOptions($)
2368
2455
  local $_;
2369
2456
  my $self = shift;
2370
2457
 
2371
- # create options hash with default values
2372
- # +-----------------------------------------------------+
2373
- # ! DON'T FORGET!! When adding any new option, must !
2374
- # ! decide how it is handled in SetNewValuesFromFile() !
2375
- # +-----------------------------------------------------+
2376
- # (Note: All options must exist in this lookup, even if undefined,
2377
- # to facilitate case-insensitive options. 'Group#' is handled specially)
2378
- $$self{OPTIONS} = {
2379
- Binary => undef, # flag to extract binary values even if tag not specified
2380
- ByteOrder => undef, # default byte order when creating EXIF information
2381
- Charset => 'UTF8', # character set for converting Unicode characters
2382
- CharsetEXIF => undef, # internal EXIF "ASCII" string encoding
2383
- CharsetFileName => undef, # external encoding for file names
2384
- CharsetID3 => 'Latin', # internal ID3v1 character set
2385
- CharsetIPTC => 'Latin', # fallback IPTC character set if no CodedCharacterSet
2386
- CharsetPhotoshop => 'Latin', # internal encoding for Photoshop resource names
2387
- CharsetQuickTime => 'MacRoman', # internal QuickTime string encoding
2388
- CharsetRIFF => 0, # internal RIFF string encoding (0=default to Latin)
2389
- Compact => { }, # write compact XMP
2390
- Composite => 1, # flag to calculate Composite tags
2391
- Compress => undef, # flag to write new values as compressed if possible
2392
- CoordFormat => undef, # GPS lat/long coordinate format
2393
- DateFormat => undef, # format for date/time
2394
- Duplicates => 1, # flag to save duplicate tag values
2395
- Escape => undef, # escape special characters
2396
- Exclude => undef, # tags to exclude
2397
- ExtendedXMP => 1, # strategy for reading extended XMP
2398
- ExtractEmbedded =>undef,# flag to extract information from embedded documents
2399
- FastScan => undef, # flag to avoid scanning for trailer
2400
- Filter => undef, # output filter for all tag values
2401
- FilterW => undef, # input filter when writing tag values
2402
- FixBase => undef, # fix maker notes base offsets
2403
- GeoMaxIntSecs => 1800, # geotag maximum interpolation time (secs)
2404
- GeoMaxExtSecs => 1800, # geotag maximum extrapolation time (secs)
2405
- GeoMaxHDOP => undef, # geotag maximum HDOP
2406
- GeoMaxPDOP => undef, # geotag maximum PDOP
2407
- GeoMinSats => undef, # geotag minimum satellites
2408
- GeoSpeedRef => undef, # geotag GPSSpeedRef
2409
- GlobalTimeShift => undef, # apply time shift to all extracted date/time values
2410
- # Group# => undef, # return tags for specified groups in family #
2411
- HexTagIDs => 0, # use hex tag ID's in family 7 group names
2412
- HtmlDump => 0, # HTML dump (0-3, higher # = bigger limit)
2413
- HtmlDumpBase => undef, # base address for HTML dump
2414
- IgnoreMinorErrors => undef, # ignore minor errors when reading/writing
2415
- IgnoreTags => undef, # list of tags to ignore when extracting
2416
- ImageHashType => 'MD5', # image hash algorithm
2417
- Lang => $defaultLang,# localized language for descriptions etc
2418
- LargeFileSupport => undef, # flag indicating support of 64-bit file offsets
2419
- List => undef, # extract lists of PrintConv values into arrays [no longer documented]
2420
- ListItem => undef, # used to return a specific item from lists
2421
- ListJoin => ', ', # join lists together with this separator
2422
- ListSep => ', ', # list item separator [no longer documented]
2423
- ListSplit => undef, # regex for splitting list-type tag values when writing
2424
- MakerNotes => undef, # extract maker notes as a block
2425
- MDItemTags => undef, # extract MacOS metadata item tags
2426
- MissingTagValue =>undef,# value for missing tags when expanded in expressions
2427
- NoMultiExif => undef, # raise error when writing multi-segment EXIF
2428
- NoPDFList => undef, # flag to avoid splitting PDF List-type tag values
2429
- NoWarning => undef, # regular expression for warnings to suppress
2430
- Password => undef, # password for password-protected PDF documents
2431
- PrintConv => 1, # flag to enable print conversion
2432
- QuickTimeHandler => 1, # flag to add mdir Handler to newly created Meta box
2433
- QuickTimePad=> undef, # flag to preserve padding of QuickTime CR3 tags
2434
- QuickTimeUTC=> undef, # assume that QuickTime date/time tags are stored as UTC
2435
- RequestAll => undef, # extract all tags that must be specifically requested
2436
- RequestTags => undef, # extra tags to request (on top of those in the tag list)
2437
- SaveFormat => undef, # save family 6 tag TIFF format
2438
- SavePath => undef, # save family 5 location path
2439
- ScanForXMP => undef, # flag to scan for XMP information in all files
2440
- Sort => 'Input', # order to sort found tags (Input, File, Tag, Descr, Group#)
2441
- Sort2 => 'File', # secondary sort order for tags in a group (File, Tag, Descr)
2442
- StrictDate => undef, # flag to return undef for invalid date conversions
2443
- Struct => undef, # return structures as hash references
2444
- StructFormat=> undef, # format for structure serialization when reading/writing
2445
- SystemTags => undef, # extract additional File System tags
2446
- TextOut => \*STDOUT,# file for Verbose/HtmlDump output
2447
- TimeZone => undef, # local time zone
2448
- Unknown => 0, # flag to get values of unknown tags (0-2)
2449
- UserParam => { }, # user parameters for additional user-defined tag values
2450
- Validate => undef, # perform additional validation
2451
- Verbose => 0, # print verbose messages (0-5, higher # = more verbose)
2452
- WriteMode => 'wcg', # enable all write modes by default
2453
- XAttrTags => undef, # extract MacOS extended attribute tags
2454
- XMPAutoConv => 1, # automatic conversion of unknown XMP tag values
2455
- XMPShorthand=> 0, # (unused, but needed for backward compatibility)
2456
- };
2458
+ $$self{OPTIONS} = { }; # clear all options
2459
+
2460
+ # load default options
2461
+ $$self{OPTIONS}{$$_[0]} = $$_[1] foreach @availableOptions;
2462
+
2457
2463
  # keep necessary member variables in sync with options
2458
2464
  delete $$self{CUR_LANG};
2459
2465
  delete $$self{ESCAPE_PROC};
@@ -3890,6 +3896,15 @@ sub GetCompositeTagInfo($)
3890
3896
  return $Image::ExifTool::Composite{$compositeID{$tag}[0]};
3891
3897
  }
3892
3898
 
3899
+ #------------------------------------------------------------------------------
3900
+ # Return List ExifTool API options
3901
+ # Returns: 0) reference to list of available options -- each entry is a list
3902
+ # [0=option name, 1=default value, 2=description]
3903
+ sub AvailableOptions()
3904
+ {
3905
+ return \@availableOptions;
3906
+ }
3907
+
3893
3908
  #------------------------------------------------------------------------------
3894
3909
  # Get tag name (removes copy index)
3895
3910
  # Inputs: 0) Tag key
@@ -4374,11 +4389,11 @@ sub Open($*$;$)
4374
4389
 
4375
4390
  #------------------------------------------------------------------------------
4376
4391
  # Check to see if a file exists (with Windows Unicode support)
4377
- # Inputs: 0) ExifTool ref, 1) file name
4392
+ # Inputs: 0) ExifTool ref, 1) file name, 2) flag if we are writing this file
4378
4393
  # Returns: true if file exists
4379
- sub Exists($$)
4394
+ sub Exists($$;$)
4380
4395
  {
4381
- my ($self, $file) = @_;
4396
+ my ($self, $file, $writing) = @_;
4382
4397
 
4383
4398
  if ($self->EncodeFileName($file)) {
4384
4399
  local $SIG{'__WARN__'} = \&SetWarning;
@@ -4388,10 +4403,12 @@ sub Exists($$)
4388
4403
  Win32API::File::OPEN_EXISTING(), 0, []) };
4389
4404
  return 0 unless $wh;
4390
4405
  eval { Win32API::File::CloseHandle($wh) };
4391
- } else {
4406
+ } elsif ($writing) {
4392
4407
  # (named pipes already exist, but we pretend that they don't
4393
4408
  # so we will be able to write them, so test with for pipe -p)
4394
4409
  return(-e $file and not -p $file);
4410
+ } else {
4411
+ return(-e $file);
4395
4412
  }
4396
4413
  return 1;
4397
4414
  }
@@ -4894,6 +4911,7 @@ sub SetFoundTags($)
4894
4911
  $groupList = [ $$options{$groupOpt} ];
4895
4912
  }
4896
4913
  foreach (@$groupList) {
4914
+ next unless defined $_;
4897
4915
  # groups have priority in order they were specified
4898
4916
  ++$wantOrder;
4899
4917
  my ($groupName, $want);
@@ -7836,6 +7854,8 @@ sub DoProcessTIFF($$;$)
7836
7854
  return 1;
7837
7855
  }
7838
7856
  }
7857
+ } elsif ($fileType eq 'ARW') {
7858
+ $$self{LOW_PRIORITY_DIR}{IFD1} = 1; # lower priority of IFD1 tags in ARW files
7839
7859
  }
7840
7860
  # we have a valid TIFF (or whatever) file
7841
7861
  if ($fileType and not $$self{VALUE}{FileType}) {
@@ -1463,7 +1463,9 @@ value should always exist if the tag exists.
1463
1463
 
1464
1464
  Set the new value for a tag. The routine may be called multiple times to
1465
1465
  set the values of many tags before using L</WriteInfo> to write the new
1466
- values to an image.
1466
+ values to an image. These values remain queued for writing to subsequent
1467
+ files until L</SetNewValue> is called without arguments to reset the queued
1468
+ values.
1467
1469
 
1468
1470
  For list-type tags (like Keywords), either call repeatedly with the same tag
1469
1471
  name for each value, or call with a reference to the list of values.
@@ -2273,6 +2275,29 @@ within L</ImageInfo>, before the file is closed.
2273
2275
 
2274
2276
  =back
2275
2277
 
2278
+ =head2 AvailableOptions [static]
2279
+
2280
+ Get a list of available API options. (See L</Options> for option details.)
2281
+
2282
+ =over 4
2283
+
2284
+ =item Inputs:
2285
+
2286
+ (none)
2287
+
2288
+ =item Return Values:
2289
+
2290
+ Reference to list of available options. Each entry in the list is a list
2291
+ reference with 3 items: 0=Option name, 1=Default value, 2=Description.
2292
+
2293
+ my $opts = Image::ExifTool::<b>AvailableOptions</b>();
2294
+ foreach (@$opts) {
2295
+ my ($optionName, $defaultValue, $description) = @$_;
2296
+ ...
2297
+ }
2298
+
2299
+ =back
2300
+
2276
2301
  =head2 GetTagName [static]
2277
2302
 
2278
2303
  Get name of tag from tag key. This is a convenience function that
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 12.64
3
+ Version: 12.65
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('12.64.1')
4
+ VERSION = Gem::Version.new('12.65.0')
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exiftool_vendored
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.64.1
4
+ version: 12.65.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-08-09 00:00:00.000000000 Z
12
+ date: 2023-08-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool
@@ -25,188 +25,6 @@ dependencies:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: 0.7.0
28
- - !ruby/object:Gem::Dependency
29
- name: bundler
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: '0'
35
- type: :development
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- version: '0'
42
- - !ruby/object:Gem::Dependency
43
- name: minitest
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - "<="
47
- - !ruby/object:Gem::Version
48
- version: 5.18.1
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - "<="
54
- - !ruby/object:Gem::Version
55
- version: 5.18.1
56
- - !ruby/object:Gem::Dependency
57
- name: minitest-great_expectations
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: '0'
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- - !ruby/object:Gem::Dependency
71
- name: minitest-reporters
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- version: '0'
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - ">="
82
- - !ruby/object:Gem::Version
83
- version: '0'
84
- - !ruby/object:Gem::Dependency
85
- name: nokogiri
86
- requirement: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- version: '0'
91
- type: :development
92
- prerelease: false
93
- version_requirements: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- version: '0'
98
- - !ruby/object:Gem::Dependency
99
- name: rake
100
- requirement: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- version: '0'
105
- type: :development
106
- prerelease: false
107
- version_requirements: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- version: '0'
112
- - !ruby/object:Gem::Dependency
113
- name: rubocop
114
- requirement: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- version: '0'
119
- type: :development
120
- prerelease: false
121
- version_requirements: !ruby/object:Gem::Requirement
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
- - !ruby/object:Gem::Dependency
127
- name: rubocop-minitest
128
- requirement: !ruby/object:Gem::Requirement
129
- requirements:
130
- - - ">="
131
- - !ruby/object:Gem::Version
132
- version: '0'
133
- type: :development
134
- prerelease: false
135
- version_requirements: !ruby/object:Gem::Requirement
136
- requirements:
137
- - - ">="
138
- - !ruby/object:Gem::Version
139
- version: '0'
140
- - !ruby/object:Gem::Dependency
141
- name: rubocop-rake
142
- requirement: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - ">="
145
- - !ruby/object:Gem::Version
146
- version: '0'
147
- type: :development
148
- prerelease: false
149
- version_requirements: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - ">="
152
- - !ruby/object:Gem::Version
153
- version: '0'
154
- - !ruby/object:Gem::Dependency
155
- name: simplecov
156
- requirement: !ruby/object:Gem::Requirement
157
- requirements:
158
- - - ">="
159
- - !ruby/object:Gem::Version
160
- version: '0'
161
- type: :development
162
- prerelease: false
163
- version_requirements: !ruby/object:Gem::Requirement
164
- requirements:
165
- - - ">="
166
- - !ruby/object:Gem::Version
167
- version: '0'
168
- - !ruby/object:Gem::Dependency
169
- name: simplecov-console
170
- requirement: !ruby/object:Gem::Requirement
171
- requirements:
172
- - - ">="
173
- - !ruby/object:Gem::Version
174
- version: '0'
175
- type: :development
176
- prerelease: false
177
- version_requirements: !ruby/object:Gem::Requirement
178
- requirements:
179
- - - ">="
180
- - !ruby/object:Gem::Version
181
- version: '0'
182
- - !ruby/object:Gem::Dependency
183
- name: simplecov_json_formatter
184
- requirement: !ruby/object:Gem::Requirement
185
- requirements:
186
- - - ">="
187
- - !ruby/object:Gem::Version
188
- version: '0'
189
- type: :development
190
- prerelease: false
191
- version_requirements: !ruby/object:Gem::Requirement
192
- requirements:
193
- - - ">="
194
- - !ruby/object:Gem::Version
195
- version: '0'
196
- - !ruby/object:Gem::Dependency
197
- name: yard
198
- requirement: !ruby/object:Gem::Requirement
199
- requirements:
200
- - - ">="
201
- - !ruby/object:Gem::Version
202
- version: '0'
203
- type: :development
204
- prerelease: false
205
- version_requirements: !ruby/object:Gem::Requirement
206
- requirements:
207
- - - ">="
208
- - !ruby/object:Gem::Version
209
- version: '0'
210
28
  description: Vendored version of exiftool
211
29
  email:
212
30
  - matthew+github@mceachen.org