mirror of
https://github.com/github/semantic.git
synced 2024-11-28 18:23:44 +03:00
Add development mode
When developing locally, especially when using break to look at structure, the timeout is too quick. Instead of manually updating the timeout to a long duration, I figure disabling it when needed in the context of ghci would be nicer.
This commit is contained in:
parent
4611283966
commit
e7c09831bc
@ -26,6 +26,7 @@ data CmdLineOptions = CmdLineOptions
|
||||
, outputFilePath :: Maybe FilePath
|
||||
, noIndex :: Bool
|
||||
, extraArgs :: [ExtraArg]
|
||||
, developmentMode' :: Bool
|
||||
}
|
||||
|
||||
-- | Arguments for the program (includes command line, environment, and defaults).
|
||||
@ -38,6 +39,7 @@ data Arguments = Arguments
|
||||
, diffMode :: DiffMode
|
||||
, shaRange :: Both (Maybe String)
|
||||
, filePaths :: [FilePath]
|
||||
, developmentMode :: Bool
|
||||
} deriving (Show)
|
||||
|
||||
-- | Returns Arguments for the program from parsed command line arguments.
|
||||
@ -62,6 +64,7 @@ programArguments CmdLineOptions{..} = do
|
||||
(_, _) -> CommitDiff
|
||||
, shaRange = fetchShas extraArgs
|
||||
, filePaths = filePaths
|
||||
, developmentMode = developmentMode'
|
||||
}
|
||||
where
|
||||
fetchPaths :: [ExtraArg] -> [FilePath]
|
||||
@ -85,6 +88,7 @@ args gitDir sha1 sha2 filePaths format = Arguments
|
||||
, diffMode = CommitDiff
|
||||
, shaRange = Just <$> both sha1 sha2
|
||||
, filePaths = filePaths
|
||||
, developmentMode = False
|
||||
}
|
||||
|
||||
-- | 7 seconds
|
||||
|
@ -49,6 +49,7 @@ argumentsParser = info (version <*> helper <*> argumentsP)
|
||||
<*> optional (strOption (long "output" <> short 'o' <> help "output directory for split diffs, defaults to stdout if unspecified"))
|
||||
<*> switch (long "no-index" <> help "compare two paths on the filesystem")
|
||||
<*> some (argument (eitherReader parseShasAndFiles) (metavar "SHA_A..SHAB FILES..."))
|
||||
<*> switch (long "development" <> short 'd' <> help "set development mode which prevents timeout behavior by default")
|
||||
where
|
||||
parseShasAndFiles :: String -> Either String ExtraArg
|
||||
parseShasAndFiles s = case matchRegex regex s of
|
||||
@ -66,8 +67,12 @@ version = infoOption versionString (long "version" <> short 'V' <> help "output
|
||||
-- | Compare changes between two commits.
|
||||
diffCommits :: Arguments -> IO ()
|
||||
diffCommits args@Arguments{..} = do
|
||||
ts <- Timeout.timeout timeoutInMicroseconds (fetchDiffs args)
|
||||
ts <- fetchTerms args
|
||||
writeToOutput output (maybe mempty R.concatOutputs ts)
|
||||
where fetchTerms args = if developmentMode
|
||||
then Just <$> fetchDiffs args
|
||||
else Timeout.timeout timeoutInMicroseconds (fetchDiffs args)
|
||||
|
||||
|
||||
-- | Compare two paths on the filesystem (compariable to git diff --no-index).
|
||||
diffPaths :: Arguments -> Both FilePath -> IO ()
|
||||
@ -99,14 +104,17 @@ fetchDiff' Arguments{..} filepath = do
|
||||
|
||||
let sources = fromMaybe (Source.emptySourceBlob filepath) <$> sourcesAndOids
|
||||
let sourceBlobs = Source.idOrEmptySourceBlob <$> sources
|
||||
|
||||
let textDiff = D.textDiff (parserForFilepath filepath) diffArguments sourceBlobs
|
||||
text <- liftIO $ Timeout.timeout timeoutInMicroseconds textDiff
|
||||
|
||||
text <- fetchText textDiff
|
||||
truncatedPatch <- liftIO $ D.truncatedDiff diffArguments sourceBlobs
|
||||
pure $ fromMaybe truncatedPatch text
|
||||
where
|
||||
diffArguments = R.DiffArguments { format = format, output = output }
|
||||
fetchText textDiff = if developmentMode
|
||||
then liftIO $ Timeout.timeout timeoutInMicroseconds textDiff
|
||||
else liftIO $ Just <$> textDiff
|
||||
|
||||
|
||||
pathsToDiff :: Arguments -> Both String -> IO [FilePath]
|
||||
pathsToDiff Arguments{..} shas = withRepository lgFactory gitDir $ do
|
||||
|
Loading…
Reference in New Issue
Block a user