cli: omit source addons from list when compiled version is present, again
Source and compiled versions of all addons in bin are cluttering up the commands list. I think this was reasonably well behaved, so I'm re-enabling it, possibly with a slight fix (.c shadowing .exe). Some notes: - when there's only one addon with its base filename, its extension is not displayed (as before) - addons with (case insensitive) .exe extension or no extension are considered compiled - when there's exactly two addons with the same base filename, and one of them looks compiled, only that one is kept - modification time is not checked; an old compiled addon overrides a newer source version - when there's more than two addons with same base filename, all are kept
This commit is contained in:
		
							parent
							
								
									4b3d3fc2fa
								
							
						
					
					
						commit
						6859b94f4b
					
				| @ -552,34 +552,34 @@ defaultBalanceLineFormat = BottomAligned [ | |||||||
| -- Other utils | -- Other utils | ||||||
| 
 | 
 | ||||||
| -- | Get the sorted unique precise names and display names of hledger | -- | Get the sorted unique precise names and display names of hledger | ||||||
| -- add-ons found in the current user's PATH. The precise names are the | -- add-on executables found in the current user's PATH.  | ||||||
| -- add-on's filename with the "hledger-" prefix removed. The display | -- Precise names are the file names with the "hledger-" prefix removed.  | ||||||
| -- names have the file extension removed also, except when it's needed | -- Display names also have the file extension removed, except when it's  | ||||||
| -- for disambiguation. | -- needed to disambiguate multiple add-ons with similar filenames. | ||||||
| -- | -- When there are exactly two similar names that look like a source  | ||||||
| -- -- Also when there are exactly two similar names, one with the .hs or | -- and compiled version (.exe, .com, or no extension), the source | ||||||
| -- -- .lhs extension and the other with the .exe extension or no | -- version is excluded (even if it happens to be newer).  | ||||||
| -- -- extension - presumably source and compiled versions of a haskell | -- Add-on names matching built-in command names could be returned | ||||||
| -- -- script - we exclude the source version. | -- by this function, though hledger will ignore them. | ||||||
| -- |  | ||||||
| -- This function can return add-on names which shadow built-in command |  | ||||||
| -- names, but hledger will ignore these. |  | ||||||
| -- | -- | ||||||
| hledgerAddons :: IO ([String],[String]) | hledgerAddons :: IO ([String],[String]) | ||||||
| hledgerAddons = do | hledgerAddons = do | ||||||
|   exes <- hledgerExecutablesInPath |   exes <- hledgerExecutablesInPath | ||||||
|   let precisenames = -- concatMap dropRedundant $ |   let precisenames = concatMap dropRedundant $ | ||||||
|                      -- groupBy (\a b -> dropExtension a == dropExtension b) $ |                      groupBy (\a b -> dropExtension a == dropExtension b) $ | ||||||
|                      map stripprefix exes |                      map stripprefix exes | ||||||
|   let displaynames = concatMap stripext $ |   let displaynames = concatMap stripext $ | ||||||
|                      groupBy (\a b -> dropExtension a == dropExtension b) precisenames |                      groupBy (\a b -> dropExtension a == dropExtension b) precisenames | ||||||
|   return (precisenames, displaynames) |   return (precisenames, displaynames) | ||||||
|   where |   where | ||||||
|     stripprefix = drop (length progname + 1) |     stripprefix = drop (length progname + 1) | ||||||
|     -- dropRedundant [f,f2] | takeExtension f `elem` ["",".exe"] && takeExtension f2 `elem` [".hs",".lhs"] = [f] |  | ||||||
|     -- dropRedundant fs = fs |  | ||||||
|     stripext [f] = [dropExtension f] |     stripext [f] = [dropExtension f] | ||||||
|     stripext fs  = fs |     stripext fs  = fs | ||||||
|  |     compiledExts = ["",".com",".exe"]  | ||||||
|  |     dropRedundant [f,g] | ||||||
|  |       | takeExtension f `elem` compiledExts = [f] | ||||||
|  |       | takeExtension g `elem` compiledExts = [g] | ||||||
|  |     dropRedundant fs = fs | ||||||
| 
 | 
 | ||||||
| -- | Get the sorted unique filenames of all hledger-* executables in | -- | Get the sorted unique filenames of all hledger-* executables in | ||||||
| -- the current user's PATH. Currently these are: files in any of the | -- the current user's PATH. Currently these are: files in any of the | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user