source: branches/0.6-stable/lib/SVNlog.h @ 430

Last change on this file since 430 was 430, checked in by Peter Johansson, 14 years ago

changing lev.thep.lu.se to trac.thep.lu.se

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.6 KB
Line 
1#ifndef _theplu_svndigest_svnlog_
2#define _theplu_svndigest_svnlog_
3
4// $Id: SVNlog.h 430 2007-07-06 23:33:11Z peter $
5
6/*
7  Copyright (C) 2007 Jari Häkkinen, Peter Johansson
8
9  This file is part of svndigest, http://trac.thep.lu.se/trac/svndigest
10
11  svndigest is free software; you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation; either version 2 of the License, or
14  (at your option) any later version.
15
16  svndigest is distributed in the hope that it will be useful, but
17  WITHOUT ANY WARRANTY; without even the implied warranty of
18  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  General Public License for more details.
20
21  You should have received a copy of the GNU General Public License
22  along with this program; if not, write to the Free Software
23  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
24  02111-1307, USA.
25*/
26
27#include "SVN.h"
28
29#include "Commitment.h"
30
31#include <string>
32#include <vector>
33
34#include <subversion-1/svn_client.h>
35
36namespace theplu {
37namespace svndigest {
38
39  class SVN;
40
41  /**
42     The SVNlog class is a utility class for taking care of 'svn
43     log' information. An 'svn log' is performed on an item, the
44     log information for each revision is stored in vectors.
45  */
46  class SVNlog {
47  public:
48
49    /**
50       \brief The contructor.
51       
52       The constructor performs an 'svn log' on \a path and
53       stores the information for later access.
54    */
55    explicit SVNlog(const std::string& path);
56
57    /**
58       \brief The destructor.
59    */
60    ~SVNlog(void);
61
62    /**
63       \return Authors
64    */
65    inline const std::vector<std::string>& author(void) const
66    { return lb_.authors; }
67
68    /**
69       \return Dates
70    */
71    inline const std::vector<std::string>& date(void) const
72    { return lb_.commit_dates; }
73
74    /**
75       \return true if \a author appears in log.
76    */
77    bool exist(std::string author) const;
78
79    /**
80       \return Messages
81    */
82    inline const std::vector<std::string>& message(void) const
83    { return lb_.msg; }
84
85    /**
86       \return Latest commit
87    */
88    Commitment latest_commit(void) const;
89
90    /**
91       \return Latest commit \a author did. If no author is found an
92       empty Commitment (default constructor) is returned.
93    */
94    Commitment latest_commit(std::string author) const;
95
96    /**
97       \return Revisions
98    */
99    inline const std::vector<size_t>& revision(void) const
100    { return lb_.rev; }
101
102  private:
103
104    ///
105    /// @brief Copy Constructor, not implemented.
106    ///
107    SVNlog(const SVNlog&);
108
109    /**
110       log information is stored in the log_receiver_baton. The
111       information is retrieved with the info_* set of member
112       functions. The struct is filled in the info_receiver function.
113
114       \see info_receiver
115    */
116    struct log_receiver_baton {
117      std::vector<std::string> authors;
118      std::vector<std::string> commit_dates;
119      std::vector<std::string> msg;
120      std::vector<size_t> rev;
121    } lb_;
122
123    /**
124       info_receiver is the function passed to the underlying
125       subversion API. This function is called by the subversion API
126       for every item matched by the conditions of the API call.
127
128       \see Subversion API documentation
129    */
130    // The return type should be svn_log_message_receiver_t but I
131    // cannot get it to compile. The svn API has a typedef like
132    // typedef svn_error_t*(* svn_log_message_receiver_t)(void *baton,
133    // apr_hash_t *changed_paths, svn_revnum_t revision, const char
134    // *author, const char *date,const char *message, apr_pool_t
135    // *pool) for svn_log_message_receiver_t.
136    static svn_error_t*
137    log_message_receiver(void *baton, apr_hash_t *changed_paths,
138                         svn_revnum_t rev, const char *author, const char *date,
139                         const char *msg, apr_pool_t *pool);
140  };
141
142}} // end of namespace svndigest and namespace theplu
143
144#endif
Note: See TracBrowser for help on using the repository browser.