Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

下書きエントリーのファイル配置位置の変更 #128

Merged
merged 10 commits into from
Nov 4, 2023
Merged

Conversation

Songmu
Copy link
Member

@Songmu Songmu commented Oct 29, 2023

前提

blogsyncは公開URLのパスと対応した位置にエントリーファイル(Markdown)が保存される。(脱線だが、サブディレクトリ運用されている場合、サブディレクトリ含めて保存される ref. #127)

また、URLのパスは以下の2種類に分かれる。

  • 執筆者が明示的に指定するもの。いわゆるslug
    • ブログ管理画面上では「カスタムURL」、blogsync上は"CustomPath"と呼ばれる
  • はてなブログ側が自動付与するもの

執筆者が明示しない場合、自動付与が記事公開時におこなわれる。標準では 2001/02/03/150405 のような時刻ベースのフォーマットになる。他にも、はてなダイヤリーフォーマットや、タイトルを付与したフォーマットがあり、ブログ管理画面から切り替え設定できる。

自動付与の場合「記事公開時に」と書いた通り、下書き時にはURLの付与は行われない。APIのレスポンスには仮のURLが返される。この仮のURLはAPIリクエスト時刻が基準になったものが返されるので、下書き更新時に毎回異なるものが返される。

つまり、CustomPathを指定してない下書きの場合、現状blogsyncで記事を更新したら、ファイル名やFrontMatter内のURLがコロコロ変わってしまう。例えば、entry/2023/10/11/122334.mdentry/2023/10/12/011223.mdとかに変更されてしまう。これは困る。

変更内容

それに対する対応として以下のような変更を入れてようとしている。

  • URLが不定なDraft (= CustomPathが未指定の下書き) のエントリーファイルの配置位置を変える (ref. 下書きでURLが未確定の場合の保存先をどうするか #109)
    • 具体的にはURLが変わらないように entry/_draft/$entryID.md に配置する
      • 固定ページの場合CustomPathが必須なのでentryの場合のみを考えれば良く entry/ 配下に格納位置を作った
      • _draft/ に配置するのは少し気持ち悪いという意見があるかもしれないが、妥協できるレベルではないか
    • この時、FrontMatterのURLフィールドも埋めないようにする (ref. FrontomaterのURLフィールド再考 #101)
      • 前提に記述した通り、このURLは仮のものなので
      • リンクされたissue内でも議論しているがこのフィールド自体廃止しても良いかもしれない
  • 付随する変更としてはてなブログが自動付与したパスじゃない場合、ファイル名が変更されたらcustomPathを追随するように (ref. customPath周りのupdate #96)
    • CustomPath情報はファイルパスで取れるのでFrontMatterには記録しないように

ちなみに、はてなブログが自動付与したパスかどうかはを厳密に判定するのは難しく、正規表現でそれっぽいケースを判定している。

求める挙動

(固定ページはスコープ外)

  • CustomPathの無いDraftエントリーファイルは entry/_draft/ 以下に配置される
    • この時FrontMatterのURLフィールドはnullになる
    • そのエントリーを公開(Draftを外してpush)した場合、URLパスに準じた位置に配置されなおされる
      • 公開時にCustomPathを付与しない場合
      • 公開時にCustomPathをFrontMatterで指定した場合
    • _draft/ 以下のエントリーファイル名を変更してDraftのままpushし直した場合
      • _draft/ 以下でファイル名を変更してpushすると、元ファイル名に戻る
      • _draft/ の外に出してpushすると、新しいファイル名がCustomPathとして扱われ、ファイル位置は保持される
        • これは下書きであっても公開であっても変わりない
        • ただし、ファイル名が、自動付与のパスに近い場合(ex. 2023/10/23/121212.md)はその限りではない
          • CustomPath判定できないため。下書きの場合は _draft/ 以下に戻され、公開の場合、自動付与されたパスの位置に保存されることになる
  • CustomPathが使われている場合、Draftか否かに限らずCustomPathに準じた位置にファイルは保存される
    • CustomPathが使われているかどうかの判定は以下の何れかの場合に真とする
      • FrontMatterのCustomPathが使われている (非推奨だが優先)
      • ファイル、URLのパスが、自動付与のパスらしからぬ場合 (ここの厳密な判定は難しい)
    • ファイル名を変更してpushした場合、変更されたファイルパスに準じてURLが変更される
      • ただし、FrontMatterにCustomPathが指定されている場合、そちらが優先される

@coveralls
Copy link

coveralls commented Oct 29, 2023

Pull Request Test Coverage Report for Build 6755143085

  • 47 of 60 (78.33%) changed or added relevant lines in 3 files are covered.
  • 4 unchanged lines in 2 files lost coverage.
  • Overall coverage increased (+31.6%) to 59.411%

Changes Missing Coverage Covered Lines Changed/Added Lines %
entry.go 5 7 71.43%
main.go 18 23 78.26%
broker.go 24 30 80.0%
Files with Coverage Reduction New Missed Lines %
broker.go 2 75.16%
config.go 2 74.26%
Totals Coverage Status
Change from base Build 6748756629: 31.6%
Covered Lines: 565
Relevant Lines: 951

💛 - Coveralls

@Songmu Songmu force-pushed the draft branch 4 times, most recently from 5529a49 to 4529e53 Compare October 30, 2023 15:04
@Songmu Songmu changed the title Draft 下書きエントリーのファイル配置位置の変更 Oct 31, 2023
@Songmu Songmu self-assigned this Nov 1, 2023
@Songmu Songmu added the minor label Nov 3, 2023
@Songmu Songmu force-pushed the draft branch 10 times, most recently from b231383 to fd59b0d Compare November 4, 2023 03:58
@Songmu Songmu marked this pull request as ready for review November 4, 2023 04:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants