source: trunk/lib/File.h @ 1234

Last change on this file since 1234 was 1234, checked in by Peter Johansson, 12 years ago

refs #476. Merged visitor branch into trunk. Used 'svn merge /branches/visitor' because --reintegrate did (currently) not work on our repo. Since I could not merge as suggested in subversion manual, I reverted all mergeinfo properties to avoid future confusion by svn-client. This means (I think) that there will be no connection about this commit and the visitor branch, but to svn-client this will look like a large changeset (just like a merge in the old days).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.8 KB
Line 
1#ifndef _theplu_svndigest_file_
2#define _theplu_svndigest_file_
3
4// $Id: File.h 1234 2010-10-23 16:41:33Z peter $
5
6/*
7  Copyright (C) 2005, 2006, 2007, 2008 Jari Häkkinen, Peter Johansson
8  Copyright (C) 2009 Peter Johansson
9
10  This file is part of svndigest, http://dev.thep.lu.se/svndigest
11
12  svndigest is free software; you can redistribute it and/or modify it
13  under the terms of the GNU General Public License as published by
14  the Free Software Foundation; either version 3 of the License, or
15  (at your option) any later version.
16
17  svndigest is distributed in the hope that it will be useful, but
18  WITHOUT ANY WARRANTY; without even the implied warranty of
19  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20  General Public License for more details.
21
22  You should have received a copy of the GNU General Public License
23  along with svndigest. If not, see <http://www.gnu.org/licenses/>.
24*/
25
26#include "Node.h"
27
28#include <map>
29#include <string>
30
31namespace theplu{
32namespace svndigest{
33
34  class NodeVisitor;
35
36  class File : public Node
37  {
38  public:
39    ///
40    /// @brief Default Constructor
41    ///
42    File(const unsigned int level, const std::string& path, 
43         const std::string& output=""); 
44
45    /**
46       For example 'File.h.html'
47
48       @return href to this file
49    */
50    std::string href(void) const;
51
52    /**
53       \brief Get the revision number of the latest commit.
54    */
55    svn_revnum_t last_changed_rev(void) const;
56
57    /**
58       @return The explicit string "file", nothing else.
59    */
60    std::string node_type(void) const;
61
62    /**
63       @return output path for example 'lib/File.h.html' for this file
64     */
65    std::string output_path(void) const;
66
67    ///
68    /// @brief Parsing out information from svn repository
69    ///
70    /// @return Stats object of the file
71    ///
72    const StatsCollection& parse(bool verbose, bool ignore);
73
74    using Node::print_copyright;
75    /**
76       @throw std::runtime_error when a file error is encountered
77       updating the copyrights.
78    */
79    void print_copyright(std::map<std::string, Alias>&, bool verbose,
80                         const std::map<int, svn_revnum_t>&) const;
81
82    /**
83       Let the visitor perform its mission via visitor(*this)
84     */
85    void traverse(NodeVisitor& visitor);
86
87  private:
88    std::string blame_output_file_name(void) const;
89
90    /**
91       do nothing
92    */
93    void log_core(SVNlog&) const;
94
95    ///
96    /// @brief Copy Constructor, not implemented
97    ///
98    File(const File&);
99
100    ///
101    /// @brief Parsing svn blame output
102    ///
103    /// @return true if parsing is succesful
104    ///
105    bool blame(void) const;
106
107    /**
108       \return copyright block
109     */
110    std::string copyright_block(const std::map<int, std::set<Alias> >& map,
111                                const std::string& prefix) const;
112
113    /**
114       Create a map from year to set of authors.
115     */
116    std::map<int, std::set<Alias> > 
117    copyright_map(std::map<std::string, Alias>& alias,
118                  const std::map<int, svn_revnum_t>&) const;
119
120    /**
121       Create a map from year to set of authors.
122
123       \return true if Copyright block is found
124     */
125    bool detect_copyright(std::string& block, size_t& start_at_line,
126                          size_t& end_at_line, std::string& prefix) const;
127
128    /**
129       @brief Print blame output
130    */
131    void print_blame(std::ofstream& os) const;
132
133    void print_core(bool verbose=false) const;
134
135    ///
136    /// print page for specific user (or all) and specific line_style
137    /// (or total).
138    ///
139    void print_core(const std::string& stats_type, const std::string& user, 
140                    const std::string& line_type, const SVNlog&) const; 
141
142    /**
143       Doing the actual print of copyright statement
144
145       \param block new copyright block
146       \param start_at_line line number of first line in old block
147       \param end_at_line line number of first line after old block
148     */
149    void update_copyright(const std::string& block,
150                          size_t start_at_line, size_t end_at_line) const;
151  };
152
153}} // end of namespace svndigest and namespace theplu
154
155#endif
156
157
Note: See TracBrowser for help on using the repository browser.