From 92f2458229c8adbccfb353ba74eb294bebf0bfae Mon Sep 17 00:00:00 2001 From: clanmills Date: Sat, 25 Apr 2020 14:31:26 +0100 Subject: [PATCH] fix_1180_date_separator --- man/man1/exiv2.1 | 15 +++++++++++- src/actions.cpp | 2 +- test/data/test_issue_1180.exv | Bin 0 -> 49465 bytes tests/bugfixes/github/test_issue_1180.py | 28 +++++++++++++++++++++++ tests/suite.conf | 1 + tests/system_tests.py | 20 ++++++++++++++++ 6 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 test/data/test_issue_1180.exv create mode 100644 tests/bugfixes/github/test_issue_1180.py diff --git a/man/man1/exiv2.1 b/man/man1/exiv2.1 index 4bf17abf..171bdc5f 100644 --- a/man/man1/exiv2.1 +++ b/man/man1/exiv2.1 @@ -2,7 +2,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH EXIV2 1 "March 28, 2020" +.TH EXIV2 1 "April 25, 2020" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -271,12 +271,14 @@ options. Set the file timestamp according to the Exif create timestamp in addition to renaming the file (overrides \fB\-k\fP). This option is only used with the 'rename' action. +See Exif DateTime below for additional information. .TP .B \-T Only set the file timestamp according to the Exif create timestamp, do not rename the file (overrides \fB\-k\fP). This option is only used with the 'rename' action. Note: On Windows you may have to set the TZ environment variable for this option to work correctly. +See Exif DateTime below for additional information. .TP .B \-f,\-F These options are used by the commands 'rename' and 'extract' to @@ -327,6 +329,7 @@ Default filename format is %Y%m%d_%H%M%S. Time adjustment in the format [\-]HH[:MM[:SS]]. This option is only used with the 'adjust' action. Examples: 1 adds one hour, 1:01 adds one hour and one minute, \-0:00:30 subtracts 30 seconds. +See Exif DateTime below for additional information. .TP .B \-Y \fIyrs\fP Time adjustment by a positive or negative number of years, for @@ -622,6 +625,16 @@ To register additional XMP namespaces, combine the command with: .nf \fBreg\fP \fIprefix\fP \fInamespace\fP .br +.SS Exif DateTime +.fi +An Exif DateTime string is stored as 20 ascii bytes (including trailing nul) in the format: +.sp 1 +YYYY:MM:DD HH:MM:SS +.sp 1 +The exiv2 command-line program options -t and -T will accept files +in which the Date has been incorrectly stored as YYYY-MM-DD. +The option -a enables the user to adjust the DateTime in the file and applies +the YYYY:MM:DD HH:MM:SS standard. .ne 4 .fi .SS Command file format diff --git a/src/actions.cpp b/src/actions.cpp index 8350fd4c..e0005030 100644 --- a/src/actions.cpp +++ b/src/actions.cpp @@ -1971,7 +1971,7 @@ namespace { { if (timeStr.length() == 0 || timeStr[0] == ' ') return 1; if (timeStr.length() < 19) return 2; - if ( timeStr[4] != ':' || timeStr[7] != ':' || timeStr[10] != ' ' + if ( (timeStr[4] != ':' && timeStr[4] != '-') || (timeStr[7] != ':' && timeStr[7] != '-') || timeStr[10] != ' ' || timeStr[13] != ':' || timeStr[16] != ':') return 3; if (0 == tm) return 4; std::memset(tm, 0x0, sizeof(struct tm)); diff --git a/test/data/test_issue_1180.exv b/test/data/test_issue_1180.exv new file mode 100644 index 0000000000000000000000000000000000000000..aa68e8be1e2275191e198ccf86b6a909a6f8089a GIT binary patch literal 49465 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 aL|>dnP^nbvUp)PAnxpaE|Nesh`};qR;a>Xy literal 0 HcmV?d00001 diff --git a/tests/bugfixes/github/test_issue_1180.py b/tests/bugfixes/github/test_issue_1180.py new file mode 100644 index 00000000..271e272b --- /dev/null +++ b/tests/bugfixes/github/test_issue_1180.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- + +from system_tests import CaseMeta, CopyTmpFiles, path +@CopyTmpFiles("$data_path/test_issue_1180.exv") + +class test_issue_1180Test(metaclass=CaseMeta): + + filename = path("$tmp_path/test_issue_1180.exv") + dash_t = path("$tmp_path/20200424_174415.exv") # -t renames file + dash_T = path("$tmp_path/20200424_154415.exv") # -T renames file + commands = [ "$exiv2 -K Exif.Image.DateTime $filename" + , "$exiv2 -t --force $filename" + , "$exiv2 -K Exif.Image.DateTime $dash_t" + , "$exiv2 -a -02:00 --force $dash_t" + , "$exiv2 -K Exif.Image.DateTime $dash_t" + , "$exiv2 -t --force $dash_t" + , "$exiv2 -K Exif.Image.DateTime $dash_T" + ] + stdout = ["Exif.Image.DateTime Ascii 50 2020-04-24 17:44:15 \n" + ,"" + ,"Exif.Image.DateTime Ascii 50 2020-04-24 17:44:15 \n" + ,"" + ,"Exif.Image.DateTime Ascii 20 2020:04:24 15:44:15\n" + ,"" + ,"Exif.Image.DateTime Ascii 20 2020:04:24 15:44:15\n" + ] + stderr = [""]*len(commands) + retval = [ 0]*len(commands) diff --git a/tests/suite.conf b/tests/suite.conf index a6006d12..1fb9e65b 100644 --- a/tests/suite.conf +++ b/tests/suite.conf @@ -14,6 +14,7 @@ exiv2_path: ../build/bin exiv2: ${ENV:exiv2_path}/exiv2${ENV:binary_extension} exiv2json: ${ENV:exiv2_path}/exiv2json${ENV:binary_extension} data_path: ../test/data +tmp_path: ../test/tmp tiff_test: ${ENV:exiv2_path}/tiff-test${ENV:binary_extension} largeiptc_test: ${ENV:exiv2_path}/largeiptc-test${ENV:binary_extension} easyaccess_test: ${ENV:exiv2_path}/easyaccess-test${ENV:binary_extension} diff --git a/tests/system_tests.py b/tests/system_tests.py index faca639e..7a8b00e6 100644 --- a/tests/system_tests.py +++ b/tests/system_tests.py @@ -460,7 +460,27 @@ class CopyFiles(FileDecoratorBase): fname, ext = os.path.splitext(expanded_file_name) new_name = fname + '_copy' + ext return shutil.copyfile(expanded_file_name, new_name) + +class CopyTmpFiles(FileDecoratorBase): + """ + This class copies files from test/data to test/tmp + Copied files are NOT removed in tearDown + Example: @CopyTmpFiles("$data_path/test_issue_1180.exv") + """ + + #: override the name of the file list + FILE_LIST_NAME = '_tmp_files' + + def setUp_file_action(self, expanded_file_name): + fname, ext = os.path.splitext(expanded_file_name) + tmp_dir = os.path.join(os.path.dirname(os.path.dirname(expanded_file_name)),'tmp') + tmp_name = os.path.join(tmp_dir,os.path.basename(expanded_file_name)) + return shutil.copyfile(expanded_file_name, tmp_name) + def tearDown_file_action(self, f): + """ + Do nothing. We don't clean up TmpFiles + """ class DeleteFiles(FileDecoratorBase): """