My dotfiles. Period.

update_scopedb.cmd 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. @echo off
  2. setlocal EnableExtensions EnableDelayedExpansion
  3. rem ==========================================
  4. rem PARSE ARGUMENTS
  5. rem ==========================================
  6. set CSCOPE_EXE=cscope
  7. set CSCOPE_ARGS=
  8. set DB_FILE=cscope.out
  9. set FILE_LIST_CMD=
  10. set LOG_FILE=
  11. set BUILD_INVERTED_INDEX=0
  12. :ParseArgs
  13. if [%1]==[] goto :DoneParseArgs
  14. if [%1]==[-e] (
  15. set CSCOPE_EXE=%~2
  16. shift
  17. goto :LoopParseArgs
  18. )
  19. if [%1]==[-f] (
  20. set DB_FILE=%~2
  21. shift
  22. goto :LoopParseArgs
  23. )
  24. if [%1]==[-p] (
  25. set PROJ_ROOT=%~2
  26. shift
  27. goto :LoopParseArgs
  28. )
  29. if [%1]==[-L] (
  30. set FILE_LIST_CMD=%~2
  31. shift
  32. goto :LoopParseArgs
  33. )
  34. if [%1]==[-l] (
  35. set LOG_FILE=%~2
  36. shift
  37. goto :LoopParseArgs
  38. )
  39. if [%1]==[-I] (
  40. set BUILD_INVERTED_INDEX=1
  41. goto :LoopParseArgs
  42. )
  43. echo Invalid Argument: %1
  44. goto :Usage
  45. :LoopParseArgs
  46. shift
  47. goto :ParseArgs
  48. :DoneParseArgs
  49. rem ==========================================
  50. rem GENERATE DATABASE
  51. rem ==========================================
  52. if [%LOG_FILE%]==[] set LOG_FILE=CON
  53. echo Locking db file > %LOG_FILE%
  54. echo locked > "%DB_FILE%.lock"
  55. echo Running cscope >> %LOG_FILE%
  56. if NOT ["%FILE_LIST_CMD%"]==[""] (
  57. if ["%PROJECT_ROOT%"]==["."] (
  58. for /F "usebackq delims=" %%F in (`%FILE_LIST_CMD%`) do @echo "%%F">%DB_FILE%.files
  59. ) else (
  60. rem Potentially useful:
  61. rem http://stackoverflow.com/questions/9749071/cmd-iterate-stdin-piped-from-another-command
  62. for /F "usebackq delims=" %%F in (`%FILE_LIST_CMD%`) do @echo "%PROJECT_ROOT%\%%F">%DB_FILE%.files
  63. )
  64. ) ELSE (
  65. for /F "usebackq delims=" %%F in (`dir /S /B /A-D .`) do @echo "%%F">%DB_FILE%.files
  66. )
  67. set FILESIZE=0
  68. for /F %%F in ("%DB_FILE%.files") do set FILESIZE=%%~zF
  69. if %FILESIZE% EQU 0 (
  70. echo There is no files to generate cscope DB
  71. goto :EOF
  72. )
  73. set CSCOPE_ARGS=%CSCOPE_ARGS% -i %DB_FILE%.files
  74. if ["%BUILD_INVERTED_INDEX%"]==["1"] (
  75. set CSCOPE_ARGS=%CSCOPE_ARGS% -q
  76. )
  77. "%CSCOPE_EXE%" %CSCOPE_ARGS% -b -k -f "%DB_FILE%"
  78. if ERRORLEVEL 1 (
  79. echo ERROR: Cscope executable returned non-zero code. >> %LOG_FILE%
  80. )
  81. echo Unlocking db file >> %LOG_FILE%
  82. del /F "%DB_FILE%.files" "%DB_FILE%.lock"
  83. if ERRORLEVEL 1 (
  84. echo ERROR: Unable to remove file lock. >> %LOG_FILE%
  85. )
  86. echo Done. >> %LOG_FILE%
  87. goto :EOF
  88. rem ==========================================
  89. rem USAGE
  90. rem ==========================================
  91. :Usage
  92. echo Usage:
  93. echo %~n0 ^<options^>
  94. echo.
  95. echo -e [exe=cscope]: The cscope executable to run
  96. echo -f [file=cscope.out]: The path to the database file to create
  97. echo -p [dir=]: The path to the project root
  98. echo -L [cmd=]: The file list command to run
  99. echo -l [log=]: The log file to output to
  100. echo -I: Builds an inverted index
  101. echo.