ContentColumns: git status

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

ContentColumns: git status

Post by John Doe »

Сейчас реализован быстрый и грязный способ "пометить" на панели Untracked-файлы.
Пока не знаю буду ли дальше развивать, тему назвал с запасом.
В конце концов каждый может доработать под свои нужды.

Code: Select all

Cache = {}
process = (dir)->
  f = io.popen ('git -C "%s" ls-files --others --exclude-standard 2>nul')\format dir\match"^\\\\%?\\(.*)\\$"
  output = f\read"*all"
  f\close!
  if #output>0
    data = {}
    Cache[dir] = data
    for line in output\gmatch"[^\n]+"
      if subdir = line\match"^(.-)/"
        data[subdir] = data[subdir] or "…"
      else
        data[line] = "-"

ContentColumns
  description:"Git: status [untracked]"
  id:"7F04C9E3-3327-4FB4-BCA5-ADCF43B3075D"
  GetContentFields:(Names)->
    for name in *Names
      return true if name=="git"
  GetContentData:(FullPath,Names)->
    if "\\"==FullPath\sub -1,-1 -- assumption! parent (..) expected *before* all other content
      process FullPath
      return
    for i,name in ipairs Names
      if name=="git"
        dir,filename = FullPath\match"^(.+\\)(.-)$"
        cache = Cache[dir]
        return cache and [i]:cache[filename]
Для использования создать новый режим панели с такими настройками:

Code: Select all

 Column types
 <git>,N
 Column widths
 1,0
Что стоит улучшить:
  • Не дёргать git в каждой директории, а проверять наличие служебной поддиректории .git (в текущей и выше).
  • Кэшировать информацию сразу всего репозитория, чтобы не дёргать git в каждой поддиректории.
  • Не дёргать git если информация уже есть в кэше, и дата изменения прежняя.
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

ContentColumns: git status

Post by HaRT »

John Doe wrote: Fri 10 Oct, 2025 16:23 cd /D "%s" && git ls-file …
Это можно сделать чуть более изящно: git -C "%s" ls-file …
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

ContentColumns: git status

Post by HaRT »

John Doe, если вас не затруднит, не могли бы вы при редактировании этого первопоста (и других ему подобных) не отключать запись истории? А то, если в какой-то момент взять скрипт, муторно потом отслеживать, не появились ли усовершенствованная версия или какие-то уточнения по применению, и, если появились, то что там нового.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

ContentColumns: git status

Post by HaRT »

John Doe wrote: Fri 10 Oct, 2025 16:23 проверять наличие служебной поддиректории .git (в текущей и выше)
В случае подмодулей (submodules) будет не директория, а текстовый файл .git, и в практических ситуациях подниматься по дереву ещё выше в поисках именно директории, вероятно, уже и незачем.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

ContentColumns: git status

Post by John Doe »

HaRT wrote: Fri 10 Oct, 2025 17:48 не могли бы вы при редактировании этого первопоста (и других ему подобных) не отключать запись истории?
Т.е. даже если я анонсирую изменения отдельным сообщением в теме, вы хотели бы иметь чёткий дифф?
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

ContentColumns: git status

Post by John Doe »

HaRT wrote: Fri 10 Oct, 2025 17:50 В случае подмодулей (submodules) будет не директория, а текстовый файл .git,
Я имел ввиду не submodules, а обычную поддиректорию.
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

ContentColumns: git status

Post by HaRT »

John Doe wrote: Fri 10 Oct, 2025 17:52 даже если я анонсирую изменения отдельным сообщением в теме, вы хотели бы иметь чёткий дифф?
Дифф вторичен, его я могу и сам получить. Лично для меня приоритетна дата изменения, желательно с кратким текстовым описанием (как качественная первая строка в git commit). Форум же предоставляет и дату, и описание, и дифф.
Разумеется, если скрипт выложить в тот же Git и развивать там, то я там и буду смотреть.
John Doe wrote: Fri 10 Oct, 2025 17:55 Я имел ввиду не submodules, а обычную поддиректорию.
Да, это я понял. И со своей стороны предложил дальнейшую оптимизацию для работы скрипта внутри подмодуля.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
phidel
Posts: 104
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 30 times
Been thanked: 6 times
Contact:

ContentColumns: git status

Post by phidel »

John Doe,
спасибо за скрипт, полезен даже в неоптимизированном виде.
а можете добавить еще индикацию модифицированных файлов? было бы замечательно
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

ContentColumns: git status

Post by John Doe »

Пока что можно просто заменить --others на --modified.
А в перспективе надо бы усовершенствовать скрипт, чтобы показывал в одной колонке разные статусы.
И настраивать выбор интересующих в данный момент статусов.
И переход по файлам в панели, может и пометку.
И ещё бы хоткей на включение нужного режима панели.
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

ContentColumns: git status

Post by HaRT »

John Doe wrote: Fri 05 Dec, 2025 01:17 чтобы показывал в одной колонке разные статусы
Притом тут не нужно ничего выдумывать, лучше показывать ровно то же, что выводит в первой колонке git status --short
John Doe wrote: Fri 05 Dec, 2025 01:17 И переход по файлам в панели, может и пометку.
Я бы предпочёл в первую очередь пометку, потому что переход по помеченным уже есть.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
phidel
Posts: 104
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 30 times
Been thanked: 6 times
Contact:

ContentColumns: git status

Post by phidel »

HaRT wrote: Fri 05 Dec, 2025 03:02 лучше показывать ровно то же, что выводит в первой колонке git status --short
лучше git -C "%s" status . --porcelain
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

ContentColumns: git status

Post by John Doe »

Идея правильная, но просто так подставить в текущий скрипт git status не получится, надо ещё учесть что он выдаёт пути относительно корня репозитория.
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

ContentColumns: git status

Post by HaRT »

Уточнение: когда я говорю о пометке, я имею в виду это:
HaRT wrote: Thu 17 Feb, 2022 21:21 Пожелание 2: чтобы можно было на текущей панели раз-/выделить файлы, имеющие определённый статус (раздельно в index и working tree: Untracked, Ignored, Modified, Added, Renamed, …).
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
phidel
Posts: 104
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 30 times
Been thanked: 6 times
Contact:

ContentColumns: git status

Post by phidel »

Сделал свою версию скрипта (надеюсь, это не нарушает правила форума). Выдает полный статус для всех файлов. Ширину колонки нужно увеличить до двух символов.
Оптимизаций никаких. Но я не так часто собираю коммиты, чтобы держать этот режим долго включенным.
Плюс добавил себе в меню сравнение текущего файла с версией из индекса git:

Code: Select all

git show :!.! > file_from_index_tmp.!`
bcomp.exe file_from_index_tmp.!` !.!
Attachments
git_status.moon
(1.68 KiB) Downloaded 6 times
Last edited by phidel on Sat 06 Dec, 2025 08:36, edited 1 time in total.
Post Reply

Return to “Обсуждение макросов”