Ejemplo n.º 1
0
        private static bool ShouldLock(string[] args)
        {
            string gitCommand = GetGitCommand(args);

            switch (gitCommand)
            {
            // Keep these alphabetically sorted
            case "blame":
            case "branch":
            case "cat-file":
            case "check-attr":
            case "check-ignore":
            case "check-mailmap":
            case "commit-graph":
            case "config":
            case "credential":
            case "diff":
            case "diff-files":
            case "diff-index":
            case "diff-tree":
            case "difftool":
            case "fetch":
            case "for-each-ref":
            case "help":
            case "hash-object":
            case "index-pack":
            case "log":
            case "ls-files":
            case "ls-tree":
            case "merge-base":
            case "multi-pack-index":
            case "name-rev":
            case "push":
            case "remote":
            case "rev-list":
            case "rev-parse":
            case "show":
            case "show-ref":
            case "symbolic-ref":
            case "tag":
            case "unpack-objects":
            case "update-ref":
            case "version":
            case "web--browse":
                return(false);
            }

            if (gitCommand == "reset" && args.Contains("--soft"))
            {
                return(false);
            }

            if (!KnownGitCommands.Contains(gitCommand) &&
                IsAlias(gitCommand))
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 2
0
        private static bool ShouldLock(string[] args)
        {
            string gitCommand = GetGitCommand(args);

            switch (gitCommand)
            {
            // Keep these alphabetically sorted
            case "cat-file":
            case "check-attr":
            case "config":
            case "credential":
            case "diff":
            case "diff-files":
            case "diff-tree":
            case "difftool":
            case "for-each-ref":
            case "help":
            case "index-pack":
            case "log":
            case "ls-tree":
            case "merge-base":
            case "mv":
            case "name-rev":
            case "push":
            case "remote":
            case "rev-list":
            case "rev-parse":
            case "show":
            case "symbolic-ref":
            case "unpack-objects":
            case "update-ref":
            case "version":
            case "web--browse":
                return(false);
            }

            if (gitCommand == "reset" && args.Contains("--soft"))
            {
                return(false);
            }

            // Don't acquire the lock if we've been explicitly asked not to. This enables tools, such as the VS Git
            // integration, to provide a "best effort" status without writing to the index. We assume that any such
            // tools will be constantly polling in the background, so missing a file once isn't a problem.
            if (gitCommand == "status" &&
                args.Contains("--no-lock-index"))
            {
                return(false);
            }

            if (!KnownGitCommands.Contains(gitCommand) &&
                IsAlias(gitCommand))
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 3
0
        private static bool ShouldLock(string[] args)
        {
            string gitCommand = GetGitCommand(args);

            switch (gitCommand)
            {
            // Keep these alphabetically sorted
            case "blame":
            case "branch":
            case "cat-file":
            case "check-attr":
            case "check-ignore":
            case "check-mailmap":
            case "commit-graph":
            case "config":
            case "credential":
            case "diff":
            case "diff-files":
            case "diff-index":
            case "diff-tree":
            case "difftool":
            case "fetch":
            case "for-each-ref":
            case "help":
            case "hash-object":
            case "index-pack":
            case "log":
            case "ls-files":
            case "ls-tree":
            case "merge-base":
            case "multi-pack-index":
            case "name-rev":
            case "pack-objects":
            case "push":
            case "remote":
            case "rev-list":
            case "rev-parse":
            case "show":
            case "show-ref":
            case "symbolic-ref":
            case "tag":
            case "unpack-objects":
            case "update-ref":
            case "version":
            case "web--browse":
                return(false);

            /*
             * There are several git commands that are "unsupported" in virtualized (VFS4G)
             * enlistments that are blocked by git. Usually, these are blocked before they acquire
             * a GVFSLock, but the submodule command is different, and is blocked after acquiring the
             * GVFS lock. This can cause issues if another action is attempting to create placeholders.
             * As we know the submodule command is a no-op, allow it to proceed without acquiring the
             * GVFSLock. I have filed issue #1164 to track having git block all unsupported commands
             * before calling the pre-command hook.
             */
            case "submodule":
                return(false);
            }

            if (gitCommand == "reset" && args.Contains("--soft"))
            {
                return(false);
            }

            if (!KnownGitCommands.Contains(gitCommand) &&
                IsAlias(gitCommand))
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 4
0
        private static bool ShouldLock(string[] args)
        {
            string gitCommand = GetGitCommand(args);

            switch (gitCommand)
            {
            // Keep these alphabetically sorted
            case "blame":
            case "branch":
            case "cat-file":
            case "check-attr":
            case "config":
            case "credential":
            case "diff":
            case "diff-files":
            case "diff-index":
            case "diff-tree":
            case "difftool":
            case "fetch":
            case "for-each-ref":
            case "help":
            case "index-pack":
            case "log":
            case "ls-files":
            case "ls-tree":
            case "merge-base":
            case "name-rev":
            case "push":
            case "remote":
            case "rev-list":
            case "rev-parse":
            case "show":
            case "show-ref":
            case "symbolic-ref":
            case "tag":
            case "unpack-objects":
            case "update-ref":
            case "version":
            case "web--browse":
                return(false);
            }

            if (gitCommand == "reset" && args.Contains("--soft"))
            {
                return(false);
            }

            try
            {
                // Don't acquire the lock if we've been explicitly asked not to. This enables tools, such as the VS Git
                // integration, to provide a "best effort" status without writing to the index. We assume that any such
                // tools will be constantly polling in the background, so missing a file once isn't a problem.
                // The git argument "--no-optional-locks" results in a 'negative' value GIT_OPTIONAL_LOCKS environment variable.
                if (gitCommand == "status" && (args.Contains("--no-lock-index") || IsGitEnvVarDisabled("GIT_OPTIONAL_LOCKS")))
                {
                    return(false);
                }
            }
            catch (Exception e)
            {
                ExitWithError("Failed to check if GVFS should lock: " + e.ToString());
            }

            if (!KnownGitCommands.Contains(gitCommand) &&
                IsAlias(gitCommand))
            {
                return(false);
            }

            return(true);
        }