Mark quit() and die() __noreturn
[tig] / tig.c
diff --git a/tig.c b/tig.c
index 52dac31..c3ed1f1 100644 (file)
--- a/tig.c
+++ b/tig.c
@@ -32,7 +32,7 @@
  **/
 
 #ifndef        VERSION
-#define VERSION        "tig-0.1"
+#define VERSION        "tig-0.3"
 #endif
 
 #ifndef DEBUG
@@ -146,7 +146,7 @@ struct commit {
  */
 
 static inline void
-string_ncopy(char *dst, char *src, int dstlen)
+string_ncopy(char *dst, const char *src, int dstlen)
 {
        strncpy(dst, src, dstlen - 1);
        dst[dstlen - 1] = 0;
@@ -458,7 +458,7 @@ enum line_type {
 };
 
 struct line_info {
-       char *line;             /* The start of line to match. */
+       const char *line;       /* The start of line to match. */
        int linelen;            /* Size of string to match. */
        int fg, bg, attr;       /* Color and text attributes for the lines. */
 };
@@ -542,7 +542,7 @@ init_colors(void)
  **/
 
 #define TIG_LS_REMOTE \
-       "git ls-remote ."
+       "git ls-remote . 2>/dev/null"
 
 /**
  * [[view-commands]]
@@ -586,7 +586,7 @@ init_colors(void)
 /* ... silently ignore that the following are also exported. */
 
 #define TIG_HELP_CMD \
-       "man tig 2> /dev/null"
+       "man tig 2>/dev/null"
 
 #define TIG_PAGER_CMD \
        ""
@@ -624,15 +624,15 @@ init_colors(void)
 
 struct view {
        const char *name;       /* View name */
-       char *cmd_fmt;          /* Default command line format */
-       char *cmd_env;          /* Command line set via environment */
-       char *id;               /* Points to either of ref_{head,commit} */
+       const char *cmd_fmt;    /* Default command line format */
+       const char *cmd_env;    /* Command line set via environment */
+       const char *id;         /* Points to either of ref_{head,commit} */
        size_t objsize;         /* Size of objects in the line index */
 
        struct view_ops {
                /* What type of content being displayed. Used in the
                 * title bar. */
-               char *type;
+               const char *type;
                /* Draw one line; @lineno must be < view->height. */
                bool (*draw)(struct view *view, unsigned int lineno);
                /* Read one line; updates view->line. */
@@ -987,7 +987,7 @@ move_view(struct view *view, enum request request)
 static bool
 begin_update(struct view *view)
 {
-       char *id = view->id;
+       const char *id = view->id;
 
        if (opt_cmd[0]) {
                string_copy(view->cmd, opt_cmd);
@@ -996,7 +996,7 @@ begin_update(struct view *view)
                 * invalid so clear it. */
                view->ref[0] = 0;
        } else {
-               char *format = view->cmd_env ? view->cmd_env : view->cmd_fmt;
+               const char *format = view->cmd_env ? view->cmd_env : view->cmd_fmt;
 
                if (snprintf(view->cmd, sizeof(view->cmd), format,
                             id, id, id, id, id) >= sizeof(view->cmd))
@@ -1125,7 +1125,7 @@ update_view(struct view *view)
                time_t secs = time(NULL) - view->start_time;
 
                if (view == VIEW(REQ_VIEW_HELP)) {
-                       char *msg = TIG_HELP;
+                       const char *msg = TIG_HELP;
 
                        if (view->lines == 0) {
                                /* Slightly ugly, but abusing view->ref keeps
@@ -1959,8 +1959,8 @@ get_refs(char *id)
 static int
 load_refs(void)
 {
-       char *cmd_env = getenv("TIG_LS_REMOTE");
-       char *cmd = cmd_env && *cmd_env ? cmd_env : TIG_LS_REMOTE;
+       const char *cmd_env = getenv("TIG_LS_REMOTE");
+       const char *cmd = cmd_env && *cmd_env ? cmd_env : TIG_LS_REMOTE;
        FILE *pipe = popen(cmd, "r");
        char buffer[BUFSIZ];
        char *line;
@@ -2021,6 +2021,9 @@ load_refs(void)
 
        pclose(pipe);
 
+       if (refs_size == 0)
+               die("Not a git repository");
+
        return OK;
 }
 
@@ -2028,7 +2031,13 @@ load_refs(void)
  * Main
  */
 
-static void
+#if __GNUC__ >= 3
+#define __NORETURN __attribute__((__noreturn__))
+#else
+#define __NORETURN
+#endif
+
+static void __NORETURN
 quit(int sig)
 {
        /* XXX: Restore tty modes and let the OS cleanup the rest! */
@@ -2037,7 +2046,7 @@ quit(int sig)
        exit(0);
 }
 
-static void die(const char *err, ...)
+static void __NORETURN die(const char *err, ...)
 {
        va_list args;
 
@@ -2155,7 +2164,7 @@ main(int argc, char *argv[])
  * have a file named 'master' it will clash with the reference named
  * 'master', and thus you will have to use:
  *
- *     $ tag log -- master
+ *     $ tig log -- master
  *
  * NOTE: For the main view, avoiding ambiguity will in some cases require
  * you to specify two "\--" options. The first will make tig(1) stop
@@ -2170,10 +2179,11 @@ main(int argc, char *argv[])
  * If you are only interested in changed that happened between two dates
  * you can use:
  *
- *     $ tig -- --after=may.5th --before=2006-05-16.15:44
+ *     $ tig -- --after=May.5th --before=2006-05-16.15:44
  *
  * NOTE: The dot (".") is used as a separator instead of a space to avoid
- * having to quote the option value.
+ * having to quote the option value. If you prefer use `--after="May 5th"`
+ * instead of `--after="May 5th"`.
  *
  * Limiting by commit ranges
  * ~~~~~~~~~~~~~~~~~~~~~~~~~