3718
const char *path,
3719
int mode);
3720
3721
-static int files_fsck_symref_target(struct fsck_options *o,
3721
+static int files_fsck_symref_target(struct ref_store *ref_store,
3722
+ struct fsck_options *o,
3723
struct fsck_ref_report *report,
3724
+ const char *refname,
3725
struct strbuf *referent,
3726
unsigned int symbolic_link)
3727
{
3726
- int is_referent_root;
3728
char orig_last_byte;
3729
size_t orig_len;
3730
int ret = 0;
3731
3732
orig_len = referent->len;
3733
orig_last_byte = referent->buf[orig_len - 1];
3733
- if (!symbolic_link)
3734
- strbuf_rtrim(referent);
3735
-
3736
- is_referent_root = is_root_ref(referent->buf);
3737
- if (!is_referent_root &&
3738
- !starts_with(referent->buf, "refs/") &&
3739
- !starts_with(referent->buf, "worktrees/")) {
3740
- ret |= fsck_report_ref(o, report,
3741
- FSCK_MSG_SYMREF_TARGET_IS_NOT_A_REF,
3742
- "points to non-ref target '%s'", referent->buf);
3743
- }
3734
3745
- if (!is_referent_root && check_refname_format(referent->buf, 0)) {
3746
- ret |= fsck_report_ref(o, report,
3747
- FSCK_MSG_BAD_REFERENT_NAME,
3748
- "points to invalid refname '%s'", referent->buf);
3749
- }
3735
+ if (!symbolic_link) {
3736
+ strbuf_rtrim(referent);
3737
3751
- if (symbolic_link)
3752
- goto out;
3738
+ if (referent->len == orig_len ||
3739
+ (referent->len < orig_len && orig_last_byte != '\n')) {
3740
+ ret |= fsck_report_ref(o, report,
3741
+ FSCK_MSG_REF_MISSING_NEWLINE,
3742
+ "misses LF at the end");
3743
+ }
3744
3754
- if (referent->len == orig_len ||
3755
- (referent->len < orig_len && orig_last_byte != '\n')) {
3756
- ret |= fsck_report_ref(o, report,
3757
- FSCK_MSG_REF_MISSING_NEWLINE,
3758
- "misses LF at the end");
3745
+ if (referent->len != orig_len && referent->len != orig_len - 1) {
3746
+ ret |= fsck_report_ref(o, report,
3747
+ FSCK_MSG_TRAILING_REF_CONTENT,
3748
+ "has trailing whitespaces or newlines");
3749
+ }
3750
}
3751
3761
- if (referent->len != orig_len && referent->len != orig_len - 1) {
3762
- ret |= fsck_report_ref(o, report,
3763
- FSCK_MSG_TRAILING_REF_CONTENT,
3764
- "has trailing whitespaces or newlines");
3765
- }
3752
+ ret |= refs_fsck_symref(ref_store, o, report, refname, referent->buf);
3753
3767
-out:
3754
return ret ? -1 : 0;
3755
}
3756
3793
else
3794
strbuf_addbuf(&referent, &ref_content);
3795
3810
- ret |= files_fsck_symref_target(o, &report, &referent, 1);
3796
+ ret |= files_fsck_symref_target(ref_store, o, &report,
3797
+ target_name, &referent, 1);
3798
goto cleanup;
3799
}
3800
3834
goto cleanup;
3835
}
3836
} else {
3850
- ret = files_fsck_symref_target(o, &report, &referent, 0);
3837
+ ret = files_fsck_symref_target(ref_store, o, &report,
3838
+ target_name, &referent, 0);
3839
goto cleanup;
3840
}
3841