<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.lisp.steel-bank.cvs">
    <title>gmane.lisp.steel-bank.cvs</title>
    <link>http://blog.gmane.org/gmane.lisp.steel-bank.cvs</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16431"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16430"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16429"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16431"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16430"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16429"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16428"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16427"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16426"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16425"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16424"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16423"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16422"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16421"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16420"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16419"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16418"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16417"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16416"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16415"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16431">
    <title>master: Hopefully fix the windows build to groveltime structures correctly.</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16431</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  77641d60a8b001bf3ccc755f3fb9881ee8d4753f (commit)
      from  7230b50bc438a7fbebd93866a96f9291e630419f (commit)

- Log -----------------------------------------------------------------
commit 77641d60a8b001bf3ccc755f3fb9881ee8d4753f
Author: Joshua Elsasser &amp;lt;joshua&amp;lt; at &amp;gt;elsasser.org&amp;gt;
Date:   Sat Jun 8 21:36:48 2013 -0700

    Hopefully fix the windows build to grovel time structures correctly.
    
    It is a little misleading to say "correctly" since struct timespec
    doesn't really exist on windows. Groveling the definition that we
    define in our own pthreads wrapper seems the most consistent choice.
    
    The grovel-headers.c changes have only been tested in isolation, not
    with a real build. Thanks to Kyle Isom for testing, any resulting
    build problems are entirely my fault.
---
 src/runtime/pthreads_win32.h     |    6 ++++++
 tools-for-build/grovel-headers.c |    5 +++++
 2 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/src/runtime/pthreads_win32.h b/src/runtime/pthreads_win32.h
index b91c0f9..a8f99a8 100644
--- a/src/runtime/pthreads_win32.h
+++ b/src/runtime/pthreads_win32.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -16,8 +16,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef int sigset_t;
 
 /* 0 - Misc */
 
+#ifndef SIG_IGN
 #define SIG_IGN ((void (*)(int, siginfo_t, void*))-1)
+#endif
+#ifndef SIG_DFL
 #define SIG_DFL ((void (*)(int, siginfo_t, void*))-2)
+#endif
 
 #define SIGHUP    1
 #define SIGINT    2 /* Interactive attention */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -42,7 +46,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef int sigset_t;
 
 #define SIGRTMIN  23
 
+#ifndef NSIG
 #define NSIG 32     /* maximum signal number + 1 */
+#endif
 
 /* To avoid overusing system TLS, pthread provides its own */
 #define PTHREAD_KEYS_MAX 128
diff --git a/tools-for-build/grovel-headers.c b/tools-for-build/grovel-headers.c
index 315c6cd..9be8744 100644
--- a/tools-for-build/grovel-headers.c
+++ b/tools-for-build/grovel-headers.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -31,6 +31,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   #include &amp;lt;windows.h&amp;gt;
   #include &amp;lt;shlobj.h&amp;gt;
   #include &amp;lt;wincrypt.h&amp;gt;
+  #include &amp;lt;winsock2.h&amp;gt;
   #undef boolean
 #else
   #include &amp;lt;poll.h&amp;gt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -60,6 +61,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   #include &amp;lt;sys/sysctl.h&amp;gt;
 #endif
 
+#ifdef _WIN32
+  #include "pthreads_win32.h"
+#endif
+
 #include "wrap.h"
 #include "gc.h"
 

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Joshua Elsasser</dc:creator>
    <dc:date>2013-06-20T03:42:45</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16430">
    <title>master: Grovel timeval and timespec structdefinitions rather than hard-coding.</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16430</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  7230b50bc438a7fbebd93866a96f9291e630419f (commit)
      from  491b5526abbcb1cfac2274aa5c6dce33ee3ed7e4 (commit)

- Log -----------------------------------------------------------------
commit 7230b50bc438a7fbebd93866a96f9291e630419f
Author: Joshua Elsasser &amp;lt;joshua&amp;lt; at &amp;gt;elsasser.org&amp;gt;
Date:   Sun May 12 08:36:11 2013 -0700

    Grovel timeval and timespec struct definitions rather than hard-coding.
---
 src/code/unix.lisp               |   44 --------------------------------------
 tools-for-build/grovel-headers.c |   21 ++++++++++++++++++
 2 files changed, 21 insertions(+), 44 deletions(-)

diff --git a/src/code/unix.lisp b/src/code/unix.lisp
index b7a30c8..0856069 100644
--- a/src/code/unix.lisp
+++ b/src/code/unix.lisp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -203,33 +203,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; corresponds to NAME, or NIL if there is none."
             (values #!-win32 fd #!+win32 (sb!win32::duplicate-and-unwrap-fd fd)
                     (octets-to-string template-buffer)))))))
 
-;;;; timebits.h
-
-;; A time value that is accurate to the nearest
-;; microsecond but also has a range of years.
-;; CLH: Note that tv-usec used to be a time-t, but that this seems
-;; problematic on Darwin x86-64 (and wrong). Trying suseconds-t.
-#!-(or win32 openbsd netbsd)
-(define-alien-type nil
-  (struct timeval
-          (tv-sec time-t)           ; seconds
-          (tv-usec suseconds-t)))   ; and microseconds
-
-;; The above definition doesn't work on 64-bit OpenBSD platforms.
-;; Both tv_sec and tv_usec are declared as long instead of time_t, and
-;; time_t is a typedef for int.
-#!+(or openbsd netbsd)
-(define-alien-type nil
-  (struct timeval
-          (tv-sec long)             ; seconds
-          (tv-usec long)))          ; and microseconds
-
-#!+win32
-(define-alien-type nil
-  (struct timeval
-          (tv-sec time-t)           ; seconds
-          (tv-usec long)))          ; and microseconds
-
 ;;;; resourcebits.h
 
 (defconstant rusage_self 0) ; the calling process
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -937,23 +910,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; avoiding atexit(3) hooks, etc. Otherwise exit(2) is called."
 
 ;;;; time.h
 
-;; the POSIX.4 structure for a time value. This is like a "struct
-;; timeval" but has nanoseconds instead of microseconds.
-#!-(or openbsd netbsd)
-(define-alien-type nil
-    (struct timespec
-            (tv-sec long)   ; seconds
-            (tv-nsec long))) ; nanoseconds
-
-;; Just as with struct timeval, 64-bit OpenBSD has problems with the
-;; above definition.  tv_sec is declared as time_t instead of long,
-;; and time_t is a typedef for int.
-#!+(or openbsd netbsd)
-(define-alien-type nil
-    (struct timespec
-            (tv-sec time-t)  ; seconds
-            (tv-nsec long))) ; nanoseconds
-
 ;; used by other time functions
 (define-alien-type nil
     (struct tm
diff --git a/tools-for-build/grovel-headers.c b/tools-for-build/grovel-headers.c
index 9a3e74d..315c6cd 100644
--- a/tools-for-build/grovel-headers.c
+++ b/tools-for-build/grovel-headers.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -39,6 +39,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   #include &amp;lt;sys/wait.h&amp;gt;
   #include &amp;lt;sys/ioctl.h&amp;gt;
   #include &amp;lt;sys/termios.h&amp;gt;
+  #include &amp;lt;sys/time.h&amp;gt;
   #include &amp;lt;langinfo.h&amp;gt;
   #include &amp;lt;dlfcn.h&amp;gt;
 #endif
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -48,6 +49,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include &amp;lt;unistd.h&amp;gt;
 #include &amp;lt;signal.h&amp;gt;
 #include &amp;lt;errno.h&amp;gt;
+#include &amp;lt;time.h&amp;gt;
 
 #ifdef LISP_FEATURE_HPUX
 #include &amp;lt;sys/bsdtty.h&amp;gt; /* for TIOCGPGRP */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -64,6 +66,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #define DEFTYPE(lispname,cname) { cname foo; \
     printf("(define-alien-type " lispname " (%s %d))\n", (((foo=-1)&amp;lt;0) ? "sb!alien:signed" : "unsigned"), (8 * (sizeof foo))); }
 
+#define DEFSTRUCT(lispname,cname,body) { cname bar; \
+    printf("(define-alien-type nil\n  (struct %s", #lispname); \
+    body; \
+    printf("))\n"); }
+#define DEFSLOT(lispname,cname) \
+    printf("\n          (%s (%s %d))", \
+           #lispname, \
+           (((bar.cname=-1)&amp;lt;0) ? "sb!alien:signed" : "unsigned"), \
+           (8 * (sizeof bar.cname)))
+
 void
 defconstant(char* lisp_name, unsigned long unix_number)
 {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -501,6 +513,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; main(int argc, char *argv[])
 #endif // !WIN32
     printf("\n");
 
+    printf(";;; structures\n");
+    DEFSTRUCT(timeval, struct timeval,
+        DEFSLOT(tv-sec, tv_sec);
+        DEFSLOT(tv-usec, tv_usec));
+    DEFSTRUCT(timespec, struct timespec,
+        DEFSLOT(tv-sec, tv_sec);
+        DEFSLOT(tv-nsec, tv_nsec));
+    printf("\n");
+
 #ifdef LISP_FEATURE_BSD
     printf(";;; sysctl(3) names\n");
     printf("(in-package \"SB!IMPL\")\n");

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Joshua Elsasser</dc:creator>
    <dc:date>2013-06-20T03:42:42</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16429">
    <title>master: Fix instruction encoding for XMM shifts withimmediate count</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16429</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  491b5526abbcb1cfac2274aa5c6dce33ee3ed7e4 (commit)
      from  d5c8232ed5dc81aea41d3b9e865189660bf45614 (commit)

- Log -----------------------------------------------------------------
commit 491b5526abbcb1cfac2274aa5c6dce33ee3ed7e4
Author: Paul Khuong &amp;lt;pvk&amp;lt; at &amp;gt;pvk.ca&amp;gt;
Date:   Tue Jun 18 13:23:42 2013 -0400

    Fix instruction encoding for XMM shifts with immediate count
    
     x86 keeps getting more and more devious: the source/dest operand
     is in the r/m field for these instructions, so REX.B must be set,
     rather than REX.R, to access &amp;gt; xmm7. Intel's new documentation
     seems clearer about these issues, at least.
---
 src/compiler/x86-64/insts.lisp |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/compiler/x86-64/insts.lisp b/src/compiler/x86-64/insts.lisp
index 35f1c6e..7488457 100644
--- a/src/compiler/x86-64/insts.lisp
+++ b/src/compiler/x86-64/insts.lisp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2983,7 +2983,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   (aver (&amp;lt;= 0 /i 7))
   (when prefix
     (emit-byte segment prefix))
-  (maybe-emit-rex-prefix segment operand-size dst/src nil nil)
+  ;; dst/src is encoded in the r/m field, not r; REX.B must be
+  ;; set to use extended XMM registers
+  (maybe-emit-rex-prefix segment operand-size nil nil dst/src)
   (emit-byte segment #x0F)
   (emit-byte segment opcode)
   (emit-byte segment (logior (ash (logior #b11000 /i) 3)

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Paul Khuong</dc:creator>
    <dc:date>2013-06-18T17:27:20</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16431">
    <title>master: Hopefully fix the windows build to groveltime structures correctly.</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16431</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  77641d60a8b001bf3ccc755f3fb9881ee8d4753f (commit)
      from  7230b50bc438a7fbebd93866a96f9291e630419f (commit)

- Log -----------------------------------------------------------------
commit 77641d60a8b001bf3ccc755f3fb9881ee8d4753f
Author: Joshua Elsasser &amp;lt;joshua&amp;lt; at &amp;gt;elsasser.org&amp;gt;
Date:   Sat Jun 8 21:36:48 2013 -0700

    Hopefully fix the windows build to grovel time structures correctly.
    
    It is a little misleading to say "correctly" since struct timespec
    doesn't really exist on windows. Groveling the definition that we
    define in our own pthreads wrapper seems the most consistent choice.
    
    The grovel-headers.c changes have only been tested in isolation, not
    with a real build. Thanks to Kyle Isom for testing, any resulting
    build problems are entirely my fault.
---
 src/runtime/pthreads_win32.h     |    6 ++++++
 tools-for-build/grovel-headers.c |    5 +++++
 2 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/src/runtime/pthreads_win32.h b/src/runtime/pthreads_win32.h
index b91c0f9..a8f99a8 100644
--- a/src/runtime/pthreads_win32.h
+++ b/src/runtime/pthreads_win32.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -16,8 +16,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef int sigset_t;
 
 /* 0 - Misc */
 
+#ifndef SIG_IGN
 #define SIG_IGN ((void (*)(int, siginfo_t, void*))-1)
+#endif
+#ifndef SIG_DFL
 #define SIG_DFL ((void (*)(int, siginfo_t, void*))-2)
+#endif
 
 #define SIGHUP    1
 #define SIGINT    2 /* Interactive attention */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -42,7 +46,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; typedef int sigset_t;
 
 #define SIGRTMIN  23
 
+#ifndef NSIG
 #define NSIG 32     /* maximum signal number + 1 */
+#endif
 
 /* To avoid overusing system TLS, pthread provides its own */
 #define PTHREAD_KEYS_MAX 128
diff --git a/tools-for-build/grovel-headers.c b/tools-for-build/grovel-headers.c
index 315c6cd..9be8744 100644
--- a/tools-for-build/grovel-headers.c
+++ b/tools-for-build/grovel-headers.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -31,6 +31,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   #include &amp;lt;windows.h&amp;gt;
   #include &amp;lt;shlobj.h&amp;gt;
   #include &amp;lt;wincrypt.h&amp;gt;
+  #include &amp;lt;winsock2.h&amp;gt;
   #undef boolean
 #else
   #include &amp;lt;poll.h&amp;gt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -60,6 +61,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   #include &amp;lt;sys/sysctl.h&amp;gt;
 #endif
 
+#ifdef _WIN32
+  #include "pthreads_win32.h"
+#endif
+
 #include "wrap.h"
 #include "gc.h"
 

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Joshua Elsasser</dc:creator>
    <dc:date>2013-06-20T03:42:45</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16430">
    <title>master: Grovel timeval and timespec structdefinitions rather than hard-coding.</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16430</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  7230b50bc438a7fbebd93866a96f9291e630419f (commit)
      from  491b5526abbcb1cfac2274aa5c6dce33ee3ed7e4 (commit)

- Log -----------------------------------------------------------------
commit 7230b50bc438a7fbebd93866a96f9291e630419f
Author: Joshua Elsasser &amp;lt;joshua&amp;lt; at &amp;gt;elsasser.org&amp;gt;
Date:   Sun May 12 08:36:11 2013 -0700

    Grovel timeval and timespec struct definitions rather than hard-coding.
---
 src/code/unix.lisp               |   44 --------------------------------------
 tools-for-build/grovel-headers.c |   21 ++++++++++++++++++
 2 files changed, 21 insertions(+), 44 deletions(-)

diff --git a/src/code/unix.lisp b/src/code/unix.lisp
index b7a30c8..0856069 100644
--- a/src/code/unix.lisp
+++ b/src/code/unix.lisp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -203,33 +203,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; corresponds to NAME, or NIL if there is none."
             (values #!-win32 fd #!+win32 (sb!win32::duplicate-and-unwrap-fd fd)
                     (octets-to-string template-buffer)))))))
 
-;;;; timebits.h
-
-;; A time value that is accurate to the nearest
-;; microsecond but also has a range of years.
-;; CLH: Note that tv-usec used to be a time-t, but that this seems
-;; problematic on Darwin x86-64 (and wrong). Trying suseconds-t.
-#!-(or win32 openbsd netbsd)
-(define-alien-type nil
-  (struct timeval
-          (tv-sec time-t)           ; seconds
-          (tv-usec suseconds-t)))   ; and microseconds
-
-;; The above definition doesn't work on 64-bit OpenBSD platforms.
-;; Both tv_sec and tv_usec are declared as long instead of time_t, and
-;; time_t is a typedef for int.
-#!+(or openbsd netbsd)
-(define-alien-type nil
-  (struct timeval
-          (tv-sec long)             ; seconds
-          (tv-usec long)))          ; and microseconds
-
-#!+win32
-(define-alien-type nil
-  (struct timeval
-          (tv-sec time-t)           ; seconds
-          (tv-usec long)))          ; and microseconds
-
 ;;;; resourcebits.h
 
 (defconstant rusage_self 0) ; the calling process
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -937,23 +910,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; avoiding atexit(3) hooks, etc. Otherwise exit(2) is called."
 
 ;;;; time.h
 
-;; the POSIX.4 structure for a time value. This is like a "struct
-;; timeval" but has nanoseconds instead of microseconds.
-#!-(or openbsd netbsd)
-(define-alien-type nil
-    (struct timespec
-            (tv-sec long)   ; seconds
-            (tv-nsec long))) ; nanoseconds
-
-;; Just as with struct timeval, 64-bit OpenBSD has problems with the
-;; above definition.  tv_sec is declared as time_t instead of long,
-;; and time_t is a typedef for int.
-#!+(or openbsd netbsd)
-(define-alien-type nil
-    (struct timespec
-            (tv-sec time-t)  ; seconds
-            (tv-nsec long))) ; nanoseconds
-
 ;; used by other time functions
 (define-alien-type nil
     (struct tm
diff --git a/tools-for-build/grovel-headers.c b/tools-for-build/grovel-headers.c
index 9a3e74d..315c6cd 100644
--- a/tools-for-build/grovel-headers.c
+++ b/tools-for-build/grovel-headers.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -39,6 +39,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   #include &amp;lt;sys/wait.h&amp;gt;
   #include &amp;lt;sys/ioctl.h&amp;gt;
   #include &amp;lt;sys/termios.h&amp;gt;
+  #include &amp;lt;sys/time.h&amp;gt;
   #include &amp;lt;langinfo.h&amp;gt;
   #include &amp;lt;dlfcn.h&amp;gt;
 #endif
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -48,6 +49,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include &amp;lt;unistd.h&amp;gt;
 #include &amp;lt;signal.h&amp;gt;
 #include &amp;lt;errno.h&amp;gt;
+#include &amp;lt;time.h&amp;gt;
 
 #ifdef LISP_FEATURE_HPUX
 #include &amp;lt;sys/bsdtty.h&amp;gt; /* for TIOCGPGRP */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -64,6 +66,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #define DEFTYPE(lispname,cname) { cname foo; \
     printf("(define-alien-type " lispname " (%s %d))\n", (((foo=-1)&amp;lt;0) ? "sb!alien:signed" : "unsigned"), (8 * (sizeof foo))); }
 
+#define DEFSTRUCT(lispname,cname,body) { cname bar; \
+    printf("(define-alien-type nil\n  (struct %s", #lispname); \
+    body; \
+    printf("))\n"); }
+#define DEFSLOT(lispname,cname) \
+    printf("\n          (%s (%s %d))", \
+           #lispname, \
+           (((bar.cname=-1)&amp;lt;0) ? "sb!alien:signed" : "unsigned"), \
+           (8 * (sizeof bar.cname)))
+
 void
 defconstant(char* lisp_name, unsigned long unix_number)
 {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -501,6 +513,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; main(int argc, char *argv[])
 #endif // !WIN32
     printf("\n");
 
+    printf(";;; structures\n");
+    DEFSTRUCT(timeval, struct timeval,
+        DEFSLOT(tv-sec, tv_sec);
+        DEFSLOT(tv-usec, tv_usec));
+    DEFSTRUCT(timespec, struct timespec,
+        DEFSLOT(tv-sec, tv_sec);
+        DEFSLOT(tv-nsec, tv_nsec));
+    printf("\n");
+
 #ifdef LISP_FEATURE_BSD
     printf(";;; sysctl(3) names\n");
     printf("(in-package \"SB!IMPL\")\n");

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Joshua Elsasser</dc:creator>
    <dc:date>2013-06-20T03:42:42</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16429">
    <title>master: Fix instruction encoding for XMM shifts withimmediate count</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16429</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  491b5526abbcb1cfac2274aa5c6dce33ee3ed7e4 (commit)
      from  d5c8232ed5dc81aea41d3b9e865189660bf45614 (commit)

- Log -----------------------------------------------------------------
commit 491b5526abbcb1cfac2274aa5c6dce33ee3ed7e4
Author: Paul Khuong &amp;lt;pvk&amp;lt; at &amp;gt;pvk.ca&amp;gt;
Date:   Tue Jun 18 13:23:42 2013 -0400

    Fix instruction encoding for XMM shifts with immediate count
    
     x86 keeps getting more and more devious: the source/dest operand
     is in the r/m field for these instructions, so REX.B must be set,
     rather than REX.R, to access &amp;gt; xmm7. Intel's new documentation
     seems clearer about these issues, at least.
---
 src/compiler/x86-64/insts.lisp |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/compiler/x86-64/insts.lisp b/src/compiler/x86-64/insts.lisp
index 35f1c6e..7488457 100644
--- a/src/compiler/x86-64/insts.lisp
+++ b/src/compiler/x86-64/insts.lisp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2983,7 +2983,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   (aver (&amp;lt;= 0 /i 7))
   (when prefix
     (emit-byte segment prefix))
-  (maybe-emit-rex-prefix segment operand-size dst/src nil nil)
+  ;; dst/src is encoded in the r/m field, not r; REX.B must be
+  ;; set to use extended XMM registers
+  (maybe-emit-rex-prefix segment operand-size nil nil dst/src)
   (emit-byte segment #x0F)
   (emit-byte segment opcode)
   (emit-byte segment (logior (ash (logior #b11000 /i) 3)

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Paul Khuong</dc:creator>
    <dc:date>2013-06-18T17:27:20</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16428">
    <title>master: check-mod-fixnum: correct the test forpower-of-two.</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16428</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  d5c8232ed5dc81aea41d3b9e865189660bf45614 (commit)
      from  5a2409dcbad2b0e1852f0835eae2b7c845793478 (commit)

- Log -----------------------------------------------------------------
commit d5c8232ed5dc81aea41d3b9e865189660bf45614
Author: Stas Boukarev &amp;lt;stassats&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Tue Jun 11 15:20:10 2013 +0400

    check-mod-fixnum: correct the test for power-of-two.
    
    Testing for the power of two was performed on a fixnumized number,
    causing the optimization for power-of-two to be never applied.
---
 src/compiler/x86-64/type-vops.lisp |   15 +++++++++++----
 src/compiler/x86/type-vops.lisp    |    9 +++++----
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/src/compiler/x86-64/type-vops.lisp b/src/compiler/x86-64/type-vops.lisp
index 5c54135..f5a50f6 100644
--- a/src/compiler/x86-64/type-vops.lisp
+++ b/src/compiler/x86-64/type-vops.lisp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -390,12 +390,19 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   (:temporary (:sc any-reg) temp)
   (:generator 30
      (let* ((low (numeric-type-low type))
-            (hi (fixnumize (numeric-type-high type)))
+            (hi (numeric-type-high type))
+            (fixnum-hi (fixnumize hi))
             (error (gen-label)))
        ;; FIXME: abstract
        (assemble (*elsewhere*)
          (emit-label error)
-         (inst mov temp hi)
+         ;; The general case uses the number directly,
+         ;; and it will already have the number constantized
+         ;; even though MOV can use 64-bit immediates,
+         ;; using the same inlined constant will save space
+         (if (= (logcount (1+ hi)) 1)
+             (inst mov temp fixnum-hi)
+             (inst mov temp (constantize fixnum-hi)))
          (emit-error-break vop error-trap
                            (error-number-or-lose 'object-not-mod-error)
                            (list value temp)))
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -405,12 +412,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
          ;; The higher bits and the fixnum tag can be tested in one go
          ((= (logcount (1+ hi)) 1)
           (inst test value
-                (constantize (lognot hi)))
+                (constantize (lognot fixnum-hi)))
           (inst jmp :ne error))
          (t
           (generate-fixnum-test value)
           (inst jmp :ne error)
-          (inst cmp value (constantize hi))
+          (inst cmp value (constantize fixnum-hi))
           (inst jmp :a error)))
        (move result value))))
 
diff --git a/src/compiler/x86/type-vops.lisp b/src/compiler/x86/type-vops.lisp
index 4ad6d5d..a0223ff 100644
--- a/src/compiler/x86/type-vops.lisp
+++ b/src/compiler/x86/type-vops.lisp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -376,12 +376,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   (:temporary (:sc any-reg) temp)
   (:generator 30
      (let* ((low (numeric-type-low type))
-            (hi (fixnumize (numeric-type-high type)))
+            (hi (numeric-type-high type))
+            (fixnum-hi (fixnumize hi))
             (error (gen-label)))
        ;; FIXME: abstract
        (assemble (*elsewhere*)
          (emit-label error)
-         (inst mov temp hi)
+         (inst mov temp fixnum-hi)
          (emit-error-break vop error-trap
                            (error-number-or-lose 'object-not-mod-error)
                            (list value temp)))
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -390,12 +391,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
          ;; Handle powers of two specially
          ;; The higher bits and the fixnum tag can be tested in one go
          ((= (logcount (1+ hi)) 1)
-          (inst test value (lognot hi))
+          (inst test value (lognot fixnum-hi))
           (inst jmp :ne error))
          (t
           (generate-fixnum-test value)
           (inst jmp :ne error)
-          (inst cmp value hi)
+          (inst cmp value fixnum-hi)
           (inst jmp :a error)))
        (move result value))))
 

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>stassats</dc:creator>
    <dc:date>2013-06-11T13:31:30</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16427">
    <title>master: Add a missing :suppress-errors keyword forWRITE defknown.</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16427</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  5a2409dcbad2b0e1852f0835eae2b7c845793478 (commit)
      from  02f7f85a6554b1ec233e9a515c4c511fe092565e (commit)

- Log -----------------------------------------------------------------
commit 5a2409dcbad2b0e1852f0835eae2b7c845793478
Author: Stas Boukarev &amp;lt;stassats&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Mon Jun 10 22:54:55 2013 +0400

    Add a missing :suppress-errors keyword for WRITE defknown.
---
 src/compiler/fndb.lisp |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/compiler/fndb.lisp b/src/compiler/fndb.lisp
index c35e93a..de4ce88 100644
--- a/src/compiler/fndb.lisp
+++ b/src/compiler/fndb.lisp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1110,7 +1110,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
      (:lines (or unsigned-byte null))
      (:right-margin (or unsigned-byte null))
      (:miser-width (or unsigned-byte null))
-     (:pprint-dispatch t))
+     (:pprint-dispatch t)
+     (:suppress-errors t))
   t
   (any explicit-check)
   :derive-type #'result-type-first-arg)

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>stassats</dc:creator>
    <dc:date>2013-06-10T19:09:26</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16426">
    <title>master: Note removal of post-receive-email in NEWS</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16426</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  02f7f85a6554b1ec233e9a515c4c511fe092565e (commit)
      from  e494c66720ee54082aee7870c77ee963ddf9bb40 (commit)

- Log -----------------------------------------------------------------
commit 02f7f85a6554b1ec233e9a515c4c511fe092565e
Author: Christophe Rhodes &amp;lt;csr21&amp;lt; at &amp;gt;cantab.net&amp;gt;
Date:   Mon Jun 10 13:26:27 2013 +0100

    Note removal of post-receive-email in NEWS
---
 NEWS |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/NEWS b/NEWS
index 531f156..e1b19d1 100644
--- a/NEWS
+++ b/NEWS
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -38,6 +38,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; changes relative to sbcl-1.1.8:
     or double float precision on x87.
   * bug fix: Known-safe vector access on x86oids should not fail spuriously
     when the index is of the form (+ x constant-positive-integer).
+  * bug fix: Remove GPL-licensed files from source distribution.  (lp#1185668)
 
 changes in sbcl-1.1.8 relative to sbcl-1.1.7:
   * notice: The implementation of MAP-ALLOCATED-OBJECTS (the heart of

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Christophe Rhodes</dc:creator>
    <dc:date>2013-06-10T12:26:59</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16425">
    <title>(git-hooks)  master: No,let's be clear about this: add GPL-2 file</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16425</link>
    <description>&lt;pre&gt;The branch "master" has been updated in UNNAMED PROJECT:
       via  d9395bedf75db1546f95329945294c168edc4269 (commit)
      from  32dd4e8bad1e40b804d468b809d4041ed882f531 (commit)

- Log -----------------------------------------------------------------
commit d9395bedf75db1546f95329945294c168edc4269
Author: Christophe Rhodes &amp;lt;csr21&amp;lt; at &amp;gt;cantab.net&amp;gt;
Date:   Mon Jun 10 13:24:11 2013 +0100

    No, let's be clear about this: add GPL-2 file
---
 GPL-2 |  339 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 339 insertions(+), 0 deletions(-)

diff --git a/GPL-2 b/GPL-2
new file mode 100644
index 0000000..d159169
--- /dev/null
+++ b/GPL-2
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,339 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    &amp;lt;one line to give the program's name and a brief idea of what it does.&amp;gt;
+    Copyright (C) &amp;lt;year&amp;gt;  &amp;lt;name of author&amp;gt;
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  &amp;lt;signature of Ty Coon&amp;gt;, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Christophe Rhodes</dc:creator>
    <dc:date>2013-06-10T12:24:27</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16424">
    <title>master: remove git/ directory</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16424</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  e494c66720ee54082aee7870c77ee963ddf9bb40 (commit)
      from  1c74f342b23aafaa8f514112c9bcca7526e07a58 (commit)

- Log -----------------------------------------------------------------
commit e494c66720ee54082aee7870c77ee963ddf9bb40
Author: Christophe Rhodes &amp;lt;csr21&amp;lt; at &amp;gt;cantab.net&amp;gt;
Date:   Mon Jun 10 13:20:14 2013 +0100

    remove git/ directory
    
    The scripts therein weren't directly relevant for SBCL development,
    only for infrastructure to assist that development; additionally,
    they are derived from git examples licensed under the GPL, and it
    was difficult to explain the effects of this in a short paragraph
    in the master COPYING file.  A new sbcl-git-hooks repository is
    available on SourceForge for these and any other infrastructure
    customizations.
---
 git/README             |   10 -
 git/post-receive       |   11 -
 git/post-receive-email |  749 ------------------------------------------------
 git/update             |   39 ---
 4 files changed, 0 insertions(+), 809 deletions(-)

diff --git a/git/README b/git/README
deleted file mode 100644
index 533193a..0000000
--- a/git/README
+++ /dev/null
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,10 +0,0 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-SBCL Git Hooks
-
-These scripts live in /home/scm_git/s/sb/sbcl/sbcl.git/hooks on
-SourceForge, and have nothing to do with SBCL as such -- and
-everything to do with developer convenience and maintenance.
-
-To push updates there:
-
-  ssh -t &amp;lt;sfuser&amp;gt;,sbcl&amp;lt; at &amp;gt;shell.sourceforge.net create
-  scp &amp;lt;script&amp;gt; &amp;lt;sfuser&amp;gt;,sbcl&amp;lt; at &amp;gt;shell.sourceforge.net:/home/scm_git/s/sb/sbcl/sbcl.git/hooks/
diff --git a/git/post-receive b/git/post-receive
deleted file mode 100755
index 3186b6d..0000000
--- a/git/post-receive
+++ /dev/null
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,11 +0,0 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-#!/bin/sh
-#
-# The "post-receive" script is run after receive-pack has accepted a pack
-# and the repository has been updated.  It is passed arguments in through
-# stdin in the form
-#  &amp;lt;oldrev&amp;gt; &amp;lt;newrev&amp;gt; &amp;lt;refname&amp;gt;
-# For example:
-#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
-#
-
-hooks/post-receive-email
diff --git a/git/post-receive-email b/git/post-receive-email
deleted file mode 100755
index c565634..0000000
--- a/git/post-receive-email
+++ /dev/null
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,749 +0,0 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-#!/bin/sh
-#
-# (Modified for SBCL.)
-#
-# Copyright (c) 2007 Andy Parkins
-#
-# An example hook script to mail out commit update information.  This hook
-# sends emails listing new revisions to the repository introduced by the
-# change being reported.  The rule is that (for branch updates) each commit
-# will appear on one email and one email only.
-#
-# This hook is stored in the contrib/hooks directory.  Your distribution
-# will have put this somewhere standard.  You should make this script
-# executable then link to it in the repository you would like to use it in.
-# For example, on fedora the hook is stored in
-# /usr/share/git-core/contrib/hooks/post-receive-email:
-#
-#  chmod a+x post-receive-email
-#  cd /path/to/your/repository.git
-#  ln -sf /usr/share/git-core/contrib/hooks/post-receive-email hooks/post-receive
-#
-# This hook script assumes it is enabled on the central repository of a
-# project, with all users pushing only to it and not between each other.  It
-# will still work if you don't operate in that style, but it would become
-# possible for the email to be from someone other than the person doing the
-# push.
-#
-# Config
-# ------
-# hooks.mailinglist
-#   This is the list that all pushes will go to; leave it blank to not send
-#   emails for every ref update.
-# hooks.announcelist
-#   This is the list that all pushes of annotated tags will go to.  Leave it
-#   blank to default to the mailinglist field.  The announce emails lists
-#   the short log summary of the changes since the last annotated tag.
-# hooks.envelopesender
-#   If set then the -f option is passed to sendmail to allow the envelope
-#   sender address to be set
-# hooks.emailprefix
-#   All emails have their subjects prefixed with this prefix, or "[SCM]"
-#   if emailprefix is unset, to aid filtering
-# hooks.showrev
-#   The shell command used to format each revision in the email, with
-#   "%s" replaced with the commit id.  Defaults to "git rev-list -1
-#   --pretty %s", displaying the commit id, author, date and log
-#   message.  To list full patches separated by a blank line, you
-#   could set this to "git show -C %s; echo".
-#   To list a gitweb/cgit URL *and* a full patch for each change set, use this:
-#     "t=%s; printf 'http://.../?id=%%s' \$t; echo;echo; git show -C \$t; echo"
-#   Be careful if "..." contains things that will be expanded by shell "eval"
-#   or printf.
-#
-# Notes
-# -----
-# All emails include the headers "X-Git-Refname", "X-Git-Oldrev",
-# "X-Git-Newrev", and "X-Git-Reftype" to enable fine tuned filtering and
-# give information for debugging.
-#
-
-# ---------------------------- Functions
-
-#
-# Top level email generation function.  This decides what type of update
-# this is and calls the appropriate body-generation routine after outputting
-# the common header
-#
-# Note this function doesn't actually generate any email output, that is
-# taken care of by the functions it calls:
-#  - generate_email_header
-#  - generate_create_XXXX_email
-#  - generate_update_XXXX_email
-#  - generate_delete_XXXX_email
-#  - generate_email_footer
-#
-generate_email()
-{
-# --- Arguments
-oldrev=$(git rev-parse $1)
-newrev=$(git rev-parse $2)
-refname="$3"
-
-# --- Interpret
-# 0000-&amp;gt;1234 (create)
-# 1234-&amp;gt;2345 (update)
-# 2345-&amp;gt;0000 (delete)
-if expr "$oldrev" : '0*$' &amp;gt;/dev/null
-then
-change_type="create"
-else
-if expr "$newrev" : '0*$' &amp;gt;/dev/null
-then
-change_type="delete"
-else
-change_type="update"
-fi
-fi
-
-# --- Get the revision types
-newrev_type=$(git cat-file -t $newrev 2&amp;gt; /dev/null)
-oldrev_type=$(git cat-file -t "$oldrev" 2&amp;gt; /dev/null)
-case "$change_type" in
-create|update)
-rev="$newrev"
-rev_type="$newrev_type"
-;;
-delete)
-rev="$oldrev"
-rev_type="$oldrev_type"
-;;
-esac
-
-# The revision type tells us what type the commit is, combined with
-# the location of the ref we can decide between
-#  - working branch
-#  - tracking branch
-#  - unannoted tag
-#  - annotated tag
-case "$refname","$rev_type" in
-refs/tags/*,commit)
-# un-annotated tag
-refname_type="tag"
-short_refname=${refname##refs/tags/}
-;;
-refs/tags/*,tag)
-# annotated tag
-refname_type="annotated tag"
-short_refname=${refname##refs/tags/}
-# change recipients
-if [ -n "$announcerecipients" ]; then
-recipients="$announcerecipients"
-fi
-;;
-refs/heads/*,commit)
-# branch
-refname_type="branch"
-short_refname=${refname##refs/heads/}
-;;
-refs/remotes/*,commit)
-# tracking branch
-refname_type="tracking branch"
-short_refname=${refname##refs/remotes/}
-echo &amp;gt;&amp;amp;2 "*** Push-update of tracking branch, $refname"
-echo &amp;gt;&amp;amp;2 "***  - no email generated."
-exit 0
-;;
-*)
-# Anything else (is there anything else?)
-echo &amp;gt;&amp;amp;2 "*** Unknown type of update to $refname ($rev_type)"
-echo &amp;gt;&amp;amp;2 "***  - no email generated"
-exit 1
-;;
-esac
-
-# Check if we've got anyone to send to
-if [ -z "$recipients" ]; then
-case "$refname_type" in
-"annotated tag")
-config_name="hooks.announcelist"
-;;
-*)
-config_name="hooks.mailinglist"
-;;
-esac
-echo &amp;gt;&amp;amp;2 "*** $config_name is not set so no email will be sent"
-echo &amp;gt;&amp;amp;2 "*** for $refname update $oldrev-&amp;gt;$newrev"
-exit 0
-fi
-
-# Email parameters
-# The email subject will contain the best description of the ref
-# that we can build from the parameters
-describe=$(git describe $rev 2&amp;gt;/dev/null)
-if [ -z "$describe" ]; then
-describe=$rev
-fi
-# SBCL: Also grab the commit title.
-title=$(git log -n1 --pretty=format:%s $rev)
-if [ -z "$title" ]; then
-        title=$rev
-fi
-
-generate_email_header
-
-# Call the correct body generation function
-fn_name=general
-case "$refname_type" in
-"tracking branch"|branch)
-fn_name=branch
-;;
-"annotated tag")
-fn_name=atag
-;;
-esac
-generate_${change_type}_${fn_name}_email
-
-generate_email_footer
-}
-
-generate_email_header()
-{
-# --- Email (all stdout will be the email)
-# Generate header
-
-        # SBCL: branch updates get the commit title in the subject
-        if [ "branch" = "$refname_type" ] &amp;amp;&amp;amp; [ "update" = "$change_type" ]
-then
-    subject="${emailprefix} $short_refname: $title"
-        else
-    subject="${emailprefix} $refname_type $short_refname: ${change_type}d. $describe"
-fi
-
-cat &amp;lt;&amp;lt;-EOF
-To: $recipients
-Subject: $subject
-X-Git-Refname: $refname
-X-Git-Reftype: $refname_type
-X-Git-Oldrev: $oldrev
-X-Git-Newrev: $newrev
-
-The $refname_type "$short_refname" has been ${change_type}d in $projectdesc:
-EOF
-}
-
-generate_email_footer()
-{
-SPACE=" "
-cat &amp;lt;&amp;lt;-EOF
-
-
-hooks/post-receive
---${SPACE}
-$projectdesc
-EOF
-}
-
-# --------------- Branches
-
-#
-# Called for the creation of a branch
-#
-generate_create_branch_email()
-{
-# This is a new branch and so oldrev is not valid
-echo "        at  $newrev ($newrev_type)"
-echo ""
-
-echo $LOGBEGIN
-show_new_revisions
-echo $LOGEND
-}
-
-#
-# Called for the change of a pre-existing branch
-#
-generate_update_branch_email()
-{
-# Consider this:
-#   1 --- 2 --- O --- X --- 3 --- 4 --- N
-#
-# O is $oldrev for $refname
-# N is $newrev for $refname
-# X is a revision pointed to by some other ref, for which we may
-#   assume that an email has already been generated.
-# In this case we want to issue an email containing only revisions
-# 3, 4, and N.  Given (almost) by
-#
-#  git rev-list N ^O --not --all
-#
-# The reason for the "almost", is that the "--not --all" will take
-# precedence over the "N", and effectively will translate to
-#
-#  git rev-list N ^O ^X ^N
-#
-# So, we need to build up the list more carefully.  git rev-parse
-# will generate a list of revs that may be fed into git rev-list.
-# We can get it to make the "--not --all" part and then filter out
-# the "^N" with:
-#
-#  git rev-parse --not --all | grep -v N
-#
-# Then, using the --stdin switch to git rev-list we have effectively
-# manufactured
-#
-#  git rev-list N ^O ^X
-#
-# This leaves a problem when someone else updates the repository
-# while this script is running.  Their new value of the ref we're
-# working on would be included in the "--not --all" output; and as
-# our $newrev would be an ancestor of that commit, it would exclude
-# all of our commits.  What we really want is to exclude the current
-# value of $refname from the --not list, rather than N itself.  So:
-#
-#  git rev-parse --not --all | grep -v $(git rev-parse $refname)
-#
-# Get's us to something pretty safe (apart from the small time
-# between refname being read, and git rev-parse running - for that,
-# I give up)
-#
-#
-# Next problem, consider this:
-#   * --- B --- * --- O ($oldrev)
-#          \
-#           * --- X --- * --- N ($newrev)
-#
-# That is to say, there is no guarantee that oldrev is a strict
-# subset of newrev (it would have required a --force, but that's
-# allowed).  So, we can't simply say rev-list $oldrev..$newrev.
-# Instead we find the common base of the two revs and list from
-# there.
-#
-# As above, we need to take into account the presence of X; if
-# another branch is already in the repository and points at some of
-# the revisions that we are about to output - we don't want them.
-# The solution is as before: git rev-parse output filtered.
-#
-# Finally, tags: 1 --- 2 --- O --- T --- 3 --- 4 --- N
-#
-# Tags pushed into the repository generate nice shortlog emails that
-# summarise the commits between them and the previous tag.  However,
-# those emails don't include the full commit messages that we output
-# for a branch update.  Therefore we still want to output revisions
-# that have been output on a tag email.
-#
-# Luckily, git rev-parse includes just the tool.  Instead of using
-# "--all" we use "--branches"; this has the added benefit that
-# "remotes/" will be ignored as well.
-
-# List all of the revisions that were removed by this update, in a
-# fast-forward update, this list will be empty, because rev-list O
-# ^N is empty.  For a non-fast-forward, O ^N is the list of removed
-# revisions
-fast_forward=""
-rev=""
-for rev in $(git rev-list $newrev..$oldrev)
-do
-revtype=$(git cat-file -t "$rev")
-echo "  discards  $rev ($revtype)"
-done
-if [ -z "$rev" ]; then
-fast_forward=1
-fi
-
-# List all the revisions from baserev to newrev in a kind of
-# "table-of-contents"; note this list can include revisions that
-# have already had notification emails and is present to show the
-# full detail of the change from rolling back the old revision to
-# the base revision and then forward to the new revision
-for rev in $(git rev-list $oldrev..$newrev)
-do
-    revtype=$(git cat-file -t "$rev")
-    echo "       via  $rev ($revtype)"
-done
-
-if [ "$fast_forward" ]; then
-echo "      from  $oldrev ($oldrev_type)"
-else
-#  1. Existing revisions were removed.  In this case newrev
-#     is a subset of oldrev - this is the reverse of a
-#     fast-forward, a rewind
-#  2. New revisions were added on top of an old revision,
-#     this is a rewind and addition.
-
-# (1) certainly happened, (2) possibly.  When (2) hasn't
-# happened, we set a flag to indicate that no log printout
-# is required.
-
-echo ""
-
-# Find the common ancestor of the old and new revisions and
-# compare it with newrev
-baserev=$(git merge-base $oldrev $newrev)
-rewind_only=""
-if [ "$baserev" = "$newrev" ]; then
-echo "This update discarded existing revisions and left the branch pointing at"
-echo "a previous point in the repository history."
-echo ""
-echo " * -- * -- N ($newrev)"
-echo "            \\"
-echo "             O -- O -- O ($oldrev)"
-echo ""
-echo "The removed revisions are not necessarilly gone - if another reference"
-echo "still refers to them they will stay in the repository."
-rewind_only=1
-else
-echo "This update added new revisions after undoing existing revisions.  That is"
-echo "to say, the old revision is not a strict subset of the new revision.  This"
-echo "situation occurs when you --force push a change and generate a repository"
-echo "containing something like this:"
-echo ""
-echo " * -- * -- B -- O -- O -- O ($oldrev)"
-echo "            \\"
-echo "             N -- N -- N ($newrev)"
-echo ""
-echo "When this happens we assume that you've already had alert emails for all"
-echo "of the O revisions, and so we here report only the revisions in the N"
-echo "branch from the common base, B."
-fi
-fi
-
-echo ""
-if [ -z "$rewind_only" ]; then
-        # Silenced for SBCL.
-        #
-# echo "Those revisions listed above that are new to this repository have"
-# echo "not appeared on any other notification email; so we list those"
-# echo "revisions in full, below."
-# echo ""
-
-echo $LOGBEGIN
-show_new_revisions
-
-# XXX: Need a way of detecting whether git rev-list actually
-# outputted anything, so that we can issue a "no new
-# revisions added by this update" message
-
-echo $LOGEND
-else
-echo "No new revisions were added by this update."
-fi
-
-# The diffstat is shown from the old revision to the new revision.
-# This is to show the truth of what happened in this change.
-# There's no point showing the stat from the base to the new
-# revision because the base is effectively a random revision at this
-# point - the user will be interested in what this revision changed
-# - including the undoing of previous revisions in the case of
-# non-fast-forward updates.
-        #
-        # Silenced for SBCL: we use "git show -p --stat -C %s" to generate
-        # revision information, getting the diffstat between the commit message
-        # and the diff. This would just duplicate that.
-        #
-# echo ""
-# echo "Summary of changes:"
-# git diff-tree --stat --summary --find-copies-harder $oldrev..$newrev
-}
-
-#
-# Called for the deletion of a branch
-#
-generate_delete_branch_email()
-{
-echo "       was  $oldrev"
-echo ""
-echo $LOGEND
-git show -s --pretty=oneline $oldrev
-echo $LOGEND
-}
-
-# --------------- Annotated tags
-
-#
-# Called for the creation of an annotated tag
-#
-generate_create_atag_email()
-{
-echo "        at  $newrev ($newrev_type)"
-
-generate_atag_email
-}
-
-#
-# Called for the update of an annotated tag (this is probably a rare event
-# and may not even be allowed)
-#
-generate_update_atag_email()
-{
-echo "        to  $newrev ($newrev_type)"
-echo "      from  $oldrev (which is now obsolete)"
-
-generate_atag_email
-}
-
-#
-# Called when an annotated tag is created or changed
-#
-generate_atag_email()
-{
-# Use git for-each-ref to pull out the individual fields from the
-# tag
-eval $(git for-each-ref --shell --format='
-tagobject=%(*objectname)
-tagtype=%(*objecttype)
-tagger=%(taggername)
-tagged=%(taggerdate)' $refname
-)
-
-echo "   tagging  $tagobject ($tagtype)"
-case "$tagtype" in
-commit)
-
-# If the tagged object is a commit, then we assume this is a
-# release, and so we calculate which tag this tag is
-# replacing
-prevtag=$(git describe --abbrev=0 $newrev^ 2&amp;gt;/dev/null)
-
-if [ -n "$prevtag" ]; then
-echo "  replaces  $prevtag"
-fi
-;;
-*)
-echo "    length  $(git cat-file -s $tagobject) bytes"
-;;
-esac
-echo " tagged by  $tagger"
-echo "        on  $tagged"
-
-echo ""
-echo $LOGBEGIN
-
-# Show the content of the tag message; this might contain a change
-# log or release notes so is worth displaying.
-git cat-file tag $newrev | sed -e '1,/^$/d'
-
-echo ""
-case "$tagtype" in
-commit)
-# Only commit tags make sense to have rev-list operations
-# performed on them
-if [ -n "$prevtag" ]; then
-# Show changes since the previous release
-git rev-list --pretty=short "$prevtag..$newrev" | git shortlog
-else
-# No previous tag, show all the changes since time
-# began
-git rev-list --pretty=short $newrev | git shortlog
-fi
-;;
-*)
-# XXX: Is there anything useful we can do for non-commit
-# objects?
-;;
-esac
-
-echo $LOGEND
-}
-
-#
-# Called for the deletion of an annotated tag
-#
-generate_delete_atag_email()
-{
-echo "       was  $oldrev"
-echo ""
-echo $LOGEND
-git show -s --pretty=oneline $oldrev
-echo $LOGEND
-}
-
-# --------------- General references
-
-#
-# Called when any other type of reference is created (most likely a
-# non-annotated tag)
-#
-generate_create_general_email()
-{
-echo "        at  $newrev ($newrev_type)"
-
-generate_general_email
-}
-
-#
-# Called when any other type of reference is updated (most likely a
-# non-annotated tag)
-#
-generate_update_general_email()
-{
-echo "        to  $newrev ($newrev_type)"
-echo "      from  $oldrev"
-
-generate_general_email
-}
-
-#
-# Called for creation or update of any other type of reference
-#
-generate_general_email()
-{
-# Unannotated tags are more about marking a point than releasing a
-# version; therefore we don't do the shortlog summary that we do for
-# annotated tags above - we simply show that the point has been
-# marked, and print the log message for the marked point for
-# reference purposes
-#
-# Note this section also catches any other reference type (although
-# there aren't any) and deals with them in the same way.
-
-echo ""
-if [ "$newrev_type" = "commit" ]; then
-echo $LOGBEGIN
-git show --no-color --root -s --pretty=medium $newrev
-echo $LOGEND
-else
-# What can we do here?  The tag marks an object that is not
-# a commit, so there is no log for us to display.  It's
-# probably not wise to output git cat-file as it could be a
-# binary blob.  We'll just say how big it is
-echo "$newrev is a $newrev_type, and is $(git cat-file -s $newrev) bytes long."
-fi
-}
-
-#
-# Called for the deletion of any other type of reference
-#
-generate_delete_general_email()
-{
-echo "       was  $oldrev"
-echo ""
-echo $LOGEND
-git show -s --pretty=oneline $oldrev
-echo $LOGEND
-}
-
-
-# --------------- Miscellaneous utilities
-
-#
-# Show new revisions as the user would like to see them in the email.
-#
-show_new_revisions()
-{
-# This shows all log entries that are not already covered by
-# another ref - i.e. commits that are now accessible from this
-# ref that were previously not accessible
-# (see generate_update_branch_email for the explanation of this
-# command)
-
-# Revision range passed to rev-list differs for new vs. updated
-# branches.
-if [ "$change_type" = create ]
-then
-# Show all revisions exclusive to this (new) branch.
-revspec=$newrev
-else
-# Branch update; show revisions not part of $oldrev.
-revspec=$oldrev..$newrev
-fi
-
-other_branches=$(git for-each-ref --format='%(refname)' refs/heads/ |
-    grep -F -v $refname)
-# SBCL: show oldest first via --reverse
-git rev-parse --not $other_branches |
-if [ -z "$custom_showrev" ]
-then
-git rev-list --reverse --pretty --stdin $revspec
-else
-git rev-list --reverse --stdin $revspec |
-while read onerev
-do
-eval $(printf "$custom_showrev" $onerev)
-done
-fi
-}
-
-
-send_mail()
-{
-if [ -n "$envelopesender" ]; then
-/usr/sbin/sendmail -t -f "$envelopesender"
-else
-/usr/sbin/sendmail -t
-fi
-}
-
-# ---------------------------- main()
-
-# --- Constants
-LOGBEGIN="- Log -----------------------------------------------------------------"
-LOGEND="-----------------------------------------------------------------------"
-
-# --- Config
-# Set GIT_DIR either from the working directory, or from the environment
-# variable.
-GIT_DIR=$(git rev-parse --git-dir 2&amp;gt;/dev/null)
-if [ -z "$GIT_DIR" ]; then
-echo &amp;gt;&amp;amp;2 "fatal: post-receive: GIT_DIR not set"
-exit 1
-fi
-
-projectdesc=$(sed -ne '1p' "$GIT_DIR/description")
-# Check if the description is unchanged from it's default, and shorten it to
-# a more manageable length if it is
-if expr "$projectdesc" : "Unnamed repository.*$" &amp;gt;/dev/null
-then
-projectdesc="UNNAMED PROJECT"
-fi
-
-recipients=$(git config hooks.mailinglist)
-announcerecipients=$(git config hooks.announcelist)
-envelopesender=$(git config hooks.envelopesender)
-emailprefix=$(git config hooks.emailprefix || echo '[SCM] ')
-custom_showrev=$(git config hooks.showrev)
-
-# --- Main loop
-# Allow dual mode: run from the command line just like the update hook, or
-# if no arguments are given then run as a hook script
-if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
-# Output to the terminal in command line mode - if someone wanted to
-# resend an email; they could redirect the output to sendmail
-# themselves
-PAGER= generate_email $2 $3 $1
-else
-while read oldrev newrev refname
-do
-          echo "Sending mail for $refname: $oldrev -&amp;gt; $newrev"
-  # SBCL KLUDGE: the default script sends one email per
-  # push. We want one per commit. As long as we're
-  # in fast-forward-only world, this should do the
-  # right thing.
-  if (expr "$oldrev" : '0*$' &amp;gt;/dev/null ||                  # create
-      expr "$newrev" : '0*$' &amp;gt;/dev/null ||                  # delete
-              ! expr "$refname" : "refs/heads/" &amp;gt; /dev/null)        # not a branch
-  then
-      # Just one email.
-              echo "Not a branch update: all changes in one email."
-      generate_email $oldrev $newrev $refname | send_mail
-  else
-              # Get all revisions from old to new.
-              revlist=$(git rev-list --reverse $oldrev..$newrev)
-              no_merges=true
-              # Check for merges.
-              for rev in $revlist
-              do
-                  if ($no_merges &amp;amp;&amp;amp; git rev-parse --verify --quiet "$rev"^2 &amp;gt; /dev/null)
-                  then
-                      echo "Merge detected: $rev. Sending all commits in a single email."
-                      no_merges=false
-                  fi
-              done
-              if $no_merges
-              then
-                  # Simple branch update, one mail per commit.
-                  echo "Sending one email per commit."
-          lastrev=$oldrev
-          for step in $revlist
-          do
-                      echo "Sending: $(git log -n1 --oneline $step)"
-      generate_email $lastrev $step $refname | send_mail
-      lastrev=$step
-          done
-              else
-                  # There's a merge -- just one email.
-          generate_email $oldrev $newrev $refname | send_mail
-              fi
-  fi
-done
-fi
diff --git a/git/update b/git/update
deleted file mode 100755
index c7e449a..0000000
--- a/git/update
+++ /dev/null
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,39 +0,0 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
-#!/bin/sh
-
-# --- Command line
-refname="$1"
-oldrev="$2"
-newrev="$3"
-
-# --- Safety check
-if [ -z "$GIT_DIR" ]; then
-    echo "Don't run this script from the command line." &amp;gt;&amp;amp;2
-    echo " (if you want, you could supply GIT_DIR then run" &amp;gt;&amp;amp;2
-    echo "  $0 &amp;lt;ref&amp;gt; &amp;lt;oldrev&amp;gt; &amp;lt;newrev&amp;gt;)" &amp;gt;&amp;amp;2
-    exit 1
-fi
-
-if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
-    echo "Usage: $0 &amp;lt;ref&amp;gt; &amp;lt;oldrev&amp;gt; &amp;lt;newrev&amp;gt;" &amp;gt;&amp;amp;2
-    exit 1
-fi
-
-# Don't allow merge commits on master
-if [ "$refname" = "refs/heads/master" ]
-then
-    for rev in $(git rev-list $newrev --not $oldrev)
-    do
-        echo -n "Checking: $rev"
-        if git rev-parse --verify --quiet $rev^2 &amp;gt; /dev/null
-        then
-            echo " (merge!)"
-            echo
-            echo "Merges not allowed on master. Rebase your changes instead."
-            echo
-            exit 1
-        else
-            echo " (ok)"
-        fi
-    done
-fi
-

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Christophe Rhodes</dc:creator>
    <dc:date>2013-06-10T12:22:04</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16423">
    <title>(git-hooks) master: add minimal GPL-referringCOPYING file</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16423</link>
    <description>&lt;pre&gt;The branch "master" has been updated in UNNAMED PROJECT:
       via  32dd4e8bad1e40b804d468b809d4041ed882f531 (commit)
      from  2c748c423c2e1c8e23880e364e3d3db315349151 (commit)

- Log -----------------------------------------------------------------
commit 32dd4e8bad1e40b804d468b809d4041ed882f531
Author: Christophe Rhodes &amp;lt;csr21&amp;lt; at &amp;gt;cantab.net&amp;gt;
Date:   Mon Jun 10 13:18:17 2013 +0100

    add minimal GPL-referring COPYING file
    
    IANAL; I hope the intent is clear.
---
 COPYING |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..9b71d1f
--- /dev/null
+++ b/COPYING
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+These files are derived from examples distributed with the Git version
+control system under the GNU General Public Licence (version 2), and
+as such are therefore themselves from the SBCL project under those
+terms.

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Christophe Rhodes</dc:creator>
    <dc:date>2013-06-10T12:18:37</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16422">
    <title>(git-hooks) branch master: created.2c748c423c2e1c8e23880e364e3d3db315349151</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16422</link>
    <description>&lt;pre&gt;The branch "master" has been created in UNNAMED PROJECT:
        at  2c748c423c2e1c8e23880e364e3d3db315349151 (commit)

- Log -----------------------------------------------------------------
commit 54f6679318db49bd5bf86881ec11789f62dc4b72
Author: Nikodemus Siivola &amp;lt;nikodemus&amp;lt; at &amp;gt;sb-studio.net&amp;gt;
Date:   Mon Jun 6 10:09:39 2011 +0300

    standard git post-receive-email script
    
      For reference.
    
      git/ directory shall contain git hook scripts, etc.
---
 post-receive-email |  689 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 689 insertions(+), 0 deletions(-)

diff --git a/post-receive-email b/post-receive-email
new file mode 100755
index 0000000..cc90b7f
--- /dev/null
+++ b/post-receive-email
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,689 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+#!/bin/sh
+#
+# Copyright (c) 2007 Andy Parkins
+#
+# An example hook script to mail out commit update information.  This hook
+# sends emails listing new revisions to the repository introduced by the
+# change being reported.  The rule is that (for branch updates) each commit
+# will appear on one email and one email only.
+#
+# This hook is stored in the contrib/hooks directory.  Your distribution
+# will have put this somewhere standard.  You should make this script
+# executable then link to it in the repository you would like to use it in.
+# For example, on fedora the hook is stored in
+# /usr/share/git-core/contrib/hooks/post-receive-email:
+#
+#  chmod a+x post-receive-email
+#  cd /path/to/your/repository.git
+#  ln -sf /usr/share/git-core/contrib/hooks/post-receive-email hooks/post-receive
+#
+# This hook script assumes it is enabled on the central repository of a
+# project, with all users pushing only to it and not between each other.  It
+# will still work if you don't operate in that style, but it would become
+# possible for the email to be from someone other than the person doing the
+# push.
+#
+# Config
+# ------
+# hooks.mailinglist
+#   This is the list that all pushes will go to; leave it blank to not send
+#   emails for every ref update.
+# hooks.announcelist
+#   This is the list that all pushes of annotated tags will go to.  Leave it
+#   blank to default to the mailinglist field.  The announce emails lists
+#   the short log summary of the changes since the last annotated tag.
+# hooks.envelopesender
+#   If set then the -f option is passed to sendmail to allow the envelope
+#   sender address to be set
+# hooks.emailprefix
+#   All emails have their subjects prefixed with this prefix, or "[SCM]"
+#   if emailprefix is unset, to aid filtering
+# hooks.showrev
+#   The shell command used to format each revision in the email, with
+#   "%s" replaced with the commit id.  Defaults to "git rev-list -1
+#   --pretty %s", displaying the commit id, author, date and log
+#   message.  To list full patches separated by a blank line, you
+#   could set this to "git show -C %s; echo".
+#   To list a gitweb/cgit URL *and* a full patch for each change set, use this:
+#     "t=%s; printf 'http://.../?id=%%s' \$t; echo;echo; git show -C \$t; echo"
+#   Be careful if "..." contains things that will be expanded by shell "eval"
+#   or printf.
+#
+# Notes
+# -----
+# All emails include the headers "X-Git-Refname", "X-Git-Oldrev",
+# "X-Git-Newrev", and "X-Git-Reftype" to enable fine tuned filtering and
+# give information for debugging.
+#
+
+# ---------------------------- Functions
+
+#
+# Top level email generation function.  This decides what type of update
+# this is and calls the appropriate body-generation routine after outputting
+# the common header
+#
+# Note this function doesn't actually generate any email output, that is
+# taken care of by the functions it calls:
+#  - generate_email_header
+#  - generate_create_XXXX_email
+#  - generate_update_XXXX_email
+#  - generate_delete_XXXX_email
+#  - generate_email_footer
+#
+generate_email()
+{
+# --- Arguments
+oldrev=$(git rev-parse $1)
+newrev=$(git rev-parse $2)
+refname="$3"
+
+# --- Interpret
+# 0000-&amp;gt;1234 (create)
+# 1234-&amp;gt;2345 (update)
+# 2345-&amp;gt;0000 (delete)
+if expr "$oldrev" : '0*$' &amp;gt;/dev/null
+then
+change_type="create"
+else
+if expr "$newrev" : '0*$' &amp;gt;/dev/null
+then
+change_type="delete"
+else
+change_type="update"
+fi
+fi
+
+# --- Get the revision types
+newrev_type=$(git cat-file -t $newrev 2&amp;gt; /dev/null)
+oldrev_type=$(git cat-file -t "$oldrev" 2&amp;gt; /dev/null)
+case "$change_type" in
+create|update)
+rev="$newrev"
+rev_type="$newrev_type"
+;;
+delete)
+rev="$oldrev"
+rev_type="$oldrev_type"
+;;
+esac
+
+# The revision type tells us what type the commit is, combined with
+# the location of the ref we can decide between
+#  - working branch
+#  - tracking branch
+#  - unannoted tag
+#  - annotated tag
+case "$refname","$rev_type" in
+refs/tags/*,commit)
+# un-annotated tag
+refname_type="tag"
+short_refname=${refname##refs/tags/}
+;;
+refs/tags/*,tag)
+# annotated tag
+refname_type="annotated tag"
+short_refname=${refname##refs/tags/}
+# change recipients
+if [ -n "$announcerecipients" ]; then
+recipients="$announcerecipients"
+fi
+;;
+refs/heads/*,commit)
+# branch
+refname_type="branch"
+short_refname=${refname##refs/heads/}
+;;
+refs/remotes/*,commit)
+# tracking branch
+refname_type="tracking branch"
+short_refname=${refname##refs/remotes/}
+echo &amp;gt;&amp;amp;2 "*** Push-update of tracking branch, $refname"
+echo &amp;gt;&amp;amp;2 "***  - no email generated."
+exit 0
+;;
+*)
+# Anything else (is there anything else?)
+echo &amp;gt;&amp;amp;2 "*** Unknown type of update to $refname ($rev_type)"
+echo &amp;gt;&amp;amp;2 "***  - no email generated"
+exit 1
+;;
+esac
+
+# Check if we've got anyone to send to
+if [ -z "$recipients" ]; then
+case "$refname_type" in
+"annotated tag")
+config_name="hooks.announcelist"
+;;
+*)
+config_name="hooks.mailinglist"
+;;
+esac
+echo &amp;gt;&amp;amp;2 "*** $config_name is not set so no email will be sent"
+echo &amp;gt;&amp;amp;2 "*** for $refname update $oldrev-&amp;gt;$newrev"
+exit 0
+fi
+
+# Email parameters
+# The email subject will contain the best description of the ref
+# that we can build from the parameters
+describe=$(git describe $rev 2&amp;gt;/dev/null)
+if [ -z "$describe" ]; then
+describe=$rev
+fi
+
+generate_email_header
+
+# Call the correct body generation function
+fn_name=general
+case "$refname_type" in
+"tracking branch"|branch)
+fn_name=branch
+;;
+"annotated tag")
+fn_name=atag
+;;
+esac
+generate_${change_type}_${fn_name}_email
+
+generate_email_footer
+}
+
+generate_email_header()
+{
+# --- Email (all stdout will be the email)
+# Generate header
+cat &amp;lt;&amp;lt;-EOF
+To: $recipients
+Subject: ${emailprefix}$projectdesc $refname_type, $short_refname, ${change_type}d. $describe
+X-Git-Refname: $refname
+X-Git-Reftype: $refname_type
+X-Git-Oldrev: $oldrev
+X-Git-Newrev: $newrev
+
+This is an automated email from the git hooks/post-receive script. It was
+generated because a ref change was pushed to the repository containing
+the project "$projectdesc".
+
+The $refname_type, $short_refname has been ${change_type}d
+EOF
+}
+
+generate_email_footer()
+{
+SPACE=" "
+cat &amp;lt;&amp;lt;-EOF
+
+
+hooks/post-receive
+--${SPACE}
+$projectdesc
+EOF
+}
+
+# --------------- Branches
+
+#
+# Called for the creation of a branch
+#
+generate_create_branch_email()
+{
+# This is a new branch and so oldrev is not valid
+echo "        at  $newrev ($newrev_type)"
+echo ""
+
+echo $LOGBEGIN
+show_new_revisions
+echo $LOGEND
+}
+
+#
+# Called for the change of a pre-existing branch
+#
+generate_update_branch_email()
+{
+# Consider this:
+#   1 --- 2 --- O --- X --- 3 --- 4 --- N
+#
+# O is $oldrev for $refname
+# N is $newrev for $refname
+# X is a revision pointed to by some other ref, for which we may
+#   assume that an email has already been generated.
+# In this case we want to issue an email containing only revisions
+# 3, 4, and N.  Given (almost) by
+#
+#  git rev-list N ^O --not --all
+#
+# The reason for the "almost", is that the "--not --all" will take
+# precedence over the "N", and effectively will translate to
+#
+#  git rev-list N ^O ^X ^N
+#
+# So, we need to build up the list more carefully.  git rev-parse
+# will generate a list of revs that may be fed into git rev-list.
+# We can get it to make the "--not --all" part and then filter out
+# the "^N" with:
+#
+#  git rev-parse --not --all | grep -v N
+#
+# Then, using the --stdin switch to git rev-list we have effectively
+# manufactured
+#
+#  git rev-list N ^O ^X
+#
+# This leaves a problem when someone else updates the repository
+# while this script is running.  Their new value of the ref we're
+# working on would be included in the "--not --all" output; and as
+# our $newrev would be an ancestor of that commit, it would exclude
+# all of our commits.  What we really want is to exclude the current
+# value of $refname from the --not list, rather than N itself.  So:
+#
+#  git rev-parse --not --all | grep -v $(git rev-parse $refname)
+#
+# Get's us to something pretty safe (apart from the small time
+# between refname being read, and git rev-parse running - for that,
+# I give up)
+#
+#
+# Next problem, consider this:
+#   * --- B --- * --- O ($oldrev)
+#          \
+#           * --- X --- * --- N ($newrev)
+#
+# That is to say, there is no guarantee that oldrev is a strict
+# subset of newrev (it would have required a --force, but that's
+# allowed).  So, we can't simply say rev-list $oldrev..$newrev.
+# Instead we find the common base of the two revs and list from
+# there.
+#
+# As above, we need to take into account the presence of X; if
+# another branch is already in the repository and points at some of
+# the revisions that we are about to output - we don't want them.
+# The solution is as before: git rev-parse output filtered.
+#
+# Finally, tags: 1 --- 2 --- O --- T --- 3 --- 4 --- N
+#
+# Tags pushed into the repository generate nice shortlog emails that
+# summarise the commits between them and the previous tag.  However,
+# those emails don't include the full commit messages that we output
+# for a branch update.  Therefore we still want to output revisions
+# that have been output on a tag email.
+#
+# Luckily, git rev-parse includes just the tool.  Instead of using
+# "--all" we use "--branches"; this has the added benefit that
+# "remotes/" will be ignored as well.
+
+# List all of the revisions that were removed by this update, in a
+# fast-forward update, this list will be empty, because rev-list O
+# ^N is empty.  For a non-fast-forward, O ^N is the list of removed
+# revisions
+fast_forward=""
+rev=""
+for rev in $(git rev-list $newrev..$oldrev)
+do
+revtype=$(git cat-file -t "$rev")
+echo "  discards  $rev ($revtype)"
+done
+if [ -z "$rev" ]; then
+fast_forward=1
+fi
+
+# List all the revisions from baserev to newrev in a kind of
+# "table-of-contents"; note this list can include revisions that
+# have already had notification emails and is present to show the
+# full detail of the change from rolling back the old revision to
+# the base revision and then forward to the new revision
+for rev in $(git rev-list $oldrev..$newrev)
+do
+revtype=$(git cat-file -t "$rev")
+echo "       via  $rev ($revtype)"
+done
+
+if [ "$fast_forward" ]; then
+echo "      from  $oldrev ($oldrev_type)"
+else
+#  1. Existing revisions were removed.  In this case newrev
+#     is a subset of oldrev - this is the reverse of a
+#     fast-forward, a rewind
+#  2. New revisions were added on top of an old revision,
+#     this is a rewind and addition.
+
+# (1) certainly happened, (2) possibly.  When (2) hasn't
+# happened, we set a flag to indicate that no log printout
+# is required.
+
+echo ""
+
+# Find the common ancestor of the old and new revisions and
+# compare it with newrev
+baserev=$(git merge-base $oldrev $newrev)
+rewind_only=""
+if [ "$baserev" = "$newrev" ]; then
+echo "This update discarded existing revisions and left the branch pointing at"
+echo "a previous point in the repository history."
+echo ""
+echo " * -- * -- N ($newrev)"
+echo "            \\"
+echo "             O -- O -- O ($oldrev)"
+echo ""
+echo "The removed revisions are not necessarilly gone - if another reference"
+echo "still refers to them they will stay in the repository."
+rewind_only=1
+else
+echo "This update added new revisions after undoing existing revisions.  That is"
+echo "to say, the old revision is not a strict subset of the new revision.  This"
+echo "situation occurs when you --force push a change and generate a repository"
+echo "containing something like this:"
+echo ""
+echo " * -- * -- B -- O -- O -- O ($oldrev)"
+echo "            \\"
+echo "             N -- N -- N ($newrev)"
+echo ""
+echo "When this happens we assume that you've already had alert emails for all"
+echo "of the O revisions, and so we here report only the revisions in the N"
+echo "branch from the common base, B."
+fi
+fi
+
+echo ""
+if [ -z "$rewind_only" ]; then
+echo "Those revisions listed above that are new to this repository have"
+echo "not appeared on any other notification email; so we list those"
+echo "revisions in full, below."
+
+echo ""
+echo $LOGBEGIN
+show_new_revisions
+
+# XXX: Need a way of detecting whether git rev-list actually
+# outputted anything, so that we can issue a "no new
+# revisions added by this update" message
+
+echo $LOGEND
+else
+echo "No new revisions were added by this update."
+fi
+
+# The diffstat is shown from the old revision to the new revision.
+# This is to show the truth of what happened in this change.
+# There's no point showing the stat from the base to the new
+# revision because the base is effectively a random revision at this
+# point - the user will be interested in what this revision changed
+# - including the undoing of previous revisions in the case of
+# non-fast-forward updates.
+echo ""
+echo "Summary of changes:"
+git diff-tree --stat --summary --find-copies-harder $oldrev..$newrev
+}
+
+#
+# Called for the deletion of a branch
+#
+generate_delete_branch_email()
+{
+echo "       was  $oldrev"
+echo ""
+echo $LOGEND
+git show -s --pretty=oneline $oldrev
+echo $LOGEND
+}
+
+# --------------- Annotated tags
+
+#
+# Called for the creation of an annotated tag
+#
+generate_create_atag_email()
+{
+echo "        at  $newrev ($newrev_type)"
+
+generate_atag_email
+}
+
+#
+# Called for the update of an annotated tag (this is probably a rare event
+# and may not even be allowed)
+#
+generate_update_atag_email()
+{
+echo "        to  $newrev ($newrev_type)"
+echo "      from  $oldrev (which is now obsolete)"
+
+generate_atag_email
+}
+
+#
+# Called when an annotated tag is created or changed
+#
+generate_atag_email()
+{
+# Use git for-each-ref to pull out the individual fields from the
+# tag
+eval $(git for-each-ref --shell --format='
+tagobject=%(*objectname)
+tagtype=%(*objecttype)
+tagger=%(taggername)
+tagged=%(taggerdate)' $refname
+)
+
+echo "   tagging  $tagobject ($tagtype)"
+case "$tagtype" in
+commit)
+
+# If the tagged object is a commit, then we assume this is a
+# release, and so we calculate which tag this tag is
+# replacing
+prevtag=$(git describe --abbrev=0 $newrev^ 2&amp;gt;/dev/null)
+
+if [ -n "$prevtag" ]; then
+echo "  replaces  $prevtag"
+fi
+;;
+*)
+echo "    length  $(git cat-file -s $tagobject) bytes"
+;;
+esac
+echo " tagged by  $tagger"
+echo "        on  $tagged"
+
+echo ""
+echo $LOGBEGIN
+
+# Show the content of the tag message; this might contain a change
+# log or release notes so is worth displaying.
+git cat-file tag $newrev | sed -e '1,/^$/d'
+
+echo ""
+case "$tagtype" in
+commit)
+# Only commit tags make sense to have rev-list operations
+# performed on them
+if [ -n "$prevtag" ]; then
+# Show changes since the previous release
+git rev-list --pretty=short "$prevtag..$newrev" | git shortlog
+else
+# No previous tag, show all the changes since time
+# began
+git rev-list --pretty=short $newrev | git shortlog
+fi
+;;
+*)
+# XXX: Is there anything useful we can do for non-commit
+# objects?
+;;
+esac
+
+echo $LOGEND
+}
+
+#
+# Called for the deletion of an annotated tag
+#
+generate_delete_atag_email()
+{
+echo "       was  $oldrev"
+echo ""
+echo $LOGEND
+git show -s --pretty=oneline $oldrev
+echo $LOGEND
+}
+
+# --------------- General references
+
+#
+# Called when any other type of reference is created (most likely a
+# non-annotated tag)
+#
+generate_create_general_email()
+{
+echo "        at  $newrev ($newrev_type)"
+
+generate_general_email
+}
+
+#
+# Called when any other type of reference is updated (most likely a
+# non-annotated tag)
+#
+generate_update_general_email()
+{
+echo "        to  $newrev ($newrev_type)"
+echo "      from  $oldrev"
+
+generate_general_email
+}
+
+#
+# Called for creation or update of any other type of reference
+#
+generate_general_email()
+{
+# Unannotated tags are more about marking a point than releasing a
+# version; therefore we don't do the shortlog summary that we do for
+# annotated tags above - we simply show that the point has been
+# marked, and print the log message for the marked point for
+# reference purposes
+#
+# Note this section also catches any other reference type (although
+# there aren't any) and deals with them in the same way.
+
+echo ""
+if [ "$newrev_type" = "commit" ]; then
+echo $LOGBEGIN
+git show --no-color --root -s --pretty=medium $newrev
+echo $LOGEND
+else
+# What can we do here?  The tag marks an object that is not
+# a commit, so there is no log for us to display.  It's
+# probably not wise to output git cat-file as it could be a
+# binary blob.  We'll just say how big it is
+echo "$newrev is a $newrev_type, and is $(git cat-file -s $newrev) bytes long."
+fi
+}
+
+#
+# Called for the deletion of any other type of reference
+#
+generate_delete_general_email()
+{
+echo "       was  $oldrev"
+echo ""
+echo $LOGEND
+git show -s --pretty=oneline $oldrev
+echo $LOGEND
+}
+
+
+# --------------- Miscellaneous utilities
+
+#
+# Show new revisions as the user would like to see them in the email.
+#
+show_new_revisions()
+{
+# This shows all log entries that are not already covered by
+# another ref - i.e. commits that are now accessible from this
+# ref that were previously not accessible
+# (see generate_update_branch_email for the explanation of this
+# command)
+
+# Revision range passed to rev-list differs for new vs. updated
+# branches.
+if [ "$change_type" = create ]
+then
+# Show all revisions exclusive to this (new) branch.
+revspec=$newrev
+else
+# Branch update; show revisions not part of $oldrev.
+revspec=$oldrev..$newrev
+fi
+
+other_branches=$(git for-each-ref --format='%(refname)' refs/heads/ |
+    grep -F -v $refname)
+git rev-parse --not $other_branches |
+if [ -z "$custom_showrev" ]
+then
+git rev-list --pretty --stdin $revspec
+else
+git rev-list --stdin $revspec |
+while read onerev
+do
+eval $(printf "$custom_showrev" $onerev)
+done
+fi
+}
+
+
+send_mail()
+{
+if [ -n "$envelopesender" ]; then
+/usr/sbin/sendmail -t -f "$envelopesender"
+else
+/usr/sbin/sendmail -t
+fi
+}
+
+# ---------------------------- main()
+
+# --- Constants
+LOGBEGIN="- Log -----------------------------------------------------------------"
+LOGEND="-----------------------------------------------------------------------"
+
+# --- Config
+# Set GIT_DIR either from the working directory, or from the environment
+# variable.
+GIT_DIR=$(git rev-parse --git-dir 2&amp;gt;/dev/null)
+if [ -z "$GIT_DIR" ]; then
+echo &amp;gt;&amp;amp;2 "fatal: post-receive: GIT_DIR not set"
+exit 1
+fi
+
+projectdesc=$(sed -ne '1p' "$GIT_DIR/description")
+# Check if the description is unchanged from it's default, and shorten it to
+# a more manageable length if it is
+if expr "$projectdesc" : "Unnamed repository.*$" &amp;gt;/dev/null
+then
+projectdesc="UNNAMED PROJECT"
+fi
+
+recipients=$(git config hooks.mailinglist)
+announcerecipients=$(git config hooks.announcelist)
+envelopesender=$(git config hooks.envelopesender)
+emailprefix=$(git config hooks.emailprefix || echo '[SCM] ')
+custom_showrev=$(git config hooks.showrev)
+
+# --- Main loop
+# Allow dual mode: run from the command line just like the update hook, or
+# if no arguments are given then run as a hook script
+if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
+# Output to the terminal in command line mode - if someone wanted to
+# resend an email; they could redirect the output to sendmail
+# themselves
+PAGER= generate_email $2 $3 $1
+else
+while read oldrev newrev refname
+do
+generate_email $oldrev $newrev $refname | send_mail
+done
+fi

commit 8e336ec1df6997148b105eff6f098de13eb678b1
Author: Nikodemus Siivola &amp;lt;nikodemus&amp;lt; at &amp;gt;sb-studio.net&amp;gt;
Date:   Mon Jun 6 10:13:50 2011 +0300

    git hooks/post-receive-email tweaks
    
      One email per commit on existing branch.
    
      Silence diffstat -- we get that from git show.
---
 post-receive-email |   81 ++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 63 insertions(+), 18 deletions(-)

diff --git a/post-receive-email b/post-receive-email
index cc90b7f..60cce2c 100755
--- a/post-receive-email
+++ b/post-receive-email
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,5 +1,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #!/bin/sh
 #
+# (Modified for SBCL.)
+#
 # Copyright (c) 2007 Andy Parkins
 #
 # An example hook script to mail out commit update information.  This hook
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -172,6 +174,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; generate_email()
 if [ -z "$describe" ]; then
 describe=$rev
 fi
+# SBCL: Also grab the commit title.
+title=$(git log -n1 --pretty=format:%s $rev)
+if [ -z "$title" ]; then
+        title=$rev
+fi
 
 generate_email_header
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -194,19 +201,24 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; generate_email_header()
 {
 # --- Email (all stdout will be the email)
 # Generate header
+
+        # SBCL: branch updates get the commit title in the subject
+        if [ "branch" = "$refname_type" ] &amp;amp;&amp;amp; [ "update" = "$change_type" ]
+then
+    subject="${emailprefix} $short_refname: $title"
+        else
+    subject="${emailprefix} $refname_type $short_refname: ${change_type}d. $describe"
+fi
+
 cat &amp;lt;&amp;lt;-EOF
 To: $recipients
-Subject: ${emailprefix}$projectdesc $refname_type, $short_refname, ${change_type}d. $describe
+Subject: $subject
 X-Git-Refname: $refname
 X-Git-Reftype: $refname_type
 X-Git-Oldrev: $oldrev
 X-Git-Newrev: $newrev
 
-This is an automated email from the git hooks/post-receive script. It was
-generated because a ref change was pushed to the repository containing
-the project "$projectdesc".
-
-The $refname_type, $short_refname has been ${change_type}d
+The $refname_type "$short_refname" has been ${change_type}d in $projectdesc:
 EOF
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -334,11 +346,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; generate_update_branch_email()
 # have already had notification emails and is present to show the
 # full detail of the change from rolling back the old revision to
 # the base revision and then forward to the new revision
-for rev in $(git rev-list $oldrev..$newrev)
-do
+#
+# For SBCL we skip this for branch updates, since we're getting
+# one email per commit.
+if [ "branch" != "$refname_type" ] || [ "update" != "$change_type" ]
+then
+    for rev in $(git rev-list $oldrev..$newrev)
+    do
 revtype=$(git cat-file -t "$rev")
 echo "       via  $rev ($revtype)"
-done
+    done
+fi
 
 if [ "$fast_forward" ]; then
 echo "      from  $oldrev ($oldrev_type)"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -388,9 +406,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; generate_update_branch_email()
 
 echo ""
 if [ -z "$rewind_only" ]; then
-echo "Those revisions listed above that are new to this repository have"
-echo "not appeared on any other notification email; so we list those"
-echo "revisions in full, below."
+        # Silenced for SBCL.
+        #
+# echo "Those revisions listed above that are new to this repository have"
+# echo "not appeared on any other notification email; so we list those"
+# echo "revisions in full, below."
 
 echo ""
 echo $LOGBEGIN
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -412,9 +432,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; generate_update_branch_email()
 # point - the user will be interested in what this revision changed
 # - including the undoing of previous revisions in the case of
 # non-fast-forward updates.
-echo ""
-echo "Summary of changes:"
-git diff-tree --stat --summary --find-copies-harder $oldrev..$newrev
+        #
+        # Silenced for SBCL: we use "git show -p --stat -C %s" to generate
+        # revision information, getting the diffstat between the commit message
+        # and the diff. This would just duplicate that.
+        #
+# echo ""
+# echo "Summary of changes:"
+# git diff-tree --stat --summary --find-copies-harder $oldrev..$newrev
 }
 
 #
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -621,12 +646,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; show_new_revisions()
 
 other_branches=$(git for-each-ref --format='%(refname)' refs/heads/ |
     grep -F -v $refname)
+# SBCL: show oldest first via --reverse
 git rev-parse --not $other_branches |
 if [ -z "$custom_showrev" ]
 then
-git rev-list --pretty --stdin $revspec
+git rev-list --reverse --pretty --stdin $revspec
 else
-git rev-list --stdin $revspec |
+git rev-list --reverse --stdin $revspec |
 while read onerev
 do
 eval $(printf "$custom_showrev" $onerev)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -684,6 +710,25 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
 else
 while read oldrev newrev refname
 do
-generate_email $oldrev $newrev $refname | send_mail
+  echo "Sending email for $refname: $oldrev -&amp;gt; $newrev"
+  # SBCL KLUDGE: the default script sends one email per
+  # push. We want one per commit. As long as we're
+  # in fast-forward-only world, this should do the
+  # right thing.
+  if (expr "$oldrev" : '0*$' &amp;gt;/dev/null ||
+      expr "$newrev" : '0*$' &amp;gt;/dev/null ||
+              ! expr "$refname" : "refs/heads/" &amp;gt; /dev/null)
+  then
+      # Just one email.
+      generate_email $oldrev $newrev $refname | send_mail
+  else
+      # Branch update, one mail per commit.
+      lastrev=$oldrev
+      for step in $(git rev-list --reverse $oldrev..$newrev)
+      do
+generate_email $lastrev $step $refname | send_mail
+lastrev=$step
+      done
+  fi
 done
 fi

commit 98ca64a49ae862f1472b6659b5ad2c93e3e700d3
Author: Nikodemus Siivola &amp;lt;nikodemus&amp;lt; at &amp;gt;random-state.net&amp;gt;
Date:   Thu Jun 9 17:29:32 2011 +0300

    git: update hook, fix post-receive-email
    
     Add an update hook that prevents merge commits on master.
    
     Fix the post-receive-email script to work properly with merge commits --
     don't try to report pushes of merges with one email per commit.
    
     (Since we deny non-fast-forwards, we pretty much need to allow merges on
     other branches, or give up keeping them in the main repo.)
---
 post-receive-email |   25 ++++++++++---------------
 1 files changed, 10 insertions(+), 15 deletions(-)

diff --git a/post-receive-email b/post-receive-email
index 60cce2c..beecf43 100755
--- a/post-receive-email
+++ b/post-receive-email
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -346,17 +346,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; generate_update_branch_email()
 # have already had notification emails and is present to show the
 # full detail of the change from rolling back the old revision to
 # the base revision and then forward to the new revision
-#
-# For SBCL we skip this for branch updates, since we're getting
-# one email per commit.
-if [ "branch" != "$refname_type" ] || [ "update" != "$change_type" ]
-then
-    for rev in $(git rev-list $oldrev..$newrev)
-    do
-revtype=$(git cat-file -t "$rev")
-echo "       via  $rev ($revtype)"
-    done
-fi
+for rev in $(git rev-list $oldrev..$newrev)
+do
+    revtype=$(git cat-file -t "$rev")
+    echo "       via  $rev ($revtype)"
+done
 
 if [ "$fast_forward" ]; then
 echo "      from  $oldrev ($oldrev_type)"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -715,14 +709,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; else
   # push. We want one per commit. As long as we're
   # in fast-forward-only world, this should do the
   # right thing.
-  if (expr "$oldrev" : '0*$' &amp;gt;/dev/null ||
-      expr "$newrev" : '0*$' &amp;gt;/dev/null ||
-              ! expr "$refname" : "refs/heads/" &amp;gt; /dev/null)
+  if (expr "$oldrev" : '0*$' &amp;gt;/dev/null ||                    # create
+      expr "$newrev" : '0*$' &amp;gt;/dev/null ||                    # delete
+              (! expr "$refname" : "refs/heads/" &amp;gt; /dev/null) ||      # not a branch
+              git rev-parse --verify --quiet "$newrev"^2 &amp;gt; /dev/null) # merge commit
   then
       # Just one email.
       generate_email $oldrev $newrev $refname | send_mail
   else
-      # Branch update, one mail per commit.
+      # Simple branch update, one mail per commit.
       lastrev=$oldrev
       for step in $(git rev-list --reverse $oldrev..$newrev)
       do

commit f2765a25358dfc8f8e61a3b51e00da96cb8895e2
Author: Nikodemus Siivola &amp;lt;nikodemus&amp;lt; at &amp;gt;random-state.net&amp;gt;
Date:   Thu Jun 9 18:02:28 2011 +0300

    git: post-receive-email hook again
    
      Check all revisions from new to old for merges, not just the topmost.
---
 post-receive-email |   38 +++++++++++++++++++++++++++-----------
 1 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/post-receive-email b/post-receive-email
index beecf43..7e6d1f8 100755
--- a/post-receive-email
+++ b/post-receive-email
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -709,21 +709,37 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; else
   # push. We want one per commit. As long as we're
   # in fast-forward-only world, this should do the
   # right thing.
-  if (expr "$oldrev" : '0*$' &amp;gt;/dev/null ||                    # create
-      expr "$newrev" : '0*$' &amp;gt;/dev/null ||                    # delete
-              (! expr "$refname" : "refs/heads/" &amp;gt; /dev/null) ||      # not a branch
-              git rev-parse --verify --quiet "$newrev"^2 &amp;gt; /dev/null) # merge commit
+  if (expr "$oldrev" : '0*$' &amp;gt;/dev/null ||                  # create
+      expr "$newrev" : '0*$' &amp;gt;/dev/null ||                  # delete
+              ! expr "$refname" : "refs/heads/" &amp;gt; /dev/null)        # not a branch
   then
       # Just one email.
       generate_email $oldrev $newrev $refname | send_mail
   else
-      # Simple branch update, one mail per commit.
-      lastrev=$oldrev
-      for step in $(git rev-list --reverse $oldrev..$newrev)
-      do
-generate_email $lastrev $step $refname | send_mail
-lastrev=$step
-      done
+              # Get all revisions from old to new.
+              revlist=$(git rev-list --reverse $oldrev..$newrev)
+              no_merges=true
+              # Check for merges.
+              for rev in $revlist
+              do
+                  if ($no_merges &amp;amp;&amp;amp; ! git rev-parse --verify --quiet "$rev"^2 &amp;gt; /dev/null)
+                  then
+                      no_merges=false
+                  fi
+              done
+              if $no_merges
+              then
+                  # Simple branch update, one mail per commit.
+          lastrev=$oldrev
+          for step in $revlist
+          do
+      generate_email $lastrev $step $refname | send_mail
+      lastrev=$step
+          done
+              else
+                  # There's a merge -- just one email.
+          generate_email $oldrev $newrev $refname | send_mail
+              fi
   fi
 done
 fi

commit 66dd8aac5252048e46259345675654326e60356d
Author: Nikodemus Siivola &amp;lt;nikodemus&amp;lt; at &amp;gt;random-state.net&amp;gt;
Date:   Thu Jun 9 18:12:29 2011 +0300

    git: adjust whitespace in commit emails
    
      Kill the extra empty line.
---
 post-receive-email |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/post-receive-email b/post-receive-email
index 7e6d1f8..947a568 100755
--- a/post-receive-email
+++ b/post-receive-email
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -405,8 +405,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; generate_update_branch_email()
 # echo "Those revisions listed above that are new to this repository have"
 # echo "not appeared on any other notification email; so we list those"
 # echo "revisions in full, below."
+# echo ""
 
-echo ""
 echo $LOGBEGIN
 show_new_revisions
 

commit a116822a0e0d63ee43837f0979026d366fb27e9f
Author: Nikodemus Siivola &amp;lt;nikodemus&amp;lt; at &amp;gt;random-state.net&amp;gt;
Date:   Fri Jun 10 13:46:04 2011 +0300

    git: revered merge detection logic in post-receive-email script
    
      How hard can this be?
---
 post-receive-email |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/post-receive-email b/post-receive-email
index 947a568..af8377c 100755
--- a/post-receive-email
+++ b/post-receive-email
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -722,7 +722,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; else
               # Check for merges.
               for rev in $revlist
               do
-                  if ($no_merges &amp;amp;&amp;amp; ! git rev-parse --verify --quiet "$rev"^2 &amp;gt; /dev/null)
+                  if ($no_merges &amp;amp;&amp;amp; git rev-parse --verify --quiet "$rev"^2 &amp;gt; /dev/null)
                   then
                       no_merges=false
                   fi

commit 186c8f2465fb4f745e4b488b28914aa603dac83a
Author: Nikodemus Siivola &amp;lt;nikodemus&amp;lt; at &amp;gt;random-state.net&amp;gt;
Date:   Fri Jun 10 13:47:47 2011 +0300

    git: more terminal output from post-receive-email script
---
 post-receive-email |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/post-receive-email b/post-receive-email
index af8377c..93289fb 100755
--- a/post-receive-email
+++ b/post-receive-email
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -704,7 +704,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
 else
 while read oldrev newrev refname
 do
-  echo "Sending email for $refname: $oldrev -&amp;gt; $newrev"
+          echo "Sending mail for $refname: $oldrev -&amp;gt; $newrev"
   # SBCL KLUDGE: the default script sends one email per
   # push. We want one per commit. As long as we're
   # in fast-forward-only world, this should do the
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -714,6 +714,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; else
               ! expr "$refname" : "refs/heads/" &amp;gt; /dev/null)        # not a branch
   then
       # Just one email.
+              echo "Not a branch update: all changes in one email."
       generate_email $oldrev $newrev $refname | send_mail
   else
               # Get all revisions from old to new.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -724,15 +725,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; else
               do
                   if ($no_merges &amp;amp;&amp;amp; git rev-parse --verify --quiet "$rev"^2 &amp;gt; /dev/null)
                   then
+                      echo "Merge detected: $rev. Sending all commits in a single email."
                       no_merges=false
                   fi
               done
               if $no_merges
               then
                   # Simple branch update, one mail per commit.
+                  echo "Sending one email per commit."
           lastrev=$oldrev
           for step in $revlist
           do
+                      echo "Sending: $(git log -n1 --oneline $rev)"
       generate_email $lastrev $step $refname | send_mail
       lastrev=$step
           done

commit 2fe3e2f49f1bc8e64cd59f57d2295f2318ec3756
Author: Nikodemus Siivola &amp;lt;nikodemus&amp;lt; at &amp;gt;random-state.net&amp;gt;
Date:   Fri Jun 10 13:55:03 2011 +0300

    git: that terminal output? make it mention the correct revision
    
     *sigh*
---
 post-receive-email |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/post-receive-email b/post-receive-email
index 93289fb..c565634 100755
--- a/post-receive-email
+++ b/post-receive-email
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -736,7 +736,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; else
           lastrev=$oldrev
           for step in $revlist
           do
-                      echo "Sending: $(git log -n1 --oneline $rev)"
+                      echo "Sending: $(git log -n1 --oneline $step)"
       generate_email $lastrev $step $refname | send_mail
       lastrev=$step
           done

commit 2c748c423c2e1c8e23880e364e3d3db315349151
Author: Nikodemus Siivola &amp;lt;nikodemus&amp;lt; at &amp;gt;random-state.net&amp;gt;
Date:   Mon Jan 2 12:18:07 2012 +0200

    git: add missing git hook scripts from SourceForge
    
      We've been using these for a while now, but I neglected to stash copies in
      the repository.
    
      Also instructions for updating them, since it isn't the most intuitive thing
      in the world.
---
 README       |   10 ++++++++++
 post-receive |   11 +++++++++++
 update       |   39 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 60 insertions(+), 0 deletions(-)

diff --git a/README b/README
new file mode 100644
index 0000000..533193a
--- /dev/null
+++ b/README
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+SBCL Git Hooks
+
+These scripts live in /home/scm_git/s/sb/sbcl/sbcl.git/hooks on
+SourceForge, and have nothing to do with SBCL as such -- and
+everything to do with developer convenience and maintenance.
+
+To push updates there:
+
+  ssh -t &amp;lt;sfuser&amp;gt;,sbcl&amp;lt; at &amp;gt;shell.sourceforge.net create
+  scp &amp;lt;script&amp;gt; &amp;lt;sfuser&amp;gt;,sbcl&amp;lt; at &amp;gt;shell.sourceforge.net:/home/scm_git/s/sb/sbcl/sbcl.git/hooks/
diff --git a/post-receive b/post-receive
new file mode 100755
index 0000000..3186b6d
--- /dev/null
+++ b/post-receive
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+#!/bin/sh
+#
+# The "post-receive" script is run after receive-pack has accepted a pack
+# and the repository has been updated.  It is passed arguments in through
+# stdin in the form
+#  &amp;lt;oldrev&amp;gt; &amp;lt;newrev&amp;gt; &amp;lt;refname&amp;gt;
+# For example:
+#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
+#
+
+hooks/post-receive-email
diff --git a/update b/update
new file mode 100755
index 0000000..c7e449a
--- /dev/null
+++ b/update
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,39 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+#!/bin/sh
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+    echo "Don't run this script from the command line." &amp;gt;&amp;amp;2
+    echo " (if you want, you could supply GIT_DIR then run" &amp;gt;&amp;amp;2
+    echo "  $0 &amp;lt;ref&amp;gt; &amp;lt;oldrev&amp;gt; &amp;lt;newrev&amp;gt;)" &amp;gt;&amp;amp;2
+    exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+    echo "Usage: $0 &amp;lt;ref&amp;gt; &amp;lt;oldrev&amp;gt; &amp;lt;newrev&amp;gt;" &amp;gt;&amp;amp;2
+    exit 1
+fi
+
+# Don't allow merge commits on master
+if [ "$refname" = "refs/heads/master" ]
+then
+    for rev in $(git rev-list $newrev --not $oldrev)
+    do
+        echo -n "Checking: $rev"
+        if git rev-parse --verify --quiet $rev^2 &amp;gt; /dev/null
+        then
+            echo " (merge!)"
+            echo
+            echo "Merges not allowed on master. Rebase your changes instead."
+            echo
+            exit 1
+        else
+            echo " (ok)"
+        fi
+    done
+fi
+

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Christophe Rhodes</dc:creator>
    <dc:date>2013-06-10T12:12:29</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16421">
    <title>master: Micro-optimize DOUBLE-FLOAT-LOW-BITS onx68-64.</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16421</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  1c74f342b23aafaa8f514112c9bcca7526e07a58 (commit)
      from  04d3bdf96e526ceb1651f9851e52ac9392e227f5 (commit)

- Log -----------------------------------------------------------------
commit 1c74f342b23aafaa8f514112c9bcca7526e07a58
Author: Lutz Euler &amp;lt;lutz.euler&amp;lt; at &amp;gt;freenet.de&amp;gt;
Date:   Mon Jun 10 13:44:20 2013 +0200

    Micro-optimize DOUBLE-FLOAT-LOW-BITS on x68-64.
    
    Instead of loading a 64-bit register from memory and zeroing the upper
    32 bits of it by the sequence SHL reg, 32; SHR reg, 32 simply load the
    corresponding 32-bit register from memory, relying on the implicit
    zero-extension to 64 bits this does. This is smaller and faster.
    
    For example, if the input to the VOP is a descriptor register, the old
    instruction sequence is:
    
      MOV RDX, [RDX-7]
      SHL RDX, 32
      SHR RDX, 32
    
    and the new one:
    
      MOV EDX, [RDX-7]
    
    Regarding store-to-load forwarding this change should make no
    difference: Most current processors can forward a 64-bit store to a
    32-bit load from the same address. The exception is Intel's Atom which
    can forward only to a load of the same size as the store; but it also
    supports this only between integer registers, and DOUBLE-FLOAT-LOW-BITS
    mostly or even always acts on memory slots written from an XMM register
    (of the three storage classes it supports as input, for the first it
    does the store itself from an XMM register; for the other two I have
    investigated some disassemblies and always found the prior store to be
    from am XMM register).
---
 NEWS                           |    1 +
 src/compiler/x86-64/float.lisp |   26 +++++++++++++++-----------
 2 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/NEWS b/NEWS
index c39179a..531f156 100644
--- a/NEWS
+++ b/NEWS
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -18,6 +18,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; changes relative to sbcl-1.1.8:
   * optimization: comparisons between rationals and constant floats or between
     integers and constant ratios are now converted to rationals/integers at
     compile time.
+  * optimization: Smaller and faster DOUBLE-FLOAT-LOW-BITS on x86-64.
   * bug fix: problems with NCONC type derivation (reported by Jerry James).
   * bug fix: EXPT type derivation no longer constructs bogus floating-point
     types.  (reported by Vsevolod Dyomkin)
diff --git a/src/compiler/x86-64/float.lisp b/src/compiler/x86-64/float.lisp
index 0a03d50..397ffdf 100644
--- a/src/compiler/x86-64/float.lisp
+++ b/src/compiler/x86-64/float.lisp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1266,17 +1266,21 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
   (:policy :fast-safe)
   (:vop-var vop)
   (:generator 5
-     (sc-case float
-       (double-reg
-        (inst movsd temp float)
-        (move lo-bits temp))
-       (double-stack
-        (loadw lo-bits ebp-tn (frame-word-offset (tn-offset float))))
-       (descriptor-reg
-        (loadw lo-bits float double-float-value-slot
-               other-pointer-lowtag)))
-     (inst shl lo-bits 32)
-     (inst shr lo-bits 32)))
+     (let ((dword-lo-bits (reg-in-size lo-bits :dword)))
+       (sc-case float
+        (double-reg
+         (inst movsd temp float)
+         (inst mov dword-lo-bits
+               (make-ea :dword :base rbp-tn
+                        :disp (frame-byte-offset (tn-offset temp)))))
+        (double-stack
+         (inst mov dword-lo-bits
+               (make-ea :dword :base rbp-tn
+                        :disp (frame-byte-offset (tn-offset float)))))
+        (descriptor-reg
+         (inst mov dword-lo-bits
+               (make-ea-for-object-slot-half float double-float-value-slot
+                                             other-pointer-lowtag)))))))
 
 
 

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Lutz Euler</dc:creator>
    <dc:date>2013-06-10T11:44:45</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16420">
    <title>master: Make clean.sh clean up doc/internals, too.</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16420</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  04d3bdf96e526ceb1651f9851e52ac9392e227f5 (commit)
      from  2e8076a2fd73cffb3e7a4dd1f78469781e94cf52 (commit)

- Log -----------------------------------------------------------------
commit 04d3bdf96e526ceb1651f9851e52ac9392e227f5
Author: Lutz Euler &amp;lt;lutz.euler&amp;lt; at &amp;gt;freenet.de&amp;gt;
Date:   Mon Jun 10 12:37:22 2013 +0200

    Make clean.sh clean up doc/internals, too.
    
    For completeness and equal treatment with doc/manual.
---
 NEWS                   |    1 +
 doc/clean.sh           |    1 +
 doc/internals/clean.sh |    5 +++++
 3 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/NEWS b/NEWS
index 6a48d94..c39179a 100644
--- a/NEWS
+++ b/NEWS
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2,6 +2,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 changes relative to sbcl-1.1.8:
   * enhancement: disassemble now annotates some previously missing static
     functions, like LENGTH.
+  * enhancement: clean.sh now also cleans doc/internals.
   * optimization: calls to static functions on x86-64 use less instructions.
   * optimization: compute encode-universal-time at compile time when possible.
   * optimization: when referencing internal functions as #'x, don't go through
diff --git a/doc/clean.sh b/doc/clean.sh
index c1ff16b..5ed17ee 100644
--- a/doc/clean.sh
+++ b/doc/clean.sh
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,3 +1,4 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #!/bin/sh
 
 (cd manual; sh clean.sh)
+(cd internals; sh clean.sh)
diff --git a/doc/internals/clean.sh b/doc/internals/clean.sh
new file mode 100644
index 0000000..38fdea9
--- /dev/null
+++ b/doc/internals/clean.sh
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,5 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+#!/bin/sh
+
+. ../../find-gnumake.sh
+find_gnumake
+$GNUMAKE clean

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Lutz Euler</dc:creator>
    <dc:date>2013-06-10T10:38:12</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16419">
    <title>master: git: Add entries for the HTML manual todoc/internals/.gitignore.</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16419</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  2e8076a2fd73cffb3e7a4dd1f78469781e94cf52 (commit)
      from  a3d4610158f227d53cb5eac287dd2661e975fc70 (commit)

- Log -----------------------------------------------------------------
commit 2e8076a2fd73cffb3e7a4dd1f78469781e94cf52
Author: Lutz Euler &amp;lt;lutz.euler&amp;lt; at &amp;gt;freenet.de&amp;gt;
Date:   Mon Jun 10 12:37:22 2013 +0200

    git: Add entries for the HTML manual to doc/internals/.gitignore.
    
    These are the files and directories generated by "make html" in
    doc/internals.
---
 doc/internals/.gitignore |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/doc/internals/.gitignore b/doc/internals/.gitignore
index 86e6a62..79cea0f 100644
--- a/doc/internals/.gitignore
+++ b/doc/internals/.gitignore
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -15,7 +15,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 sbcl-internals.info
 sbcl-internals.pdf
 sbcl-internals.ps
+sbcl-internals/
+html-stamp
 discriminating-functions.pdf
 discriminating-functions.txt
+discriminating-functions.png
 top-include.include
 top-menu.include

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Lutz Euler</dc:creator>
    <dc:date>2013-06-10T10:38:09</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16418">
    <title>master: git: New file doc/internals/.gitignore.</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16418</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  a3d4610158f227d53cb5eac287dd2661e975fc70 (commit)
      from  ded09c061bb9cb4f6829c532c1c6f09637a46477 (commit)

- Log -----------------------------------------------------------------
commit a3d4610158f227d53cb5eac287dd2661e975fc70
Author: Lutz Euler &amp;lt;lutz.euler&amp;lt; at &amp;gt;freenet.de&amp;gt;
Date:   Sun Jun 9 17:58:52 2013 +0200

    git: New file doc/internals/.gitignore.
    
    Ignore the files generated by building the internals manual.
    Copied and adapted from doc/manual/.gitignore.
---
 doc/internals/.gitignore |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/doc/internals/.gitignore b/doc/internals/.gitignore
new file mode 100644
index 0000000..86e6a62
--- /dev/null
+++ b/doc/internals/.gitignore
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,21 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+*.aux
+*.cp
+*.cps
+*.fn
+*.fns
+*.ky
+*.log
+*.pg
+*.texi-temp
+*.toc
+*.tp
+*.tps
+*.vr
+*.vrs
+sbcl-internals.info
+sbcl-internals.pdf
+sbcl-internals.ps
+discriminating-functions.pdf
+discriminating-functions.txt
+top-include.include
+top-menu.include

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Lutz Euler</dc:creator>
    <dc:date>2013-06-09T16:00:09</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16417">
    <title>master: Insert error traps after full calls inferrednot to return</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16417</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  ded09c061bb9cb4f6829c532c1c6f09637a46477 (commit)
      from  04933997e80776f442770244d92cc2d07bbafe50 (commit)

- Log -----------------------------------------------------------------
commit ded09c061bb9cb4f6829c532c1c6f09637a46477
Author: Paul Khuong &amp;lt;pvk&amp;lt; at &amp;gt;pvk.ca&amp;gt;
Date:   Sat Jun 8 12:53:16 2013 -0400

    Insert error traps after full calls inferred not to return
    
     An explicit error trap after full calls to known functions helps
     understand type derivation errors at runtime; it's certainly better
     than executing arbitrary bytes.
    
     Only do this when the return type was tightened to NIL via type
     derivation; if a function is defknowned not to return, it really
     shouldn't.
---
 src/compiler/ir2tran.lisp |   23 ++++++++++++++++-------
 1 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/compiler/ir2tran.lisp b/src/compiler/ir2tran.lisp
index 61cf153..a1ac4dc 100644
--- a/src/compiler/ir2tran.lisp
+++ b/src/compiler/ir2tran.lisp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1897,9 +1897,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 ;;; If necessary, emit a terminal unconditional branch to go to the
 ;;; successor block. If the successor is the component tail, then
-;;; there isn't really any successor, but if the end is an unknown,
-;;; non-tail call, then we emit an error trap just in case the
-;;; function really does return.
+;;; there isn't really any successor, but if the end is a non-tail
+;;; call to a function that's not *known* to never return, then we
+;;; emit an error trap just in case the function really does return.
+;;;
+;;; Trapping after known calls makes it easier to understand type
+;;; derivation bugs at runtime: they show up as nil-fun-returned-error,
+;;; rather than the execution of arbitrary code or error traps.
 (defun finish-ir2-block (block)
   (declare (type cblock block))
   (let* ((2block (block-info block))
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1910,15 +1914,20 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
       (let ((target (first succ)))
         (cond ((eq target (component-tail (block-component block)))
                (when (and (basic-combination-p last)
-                          (eq (basic-combination-kind last) :full))
+                          (or (eq (basic-combination-kind last) :full)
+                              (and (eq (basic-combination-kind last) :known)
+                                   (eq (basic-combination-info last) :full))))
                  (let* ((fun (basic-combination-fun last))
                         (use (lvar-uses fun))
                         (name (and (ref-p use)
                                    (leaf-has-source-name-p (ref-leaf use))
-                                   (leaf-source-name (ref-leaf use)))))
+                                   (leaf-source-name (ref-leaf use))))
+                        (ftype (and (info :function :info name) ; only use the FTYPE if
+                                    (info :function :type name)))) ; NAME was DEFKNOWN
                    (unless (or (node-tail-p last)
-                               (info :function :info name)
-                               (policy last (zerop safety)))
+                               (policy last (zerop safety))
+                               (and (fun-type-p ftype)
+                                    (eq *empty-type* (fun-type-returns ftype))))
                      (vop nil-fun-returned-error last 2block
                           (if name
                               (emit-constant name)

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Paul Khuong</dc:creator>
    <dc:date>2013-06-08T16:57:11</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16416">
    <title>master: Only use MASK-SIGNED-FIELD VOPs as lastresorts</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16416</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL:
       via  04933997e80776f442770244d92cc2d07bbafe50 (commit)
      from  a3b10e4bd291d1b07cb805a58cf8fe03156bdb3b (commit)

- Log -----------------------------------------------------------------
commit 04933997e80776f442770244d92cc2d07bbafe50
Author: Paul Khuong &amp;lt;pvk&amp;lt; at &amp;gt;pvk.ca&amp;gt;
Date:   Sat Jun 8 11:26:19 2013 -0400

    Only use MASK-SIGNED-FIELD VOPs as last resorts
    
     The MOVE hack usually leads to better code when it can be used.
---
 src/compiler/ir2tran.lisp |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/compiler/ir2tran.lisp b/src/compiler/ir2tran.lisp
index 146e8ec..61cf153 100644
--- a/src/compiler/ir2tran.lisp
+++ b/src/compiler/ir2tran.lisp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1795,9 +1795,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 (defoptimizer (mask-signed-field ir2-convert) ((width x) node block)
   (block nil
-    (when (template-p (basic-combination-info node))
-      (ir2-convert-template node block)
-      (return))
     (when (constant-lvar-p width)
       (case (lvar-value width)
         (#.(- sb!vm:n-word-bits sb!vm:n-fixnum-tag-bits)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1834,7 +1831,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
                   temp (first results))
              (move-lvar-result node block results lvar)
              (return))))))
-    (ir2-convert-full-call node block)))
+    (if (template-p (basic-combination-info node))
+        (ir2-convert-template node block)
+        (ir2-convert-full-call node block))))
 
 ;;; Convert the code in a component into VOPs.
 (defun ir2-convert (component)

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>Paul Khuong</dc:creator>
    <dc:date>2013-06-08T15:30:47</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16415">
    <title>(webpage) master: .gitmodules: change location ofsbcl.</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16415</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL webpage:
      from  611065a0dd31cce6ac56236eeed19617790a622b (commit)


- Log -----------------------------------------------------------------
commit 8f17b64d9d51c14ee959bb65c68057667458a34c
Author: Stas Boukarev &amp;lt;stassats&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Sat Jun 8 11:24:24 2013 +0400

    .gitmodules: change location of sbcl.
---
 .gitmodules |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/.gitmodules b/.gitmodules
index a3d7269..cc56f0d 100644
--- a/.gitmodules
+++ b/.gitmodules
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1,3 +1,3 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 [submodule "sbcl"]
 path = sbcl
-url = git://sbcl.git.sourceforge.net/gitroot/sbcl/sbcl.git
+url = git://git.code.sf.net/p/sbcl/sbcl

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>stassats</dc:creator>
    <dc:date>2013-06-08T07:24:29</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16414">
    <title>(webpage)  master: Change git url.</title>
    <link>http://permalink.gmane.org/gmane.lisp.steel-bank.cvs/16414</link>
    <description>&lt;pre&gt;The branch "master" has been updated in SBCL webpage:
      from  d8805593100a80438a0b8e0654fd460f35636f6b (commit)


- Log -----------------------------------------------------------------
commit 611065a0dd31cce6ac56236eeed19617790a622b
Author: Stas Boukarev &amp;lt;stassats&amp;lt; at &amp;gt;gmail.com&amp;gt;
Date:   Sat Jun 8 11:21:42 2013 +0400

    Change git url.
---
 platform-support.lisp |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/platform-support.lisp b/platform-support.lisp
index 6ecd546..88281b7 100644
--- a/platform-support.lisp
+++ b/platform-support.lisp
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -124,7 +124,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         ;; FIXME: remove the -r2 for 1.0.30, or use somethign more automagic...
         "sbcl-" (car *most-recent-release*) "-source.tar.bz2"))
    (&amp;lt;p&amp;gt; "The development version is available from git: ")   
-   (&amp;lt;pre&amp;gt; "git clone git://sbcl.git.sourceforge.net/gitroot/sbcl/sbcl.git")
+   (&amp;lt;pre&amp;gt; "git clone git://git.code.sf.net/p/sbcl/sbcl")
    (&amp;lt;p&amp;gt; (&amp;lt;b&amp;gt; "Binaries: "))
    (&amp;lt;p&amp;gt; "The table below links to the latest binaries for SBCL on
     each platform, where are available.")

-----------------------------------------------------------------------


hooks/post-receive
&lt;/pre&gt;</description>
    <dc:creator>stassats</dc:creator>
    <dc:date>2013-06-08T07:21:48</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.lisp.steel-bank.cvs">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.lisp.steel-bank.cvs</link>
  </textinput>
</rdf:RDF>
