diff options
author | Junio C Hamano <junkio@cox.net> | 2007-02-26 01:20:42 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-02-26 01:20:42 -0800 |
commit | 048f48a2fdefdf71e7af19ec7111000ce2ebf52e (patch) | |
tree | ee91b56c9071972b1585fa65838da5748c0abfd9 /test-chmtime.c | |
parent | 646b3299613f0dd947557bc965660986d024322b (diff) | |
parent | c260d790c85c07a5f50235f664c36725deedfb10 (diff) | |
download | git-048f48a2fdefdf71e7af19ec7111000ce2ebf52e.tar.gz |
Merge branch 'master' into js/diff-ni
* master: (201 commits)
Documentation: link in 1.5.0.2 material to the top documentation page.
Documentation: document remote.<name>.tagopt
GIT 1.5.0.2
git-remote: support remotes with a dot in the name
Documentation: describe "-f/-t/-m" options to "git-remote add"
diff --cc: fix display of symlink conflicts during a merge.
merge-recursive: fix longstanding bug in merging symlinks
merge-index: fix longstanding bug in merging symlinks
diff --cached: give more sensible error message when HEAD is yet to be created.
Update tests to use test-chmtime
Add test-chmtime: a utility to change mtime on files
Add Release Notes to prepare for 1.5.0.2
Allow arbitrary number of arguments to git-pack-objects
rerere: do not deal with symlinks.
rerere: do not skip two conflicted paths next to each other.
Don't modify CREDITS-FILE if it hasn't changed.
diff-patch: Avoid emitting double-slashes in textual patch.
Reword git-am 3-way fallback failure message.
Limit filename for format-patch
core.legacyheaders: Use the description used in RelNotes-1.5.0
...
Diffstat (limited to 'test-chmtime.c')
-rw-r--r-- | test-chmtime.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/test-chmtime.c b/test-chmtime.c new file mode 100644 index 0000000000..90da448ebe --- /dev/null +++ b/test-chmtime.c @@ -0,0 +1,61 @@ +#include "git-compat-util.h" +#include <utime.h> + +static const char usage_str[] = "(+|=|=+|=-|-)<seconds> <file>..."; + +int main(int argc, const char *argv[]) +{ + int i; + int set_eq; + long int set_time; + char *test; + const char *timespec; + + if (argc < 3) + goto usage; + + timespec = argv[1]; + set_eq = (*timespec == '=') ? 1 : 0; + if (set_eq) { + timespec++; + if (*timespec == '+') { + set_eq = 2; /* relative "in the future" */ + timespec++; + } + } + set_time = strtol(timespec, &test, 10); + if (*test) { + fprintf(stderr, "Not a base-10 integer: %s\n", argv[1] + 1); + goto usage; + } + if ((set_eq && set_time < 0) || set_eq == 2) { + time_t now = time(NULL); + set_time += now; + } + + for (i = 2; i < argc; i++) { + struct stat sb; + struct utimbuf utb; + + if (stat(argv[i], &sb) < 0) { + fprintf(stderr, "Failed to stat %s: %s\n", + argv[i], strerror(errno)); + return -1; + } + + utb.actime = sb.st_atime; + utb.modtime = set_eq ? set_time : sb.st_mtime + set_time; + + if (utime(argv[i], &utb) < 0) { + fprintf(stderr, "Failed to modify time on %s: %s\n", + argv[i], strerror(errno)); + return -1; + } + } + + return 0; + +usage: + fprintf(stderr, "Usage: %s %s\n", argv[0], usage_str); + return -1; +} |