CasperSecurity

Current Path : /usr/share/nodejs/coveralls/lib/
Upload File :
Current File : //usr/share/nodejs/coveralls/lib/fetchGitData.js

'use strict';

const { execFile } = require('child_process');
require('./logger')();

function fetchGitData(git, cb) {
  if (!cb) {
    throw new Error('fetchGitData requires a callback');
  }

  //-- Malformed/undefined git object
  if (typeof git === 'undefined') {
    return cb(new Error('No options passed'));
  }

  if (!Object.prototype.hasOwnProperty.call(git, 'head')) {
    return cb(new Error('You must provide the head'));
  }

  if (!Object.prototype.hasOwnProperty.call(git.head, 'id')) {
    return cb(new Error('You must provide the head.id'));
  }

  //-- Set required properties of git if they weren"t provided
  if (!Object.prototype.hasOwnProperty.call(git, 'branch')) {
    git.branch = '';
  }

  if (!Object.prototype.hasOwnProperty.call(git, 'remotes')) {
    git.remotes = [];
  }

  //-- Assert the property types
  if (typeof git.branch !== 'string') {
    git.branch = '';
  }

  if (!(Array.isArray(git.remotes))) {
    git.remotes = [];
  }

  //-- Use git?
  execFile('git', ['rev-parse', '--verify', git.head.id], err => {
    if (err) {
      // git is not available...
      git.head.author_name = git.head.author_name || 'Unknown Author';
      git.head.author_email = git.head.author_email || '';
      git.head.committer_name = git.head.committer_name || 'Unknown Committer';
      git.head.committer_email = git.head.committer_email || '';
      git.head.message = git.head.message || 'Unknown Commit Message';
      return cb(null, git);
    }

    fetchHeadDetails(git, cb);
  });
}

function fetchBranch(git, cb) {
  execFile('git', ['branch'], (err, branches) => {
    if (err) {
      return cb(err);
    }

    git.branch = (branches.match(/^\* (\w+)/) || [])[1];
    fetchRemotes(git, cb);
  });
}

const REGEX_COMMIT_DETAILS = /\nauthor (.+?) <([^>]*)>.+\ncommitter (.+?) <([^>]*)>.+[\S\s]*?\n\n(.*)/m;

function fetchHeadDetails(git, cb) {
  execFile('git', ['cat-file', '-p', git.head.id], (err, response) => {
    if (err) {
      return cb(err);
    }

    const items = response.match(REGEX_COMMIT_DETAILS).slice(1);
    const fields = ['author_name', 'author_email', 'committer_name', 'committer_email', 'message'];
    fields.forEach((field, index) => {
      git.head[field] = items[index];
    });

    if (git.branch) {
      fetchRemotes(git, cb);
    } else {
      fetchBranch(git, cb);
    }
  });
}

function fetchRemotes(git, cb) {
  execFile('git', ['remote', '-v'], (err, remotes) => {
    if (err) {
      return cb(err);
    }

    const processed = {};
    remotes.split('\n').forEach(remote => {
      if (!/\s\(push\)$/.test(remote)) {
        return;
      }

      remote = remote.split(/\s+/);
      saveRemote(processed, git, remote[0], remote[1]);
    });
    cb(null, git);
  });
}

function saveRemote(processed, git, name, url) {
  const key = `${name}-${url}`;
  if (Object.prototype.hasOwnProperty.call(processed, key)) {
    return;
  }

  processed[key] = true;
  git.remotes.push({ name, url });
}

module.exports = fetchGitData;
Hacker Blog, Shell İndir, Sql İnjection, XSS Attacks, LFI Attacks, Social Hacking, Exploit Bot, Proxy Tools, Web Shell, PHP Shell, Alfa Shell İndir, Hacking Training Set, DDoS Script, Denial Of Service, Botnet, RFI Attacks, Encryption
Telegram @BIBIL_0DAY