Преглед изворни кода

A hack I've been wanting for a while: when building a -dev version
from an SVN repository, use the current svn revision in the platform
string and in the output of --version.



svn:r9976

Nick Mathewson пре 17 година
родитељ
комит
bfac679cd4
7 измењених фајлова са 47 додато и 5 уклоњено
  1. 2 0
      ChangeLog
  2. 3 2
      doc/TODO
  3. 14 0
      src/or/Makefile.am
  4. 9 1
      src/or/config.c
  5. 13 2
      src/or/router.c
  6. 2 0
      src/or/test.c
  7. 4 0
      src/or/tor_main.c

+ 2 - 0
ChangeLog

@@ -23,6 +23,8 @@ Changes in version 0.2.0.1-alpha - 2007-??-??
     - When warning about missing headers, tell the user to let us
     - When warning about missing headers, tell the user to let us
       know if the compile succeeds anyway, so we can downgrade the
       know if the compile succeeds anyway, so we can downgrade the
       warning.
       warning.
+    - If we're building from a subversion repository, include the current
+      SVN revision as part of the version string.
 
 
   o Minor features (logging):
   o Minor features (logging):
     - Always prepend "Bug: " to any log message about a bug.
     - Always prepend "Bug: " to any log message about a bug.

+ 3 - 2
doc/TODO

@@ -357,8 +357,9 @@ Future version:
     such errors recently, then don't warn about it.
     such errors recently, then don't warn about it.
   - More consistent error checking in router_parse_entry_from_string().
   - More consistent error checking in router_parse_entry_from_string().
     I can say "banana" as my bandwidthcapacity, and it won't even squeak.
     I can say "banana" as my bandwidthcapacity, and it won't even squeak.
-  - Include the output of svn info/svk info output into the binary, so
-    it's trivial to see what version a binary was built from.
+  o Include the output of svn info in the binary, so it's trivial to see what
+    version a binary was built from.
+    - Do the same for svk info.
   - Add a doxygen style checker to make check-spaces so nick doesn't drift
   - Add a doxygen style checker to make check-spaces so nick doesn't drift
     too far from arma's undocumented styleguide.  Also, document that
     too far from arma's undocumented styleguide.  Also, document that
     styleguide in HACKING.  (See r9634 for example.)
     styleguide in HACKING.  (See r9634 for example.)

+ 14 - 0
src/or/Makefile.am

@@ -28,3 +28,17 @@ test_LDADD = ../common/libor.a ../common/libor-crypto.a
 
 
 noinst_HEADERS = or.h eventdns.h eventdns_tor.h
 noinst_HEADERS = or.h eventdns.h eventdns_tor.h
 
 
+tor_main.o: micro-revision.i
+
+micro-revision.i: FORCE
+	rm -f micro-revision.i;					\
+	if test -d ../../.svn ; then 				\
+	  svn info ../.. |              			\
+	  sed -n 's/^Revision: \([0-9][0-9]*\).*/"\1"/p' > micro-revision.i \
+	     || true; \
+	fi;							\
+	if test ! -f micro-revision.i; then			\
+	  echo '""' > micro-revision.i;				\
+	fi
+
+FORCE:

+ 9 - 1
src/or/config.c

@@ -2982,6 +2982,8 @@ check_nickname_list(const char *lst, const char *name, char **msg)
   return r;
   return r;
 }
 }
 
 
+extern const char tor_svn_revision[]; /* from main.c */
+
 /** Read a configuration file into <b>options</b>, finding the configuration
 /** Read a configuration file into <b>options</b>, finding the configuration
  * file location based on the command line.  After loading the options,
  * file location based on the command line.  After loading the options,
  * validate them for consistency, then take actions based on them.
  * validate them for consistency, then take actions based on them.
@@ -3018,7 +3020,13 @@ options_init_from_torrc(int argc, char **argv)
   }
   }
 
 
   if (argc > 1 && (!strcmp(argv[1],"--version"))) {
   if (argc > 1 && (!strcmp(argv[1],"--version"))) {
-    printf("Tor version %s.\n",VERSION);
+    char vbuf[128];
+    if (tor_svn_revision && strlen(tor_svn_revision)) {
+      tor_snprintf(vbuf, sizeof(vbuf), " (r%s)", tor_svn_revision);
+    } else {
+      vbuf[0] = 0;
+    }
+    printf("Tor version %s%s.\n",VERSION,vbuf);
     if (argc > 2 && (!strcmp(argv[2],"--version"))) {
     if (argc > 2 && (!strcmp(argv[2],"--version"))) {
       print_svn_version();
       print_svn_version();
     }
     }

+ 13 - 2
src/or/router.c

@@ -1172,6 +1172,8 @@ router_guess_address_from_dir_headers(uint32_t *guess)
   return -1;
   return -1;
 }
 }
 
 
+extern const char tor_svn_revision[]; /* from 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.
@@ -1179,8 +1181,17 @@ router_guess_address_from_dir_headers(uint32_t *guess)
 void
 void
 get_platform_str(char *platform, size_t len)
 get_platform_str(char *platform, size_t len)
 {
 {
-  tor_snprintf(platform, len, "Tor %s on %s",
-           VERSION, get_uname());
+  char svn_version_buf[128];
+  if (!strcmpend(VERSION, "-dev") &&
+      tor_svn_revision && strlen(tor_svn_revision)) {
+    tor_snprintf(svn_version_buf, sizeof(svn_version_buf), " (r%s)",
+                 tor_svn_revision);
+  } else {
+    svn_version_buf[0] = 0;
+  }
+
+  tor_snprintf(platform, len, "Tor %s%s on %s",
+               VERSION, svn_version_buf, get_uname());
   return;
   return;
 }
 }
 
 

+ 2 - 0
src/or/test.c

@@ -5,6 +5,8 @@
 const char test_c_id[] =
 const char test_c_id[] =
   "$Id$";
   "$Id$";
 
 
+const char tor_svn_revision[] = "";
+
 /**
 /**
  * \file test.c
  * \file test.c
  * \brief Unit tests for many pieces of the lower level Tor modules.
  * \brief Unit tests for many pieces of the lower level Tor modules.

+ 4 - 0
src/or/tor_main.c

@@ -5,6 +5,10 @@
 const char tor_main_c_id[] =
 const char tor_main_c_id[] =
   "$Id$";
   "$Id$";
 
 
+const char tor_svn_revision[] =
+#include "micro-revision.i"
+  "";
+
 /**
 /**
  * \file tor_main.c
  * \file tor_main.c
  * \brief Stub module containing a main() function. Allows unit
  * \brief Stub module containing a main() function. Allows unit