ContentColumns: git status

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
John Doe
Бюрократ
Posts: 14409
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 83 times
Been thanked: 483 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: 11357
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 260 times
Been thanked: 405 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: 11357
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 260 times
Been thanked: 405 times

ContentColumns: git status

Post by HaRT »

John Doe, если вас не затруднит, не могли бы вы при редактировании этого первопоста (и других ему подобных) не отключать запись истории? А то, если в какой-то момент взять скрипт, муторно потом отслеживать, не появились ли усовершенствованная версия или какие-то уточнения по применению, и, если появились, то что там нового.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 11357
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 260 times
Been thanked: 405 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: 14409
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 83 times
Been thanked: 483 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: 14409
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 83 times
Been thanked: 483 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: 11357
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 260 times
Been thanked: 405 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
Post Reply

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