((bool)((LHS)->st_dev ==(RHS)->st_dev && \
(LHS)->st_ino ==(RHS)->st_ino))
-#define Unify_isUnifyable(LHS, RHS) \
+#define _Unify_isUnifyable(LHS, RHS) \
((bool)((LHS)->st_dev ==(RHS)->st_dev && \
(LHS)->st_ino !=(RHS)->st_ino && \
(LHS)->st_mode ==(RHS)->st_mode && \
(LHS)->st_uid ==(RHS)->st_uid && \
(LHS)->st_gid ==(RHS)->st_gid && \
- (LHS)->st_size ==(RHS)->st_size && \
- (LHS)->st_mtime==(RHS)->st_mtime))
+ (LHS)->st_size ==(RHS)->st_size))
+#ifdef UTIL_VSERVER_UNIFY_MTIME_OPTIONAL
+# define Unify_isUnifyable(LHS, RHS) \
+ ((bool)(_Unify_isUnifyable(LHS, RHS) && \
+ (global_args->ignore_mtime || \
+ (LHS)->st_mtime==(RHS)->st_mtime)))
+#else
+# define Unify_isUnifyable(LHS, RHS) \
+ _Unify_isUnifyable(LHS, RHS)
+#endif
#endif // H_UTIL_VSERVER_LIB_INTERNAL_UNIFY_H
# include <config.h>
#endif
+#define UTIL_VSERVER_UNIFY_MTIME_OPTIONAL
+
#include "vhashify.h"
#include "util.h"
#define CMD_SLEDGE 0x1002
#define CMD_MANUALLY 0x1003
#define CMD_REFRESH 0x1004
+#define CMD_NOMTIME 0x1005
struct option const
CMDLINE_OPTIONS[] = {
{ "sledgehammer", no_argument, 0, CMD_SLEDGE },
{ "manually", no_argument, 0, CMD_MANUALLY },
{ "refresh", no_argument, 0, CMD_REFRESH },
+ { "ignore-mtime", no_argument, 0, CMD_NOMTIME },
{ "dry-run", no_argument, 0, 'n' },
{ "verbose", no_argument, 0, 'v' },
{ 0,0,0,0 }
SET_ATTR(gid),
SET_ATTR(rdev),
SET_ATTR(size),
- SET_ATTR(mtime)
+ .mtime = (global_args->ignore_mtime ? 0 : st->st_mtime),
};
#undef SET_ATTR
.insecure = 0,
.dry_run = false,
.do_refresh = false,
+ .ignore_mtime = false,
};
Vector_init(&global_info.hash_dirs, sizeof(struct HashDirInfo));
case CMD_INSECURE : args.insecure = 1; break;
case CMD_SLEDGE : args.insecure = 2; break;
case CMD_REFRESH : args.do_refresh = true; break;
+ case CMD_NOMTIME : args.ignore_mtime = true; break;
case 'n' : args.dry_run = true; break;
case 'v' : ++args.verbosity; break;
default :