SaveText.Ru

Без имени
  1. За сколько сделаете?
  2. Срок сдачи
  3.  
  4. 00:00 (UTC+3) 9 Мая 2020.
  5.  
  6. Файловый менеджер и облегченная система контроля версий
  7.  
  8. Необходимо реализовать программу для манипуляции файлами на языке Haskell используя конструкции монадных трансформеров и используя возможности IO монады. Любые техники, что выходят за рамки текущего курса, будут приветствоваться.
  9.  
  10. Файловый менеджер будет атомарным и иметь простой функционал просмотра/создания/удаления файлов и папок. Система контроля версий будет следить за каждым файлом по отдельности и уметь их объединять.
  11.  
  12. Важно работать с файловой системой в чистом виде. Необходимо изначально считать текущее состояние директории, а затем, после всех манипуляций записать новое измененное состояние сознания файловой системы. Начните имплементацию с формализации типа описания файловой системы и ее компонентов, а так же типов для команд. После завершения программы, результаты ее действия должны существовать в вашей файловой системе и директориях, которыми вы манипулировали.
  13.  
  14. Обратите внимание на обработку ошибок. Крайне нежелательно использование IORef и подобных техник.
  15.  
  16. Информацию и состояние ревизий можно хранить рядом с рабочей директорией.
  17.  
  18. Для работы с реальной файловой системой используйте библиотеку directory, для парсинга аргументов командной строки мы рекомендуем optparse-applicative.
  19.  
  20. Необходимый функционал:
  21.  
  22. command line interface (возможна реализация в виде интерактивной коммандной строки);
  23. переходить по директориям;
  24. показывать содержимое текущей директории;
  25. создать папку/файл;
  26. отобразить содержимое файла;
  27. удалить папку/файл;
  28. записать в файл текстовую информацию;
  29. поиск файла по названию в текущей директории и ее подчастях и вывод пути до файла;
  30. отображать информацию о заданном файле:
  31. путь;
  32. права доступа;
  33. тип файла;
  34. время создания и/или изменения;
  35. размер;
  36. отображать информацию о директории:
  37. размер;
  38. путь;
  39. количество файлов внутри;
  40. права доступа;
  41. возможность инициализации системы контроля версий (СКВ) в текущей директории;
  42. если текущая директория является частью уже инициализированной в СКВ, то инициализация не требуется;
  43. добавление файла или папки (всех файлов внутрии нее) в СКВ;
  44. добавления измененной версии файла и автоматической создание новой ревизии данного файла;
  45. добавление комментария к изменению;
  46. просмотр истории изменений файла;
  47. подразумевается просмотр упорядоченного списка ревизий с комментариями;
  48. вывод конкретной версии файла по индексу в истории его изменений;
  49. объединение разных ревизий одного файла;
  50. выбор приоритетного файла для объединения в случае конфликта;
  51. бонусом будет иметь интерактивное объединение файлов, где пользователь будет по каждому случаю выбирать приоритет;
  52. удалить ревизию файла;
  53. удалить файл из СКВ;
  54. просмотр упорядоченную историю изменений файлов в заданной директории и ее поддиректориях.
  55. Дополнительные команды будут засчитаны как бонус к вашей реализации.
  56.  
  57. Весомым бонусом будет интерфейс для данной программы (TUI или GUI).
  58.  
  59. Пример:
  60.  
  61. $ my-best-file-manager ~/
  62. /users/my_user/ > help
  63. cd <folder> — перейти в директорию
  64. dir — показать содержимое текущей директории
  65. ls <folder> — показать содержимое выбранной директории
  66. create-folder "folder-name" — создать директорию в текущей
  67. cat <file> — показать содержимое файла
  68. create-file "file-name" — создать пустой файл в текущей директории
  69. remove <folder | file> — удалить выборанную директорию или файл
  70. write-file <file> "text" — записать текст в файл
  71. find-file "file-name" — поиск файла в текущией директории и поддиректориях
  72. information <file> — показать информацию о файле
  73. information <folder> — показать информацию о директории
  74. cvs-init — инициализация СКВ в текущей выбранной директории
  75. cvs-add <file | folder> — добавление файла или папки в СКВ
  76. cvs-update <file> "comment" — добавление изменений файла в СКВ
  77. cvs-history <file> — просмотр истории изменений файла
  78. cvs-cat <file> "index" — просмотр конкретной ревизии файла
  79. cvs-merge-revs <file> "index1" "index2" "left | right | both | interactive" —
  80. объединение ревизий файла по заданным индексам, left, right, both или interactive
  81. являются вариантами стратегий для обеъединения
  82. cvs-delete-version <file> "index" — удалить заданную версию файла из ревизий
  83. cvs-remove <file> — удалить файл из СКВ
  84. cvs-show-everything — показать общую историю изменений
  85. help — показать руководство по использованию
  86. exit — завершение работы программы

Share with your friends:

Print