commit 4f3d208352cada4bd3f31696e1d19f5061ed2692 Author: George Kadianakis <desnac...@riseup.net> Date: Mon Mar 19 12:55:34 2012 -0700
Implement --version and put git revision on top of log. Also, implement --help. --- .gitignore | 1 + ChangeLog | 7 +++++++ Makefile.am | 27 ++++++++++++++++++++++++++- src/main.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 83 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 848c2b5..590ceed 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ Makefile.in /obfsproxy /unittests /tester.py +/micro-revision.i # /doc/ /doc/doxygen diff --git a/ChangeLog b/ChangeLog index 1bdab1a..fc055b5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Changes in version 0.1.2 - <not yet released> + - Display git revision when we start logging. Fixes part of bug + #5157. + - Implement obfsproxy --version. Fixes the rest of bug #5157. + - Implement obfsproxy --help. + + Changes in version 0.1.1 - 2012-03-09 - Add trailing slash to the torproject URL in the man page. Fixes bug #5311. Patch by Peter Palfrader. diff --git a/Makefile.am b/Makefile.am index f7c9c11..6b2731f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -54,7 +54,8 @@ noinst_HEADERS = \ src/protocols/dummy.h \ src/protocols/obfs2.h \ src/test/tinytest.h \ - src/test/tinytest_macros.h + src/test/tinytest_macros.h \ + micro-revision.i EXTRA_DIST = \ ChangeLog \ @@ -99,3 +100,27 @@ version: echo -n "git: " ;\ (cd "$(top_srcdir)" && git rev-parse --short=16 HEAD); \ fi + +all: micro-revision.i + +micro-revision.i: FORCE + @rm -f micro-revision.tmp; \ + if test -d "$(top_srcdir)/.git" && \ + test -x "`which git 2>&1;true`"; then \ + HASH="`cd "$(top_srcdir)" && git rev-parse --short=16 HEAD`"; \ + echo \"$$HASH\" > micro-revision.tmp; \ + fi; \ + if test ! -f micro-revision.tmp ; then \ + if test ! -f micro-revision.i ; then \ + echo '""' > micro-revision.i; \ + fi; \ + elif test ! -f micro-revision.i || \ + test x"`cat micro-revision.tmp`" != x"`cat micro-revision.i`"; then \ + mv micro-revision.tmp micro-revision.i; \ + fi; true + @rm -f micro-revision.tmp; + +CLEANFILES = micro-revision.i + +#Dummy target to ensure that micro-revision.i _always_ gets built. +FORCE: diff --git a/src/main.c b/src/main.c index 0d690b7..30210f1 100644 --- a/src/main.c +++ b/src/main.c @@ -31,6 +31,16 @@ #include <event2/event.h> #include <event2/dns.h> +/** String describing which obfsproxy git repository version the + * source was built from. This string is generated by a bit of shell + * kludging in Makefile.am, and is usually right. + */ +const char obfs_git_revision[] = +#ifndef _MSC_VER +#include "micro-revision.i" +#endif + ""; + static struct event_base *the_event_base; static struct event *sig_int; static struct event *sig_term; @@ -41,6 +51,22 @@ static int is_external_proxy=1; /* Whether to scrub connection addresses -- on by default */ int safe_logging=1; +static char *the_obfsproxy_version = NULL; + +/** Return the current obfsproxy version. */ +static const char * +get_version(void) +{ + if (!the_obfsproxy_version) { + if (strlen(obfs_git_revision)) + obfs_asprintf(&the_obfsproxy_version, "git-%s", obfs_git_revision); + else + obfs_asprintf(&the_obfsproxy_version, "git"); + } + + return the_obfsproxy_version; +} + /** Prints the obfsproxy usage instructions then exits. */ @@ -61,6 +87,21 @@ usage(void) "--no-log ~ disable logging\n" "--no-safe-logging ~ disable safe (scrubbed address) logging\n"); + if (the_obfsproxy_version) + free(the_obfsproxy_version); + + exit(1); +} + +/** Prints the obfsproxy version then exits. */ +static void ATTR_NORETURN +version(void) +{ + printf("obfsproxy %s\n", get_version()); + + if (the_obfsproxy_version) + free(the_obfsproxy_version); + exit(1); } @@ -175,6 +216,10 @@ handle_obfsproxy_args(const char *const *argv) safe_logging=0; } else if (!strncmp(argv[i], "--managed", 10)) { is_external_proxy=0; + } else if (!strncmp(argv[i], "--version", 10)) { + version(); + } else if (!strncmp(argv[i], "--help", 7)) { + usage(); } else { log_error("Unrecognizable obfsproxy argument '%s'", argv[i]); } @@ -279,8 +324,10 @@ obfsproxy_cleanup() cleanup_crypto(); status_connections_cleanup(); close_obfsproxy_logfile(); -} + if (the_obfsproxy_version) + free(the_obfsproxy_version); +} /** Entry point */ int @@ -290,7 +337,7 @@ obfs_main(int argc, const char *const *argv) /* Handle optional obfsproxy arguments. */ begin = argv + handle_obfsproxy_args(argv); - log_notice("Starting."); + log_notice("Starting (%s).", get_version()); if (is_external_proxy) { if (launch_external_proxy(begin) < 0) _______________________________________________ tor-commits mailing list tor-commits@lists.torproject.org https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits