public GitLabProject GetProject(long project_id)
 {
     try
     {
         WebRequest   req      = WebRequest.Create("https://gitlab.com/api/v4/projects/" + project_id + "?private_token=" + privateToken);
         StreamReader stream   = new StreamReader(req.GetResponse().GetResponseStream());
         string       response = stream.ReadToEnd();
         stream.Close();
         GitLabProject project = JsonConvert.DeserializeObject <GitLabProject>(response);
         return(project);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
         return(null);
     }
 }
        public int InsertGitlabProject(GitLabProject project)
        {
            connection.Open();
            NpgsqlCommand command = new NpgsqlCommand($"insert into project values ({project.id},'{project.name}','{project.description}', {project.creator_id}, '{project.created_at}','{project.web_url}','{project.avatar_url}')", connection);
            int           result  = 0;

            try
            {
                result = command.ExecuteNonQuery();
            }
            catch (NpgsqlException ex)
            {
                if (ex.Message.Substring(0, 5) == "23505")
                {
                }
                else
                {
                    Console.WriteLine(ex.Message);
                }
            }
            connection.Close();
            return(result);
        }
示例#3
0
        static int Main(string[] args)
        {
            string privateToken   = File.ReadAllText("auth-token.txt", Encoding.UTF8);
            string connectionData = File.ReadAllText("connection-data.txt", Encoding.UTF8);

            if (args.Length > 2 || args.Length < 1)
            {
                Console.WriteLine("Wrong amount of attributes. Usage GitLabCrawler.exe projectId 20/all");
                return(-1);
            }
            if (!long.TryParse(args[0], out long project_id))
            {
                Console.WriteLine("Can't parse project id.");
                return(-2);
            }
            if (args[1] != "20" && args[1] != "all")
            {
                Console.WriteLine("Can't parse number of commits");
                return(-2);
            }

            RequestService  reqService = new RequestService(privateToken);
            DatabaseService dbService  = new DatabaseService(connectionData);

            Console.WriteLine("Getting info about project " + project_id + "...");
            GitLabProject project = reqService.GetProject(project_id);

            if (project == null)
            {
                Console.WriteLine("Project not found");
                return(-3);
            }
            Console.WriteLine("Got info about project №" + project_id);



            Console.WriteLine("Getting info about project creator...");
            GitLabUser creator = reqService.GetUser(project.creator_id);

            if (creator != null)
            {
                Console.WriteLine("Got info about creator");
            }
            else
            {
                Console.WriteLine("Can't get user's info");
            }
            Console.WriteLine("Adding user to database...");
            dbService.InsertGitlabUser(creator);
            Console.WriteLine("Adding project to database...");
            dbService.InsertGitlabProject(project);

            Console.WriteLine("Getting info about commits...");
            List <GitLabCommit> commits;

            if (args[1] == "20")
            {
                commits = reqService.Get20ProjectCommits(project_id);
            }
            else
            {
                commits = reqService.GetAllProjectCommits(project_id);
            }
            if (commits != null)
            {
                Console.WriteLine($"Total commits in list: {commits.Count}");
            }
            else
            {
                Console.WriteLine("Can't get list of commits");
            }

            Console.WriteLine("Getting diffs...");
            Console.WriteLine("Adding commits to database...");
            long diffCounter = 0;

            foreach (GitLabCommit commit in commits)
            {
                dbService.InsertGitlabCommit(commit);
                List <GitLabDiff> diffs = reqService.GetCommitDiffs(project_id, commit.id);
                foreach (GitLabDiff diff in diffs)
                {
                    dbService.InsertGitlabDiff(diff);
                }
                diffCounter += diffs.Count;
            }
            Console.WriteLine($"Got {diffCounter} diffs for {commits.Count} commits");
            Console.WriteLine("All information added into database.");
            return(0);
        }