REDIS_SENTINEL_NAME= redis-sentinel
REDIS_SERVER_OBJ= adlist.o ae.o anet.o dict.o redis.o sds.o zmalloc.o lzf_c.o lzf_d.o pqsort.o zipmap.o sha1.o ziplist.o release.o networking.o util.o object.o db.o replication.o rdb.o t_string.o t_list.o t_set.o t_zset.o t_hash.o config.o aof.o pubsub.o multi.o debug.o sort.o intset.o syncio.o cluster.o crc16.o endianconv.o slowlog.o scripting.o bio.o rio.o rand.o memtest.o crc64.o bitops.o sentinel.o
REDIS_CLI_NAME= redis-cli
-REDIS_CLI_OBJ= anet.o sds.o adlist.o redis-cli.o zmalloc.o release.o anet.o ae.o
+REDIS_CLI_OBJ= anet.o sds.o adlist.o redis-cli.o zmalloc.o release.o anet.o ae.o crc64.o
REDIS_BENCHMARK_NAME= redis-benchmark
REDIS_BENCHMARK_OBJ= ae.o anet.o redis-benchmark.o sds.o adlist.o zmalloc.o redis-benchmark.o
REDIS_CHECK_DUMP_NAME= redis-check-dump
--- /dev/null
+#ifndef CRC64_H
+#define CRC64_H
+
+#include <stdint.h>
+
+uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l);
+
+#endif
#include "redis.h"
#include "sha1.h" /* SHA1 is used for DEBUG DIGEST */
+#include "crc64.h"
#include <arpa/inet.h>
#include <signal.h>
}
#if defined(HAVE_PROC_MAPS)
-uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l);
void memtest_non_destructive_invert(void *addr, size_t size);
void memtest_non_destructive_swap(void *addr, size_t size);
#define MEMTEST_MAX_REGIONS 128
#!/bin/sh
GIT_SHA1=`(git show-ref --head --hash=8 2> /dev/null || echo 00000000) | head -n1`
GIT_DIRTY=`git diff 2> /dev/null | wc -l`
+BUILD_ID=`uname -n`"-"`date +%s`
test -f release.h || touch release.h
(cat release.h | grep SHA1 | grep $GIT_SHA1) && \
(cat release.h | grep DIRTY | grep $GIT_DIRTY) && exit 0 # Already uptodate
echo "#define REDIS_GIT_SHA1 \"$GIT_SHA1\"" > release.h
echo "#define REDIS_GIT_DIRTY \"$GIT_DIRTY\"" >> release.h
+echo "#define REDIS_BUILD_ID \"$BUILD_ID\"" >> release.h
touch release.c # Force recompile of release.c
#include <stdint.h>
#include <limits.h>
#include "lzf.h"
+#include "crc64.h"
/* Object types */
#define REDIS_STRING 0
/* store string types for output */
static char types[256][16];
-/* Prototypes */
-uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l);
-
/* Return true if 't' is a valid object type. */
int checkType(unsigned char t) {
/* In case a new object type is added, update the following
"redis_version:%s\r\n"
"redis_git_sha1:%s\r\n"
"redis_git_dirty:%d\r\n"
+ "redis_build_id:%llx\r\n"
"redis_mode:%s\r\n"
"os:%s %s %s\r\n"
"arch_bits:%d\r\n"
REDIS_VERSION,
redisGitSHA1(),
strtol(redisGitDirty(),NULL,10) > 0,
+ redisBuildId(),
mode,
name.sysname, name.release, name.machine,
server.arch_bits,
}
void version() {
- printf("Redis server v=%s sha=%s:%d malloc=%s bits=%d\n",
+ printf("Redis server v=%s sha=%s:%d malloc=%s bits=%d build=%llx\n",
REDIS_VERSION,
redisGitSHA1(),
atoi(redisGitDirty()) > 0,
ZMALLOC_LIB,
- sizeof(long) == 4 ? 32 : 64);
+ sizeof(long) == 4 ? 32 : 64,
+ redisBuildId());
exit(0);
}
/* Git SHA1 */
char *redisGitSHA1(void);
char *redisGitDirty(void);
+uint64_t redisBuildId(void);
/* Commands prototypes */
void authCommand(redisClient *c);
* small file is recompiled, as we access this information in all the other
* files using this functions. */
+#include <string.h>
+
#include "release.h"
+#include "version.h"
+#include "crc64.h"
char *redisGitSHA1(void) {
return REDIS_GIT_SHA1;
char *redisGitDirty(void) {
return REDIS_GIT_DIRTY;
}
+
+uint64_t redisBuildId(void) {
+ char *buildid = REDIS_VERSION REDIS_BUILD_ID REDIS_GIT_DIRTY REDIS_GIT_SHA1;
+
+ return crc64(0,(unsigned char*)buildid,strlen(buildid));
+}
#include <stdio.h>
#include "rio.h"
#include "util.h"
-
-uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l);
+#include "crc64.h"
/* Returns 1 or 0 for success/failure. */
static size_t rioBufferWrite(rio *r, const void *buf, size_t len) {