[arch-commits] Commit in consolekit/trunk (PKGBUILD add_since_option.patch)

Jan de Groot jgc at archlinux.org
Tue Aug 10 18:29:17 UTC 2010


    Date: Tuesday, August 10, 2010 @ 14:29:16
  Author: jgc
Revision: 87085

Add --since option from git master

Added:
  consolekit/trunk/add_since_option.patch
Modified:
  consolekit/trunk/PKGBUILD

------------------------+
 PKGBUILD               |    5 -
 add_since_option.patch |  220 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 224 insertions(+), 1 deletion(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2010-08-10 18:27:07 UTC (rev 87084)
+++ PKGBUILD	2010-08-10 18:29:16 UTC (rev 87085)
@@ -4,7 +4,7 @@
 
 pkgname=consolekit
 pkgver=0.4.1
-pkgrel=3
+pkgrel=4
 pkgdesc="A framework for defining and tracking users, login sessions, and seats"
 arch=('i686' 'x86_64')
 url="http://www.freedesktop.org/wiki/Software/ConsoleKit"
@@ -16,17 +16,20 @@
         pam-foreground-compat.ck
         nodaemon.patch
         reorder-initialization.patch
+        add_since_option.patch
         consolekit.logrotate)
 md5sums=('48eda4483cc97841d5f88e8e003eb6d7'
          'a8a4de71d9b0549b8143e5f6c2a36fc7'
          'a5bfd56bc89411ff5bb18276a68cb212'
          '99fa8cb1bf232050cc0c076378e216c5'
+         'bd5e72397fe2d42a933a897d28d58155'
          '6fefa451d9fe2fc6d6269629d3529793')
 
 build() {
   cd "${srcdir}/ConsoleKit-${pkgver}"
   patch -Np1 -i "${srcdir}/nodaemon.patch"
   patch -Np1 -i "${srcdir}/reorder-initialization.patch"
+  patch -Np1 -i "${srcdir}/add_since_option.patch"
   ./configure --prefix=/usr \
       --sysconfdir=/etc \
       --localstatedir=/var \

Added: add_since_option.patch
===================================================================
--- add_since_option.patch	                        (rev 0)
+++ add_since_option.patch	2010-08-10 18:29:16 UTC (rev 87085)
@@ -0,0 +1,220 @@
+From c9f2292339540d4b9d8940bcef16b7485480c8d9 Mon Sep 17 00:00:00 2001
+From: William Jon McCann <jmccann at redhat.com>
+Date: Fri, 11 Jun 2010 19:53:22 +0000
+Subject: Add a --since option to show entries in a time window
+
+Doesn't load any history files it doesn't need to which should
+help performance on systems with long histories.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=25660
+---
+diff --git a/tools/ck-history.c b/tools/ck-history.c
+index 606106c..d02caaa 100644
+--- a/tools/ck-history.c
++++ b/tools/ck-history.c
+@@ -62,8 +62,8 @@ typedef enum {
+ 
+ static GList *all_events = NULL;
+ 
+-static gboolean
+-process_event_line (const char *line)
++static CkLogEvent *
++parse_event_line (const char *line)
+ {
+         GString    *str;
+         CkLogEvent *event;
+@@ -72,47 +72,80 @@ process_event_line (const char *line)
+         event = ck_log_event_new_from_string (str);
+         g_string_free (str, TRUE);
+ 
+-        if (event != NULL) {
+-                all_events = g_list_prepend (all_events, event);
+-        }
+-
+-        return TRUE;
++        return event;
+ }
+ 
+ static gboolean
+-process_log_gzstream (gzFile *fstream)
++process_log_gzstream (gzFile   *fstream,
++                      GTimeVal *since)
+ {
+-        char line[MAX_LINE_LEN];
++        char     line[MAX_LINE_LEN];
++        gboolean hit_since;
++        GList   *events;
+ 
++        events = NULL;
++        hit_since = FALSE;
+         while (gzgets (fstream, line, sizeof (line)) != Z_NULL) {
++                CkLogEvent *event;
++
+                 if (strlen (line) == sizeof (line) - 1) {
+                         g_warning ("Log line truncated");
+                 }
+ 
+-                process_event_line (line);
++                event = parse_event_line (line);
++                if (event == NULL) {
++                        continue;
++                }
++
++                if (since == NULL || event->timestamp.tv_sec >= since->tv_sec) {
++                        events = g_list_prepend (events, event);
++                } else {
++                        hit_since = TRUE;
++                }
+         }
+ 
+-        return TRUE;
++        all_events = g_list_concat (all_events, events);
++
++        return !hit_since;
+ }
+ 
+ static gboolean
+-process_log_stream (FILE *fstream)
++process_log_stream (FILE     *fstream,
++                    GTimeVal *since)
+ {
+-        char line[MAX_LINE_LEN];
++        char     line[MAX_LINE_LEN];
++        gboolean hit_since;
++        GList   *events;
+ 
++        events = NULL;
++        hit_since = FALSE;
+         while (fgets (line, sizeof (line), fstream) != NULL) {
++                CkLogEvent *event;
++
+                 if (strlen (line) == sizeof (line) - 1) {
+                         g_warning ("Log line truncated");
+                 }
+ 
+-                process_event_line (line);
++                event = parse_event_line (line);
++                if (event == NULL) {
++                        continue;
++                }
++
++                if (since == NULL || event->timestamp.tv_sec >= since->tv_sec) {
++                        events = g_list_prepend (events, event);
++                } else {
++                        hit_since = TRUE;
++                }
+         }
+ 
+-        return TRUE;
++        all_events = g_list_concat (all_events, events);
++
++        return !hit_since;
+ }
+ 
+ static gboolean
+-process_log_file (const char *filename)
++process_log_file (const char *filename,
++                  GTimeVal   *since)
+ {
+         gboolean ret;
+ 
+@@ -131,7 +164,7 @@ process_log_file (const char *filename)
+                                    errmsg);
+                         return FALSE;
+                 }
+-                ret = process_log_gzstream (f);
++                ret = process_log_gzstream (f, since);
+                 gzclose (f);
+         } else {
+                 FILE    *f;
+@@ -143,7 +176,7 @@ process_log_file (const char *filename)
+                                    g_strerror (errno));
+                         return FALSE;
+                 }
+-                ret = process_log_stream (f);
++                ret = process_log_stream (f, since);
+                 fclose (f);
+         }
+ 
+@@ -180,11 +213,14 @@ get_log_file_list (void)
+                 files = g_list_prepend (files, filename);
+         };
+ 
++        /* Return the list in reverse time order, newest first */
++        files = g_list_reverse (files);
++
+         return files;
+ }
+ 
+ static gboolean
+-process_logs (void)
++process_logs (GTimeVal *since)
+ {
+         gboolean ret;
+         GList   *files;
+@@ -199,8 +235,7 @@ process_logs (void)
+                 char    *filename;
+ 
+                 filename = l->data;
+-
+-                res = process_log_file (filename);
++                res = process_log_file (filename, since);
+                 if (! res) {
+                         goto out;
+                 }
+@@ -843,6 +878,8 @@ main (int    argc,
+         GError             *error = NULL;
+         int                 report_type;
+         int                 uid;
++        GTimeVal            timestamp;
++        gboolean            use_since;
+         static gboolean     do_version = FALSE;
+         static gboolean     report_last_compat = FALSE;
+         static gboolean     report_last = FALSE;
+@@ -851,6 +888,7 @@ main (int    argc,
+         static char        *username = NULL;
+         static char        *seat = NULL;
+         static char        *session_type = NULL;
++        static char        *since = NULL;
+         static GOptionEntry entries [] = {
+                 { "version", 'V', 0, G_OPTION_ARG_NONE, &do_version, N_("Version of this application"), NULL },
+                 { "frequent", 0, 0, G_OPTION_ARG_NONE, &report_frequent, N_("Show listing of frequent users"), NULL },
+@@ -860,6 +898,7 @@ main (int    argc,
+                 { "seat", 's', 0, G_OPTION_ARG_STRING, &seat, N_("Show entries for the specified seat"), N_("SEAT") },
+                 { "session-type", 't', 0, G_OPTION_ARG_STRING, &session_type, N_("Show entries for the specified session type"), N_("TYPE") },
+                 { "user", 'u', 0, G_OPTION_ARG_STRING, &username, N_("Show entries for the specified user"), N_("NAME") },
++                { "since", 0, 0, G_OPTION_ARG_STRING, &since, N_("Show entries since the specified time (ISO 8601 format)"), N_("DATETIME") },
+                 { NULL }
+         };
+ 
+@@ -880,6 +919,15 @@ main (int    argc,
+                 exit (1);
+         }
+ 
++        use_since = FALSE;
++        if (since != NULL) {
++                use_since = g_time_val_from_iso8601 (since, &timestamp);
++                if (! use_since) {
++                        g_warning ("Invalid ISO 8601 time value");
++                        exit (1);
++                }
++        }
++
+         if (report_last_compat) {
+                 report_type = REPORT_TYPE_LAST_COMPAT;
+         } else if (report_last) {
+@@ -902,7 +950,11 @@ main (int    argc,
+                 uid = -1;
+         }
+ 
+-        process_logs ();
++        if (use_since) {
++                process_logs (&timestamp);
++        } else {
++                process_logs (NULL);
++        }
+         generate_report (report_type, uid, seat, session_type);
+         free_events ();
+ 
+--
+cgit v0.8.3-6-g21f6




More information about the arch-commits mailing list