Skip to content

devilnute/30002

 
 

Repository files navigation

Требования

  • Все работы необходимо загрузить в этот репозиторий.
  • Все работы должны быть быть написаны в рамках стандарта C++14.
  • Работы необходимо размещать в собственном каталоге с названием в формате <фамилия>.<имя>, набранным строчными латинскими символами (например ivanov.ivan).
  • Каждая работа должна быть в отдельном каталоге с соответствующим названием:
    • T0 - пробная (здесь и далее буква T латинская)
    • T2 - задание 1, потоки и итераторы (номер 2 - не опечатка)
    • T3 - задание 2, алгоритмы
    • F0 - РГР
  • Каждую работу необходимо выполнять в собственной ветке Git с названием <фамилия>.<имя>/<работа> (ivanov.ivan/T0).
  • Для того, чтобы работа была принята, необходимо создать pull request. На каждую работу должен быть создан свой pull request и при том только один!
  • Каждый коммит должен обладать комментарием, из которого понятно, что и зачем было сделано.
  • Длина строк не должна превышать 100 символов.
  • Для отступов должны использоваться только пробелы, не табуляции! (Для VisualStudio Tools → Options → Text Editor → [язык] → Tabs → Insert spaces)
  • Окончания строк и конца файла должны быть в unix-style, последним символом в каждом файле должен быть символ перевода строки. Те, кто использует Git в Windows, могут установить указанную ниже настройку или выбрать соответствующий пункт при установке (руководство)
  git config --global core.autocrlf true
  • Вывод каждой работы должен заканчиваться переводом курсора на новую строку.
  • Работы должны сдаваться по порядку (см. файл .config в корне репозитория).

Пробная работа T0

Реализуйте программу, которая выводит в стандартный вывод на отдельной строке ваши фамилию и имя, разделенные точкой:

ivanov.ivan

Порядок отправки работ

Далее приведены некоторые команды на Bash (консоль Git Bash для Windows устанавливается вместе с Git)

Git

Подготовка собственного репозитория

  1. Сделайте fork репозитория средствами GitHub
  2. Получите локальный репозиторий (git clone):
  cd <путь до каталога, где вы хотите разместить репозиторий>
  git clone <ссылка на fork>
  1. Перейдите в каталог с локальным репозиторием:
  cd <локальный репозиторий>
  1. Добавьте основной репозиторий в список удалённых (remote):
  git remote add upstream https://github.com/ilya-shemyakin/30002.git
  1. Проверьте, что локальный репозиторий связан с вашим и с основным удалёнными репозиториями:
  • git remote get-url origin – должна быть ссылка на ваш fork
  • git remote get-url upstream – должна быть ссылка на основной репозиторий

Начало выполнения каждой работы

  1. Переключиться на master-ветку:
  git checkout master
  1. Создать новую ветку с необходимым названием от master-ветки в локальном репозитории и переключиться на нёё:
  git checkout -b ivanov.ivan/T0
  1. Создать папку для новой работы. Сделать это можно разными способами, в т.ч. и через IDE, но отправлять на проверку файлы, созданные IDE не нужно.
  2. Создать main.cpp, содержащий компилирующуюся функцию main() и добавить его в Git:
  git add ivanov.ivan/T0/main.cpp
  1. Cоздать коммит:
  git commit -m "Initial commit for T0"
  1. Создать ветку в своём удалённом репозитории (fork) и отправить первую версию работы туда:
  git push -u origin ivanov.ivan/T0

Дальнейшее выполнение работы

  1. Добавить изменённые файлы в Git:
  git add <имя файла>
  1. Создать новый коммит:
  git commit -m "<сообщение>"
  1. отправить изменения в свой удалённый репозиторий (fork):
  git push

Все эти шаги вы можете проделать и через графический интерфейс.

Создание pull request

После отправки готовой работы в свой удалённый репозиторий (fork), необходимо отправить её на проверку в основной репозиторий. Для этого средствами GitHub создайте pull request из соответствующей ветки fork'а в master ветку основного репозитория.

Также для проверки выполнения тестов можно создать pull request в master ветку fork'а, но принимать (merge) этот pull request не следует! Для активации тестов необходимо нажать кнопку "Enable..." на странице Actions.

Синхронизация с основным репозиторием

Работы должны сдаваться по порядку. После того, как ваш pull request принят (merge) в основном репозитории, необходимо синхронизировать master-ветки fork и основного репозитория:

  1. Переключиться на master-ветку в локальном репозитории:
  git checkout master
  1. Скачать метаданные Git из основного репозитория:
  git fetch upstream
  1. Объединить изменения из master основного репозитория в master локального:
  git merge upstream/master
  1. Отправить изменения master локального репозитория в свой удалённый (fork):
  git push

Если в этот момент вы уже выполняете следующую работу в другой ветке, то необходимо добавить в неё изменения из локальной ветки master:

  1. Переключиться на ветку с лабораторной:
  git checkout -b ivanov.ivan/T2
  1. Синхронизировать рабочую ветку с локальной веткой master
  git merge master
  1. Синхронизируем изменения в локальной ветке с соответствующей веткой в своём удалённом (fork) репозитории
  git push

Сборка и тестирование работ

  • На проекте используется Continuous Integration (CI), соответственно, сборка и тестирование выполняются автоматически. Коммиты, не прошедшие CI (с ошибкой или пропустившие CI) не принимаются.
  • Для сборки и запуска работ присутствует Makefile для GNU Make.
  • Файл "main.cpp" особенный: его назначение - функция main() выполненной работы.

Этапы тестирования

  1. На соответствие обязательным требованиям (частично):

    Content:

    • проверка некоторых пунктов CG (длина строк, пробелы, окончания строк/файла)
    • проверка на порядок сдачи работ (см. файл .config в корне репозитория)

    Branch:

    • проверка, что лабораторная отправлена из форка
    • проверка, что существует только один начальный коммит

    Author:

    • проверка, что не затронуты чужие работы
    • проверка, что не затронуты файлы в корне репозитория
    • проверка, что имя папки в нижнем регистре
  2. На сборку (с помощью Makefile)

    Build: вызывается команда make build-ivanov.ivan/T0

  3. Приёмочные тесты:

    Acceptance: зависят от лабораторной работы. Для не пройденных тестов показываются входные данные и ожидаемый вывод

Сборка с помощью Makefile

Все работы автоматически обнаруживаются и могут быть построены с использованием нескольких целей.

Все исходные тексты в каждой работе идентифицируются по расширению ".cpp".

Идентификатором каждой работы является строка lastname.firstname/labnumber, которая в дальнейшем именуется labid.

Makefile автоматически строит программу для каждой работы. Так как имя программы в общем случае неизвестно, специальная цель выполняет запуск построенной программы с передачей параметров.

Поддерживаемые цели:

  • build-labid: построение лабораторной работы, например

      $ make build-ivanov.ivan/T2
    
  • run-labid: запуск построенной программы, например

      $ make run-ivanov.ivan/T2
    

    Для передачи дополнительных параметров используется переменная ARGS (при помощи GNU Make):

      $ make run-ivanov.ivan/T1 ARGS="1 ascending"
    

    или (c использованием Bourne Shell):

      $ ARGS="1 ascending" make run-ivanov.ivan/T1
    

    или (Bourne Shell, с сохранением в окружении процесса):

      $ export ARGS="1 ascending"
      $ make run-ivanov.ivan/T1
    
  • labs: список всех лабораторных в проекте.

Дополнительной возможностью является запуск динамического анализатора Valgrind для запускаемых программ. Для этого необходимо указать в переменной VALGRIND параметры анализатора так, как это делается для ARGS.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 97.1%
  • Makefile 2.9%