Skip to content

Segmentation Fault #823

@ChristianMurphy

Description

@ChristianMurphy

I'm using NodeGit to setup multiple git repositories.
When I do that I get the error:

[1]    7896 segmentation fault (core dumped)  node example.js

This error happens with NodeGit 0.5.0 and 0.6.0.
Running on Ubuntu 15.10, on Node JS 5.2.0 and 4.3.2

Here is the code I am trying to run.
This will work correctly with a single destination, but will SegFault with multiple.
A version of this code previously worked with multiple destinations with NodeGit 0.4.0

'use strict';

const NodeGit = require('nodegit');
const path = require('path');

const temporaryFolder = path.join(__dirname, 'temp');
const branchReference = 'refs/heads/master:refs/heads/master';

// replace this with your own username and password
// seedRepository should have files already
// destinationRepositories should not have any files or commits yet
seedRepositories('testUser', 'password', 'https://github.com/ChristianMurphy/just-a-test-ignore-this', ['https://github.com/ChristianMurphy/please-work-1', 'https://github.com/ChristianMurphy/please-work-2'])

function seedRepositories (username, password, seedRepositoryURL, destinationRepositoryURLs) {
    const credentials = NodeGit.Cred.userpassPlaintextNew(username, password);

    // clone seed repo
    NodeGit.Clone(seedRepositoryURL, temporaryFolder, {
        callbacks: {
            credentials: function () {
                return credentials;
            }
        }
    })
    // open the repository
    .then(() => {
        return NodeGit.Repository.open(temporaryFolder);
    })
    // push the seed repository to all destination repositories
    .then((seedRepository) => {
        const promises = [];

        // for each destination
        for (let index = 0; index < destinationRepositoryURLs.length; index++) {
            // create a remote for destination
            NodeGit.Remote.create(seedRepository, index.toString(), destinationRepositoryURLs[index]);
            // open remote for destination and collect resulting promise
            promises.push(
                NodeGit.Remote.lookup(seedRepository, index.toString())
                .then((remote) => {
                    // push to destination remote
                    return remote.push([branchReference], {
                        callbacks: {
                            credentials: function () {
                                return credentials;
                            }
                        }
                    });
                })
            );
        }
        // wait for all pushes to complete
        return Promise.all(promises);
    })
    .catch((err) => {
        console.error(err);
    });
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions