⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 log-cmd.c

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * log-cmd.c -- Display log messages * * ==================================================================== * Copyright (c) 2000-2004 CollabNet.  All rights reserved. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution.  The terms * are also available at http://subversion.tigris.org/license-1.html. * If newer versions of this license are posted there, you may use a * newer version instead, at your option. * * This software consists of voluntary contributions made by many * individuals.  For exact contribution history, see the revision * history and logs, available at http://subversion.tigris.org/. * ==================================================================== *//* ==================================================================== *//*** Includes. ***/#define APR_WANT_STRFUNC#define APR_WANT_STDIO#include <apr_want.h>#include "svn_client.h"#include "svn_string.h"#include "svn_path.h"#include "svn_error.h"#include "svn_sorts.h"#include "svn_xml.h"#include "svn_time.h"#include "svn_cmdline.h"#include "cl.h"#include "svn_private_config.h"/*** Code. ***//* Baton for log_message_receiver() and log_message_receiver_xml(). */struct log_receiver_baton{  /* Check for cancellation on each invocation of a log receiver. */  svn_cancel_func_t cancel_func;  void *cancel_baton;  /* Don't print log message body nor its line count. */  svn_boolean_t omit_log_message;};/* The separator between log messages. */#define SEP_STRING \  "------------------------------------------------------------------------\n"/* Implement `svn_log_message_receiver_t', printing the logs in * a human-readable and machine-parseable format.   * * BATON is of type `struct log_receiver_baton'. * * First, print a header line.  Then if CHANGED_PATHS is non-null, * print all affected paths in a list headed "Changed paths:\n", * immediately following the header line.  Then print a newline * followed by the message body, unless BATON->omit_log_message is true. * * Here are some examples of the output: * * $ svn log -r1847:1846 * ------------------------------------------------------------------------ * rev 1847:  cmpilato | Wed 1 May 2002 15:44:26 | 7 lines *  * Fix for Issue #694. *  * * subversion/libsvn_repos/delta.c *   (delta_files): Rework the logic in this function to only call * send_text_deltas if there are deltas to send, and within that case, * only use a real delta stream if the caller wants real text deltas. *  * ------------------------------------------------------------------------ * rev 1846:  whoever | Wed 1 May 2002 15:23:41 | 1 line *    * imagine an example log message here * ------------------------------------------------------------------------ *  * Or: * * $ svn log -r1847:1846 -v * ------------------------------------------------------------------------ * rev 1847:  cmpilato | Wed 1 May 2002 15:44:26 | 7 lines * Changed paths: *    M /trunk/subversion/libsvn_repos/delta.c *  * Fix for Issue #694. *  * * subversion/libsvn_repos/delta.c *   (delta_files): Rework the logic in this function to only call * send_text_deltas if there are deltas to send, and within that case, * only use a real delta stream if the caller wants real text deltas. *  * ------------------------------------------------------------------------ * rev 1846:  whoever | Wed 1 May 2002 15:23:41 | 1 line * Changed paths: *    M /trunk/notes/fs_dumprestore.txt *    M /trunk/subversion/libsvn_repos/dump.c *    * imagine an example log message here * ------------------------------------------------------------------------ *  * Or: * * $ svn log -r1847:1846 -q * ------------------------------------------------------------------------ * rev 1847:  cmpilato | Wed 1 May 2002 15:44:26 * ------------------------------------------------------------------------ * rev 1846:  whoever | Wed 1 May 2002 15:23:41 * ------------------------------------------------------------------------ * * Or: * * $ svn log -r1847:1846 -qv * ------------------------------------------------------------------------ * rev 1847:  cmpilato | Wed 1 May 2002 15:44:26 * Changed paths: *    M /trunk/subversion/libsvn_repos/delta.c * ------------------------------------------------------------------------ * rev 1846:  whoever | Wed 1 May 2002 15:23:41 * Changed paths: *    M /trunk/notes/fs_dumprestore.txt *    M /trunk/subversion/libsvn_repos/dump.c * ------------------------------------------------------------------------ * */static svn_error_t *log_message_receiver(void *baton,                     apr_hash_t *changed_paths,                     svn_revnum_t rev,                     const char *author,                     const char *date,                     const char *msg,                     apr_pool_t *pool){  struct log_receiver_baton *lb = baton;  /* Number of lines in the msg. */  int lines;  if (lb->cancel_func)    SVN_ERR(lb->cancel_func(lb->cancel_baton));  if (rev == 0 && msg == NULL)    return SVN_NO_ERROR;  /* ### See http://subversion.tigris.org/issues/show_bug.cgi?id=807     for more on the fallback fuzzy conversions below. */  if (author == NULL)    author = _("(no author)");  if (date && date[0])    {      /* Convert date to a format for humans. */      apr_time_t time_temp;            SVN_ERR(svn_time_from_cstring(&time_temp, date, pool));      date = svn_time_to_human_cstring(time_temp, pool);    }  else    date = _("(no date)");  if (! lb->omit_log_message && msg == NULL)    msg = "";  SVN_ERR(svn_cmdline_printf(pool,                             SEP_STRING "r%ld | %s | %s",                             rev, author, date));  if (! lb->omit_log_message)    {      lines = svn_cstring_count_newlines(msg) + 1;      SVN_ERR(svn_cmdline_printf(pool,                                 (lines != 1)                                 ? " | %d lines"                                 : " | %d line", lines));    }  SVN_ERR(svn_cmdline_printf(pool, "\n"));  if (changed_paths)    {      apr_array_header_t *sorted_paths;      int i;      /* Get an array of sorted hash keys. */      sorted_paths = svn_sort__hash(changed_paths,                                    svn_sort_compare_items_as_paths, pool);      SVN_ERR(svn_cmdline_printf(pool,                                 _("Changed paths:\n")));      for (i = 0; i < sorted_paths->nelts; i++)        {          svn_sort__item_t *item = &(APR_ARRAY_IDX(sorted_paths, i,                                                   svn_sort__item_t));          const char *path = item->key;          svn_log_changed_path_t *log_item             = apr_hash_get(changed_paths, item->key, item->klen);          const char *copy_data = "";                    if (log_item->copyfrom_path               && SVN_IS_VALID_REVNUM(log_item->copyfrom_rev))            {              copy_data                 = apr_psprintf(pool,                                _(" (from %s:%ld)"),                               log_item->copyfrom_path,                               log_item->copyfrom_rev);            }          SVN_ERR(svn_cmdline_printf(pool, "   %c %s%s\n",                                     log_item->action, path,                                     copy_data));        }    }  if (! lb->omit_log_message)    {      /* A blank line always precedes the log message. */      SVN_ERR(svn_cmdline_printf(pool, "\n%s\n", msg));    }  SVN_ERR(svn_cmdline_fflush(stdout));  return SVN_NO_ERROR;}/* This implements `svn_log_message_receiver_t', printing the logs in XML. * * BATON is of type `struct log_receiver_baton'. * * Here is an example of the output; note that the "<log>" and * "</log>" tags are not emitted by this function: *  * $ svn log --xml -r 1648:1649 * <log> * <logentry *    revision="1648"> * <author>david</author> * <date>2002-04-06T16:34:51.428043Z</date> * <msg> * packages/rpm/subversion.spec : Now requires apache 2.0.36. * </msg> * </logentry> * <logentry *    revision="1649"> * <author>cmpilato</author> * <date>2002-04-06T17:01:28.185136Z</date> * <msg>Fix error handling when the $EDITOR is needed but unavailable.  Ah * ... now that&apos;s *much* nicer. *  * * subversion/clients/cmdline/util.c *   (svn_cl__edit_externally): Clean up the &quot;no external editor&quot; *   error message. *   (svn_cl__get_log_message): Wrap &quot;no external editor&quot;  *   errors with helpful hints about the -m and -F options. *  * * subversion/libsvn_client/commit.c *   (svn_client_commit): Actually capture and propogate &quot;no external *   editor&quot; errors.</msg>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -