mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 15:43:32 +01:00
Add the first 8 bytes of the git commit digest to our versions.
Note that unlike subversion revision numbers, it isn't meaningful to compare these for anything but equality. We define a sort-order anyway, in case one of these accidentally slips into a recommended-versions list.
This commit is contained in:
parent
978571587a
commit
daa0326aaa
@ -38,6 +38,8 @@ Changes in version 0.2.2.1-alpha - 2009-0?-??
|
|||||||
setting FetchDirInfoEarly to 1. Previous behavior will stay the same
|
setting FetchDirInfoEarly to 1. Previous behavior will stay the same
|
||||||
as only certain clients who must have this information sooner should
|
as only certain clients who must have this information sooner should
|
||||||
set this option.
|
set this option.
|
||||||
|
- Instead of adding the svn revision to the Tor version string, report
|
||||||
|
the git commit (when we're building from a git checkout).
|
||||||
|
|
||||||
o Minor bugfixes:
|
o Minor bugfixes:
|
||||||
- If any the v3 certs we download are unparseable, we should actually
|
- If any the v3 certs we download are unparseable, we should actually
|
||||||
|
@ -57,44 +57,10 @@ config_codedigest.o: or_sha1.i
|
|||||||
tor_main.o: micro-revision.i
|
tor_main.o: micro-revision.i
|
||||||
|
|
||||||
micro-revision.i: FORCE
|
micro-revision.i: FORCE
|
||||||
@svkdir=$$SVKROOT; \
|
@rm -f micro-revision.tmp; \
|
||||||
if test "x$$svkdir" = x ; then \
|
|
||||||
svkdir=$$HOME/.svk; \
|
|
||||||
fi; \
|
|
||||||
if test -d ../../.git && test -x "`which git 2>&1;true`"; then \
|
if test -d ../../.git && test -x "`which git 2>&1;true`"; then \
|
||||||
if test -d ../../.git/svn && test -x "`which git-svn 2>&1;true`" ; then \
|
HASH="`git rev-parse --short=16 HEAD`"; \
|
||||||
git-svn info ../../README | \
|
echo \"$$HASH\" > micro-revision.tmp; \
|
||||||
sed -n 's/^Revision: \([0-9][0-9]*\).*/"\1"/p' \
|
|
||||||
> micro-revision.tmp \
|
|
||||||
|| true; \
|
|
||||||
fi; \
|
|
||||||
elif test -d ../../.svn && test -x "`which svn 2>&1;true`" ; then \
|
|
||||||
svn info ../.. | \
|
|
||||||
sed -n 's/^Revision: \([0-9][0-9]*\).*/"\1"/p' > micro-revision.tmp \
|
|
||||||
|| true; \
|
|
||||||
elif test -x "`which svk 2>&1;true`" && test -d $$svkdir/local; then \
|
|
||||||
location=../..; \
|
|
||||||
rev=x; \
|
|
||||||
while test x$$rev = xx; do \
|
|
||||||
x=`svk info $$location | \
|
|
||||||
sed -n 's/^Mirrored From:.*, Rev\. \([0-9][0-9]*\)/\1/p'`; \
|
|
||||||
if test x$$x != x; then \
|
|
||||||
rev=$$x; \
|
|
||||||
break; \
|
|
||||||
else \
|
|
||||||
loc=`svk info $$location | \
|
|
||||||
sed -n 's/^Copied From: \(.*\), Rev\. [0-9][0-9]*/\1/p' | \
|
|
||||||
head -1`; \
|
|
||||||
if test x$$loc = x; then \
|
|
||||||
break; \
|
|
||||||
else \
|
|
||||||
location=/$$loc; \
|
|
||||||
fi; \
|
|
||||||
fi; \
|
|
||||||
done; \
|
|
||||||
if test x$$rev != xx; then \
|
|
||||||
echo \"$$rev\" > micro-revision.tmp; \
|
|
||||||
fi; \
|
|
||||||
fi; \
|
fi; \
|
||||||
if test ! -f micro-revision.tmp ; then \
|
if test ! -f micro-revision.tmp ; then \
|
||||||
if test ! -f micro-revision.i ; then \
|
if test ! -f micro-revision.i ; then \
|
||||||
|
@ -817,7 +817,7 @@ set_options(or_options_t *new_val, char **msg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern const char tor_svn_revision[]; /* from tor_main.c */
|
extern const char tor_git_revision[]; /* from tor_main.c */
|
||||||
|
|
||||||
/** The version of this Tor process, as parsed. */
|
/** The version of this Tor process, as parsed. */
|
||||||
static char *_version = NULL;
|
static char *_version = NULL;
|
||||||
@ -827,10 +827,10 @@ const char *
|
|||||||
get_version(void)
|
get_version(void)
|
||||||
{
|
{
|
||||||
if (_version == NULL) {
|
if (_version == NULL) {
|
||||||
if (strlen(tor_svn_revision)) {
|
if (strlen(tor_git_revision)) {
|
||||||
size_t len = strlen(VERSION)+strlen(tor_svn_revision)+8;
|
size_t len = strlen(VERSION)+strlen(tor_git_revision)+16;
|
||||||
_version = tor_malloc(len);
|
_version = tor_malloc(len);
|
||||||
tor_snprintf(_version, len, "%s (r%s)", VERSION, tor_svn_revision);
|
tor_snprintf(_version, len, "%s (git-%s)", VERSION, tor_git_revision);
|
||||||
} else {
|
} else {
|
||||||
_version = tor_strdup(VERSION);
|
_version = tor_strdup(VERSION);
|
||||||
}
|
}
|
||||||
|
@ -4698,6 +4698,9 @@ typedef struct tor_version_t {
|
|||||||
int patchlevel;
|
int patchlevel;
|
||||||
char status_tag[MAX_STATUS_TAG_LEN];
|
char status_tag[MAX_STATUS_TAG_LEN];
|
||||||
int svn_revision;
|
int svn_revision;
|
||||||
|
|
||||||
|
int git_tag_len;
|
||||||
|
char git_tag[DIGEST_LEN];
|
||||||
} tor_version_t;
|
} tor_version_t;
|
||||||
|
|
||||||
int router_get_router_hash(const char *s, char *digest);
|
int router_get_router_hash(const char *s, char *digest);
|
||||||
|
@ -1608,8 +1608,6 @@ router_guess_address_from_dir_headers(uint32_t *guess)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern const char tor_svn_revision[]; /* from tor_main.c */
|
|
||||||
|
|
||||||
/** Set <b>platform</b> (max length <b>len</b>) to a NUL-terminated short
|
/** Set <b>platform</b> (max length <b>len</b>) to a NUL-terminated short
|
||||||
* string describing the version of Tor and the operating system we're
|
* string describing the version of Tor and the operating system we're
|
||||||
* currently running on.
|
* currently running on.
|
||||||
|
@ -3325,7 +3325,7 @@ tor_version_as_new_as(const char *platform, const char *cutoff)
|
|||||||
if (!*start) return 0;
|
if (!*start) return 0;
|
||||||
s = (char *)find_whitespace(start); /* also finds '\0', which is fine */
|
s = (char *)find_whitespace(start); /* also finds '\0', which is fine */
|
||||||
s2 = (char*)eat_whitespace(s);
|
s2 = (char*)eat_whitespace(s);
|
||||||
if (!strcmpstart(s2, "(r"))
|
if (!strcmpstart(s2, "(r") || !strcmpstart(s2, "(git-"))
|
||||||
s = (char*)find_whitespace(s2);
|
s = (char*)find_whitespace(s2);
|
||||||
|
|
||||||
if ((size_t)(s-start+1) >= sizeof(tmp)) /* too big, no */
|
if ((size_t)(s-start+1) >= sizeof(tmp)) /* too big, no */
|
||||||
@ -3421,6 +3421,21 @@ tor_version_parse(const char *s, tor_version_t *out)
|
|||||||
if (!strcmpstart(cp, "(r")) {
|
if (!strcmpstart(cp, "(r")) {
|
||||||
cp += 2;
|
cp += 2;
|
||||||
out->svn_revision = (int) strtol(cp,&eos,10);
|
out->svn_revision = (int) strtol(cp,&eos,10);
|
||||||
|
} else if (!strcmpstart(cp, "(git-")) {
|
||||||
|
char *close_paren = strchr(cp, ')');
|
||||||
|
int hexlen;
|
||||||
|
char digest[DIGEST_LEN];
|
||||||
|
if (! close_paren)
|
||||||
|
return -1;
|
||||||
|
cp += 5;
|
||||||
|
hexlen = (close_paren-cp);
|
||||||
|
memset(digest, 0, sizeof(digest));
|
||||||
|
if (hexlen > HEX_DIGEST_LEN || hexlen == 0 || (hexlen % 2) == 1)
|
||||||
|
return -1;
|
||||||
|
if (base16_decode(digest, hexlen/2, cp, hexlen))
|
||||||
|
return -1;
|
||||||
|
memcpy(out->git_tag, digest, hexlen/2);
|
||||||
|
out->git_tag_len = hexlen/2;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -3446,8 +3461,14 @@ tor_version_compare(tor_version_t *a, tor_version_t *b)
|
|||||||
return i;
|
return i;
|
||||||
else if ((i = strcmp(a->status_tag, b->status_tag)))
|
else if ((i = strcmp(a->status_tag, b->status_tag)))
|
||||||
return i;
|
return i;
|
||||||
|
else if ((i = a->svn_revision - b->svn_revision))
|
||||||
|
return i;
|
||||||
|
else if ((i = a->git_tag_len - b->git_tag_len))
|
||||||
|
return i;
|
||||||
|
else if (a->git_tag_len)
|
||||||
|
return memcmp(a->git_tag, b->git_tag, a->git_tag_len);
|
||||||
else
|
else
|
||||||
return a->svn_revision - b->svn_revision;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Return true iff versions <b>a</b> and <b>b</b> belong to the same series.
|
/** Return true iff versions <b>a</b> and <b>b</b> belong to the same series.
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
/* Ordinarily defined in tor_main.c; this bit is just here to provide one
|
/* Ordinarily defined in tor_main.c; this bit is just here to provide one
|
||||||
* since we're not linking to tor_main.c */
|
* since we're not linking to tor_main.c */
|
||||||
const char tor_svn_revision[] = "";
|
const char tor_git_revision[] = "";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file test.c
|
* \file test.c
|
||||||
@ -3212,6 +3212,19 @@ test_dir_format(void)
|
|||||||
"Tor 0.2.1.0-dev (r99)"));
|
"Tor 0.2.1.0-dev (r99)"));
|
||||||
test_eq(1, tor_version_as_new_as("Tor 0.2.1.1",
|
test_eq(1, tor_version_as_new_as("Tor 0.2.1.1",
|
||||||
"Tor 0.2.1.0-dev (r99)"));
|
"Tor 0.2.1.0-dev (r99)"));
|
||||||
|
|
||||||
|
/* Now try git revisions */
|
||||||
|
test_eq(0, tor_version_parse("0.5.6.7 (git-ff00ff)", &ver1));
|
||||||
|
test_eq(0, ver1.major);
|
||||||
|
test_eq(5, ver1.minor);
|
||||||
|
test_eq(6, ver1.micro);
|
||||||
|
test_eq(7, ver1.patchlevel);
|
||||||
|
test_eq(3, ver1.git_tag_len);
|
||||||
|
test_memeq(ver1.git_tag, "\xff\x00\xff", 3);
|
||||||
|
test_eq(-1, tor_version_parse("0.5.6.7 (git-ff00xx)", &ver1));
|
||||||
|
test_eq(-1, tor_version_parse("0.5.6.7 (git-ff00fff)", &ver1));
|
||||||
|
test_eq(0, tor_version_parse("0.5.6.7 (git ff00fff)", &ver1));
|
||||||
|
|
||||||
done:
|
done:
|
||||||
if (r1)
|
if (r1)
|
||||||
routerinfo_free(r1);
|
routerinfo_free(r1);
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* built from. This string is generated by a bit of shell kludging int
|
* built from. This string is generated by a bit of shell kludging int
|
||||||
* src/or/Makefile.am, and is usually right.
|
* src/or/Makefile.am, and is usually right.
|
||||||
*/
|
*/
|
||||||
const char tor_svn_revision[] =
|
const char tor_git_revision[] =
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
#include "micro-revision.i"
|
#include "micro-revision.i"
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user