Changeset 104 for trunk/bin


Ignore:
Timestamp:
Jun 27, 2006, 11:50:14 AM (15 years ago)
Author:
Peter Johansson
Message:

closes #39 checks that target and root exist, default parameter is changed to ., there is no longer a creation of a target directory, program burps if root directory already exists in the target directory.

Location:
trunk/bin
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/bin/Parameter.cc

    r98 r104  
    2828#include <stdexcept>
    2929#include <string>
     30#include <sys/stat.h>
    3031
    3132namespace theplu {
     
    4950        if (++i<argc){
    5051          root_= std::string(argv[i]);
     52          // if last character is '/' remove
     53          if (*root_.rbegin()=='/')
     54            root_.erase(root_.begin()+root_.size()-1);
    5155          ok=true;
    5256        }
     
    5963        if (++i<argc){
    6064          targetdir_= std::string(argv[i]);
     65          // if last character is '/' remove
     66          if (*targetdir_.rbegin()=='/')
     67            targetdir_.erase(targetdir_.begin()+targetdir_.size()-1);
    6168          ok=true;
    6269        }
     
    8289  void Parameter::analyse(void)
    8390  {
    84     // should check that root is a directory
     91    struct stat buf;
     92    // check that root directory exists
     93    if (stat(root_.c_str(),&buf)){
     94      std::cerr << "\nsvnstat: " << root_ << ": No such directory"
     95                << std::endl;
     96      exit(-1);
     97    }
     98    // check that target directory exists
     99    if (stat(targetdir_.c_str(),&buf)){
     100      std::cerr << "\nsvnstat: " << targetdir_ << ": No such directory"
     101                << std::endl;
     102      exit(-1);
     103    }
    85104  }
    86105
     
    91110    revisions_=false;
    92111    root_=".";
    93     targetdir_="svnstat_output";
     112    targetdir_=".";
    94113    verbose_=false;
    95114  }
     
    117136              << "  -rev [--revisions]: Use revision numbers as time scale\n"
    118137              << "                      instead of dates [dates].\n"
    119               << "  -t [--target] arg : output directory [svnstat_output]\n"
     138              << "  -t [--target] arg : output directory [.]\n"
    120139              << "  -v [--verbose] : explain what is being done\n"
    121140              << "  --version      : print version information and exit\n"
  • trunk/bin/svnstat.cc

    r100 r104  
    4242{
    4343  using namespace theplu::svnstat;
    44   Parameter option(argc,argv);
     44  Parameter* option=NULL;
     45  try {
     46    option = new Parameter(argc,argv);
     47  }
     48  catch (std::runtime_error e) {
     49    std::cerr << e.what() << std::endl;
     50    exit(-1);
     51  }
    4552
    4653  SVN* svn=SVN::instance();
    4754  try {
    48     svn->setup_wc_adm_access(option.root());
     55    svn->setup_wc_adm_access(option->root());
    4956  }
    5057  catch (SVNException e) {
    51     std::cerr << "\nsvnstat: " << e.what() << "\nsvnstat: " << option.root()
     58    std::cerr << "\nsvnstat: " << e.what() << "\nsvnstat: " << option->root()
    5259              << " is not under subversion control\n" << std::endl;
    5360    exit(-1);
    5461  }
    5562
    56   if (createdir(option.targetdir(),option.force())) {
    57     std::cerr << "\nsvnstat: Failed to create target directory '"
    58               << option.targetdir() << "'.\n" << std::endl;
    59     exit(-1);
     63  if (option->force()){
     64    std::string root_path(option->targetdir()+'/'+file_name(option->root()));
     65    rmdirhier(root_path);
     66  }
     67  else {
     68    struct stat buf;
     69    std::string root_path(option->targetdir()+'/'+file_name(option->root()));
     70    if (!stat(root_path.c_str(),&buf)){
     71      std::cerr << "\nsvnstat: " << root_path << ": directory already exists"
     72                << std::endl;
     73      exit(-1);
     74    }
     75
    6076  }
    6177
    62   if (!option.revisions()) {
    63     if (option.verbose())
     78  exit(-1);
     79  if (!option->revisions()) {
     80    if (option->verbose())
    6481      std::cout << "Parsing the log." << std::endl;
    6582    CommitStat cs;
    66     cs.parse(option.root());
     83    cs.parse(option->root());
    6784    GnuplotFE::instance()->set_dates(cs.date());
    6885  }
    6986
    70   Directory tree(option.root(),"");
    71   tree.parse(option.verbose());
     87  Directory tree(option->root(),"");
     88  tree.parse(option->verbose());
    7289
    73   GnuplotFE::instance()->command(string("cd '")+option.targetdir()+"'");
    74   chdir(option.targetdir().c_str());
     90  GnuplotFE::instance()->command(string("cd '")+option->targetdir()+"'");
     91  chdir(option->targetdir().c_str());
    7592  try {
    76     tree.print(option.verbose());
     93    tree.print(option->verbose());
    7794  }
    7895  catch (const std::runtime_error& x) {
    7996    std::cerr << "svnstat: " << x.what() << std::endl;
    8097  }
    81   //string htmltopnode=tree.output_name()+"/index.html";
    82   //symlink(htmltopnode.c_str(),"index.html");
    8398
     99  delete option;
    84100  exit(0);        // normal exit
    85101}
Note: See TracChangeset for help on using the changeset viewer.