protected function production()
    {
        // Check if push is enabled
        if (!Config::get('vdeploy::config.production.enabled')) {
            return true;
        }

        // Check for production
        $remote = $this->argument('remote');
        if ($remote != Config::get('vdeploy::config.production.name')) {
            return true;
        }

        // Check if we need to tag
        $rawTag = trim(`git describe --tags --match 'v[0-9]*'`);
        $tag = trim(`git describe --tags --match 'v[0-9]*' --abbrev=0`);

        if ($rawTag == $tag) {
            return true;
        }

        // Extract parts
        $parts = preg_split("#[.-]#", substr($tag, 1));
        $preRelease = null;
        $preIncrement = 1;

        if (count($parts) == 3) {
            list($major, $minor, $patch) = $parts;
        } elseif (count($parts) == 4) {
            list($major, $minor, $patch, $preRelease) = $parts;
        } elseif (count($parts) == 5) {
            list($major, $minor, $patch, $preRelease, $preIncrement) = $parts;
        } else {
            $this->error("Unknown tag format: {$tag}");
            return false;
        }

        // Check if we've been told what type of release to do
        $newTag = $this->incrementTag($tag, $major, $minor, $patch, $preRelease, $preIncrement);

        if (!$newTag) {
            return false;
        }

        // Add tag
        $this->info("Tagging deployed version as: {$newTag}.");
        passthru("git tag {$newTag}", $code);
        if ($code) {
            $this->error("FAILED: git tag {$newTag}");
            return false;
        }

        return true;
    }