]> git.ipfire.org Git - thirdparty/git.git/blobdiff - strbuf.c
object-name.h: move declarations for object-name.c functions from cache.h
[thirdparty/git.git] / strbuf.c
index b22e9816559cabc4f3d94f7f42cde5a50f32495a..1b93d9d3c4741003c346891cfeb04c313192ef88 100644 (file)
--- a/strbuf.c
+++ b/strbuf.c
@@ -1,7 +1,15 @@
 #include "cache.h"
+#include "abspath.h"
+#include "alloc.h"
+#include "environment.h"
+#include "gettext.h"
+#include "hex.h"
+#include "object-name.h"
 #include "refs.h"
 #include "string-list.h"
 #include "utf8.h"
+#include "date.h"
+#include "wrapper.h"
 
 int starts_with(const char *str, const char *prefix)
 {
@@ -435,7 +443,7 @@ void strbuf_expand(struct strbuf *sb, const char *format, expand_fn_t fn,
 
 size_t strbuf_expand_literal_cb(struct strbuf *sb,
                                const char *placeholder,
-                               void *context)
+                               void *context UNUSED)
 {
        int ch;
 
@@ -874,9 +882,9 @@ static void strbuf_humanise(struct strbuf *buf, off_t bytes,
                strbuf_addf(buf,
                                humanise_rate == 0 ?
                                        /* TRANSLATORS: IEC 80000-13:2008 byte */
-                                       Q_("%u byte", "%u bytes", (unsigned)bytes) :
+                                       Q_("%u byte", "%u bytes", bytes) :
                                        /* TRANSLATORS: IEC 80000-13:2008 byte/second */
-                                       Q_("%u byte/s", "%u bytes/s", (unsigned)bytes),
+                                       Q_("%u byte/s", "%u bytes/s", bytes),
                                (unsigned)bytes);
        }
 }
@@ -1006,7 +1014,12 @@ void strbuf_addftime(struct strbuf *sb, const char *fmt, const struct tm *tm,
 
        /*
         * There is no portable way to pass timezone information to
-        * strftime, so we handle %z and %Z here.
+        * strftime, so we handle %z and %Z here. Likewise '%s', because
+        * going back to an epoch time requires knowing the zone.
+        *
+        * Note that tz_offset is in the "[-+]HHMM" decimal form; this is what
+        * we want for %z, but the computation for %s has to convert to number
+        * of seconds.
         */
        for (;;) {
                const char *percent = strchrnul(fmt, '%');
@@ -1019,6 +1032,13 @@ void strbuf_addftime(struct strbuf *sb, const char *fmt, const struct tm *tm,
                        strbuf_addstr(&munged_fmt, "%%");
                        fmt++;
                        break;
+               case 's':
+                       strbuf_addf(&munged_fmt, "%"PRItime,
+                                   (timestamp_t)tm_to_time_t(tm) -
+                                   3600 * (tz_offset / 100) -
+                                   60 * (tz_offset % 100));
+                       fmt++;
+                       break;
                case 'z':
                        strbuf_addf(&munged_fmt, "%+05d", tz_offset);
                        fmt++;
@@ -1187,3 +1207,9 @@ int strbuf_edit_interactively(struct strbuf *buffer, const char *path,
        free(path2);
        return res;
 }
+
+void strbuf_strip_file_from_path(struct strbuf *sb)
+{
+       char *path_sep = find_last_dir_sep(sb->buf);
+       strbuf_setlen(sb, path_sep ? path_sep - sb->buf + 1 : 0);
+}