Merge branch 'ak/t4204-shell-portability'
authorJunio C Hamano <gitster@pobox.com>
Mon, 30 May 2016 01:06:43 +0000 (18:06 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 30 May 2016 01:06:43 +0000 (18:06 -0700)
Update a test to run also under ksh88.

* ak/t4204-shell-portability:
t4204: do not let $name variable clobbered

Documentation/RelNotes/2.8.4.txt [new file with mode: 0644]
Documentation/config.txt
Documentation/git-log.txt
Documentation/git-send-email.txt
archive-tar.c
compat/winansi.c
config.mak.uname
diff --git a/Documentation/RelNotes/2.8.4.txt b/Documentation/RelNotes/2.8.4.txt
new file mode 100644 (file)
index 0000000..6005548
--- /dev/null
@@ -0,0 +1,27 @@
+Git v2.8.4 Release Notes
+========================
+
+Fixes since v2.8.3
+------------------
+
+ * Documentation for "git merge --verify-signatures" has been updated
+   to clarify that the signature of only the commit at the tip is
+   verified.  Also the phrasing used for signature and key validity is
+   adjusted to align with that used by OpenPGP.
+
+ * On Windows, .git and optionally any files whose name starts with a
+   dot are now marked as hidden, with a core.hideDotFiles knob to
+   customize this behaviour.
+
+ * Portability enhancement for "rebase -i" to help platforms whose
+   shell does not like "for i in <empty>" (which is not POSIX-kosher).
+
+ * "git fsck" learned to catch NUL byte in a commit object as
+   potential error and warn.
+
+ * CI test was taught to build documentation pages.
+
+ * Many 'linkgit:<git documentation page>' references were broken,
+   which are all fixed with this.
+
+Also contains other minor documentation updates and code clean-ups.
index 53f00dbc267db194c7c5558a008fd9d8ec20068c..2e1b2e486e615981c14f7e591f3f32aa06cdee7a 100644 (file)
@@ -1956,7 +1956,10 @@ log.decorate::
        command. If 'short' is specified, the ref name prefixes 'refs/heads/',
        'refs/tags/' and 'refs/remotes/' will not be printed. If 'full' is
        specified, the full ref name (including prefix) will be printed.
-       This is the same as the log commands '--decorate' option.
+       If 'auto' is specified, then if the output is going to a terminal,
+       the ref names are shown as if 'short' were given, otherwise no ref
+       names are shown. This is the same as the '--decorate' option
+       of the `git log`.
 
 log.follow::
        If `true`, `git log` will act as if the `--follow` option was used when
index 03f958029ad7a35ec29f111217cd76ba21de9b5e..dec379b3e2bd58c74dba61a2a5207a38e702278c 100644 (file)
@@ -29,12 +29,14 @@ OPTIONS
        (works only for a single file).
 
 --no-decorate::
---decorate[=short|full|no]::
+--decorate[=short|full|auto|no]::
        Print out the ref names of any commits that are shown. If 'short' is
        specified, the ref name prefixes 'refs/heads/', 'refs/tags/' and
        'refs/remotes/' will not be printed. If 'full' is specified, the
-       full ref name (including prefix) will be printed. The default option
-       is 'short'.
+       full ref name (including prefix) will be printed. If 'auto' is
+       specified, then if the output is going to a terminal, the ref names
+       are shown as if 'short' were given, otherwise no ref names are
+       shown. The default option is 'short'.
 
 --source::
        Print out the ref name given on the command line by which each
index 771a7b5b09157cc1ac19d1f998600f96f1f9a470..edbba3a2ef4ca25827b3a22e7ab2effb50c92165 100644 (file)
@@ -450,6 +450,19 @@ edit ~/.gitconfig to specify your account settings:
                smtpUser = yourname@gmail.com
                smtpServerPort = 587
 
+If you have multifactor authentication setup on your gmail acocunt, you will
+need to generate an app-specific password for use with 'git send-email'. Visit
+https://security.google.com/settings/security/apppasswords to setup an
+app-specific password.  Once setup, you can store it with the credentials
+helper:
+
+       $ git credential fill
+       protocol=smtp
+       host=smtp.gmail.com
+       username=youname@gmail.com
+       password=app-password
+
+
 Once your commits are ready to be sent to the mailing list, run the
 following commands:
 
index 501ca97760b1f62ada876d372bd1abbbc41c6cd0..cb99df28142f164da62f5a728eb9019e57804157 100644 (file)
@@ -181,7 +181,7 @@ static void prepare_header(struct archiver_args *args,
        memcpy(header->magic, "ustar", 6);
        memcpy(header->version, "00", 2);
 
-       snprintf(header->chksum, sizeof(header->chksum), "%07o", ustar_header_chksum(header));
+       xsnprintf(header->chksum, sizeof(header->chksum), "%07o", ustar_header_chksum(header));
 }
 
 static int write_extended_header(struct archiver_args *args,
index 5dfa5ed61f49c4032d82c5825c0c43c86e04799f..3be60ce1c6fc0b5a6d96fdbe1101ed99e28b3585 100644 (file)
@@ -483,6 +483,7 @@ static size_t sizeof_ioinfo = 0;
 #define IOINFO_L2E 5
 #define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E)
 
+#define FPIPE 0x08
 #define FDEV  0x40
 
 static inline ioinfo* _pioinfo(int fd)
@@ -530,6 +531,45 @@ static HANDLE swap_osfhnd(int fd, HANDLE new_handle)
        return old_handle;
 }
 
+#ifdef DETECT_MSYS_TTY
+
+#include <winternl.h>
+#include <ntstatus.h>
+
+static void detect_msys_tty(int fd)
+{
+       ULONG result;
+       BYTE buffer[1024];
+       POBJECT_NAME_INFORMATION nameinfo = (POBJECT_NAME_INFORMATION) buffer;
+       PWSTR name;
+
+       /* check if fd is a pipe */
+       HANDLE h = (HANDLE) _get_osfhandle(fd);
+       if (GetFileType(h) != FILE_TYPE_PIPE)
+               return;
+
+       /* get pipe name */
+       if (!NT_SUCCESS(NtQueryObject(h, ObjectNameInformation,
+                       buffer, sizeof(buffer) - 2, &result)))
+               return;
+       name = nameinfo->Name.Buffer;
+       name[nameinfo->Name.Length] = 0;
+
+       /* check if this could be a MSYS2 pty pipe ('msys-XXXX-ptyN-XX') */
+       if (!wcsstr(name, L"msys-") || !wcsstr(name, L"-pty"))
+               return;
+
+       /* init ioinfo size if we haven't done so */
+       if (init_sizeof_ioinfo())
+               return;
+
+       /* set FDEV flag, reset FPIPE flag */
+       _pioinfo(fd)->osflags &= ~FPIPE;
+       _pioinfo(fd)->osflags |= FDEV;
+}
+
+#endif
+
 void winansi_init(void)
 {
        int con1, con2;
@@ -538,8 +578,15 @@ void winansi_init(void)
        /* check if either stdout or stderr is a console output screen buffer */
        con1 = is_console(1);
        con2 = is_console(2);
-       if (!con1 && !con2)
+       if (!con1 && !con2) {
+#ifdef DETECT_MSYS_TTY
+               /* check if stdin / stdout / stderr are MSYS2 pty pipes */
+               detect_msys_tty(0);
+               detect_msys_tty(1);
+               detect_msys_tty(2);
+#endif
                return;
+       }
 
        /* create a named pipe to communicate with the console thread */
        xsnprintf(name, sizeof(name), "\\\\.\\pipe\\winansi%lu", GetCurrentProcessId());
@@ -575,8 +622,11 @@ void winansi_init(void)
 HANDLE winansi_get_osfhandle(int fd)
 {
        HANDLE hnd = (HANDLE) _get_osfhandle(fd);
-       if ((fd == 1 || fd == 2) && isatty(fd)
-           && GetFileType(hnd) == FILE_TYPE_PIPE)
-               return (fd == 1) ? hconsole1 : hconsole2;
+       if (isatty(fd) && GetFileType(hnd) == FILE_TYPE_PIPE) {
+               if (fd == 1 && hconsole1)
+                       return hconsole1;
+               else if (fd == 2 && hconsole2)
+                       return hconsole2;
+       }
        return hnd;
 }
index 40d6b29eeef9a9b89b02100bb087fe9f37a3a7d6..a88f13989ac9c2cbb303e2ae5f9ed43c9a5f778f 100644 (file)
@@ -557,7 +557,8 @@ else
                        BASIC_LDFLAGS += -Wl,--large-address-aware
                endif
                CC = gcc
-               COMPAT_CFLAGS += -D__USE_MINGW_ANSI_STDIO=0
+               COMPAT_CFLAGS += -D__USE_MINGW_ANSI_STDIO=0 -DDETECT_MSYS_TTY
+               EXTLIBS += -lntdll
                INSTALL = /bin/install
                NO_R_TO_GCC_LINKER = YesPlease
                INTERNAL_QSORT = YesPlease