BaseLog* BazaarLog::generateLog(const std::string& dir) { //does directory have a .bzr ? std::string bzrdir = dir + std::string("/.bzr"); struct stat dirinfo; int stat_rc = stat(bzrdir.c_str(), &dirinfo); if(stat_rc!=0 || !(dirinfo.st_mode & S_IFDIR)) { return 0; } std::string command = getLogCommand(); // do we have this client installed requireExecutable("bzr"); createTempLog(); if(temp_file.size()==0) return 0; char cmd_buff[2048]; sprintf(cmd_buff, "%s %s > %s", command.c_str(), dir.c_str(), temp_file.c_str()); int command_rc = systemCommand(cmd_buff); if(command_rc != 0) { return 0; } BaseLog* seeklog = new SeekLog(temp_file); return seeklog; }
BaseLog* SVNCommitLog::generateLog(const std::string& dir) { //get working directory char cwd_buff[1024]; if(getcwd(cwd_buff, 1024) != cwd_buff) { return 0; } //does directory have a .svn ? std::string gitdir = dir + std::string("/.svn"); struct stat dirinfo; int stat_rc = stat(gitdir.c_str(), &dirinfo); if(stat_rc!=0 || !(dirinfo.st_mode & S_IFDIR)) { return 0; } // do we have this client installed requireExecutable("svn"); std::string command = getLogCommand(); //create temp file createTempLog(); if(temp_file.size()==0) return 0; if(chdir(dir.c_str()) != 0) { return 0; } char cmd_buff[2048]; snprintf(cmd_buff, 2048, "%s > %s", command.c_str(), temp_file.c_str()); int command_rc = systemCommand(cmd_buff); chdir(cwd_buff); if(command_rc != 0) { return 0; } BaseLog* seeklog = new SeekLog(temp_file); return seeklog; }
BaseLog* GitCommitLog::generateLog(const std::string& dir) { //get working directory char cwd_buff[1024]; if(getcwd(cwd_buff, 1024) != cwd_buff) { return 0; } //does directory have a .git ? std::string gitdir = dir + std::string("/.git"); struct stat dirinfo; int stat_rc = stat(gitdir.c_str(), &dirinfo); if(stat_rc!=0 || !(dirinfo.st_mode & S_IFDIR)) { return 0; } // do we have this client installed requireExecutable("git"); std::string command = getLogCommand(); //create temp file createTempLog(); if(temp_file.size()==0) return 0; if(chdir(dir.c_str()) != 0) { return 0; } char cmd_buff[2048]; sprintf(cmd_buff, "%s > %s", command.c_str(), temp_file.c_str()); int command_rc = systemCommand(cmd_buff); if(command_rc != 0) { chdir(cwd_buff); return 0; } // check for new-enough Git version // if %aN does not appear to be supported try %an std::ifstream in(temp_file.c_str()); char firstBytes[9]; in.read(firstBytes, 8); in.close(); firstBytes[8] = '\0'; if(!strcmp(firstBytes, "user:%aN")) { char *pos = strstr(cmd_buff, "%aN"); pos[2] = 'n'; command_rc = systemCommand(cmd_buff); } //change back to original directoy chdir(cwd_buff); if(command_rc != 0) { return 0; } BaseLog* seeklog = new SeekLog(temp_file); return seeklog; }