Add sample experimental patch to show "make apply", "make unapply", "make patchlist...
authorMark Spencer <markster@digium.com>
Fri, 11 Mar 2005 08:24:23 +0000 (08:24 +0000)
committerMark Spencer <markster@digium.com>
Fri, 11 Mar 2005 08:24:23 +0000 (08:24 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5166 65c4cc65-6c06-0410-ace0-fbb531ad65f3

Makefile
patches/.cvsignore [new file with mode: 0755]
patches/queue_log [new file with mode: 0755]

index 38e7767..c50d490 100755 (executable)
--- a/Makefile
+++ b/Makefile
@@ -387,6 +387,16 @@ datafiles: all
 
 update: 
        @if [ -d CVS ]; then \
+               if [ -f patches/.applied ]; then \
+                       patches=`cat patches/.applied`; \
+               fi; \
+               if ! [ -z "$$patches" ]; then \
+                       for x in $$patches; do \
+                               echo "Unapplying $$x..."; \
+                               patch -R -p0 < patches/$$x; \
+                       done; \
+                       rm -f patches/.applied; \
+               fi ; \
                echo "Updating from CVS..." ; \
                cvs -q -z3 update -Pd | tee update.out; \
                rm -f .version; \
@@ -395,6 +405,17 @@ update:
                        grep ^C update.out | cut -d' ' -f2- ; \
                fi ; \
                rm -f update.out; \
+               if ! [ -z "$$patches" ]; then \
+                       for x in $$patches; do \
+                               if [ -f patches/$$x ]; then \
+                                       echo "Applying patch $$x..."; \
+                                       patch -p0 < patches/$$x; \
+                                       echo $$x >> patches/.applied; \
+                               else \
+                                       echo "Patch $$x no longer relevant"; \
+                               fi; \
+                       done; \
+               fi; \
        else \
                echo "Not CVS";  \
        fi
@@ -607,3 +628,49 @@ cleantest:
        if ! cmp -s .cleancount .lastclean ; then \
                $(MAKE) clean; cp -f .cleancount .lastclean;\
        fi
+
+patchlist:
+       @echo "Experimental Patches:"
+       @for x in patches/*; do \
+               patch=`basename $$x`; \
+               if [ "$$patch" = "CVS" ]; then \
+                       continue; \
+               fi; \
+               if grep -q ^$$patch$$ patches/.applied; then \
+                       echo "$$patch (applied)"; \
+               else \
+                       echo "$$patch (available)"; \
+               fi; \
+       done
+               
+       
+apply: 
+       @if [ -z "$(PATCH)" ]; then \
+               echo "Usage: make PATCH=<patchname> applypatch"; \
+       elif grep -q ^$(PATCH)$$ patches/.applied 2>/dev/null; then \
+               echo "Patch $(PATCH) is already applied"; \
+       elif [ -f "patches/$(PATCH)" ]; then \
+               echo "Applying patch $(PATCH)"; \
+               patch -p0 < patches/$(PATCH); \
+               echo "$(PATCH)" >> patches/.applied; \
+       else \
+               echo "No such patch $(PATCH) in patches directory"; \
+       fi
+       
+unapply: 
+       @if [ -z "$(PATCH)" ]; then \
+               echo "Usage: make PATCH=<patchname> unapplypatch"; \
+       elif !grep -q ^$(PATCH)$$ patches/.applied 2>/dev/null; then \
+               echo "Patch $(PATCH) is not applied"; \
+       elif [ -f "patches/$(PATCH)" ]; then \
+               echo "Un-applying patch $(PATCH)"; \
+               patch -p0 -R < patches/$(PATCH); \
+               rm -f patches/.tmpapplied || :; \
+               mv patches/.applied patches/.tmpapplied; \
+               cat patches/.tmpapplied | grep -v ^$(PATCH)$$ > patches/.applied; \
+               rm -f patches/.tmpapplied; \
+       else \
+               echo "No such patch $(PATCH) in patches directory"; \
+       fi
+
+               
diff --git a/patches/.cvsignore b/patches/.cvsignore
new file mode 100755 (executable)
index 0000000..975f885
--- /dev/null
@@ -0,0 +1,2 @@
+.applied
+.tmpapplied
diff --git a/patches/queue_log b/patches/queue_log
new file mode 100755 (executable)
index 0000000..e4a8d13
--- /dev/null
@@ -0,0 +1,176 @@
+Index: logger.c
+===================================================================
+RCS file: /usr/cvsroot/asterisk/logger.c,v
+retrieving revision 1.55
+diff -u -r1.55 logger.c
+--- logger.c   25 Jan 2005 06:10:19 -0000      1.55
++++ logger.c   9 Mar 2005 21:25:25 -0000
+@@ -61,6 +61,11 @@
+ static int pending_logger_reload = 0;
+ static int global_logmask = -1;
++static struct {
++      unsigned int queue_log:1;
++      unsigned int event_log:1;
++} logfiles = { 1, 1 };
++
+ static struct msglist {
+       char *msg;
+       struct msglist *next;
+@@ -288,6 +293,13 @@
+               strncpy(dateformat, s, sizeof(dateformat) - 1);
+       } else
+               strncpy(dateformat, "%b %e %T", sizeof(dateformat) - 1);
++      if ((s = ast_variable_retrieve(cfg, "general", "queue_log"))) {
++              logfiles.queue_log = ast_true(s);
++      }
++      if ((s = ast_variable_retrieve(cfg, "general", "event_log"))) {
++              logfiles.event_log = ast_true(s);
++      }
++
+       var = ast_variable_browse(cfg, "logfiles");
+       while(var) {
+               chan = make_logchannel(var->name, var->value, var->lineno);
+@@ -332,7 +344,9 @@
+               qlog = NULL;
+       }
+       snprintf(filename, sizeof(filename), "%s/%s", (char *)ast_config_AST_LOG_DIR, "queue_log");
+-      qlog = fopen(filename, "a");
++      if (logfiles.queue_log) {
++              qlog = fopen(filename, "a");
++      }
+       ast_mutex_unlock(&qloglock);
+       if (reloaded) 
+               ast_queue_log("NONE", "NONE", "NONE", "CONFIGRELOAD", "%s", "");
+@@ -360,22 +374,24 @@
+       mkdir((char *)ast_config_AST_LOG_DIR, 0755);
+       snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG);
+-      if(rotate) {
+-              for(x=0;;x++) {
+-                      snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, EVENTLOG,x);
+-                      myf = fopen((char *)new, "r");
+-                      if(myf) 
+-                              fclose(myf);
+-                      else
+-                              break;
+-              }
++      if (logfiles.event_log) {
++              if (rotate) {
++                      for (x=0;;x++) {
++                              snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, EVENTLOG,x);
++                              myf = fopen((char *)new, "r");
++                              if (myf) 
++                                      fclose(myf);
++                              else
++                                      break;
++                      }
+       
+-              /* do it */
+-              if (rename(old,new))
+-                      fprintf(stderr, "Unable to rename file '%s' to '%s'\n", old, new);
+-      }
++                      /* do it */
++                      if (rename(old,new))
++                              fprintf(stderr, "Unable to rename file '%s' to '%s'\n", old, new);
++              }
+-      eventlog = fopen(old, "a");
++              eventlog = fopen(old, "a");
++      }
+       f = logchannels;
+       while(f) {
+@@ -406,16 +422,17 @@
+       ast_mutex_unlock(&loglock);
+       queue_log_init();
+-
+-      if (eventlog) {
+-              init_logger_chain();
+-              ast_log(LOG_EVENT, "Restarted Asterisk Event Logger\n");
+-              if (option_verbose)
+-                      ast_verbose("Asterisk Event Logger restarted\n");
+-              return 0;
+-      } else 
+-              ast_log(LOG_ERROR, "Unable to create event log: %s\n", strerror(errno));
+       init_logger_chain();
++
++      if (logfiles.event_log) {
++              if (eventlog) {
++                      ast_log(LOG_EVENT, "Restarted Asterisk Event Logger\n");
++                      if (option_verbose)
++                              ast_verbose("Asterisk Event Logger restarted\n");
++                      return 0;
++              } else 
++                      ast_log(LOG_ERROR, "Unable to create event log: %s\n", strerror(errno));
++      }
+       pending_logger_reload = 0;
+       return -1;
+ }
+@@ -487,21 +504,23 @@
+       /* initialize queue logger */
+       queue_log_init();
+-      /* create the eventlog */
+-      mkdir((char *)ast_config_AST_LOG_DIR, 0755);
+-      snprintf(tmp, sizeof(tmp), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG);
+-      eventlog = fopen((char *)tmp, "a");
+-      if (eventlog) {
+-              init_logger_chain();
+-              ast_log(LOG_EVENT, "Started Asterisk Event Logger\n");
+-              if (option_verbose)
+-                      ast_verbose("Asterisk Event Logger Started %s\n",(char *)tmp);
+-              return 0;
+-      } else 
+-              ast_log(LOG_ERROR, "Unable to create event log: %s\n", strerror(errno));
+-
+       /* create log channels */
+       init_logger_chain();
++
++      /* create the eventlog */
++      if (logfiles.event_log) {
++              mkdir((char *)ast_config_AST_LOG_DIR, 0755);
++              snprintf(tmp, sizeof(tmp), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG);
++              eventlog = fopen((char *)tmp, "a");
++              if (eventlog) {
++                      ast_log(LOG_EVENT, "Started Asterisk Event Logger\n");
++                      if (option_verbose)
++                              ast_verbose("Asterisk Event Logger Started %s\n",(char *)tmp);
++                      return 0;
++              } else 
++                      ast_log(LOG_ERROR, "Unable to create event log: %s\n", strerror(errno));
++      }
++
+       return -1;
+ }
+@@ -572,7 +591,7 @@
+       localtime_r(&t, &tm);
+       strftime(date, sizeof(date), dateformat, &tm);
+-      if (level == __LOG_EVENT) {
++      if (logfiles.event_log && level == __LOG_EVENT) {
+               va_start(ap, fmt);
+               fprintf(eventlog, "%s asterisk[%d]: ", date, getpid());
+Index: configs/logger.conf.sample
+===================================================================
+RCS file: /usr/cvsroot/asterisk/configs/logger.conf.sample,v
+retrieving revision 1.9
+diff -u -r1.9 logger.conf.sample
+--- configs/logger.conf.sample 5 Sep 2004 03:48:05 -0000       1.9
++++ configs/logger.conf.sample 9 Mar 2005 21:25:25 -0000
+@@ -13,6 +13,12 @@
+ ; This appends the hostname to the name of the log files.
+ ;appendhostname = yes
+ ;
++; This determines whether or not we log queue events to a file (defaults to yes).
++;queue_log = no
++;
++; This determines whether or not we log generic events to a file (defaults to yes).
++;event_log = no
++;
+ ;
+ ; For each file, specify what to log.
+ ;