bin/svndigestParameter.cc

Code
Comments
Other
Rev Date Author Line
37 13 Jan 06 peter 1 // $Id$
37 13 Jan 06 peter 2
84 13 Mar 06 jari 3 /*
978 12 Dec 09 peter 4   Copyright (C) 2006, 2007, 2008 Jari Häkkinen, Peter Johansson
1515 26 Sep 12 peter 5   Copyright (C) 2009, 2010, 2012 Peter Johansson
84 13 Mar 06 jari 6
687 04 Aug 08 peter 7   This file is part of svndigest, http://dev.thep.lu.se/svndigest
84 13 Mar 06 jari 8
149 12 Aug 06 jari 9   svndigest is free software; you can redistribute it and/or modify it
84 13 Mar 06 jari 10   under the terms of the GNU General Public License as published by
693 11 Sep 08 jari 11   the Free Software Foundation; either version 3 of the License, or
84 13 Mar 06 jari 12   (at your option) any later version.
84 13 Mar 06 jari 13
149 12 Aug 06 jari 14   svndigest is distributed in the hope that it will be useful, but
84 13 Mar 06 jari 15   WITHOUT ANY WARRANTY; without even the implied warranty of
149 12 Aug 06 jari 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
84 13 Mar 06 jari 17   General Public License for more details.
84 13 Mar 06 jari 18
84 13 Mar 06 jari 19   You should have received a copy of the GNU General Public License
693 11 Sep 08 jari 20   along with svndigest. If not, see <http://www.gnu.org/licenses/>.
84 13 Mar 06 jari 21 */
84 13 Mar 06 jari 22
960 07 Dec 09 peter 23 #include <config.h>  // this header file is created by configure
960 07 Dec 09 peter 24
1060 02 Jun 10 peter 25 #include "svndigestParameter.h"
234 09 Apr 07 peter 26
1119 04 Jul 10 peter 27 #include "lib/OptionVersion.h"
1119 04 Jul 10 peter 28 #include "lib/utility.h"
795 30 Jun 09 peter 29
1060 02 Jun 10 peter 30 #ifdef HAVE_PLPLOT
1060 02 Jun 10 peter 31 #include <plplot/plstream.h>
1060 02 Jun 10 peter 32 #endif
1060 02 Jun 10 peter 33
1673 26 Aug 23 peter 34 #include <yat/utility/ColumnStream.h>
1673 26 Aug 23 peter 35 #include <yat/utility/Exception.h>
1673 26 Aug 23 peter 36 #include <yat/utility/OptionArg.h>
1673 26 Aug 23 peter 37 #include <yat/utility/OptionHelp.h>
1673 26 Aug 23 peter 38 #include <yat/utility/OptionSwitch.h>
1675 26 Aug 23 peter 39 #include <yat/utility/utility.h>
795 30 Jun 09 peter 40
705 25 Nov 08 peter 41 #include <cerrno>
540 29 Dec 07 peter 42 #include <cstddef>
727 11 Dec 08 jari 43 #include <cstring>
226 11 Mar 07 peter 44 #include <fstream>
37 13 Jan 06 peter 45 #include <iostream>
226 11 Mar 07 peter 46 #include <sstream>
49 14 Jan 06 jari 47 #include <stdexcept>
37 13 Jan 06 peter 48 #include <string>
104 27 Jun 06 peter 49 #include <sys/stat.h>
37 13 Jan 06 peter 50
37 13 Jan 06 peter 51 namespace theplu {
149 12 Aug 06 jari 52 namespace svndigest {
37 13 Jan 06 peter 53
1060 02 Jun 10 peter 54   svndigestParameter::svndigestParameter(void)
1060 02 Jun 10 peter 55     : Parameter(),
1513 23 Sep 12 peter 56       anchor_format_(cmd_,"anchor-format",
1023 10 Jan 10 peter 57                      "override anchor image format defined in config file"),
1513 23 Sep 12 peter 58       force_(cmd_, "f,force",
1082 08 Jun 10 peter 59              std::string("if sub-directory named <ROOT> exists in target dire")+
1082 08 Jun 10 peter 60              std::string("ctory, remove sub-directory before writing results")),
1015 09 Jan 10 peter 61       format_(cmd_,"format", "override image format defined in config file"),
820 12 Sep 09 peter 62       report_(cmd_, "report", "create no HTML report", true),
1513 23 Sep 12 peter 63       revisions_(cmd_, "revisions",
820 12 Sep 09 peter 64                  "use revision number as time scale instead of dates [dates]"),
1531 04 Oct 12 peter 65       target_(cmd_, "t,target", "output directory [.]"),
1531 04 Oct 12 peter 66       update_(cmd_, "u,update",
1531 04 Oct 12 peter 67               "write output only when NODE has changed since last write")
37 13 Jan 06 peter 68   {
705 25 Nov 08 peter 69   }
705 25 Nov 08 peter 70
705 25 Nov 08 peter 71
1060 02 Jun 10 peter 72   svndigestParameter::~svndigestParameter(void)
705 25 Nov 08 peter 73   {
705 25 Nov 08 peter 74   }
705 25 Nov 08 peter 75
705 25 Nov 08 peter 76
1513 23 Sep 12 peter 77   const yat::utility::OptionArg<std::string>&
1060 02 Jun 10 peter 78   svndigestParameter::anchor_format(void) const
1023 10 Jan 10 peter 79   {
1023 10 Jan 10 peter 80     return anchor_format_;
1023 10 Jan 10 peter 81   }
1023 10 Jan 10 peter 82
1023 10 Jan 10 peter 83
1060 02 Jun 10 peter 84   void svndigestParameter::analyse2(void)
705 25 Nov 08 peter 85   {
705 25 Nov 08 peter 86     std::string save_wd = pwd();
705 25 Nov 08 peter 87
705 25 Nov 08 peter 88     if (!generate_config()) {
705 25 Nov 08 peter 89       // check target (only if we write report)
705 25 Nov 08 peter 90       if (report()) {
820 12 Sep 09 peter 91         check_existence(target_.value());
820 12 Sep 09 peter 92         check_readable(target_.value());
1220 13 Oct 10 peter 93         check_is_dir(target_.value());
1513 23 Sep 12 peter 94         std::string path = concatenate_path(target_.value(),root_basename());
1186 27 Aug 10 peter 95         if (access_rights(target_.value(), "w")) {
705 25 Nov 08 peter 96           std::stringstream ss;
1513 23 Sep 12 peter 97           ss << "svndigest: cannot create directory '" << path
705 25 Nov 08 peter 98              << "': " << strerror(errno);
795 30 Jun 09 peter 99           throw yat::utility::cmd_error(ss.str());
475 31 Aug 07 peter 100         }
1534 06 Oct 12 peter 101         // dont complain about existence if --force or --update
1534 06 Oct 12 peter 102         if (node_exist(path) && !force() && !update()) {
705 25 Nov 08 peter 103           std::stringstream ss;
1220 13 Oct 10 peter 104           ss << "svndigest: cannot create directory '" << path << "' "
705 25 Nov 08 peter 105              << strerror(EEXIST);
795 30 Jun 09 peter 106           throw yat::utility::cmd_error(ss.str());
52 15 Jan 06 jari 107         }
1675 26 Aug 23 peter 108         yat::utility::chdir(target_.value());
820 12 Sep 09 peter 109         target_.value(pwd());
1675 26 Aug 23 peter 110         yat::utility::chdir(save_wd);
52 15 Jan 06 jari 111       }
705 25 Nov 08 peter 112     }
626 23 Apr 08 peter 113   }
37 13 Jan 06 peter 114
705 25 Nov 08 peter 115
1082 08 Jun 10 peter 116   bool svndigestParameter::force(void) const
1082 08 Jun 10 peter 117   {
1082 08 Jun 10 peter 118     return force_.present();
1082 08 Jun 10 peter 119   }
1082 08 Jun 10 peter 120
1082 08 Jun 10 peter 121
1513 23 Sep 12 peter 122   const yat::utility::OptionArg<std::string>&
1060 02 Jun 10 peter 123   svndigestParameter::format(void) const
1015 09 Jan 10 peter 124   {
1015 09 Jan 10 peter 125     return format_;
1015 09 Jan 10 peter 126   }
1015 09 Jan 10 peter 127
1015 09 Jan 10 peter 128
1060 02 Jun 10 peter 129   void svndigestParameter::init2(void)
240 28 Apr 07 peter 130   {
1023 10 Jan 10 peter 131     anchor_format_.print_arg("=FMT");
1015 09 Jan 10 peter 132     format_.print_arg("=FMT");
820 12 Sep 09 peter 133     target_.print_arg("=TARGET");
1513 23 Sep 12 peter 134     help_.synopsis() =
705 25 Nov 08 peter 135       "Generate statistical report for a subversion repository\n";
1060 02 Jun 10 peter 136
1060 02 Jun 10 peter 137     std::stringstream ss;
1060 02 Jun 10 peter 138 #ifdef HAVE_PLPLOT
1060 02 Jun 10 peter 139     ss << "using libplplot ";
1060 02 Jun 10 peter 140     plstream pls;
1060 02 Jun 10 peter 141     char* plplot_version = new char[32];
1060 02 Jun 10 peter 142     pls.gver(plplot_version);
1060 02 Jun 10 peter 143     ss << plplot_version << "\n";
1060 02 Jun 10 peter 144     delete [] plplot_version;
1060 02 Jun 10 peter 145 #endif
1060 02 Jun 10 peter 146     version_.extra(ss.str());
1060 02 Jun 10 peter 147     version_.program_name("svndigest");
37 13 Jan 06 peter 148   }
37 13 Jan 06 peter 149
37 13 Jan 06 peter 150
1060 02 Jun 10 peter 151   bool svndigestParameter::report(void) const
73 04 Mar 06 jari 152   {
820 12 Sep 09 peter 153     return report_.value();
705 25 Nov 08 peter 154   }
234 09 Apr 07 peter 155
234 09 Apr 07 peter 156
1060 02 Jun 10 peter 157   bool svndigestParameter::revisions(void) const
705 25 Nov 08 peter 158   {
820 12 Sep 09 peter 159     return revisions_.present();
705 25 Nov 08 peter 160   }
234 09 Apr 07 peter 161
280 06 May 07 peter 162
1060 02 Jun 10 peter 163   void svndigestParameter::set_default2(void)
705 25 Nov 08 peter 164   {
1087 12 Jun 10 peter 165     if (!target_.present())
1087 12 Jun 10 peter 166       target_.value(".");
37 13 Jan 06 peter 167   }
37 13 Jan 06 peter 168
1060 02 Jun 10 peter 169
1060 02 Jun 10 peter 170   std::string svndigestParameter::targetdir(void) const
626 23 Apr 08 peter 171   {
820 12 Sep 09 peter 172     return target_.value();
626 23 Apr 08 peter 173   }
626 23 Apr 08 peter 174
1531 04 Oct 12 peter 175
1531 04 Oct 12 peter 176   bool svndigestParameter::update(void) const
1531 04 Oct 12 peter 177   {
1531 04 Oct 12 peter 178     return update_.present();
1531 04 Oct 12 peter 179   }
1531 04 Oct 12 peter 180
442 16 Aug 07 peter 181 }} // of namespace svndigest and namespace theplu